Improved SAF missing reporting

This commit is contained in:
M66B
2023-12-06 11:06:33 +01:00
parent b8f57ea098
commit ac92c2a013
11 changed files with 62 additions and 21 deletions

View File

@@ -394,7 +394,8 @@ public class ActivityEML extends ActivityBase {
create.putExtra(Intent.EXTRA_TITLE, apart.attachment.name);
Helper.openAdvanced(ActivityEML.this, create);
if (create.resolveActivity(getPackageManager()) == null) // system whitelisted
ToastEx.makeText(ActivityEML.this, R.string.title_no_saf, Toast.LENGTH_LONG).show();
Log.unexpectedError(getSupportFragmentManager(),
new IllegalArgumentException(getString(R.string.title_no_saf)), 25);
else
startActivityForResult(Helper.getChooser(ActivityEML.this, create), REQUEST_ATTACHMENT);
}

View File

@@ -755,7 +755,8 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
open.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
open.setType("*/*");
if (open.resolveActivity(getPackageManager()) == null) // system whitelisted
ToastEx.makeText(this, R.string.title_no_saf, Toast.LENGTH_LONG).show();
Log.unexpectedError(getSupportFragmentManager(),
new IllegalArgumentException(getString(R.string.title_no_saf)), 25);
else
startActivityForResult(Helper.getChooser(this, open), REQUEST_IMPORT_CERTIFICATE);
}

View File

@@ -1263,7 +1263,8 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
Helper.openAdvanced(context, intent);
if (intent.resolveActivity(context.getPackageManager()) == null) { // // system/GET_CONTENT whitelisted
ToastEx.makeText(context, R.string.title_no_saf, Toast.LENGTH_LONG).show();
Log.unexpectedError(parentFragment.getParentFragmentManager(),
new IllegalArgumentException(context.getString(R.string.title_no_saf)), 25);
return;
}

View File

@@ -540,10 +540,10 @@ public class FragmentBase extends Fragment {
create.putExtra(Intent.EXTRA_TITLE, attachment.name);
Helper.openAdvanced(context, create);
PackageManager pm = context.getPackageManager();
if (create.resolveActivity(pm) == null) { // system whitelisted
Log.w("SAF missing");
ToastEx.makeText(context, R.string.title_no_saf, Toast.LENGTH_LONG).show();
} else
if (create.resolveActivity(pm) == null) // system whitelisted
Log.unexpectedError(getParentFragmentManager(),
new IllegalArgumentException(context.getString(R.string.title_no_saf)), 25);
else
startActivityForResult(Helper.getChooser(context, create), REQUEST_ATTACHMENT);
}
@@ -556,10 +556,10 @@ public class FragmentBase extends Fragment {
Intent tree = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
Helper.openAdvanced(context, tree);
PackageManager pm = context.getPackageManager();
if (tree.resolveActivity(pm) == null) { // system whitelisted
Log.w("SAF missing");
ToastEx.makeText(context, R.string.title_no_saf, Toast.LENGTH_LONG).show();
} else
if (tree.resolveActivity(pm) == null) // system whitelisted
Log.unexpectedError(getParentFragmentManager(),
new IllegalArgumentException(context.getString(R.string.title_no_saf)), 25);
else
startActivityForResult(Helper.getChooser(context, tree), REQUEST_ATTACHMENTS);
}

View File

@@ -540,7 +540,8 @@ public class FragmentContacts extends FragmentBase {
open.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
open.setType("*/*");
if (open.resolveActivity(pm) == null) // system whitelisted
ToastEx.makeText(context, R.string.title_no_saf, Toast.LENGTH_LONG).show();
Log.unexpectedError(getParentFragmentManager(),
new IllegalArgumentException(context.getString(R.string.title_no_saf)), 25);
else
startActivityForResult(Helper.getChooser(context, open), REQUEST_IMPORT);
}

View File

@@ -1701,7 +1701,8 @@ public class FragmentOptionsBackup extends FragmentBase implements SharedPrefere
Intent intent = (export ? getIntentExport(context) : getIntentImport(context));
PackageManager pm = context.getPackageManager();
if (intent.resolveActivity(pm) == null) { // // system/GET_CONTENT whitelisted
ToastEx.makeText(context, R.string.title_no_saf, Toast.LENGTH_LONG).show();
Log.unexpectedError(getParentFragmentManager(),
new IllegalArgumentException(context.getString(R.string.title_no_saf)), 25);
return;
}

View File

@@ -409,7 +409,8 @@ public class FragmentOptionsEncryption extends FragmentBase
open.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
open.setType("*/*");
if (open.resolveActivity(pm) == null) // system whitelisted
ToastEx.makeText(context, R.string.title_no_saf, Toast.LENGTH_LONG).show();
Log.unexpectedError(getParentFragmentManager(),
new IllegalArgumentException(context.getString(R.string.title_no_saf)), 25);
else
startActivityForResult(Helper.getChooser(context, open), REQUEST_IMPORT_CERTIFICATE);
}

View File

@@ -87,6 +87,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
@@ -1932,6 +1933,14 @@ public class Log {
}
static void unexpectedError(FragmentManager manager, Throwable ex, boolean report) {
unexpectedError(manager, ex, report, null);
}
static void unexpectedError(FragmentManager manager, Throwable ex, int faq) {
unexpectedError(manager, ex, false, faq);
}
static void unexpectedError(FragmentManager manager, Throwable ex, boolean report, Integer faq) {
Log.e(ex);
if (ex instanceof OutOfMemoryError)
@@ -1940,6 +1949,7 @@ public class Log {
Bundle args = new Bundle();
args.putSerializable("ex", ex);
args.putBoolean("report", report);
args.putInt("faq", faq == null ? 0 : faq);
FragmentDialogUnexpected fragment = new FragmentDialogUnexpected();
fragment.setArguments(args);
@@ -1950,17 +1960,28 @@ public class Log {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
final Throwable ex = (Throwable) getArguments().getSerializable("ex");
boolean report = getArguments().getBoolean("report", true);
Bundle args = getArguments();
final Throwable ex = (Throwable) args.getSerializable("ex");
final boolean report = args.getBoolean("report", true);
final int faq = args.getInt("faq");
final Context context = getContext();
LayoutInflater inflater = LayoutInflater.from(context);
View dview = inflater.inflate(R.layout.dialog_unexpected, null);
TextView tvError = dview.findViewById(R.id.tvError);
Button btnHelp = dview.findViewById(R.id.btnHelp);
String message = Log.formatThrowable(ex, false);
tvError.setText(message);
btnHelp.setVisibility(faq > 0 ? View.VISIBLE : View.GONE);
btnHelp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Helper.viewFAQ(v.getContext(), faq);
}
});
AlertDialog.Builder builder = new AlertDialog.Builder(context)
.setView(dview)
.setNegativeButton(android.R.string.cancel, null)