diff --git a/app/src/main/java/eu/faircode/email/ActivitySetup.java b/app/src/main/java/eu/faircode/email/ActivitySetup.java index 215fe4147e..98068dd820 100644 --- a/app/src/main/java/eu/faircode/email/ActivitySetup.java +++ b/app/src/main/java/eu/faircode/email/ActivitySetup.java @@ -133,16 +133,15 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac private static final int KEY_ITERATIONS = 65536; private static final int KEY_LENGTH = 256; - static final int REQUEST_PERMISSION = 1; - static final int REQUEST_SOUND = 2; - static final int REQUEST_EXPORT = 3; - static final int REQUEST_IMPORT = 4; - static final int REQUEST_CHOOSE_ACCOUNT = 5; - static final int REQUEST_DONE = 6; - static final int REQUEST_IMPORT_CERTIFICATE = 7; - static final int REQUEST_OAUTH = 8; - static final int REQUEST_STILL = 9; - static final int REQUEST_DELETE_ACCOUNT = 10; + static final int REQUEST_SOUND = 1; + static final int REQUEST_EXPORT = 2; + static final int REQUEST_IMPORT = 3; + static final int REQUEST_CHOOSE_ACCOUNT = 4; + static final int REQUEST_DONE = 5; + static final int REQUEST_IMPORT_CERTIFICATE = 6; + static final int REQUEST_OAUTH = 7; + static final int REQUEST_STILL = 8; + static final int REQUEST_DELETE_ACCOUNT = 9; static final int PI_MISC = 1; diff --git a/app/src/main/java/eu/faircode/email/FragmentAccounts.java b/app/src/main/java/eu/faircode/email/FragmentAccounts.java index 1bef9e4e0c..4d6d230406 100644 --- a/app/src/main/java/eu/faircode/email/FragmentAccounts.java +++ b/app/src/main/java/eu/faircode/email/FragmentAccounts.java @@ -82,8 +82,6 @@ public class FragmentAccounts extends FragmentBase { private AdapterAccount adapter; - private static final int REQUEST_IMPORT_OAUTH = 1; - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -132,7 +130,7 @@ public class FragmentAccounts extends FragmentBase { @Override public void onClick(View v) { try { - requestPermissions(Helper.getOAuthPermissions(), REQUEST_IMPORT_OAUTH); + requestPermissions(Helper.getOAuthPermissions(), REQUEST_PERMISSIONS); } catch (Throwable ex) { Log.unexpectedError(getParentFragmentManager(), ex); } @@ -432,13 +430,10 @@ public class FragmentAccounts extends FragmentBase { @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - - if (requestCode == REQUEST_IMPORT_OAUTH) - if (Helper.hasPermissions(getContext(), permissions)) { - btnGrant.setVisibility(View.GONE); - ServiceSynchronize.reload(getContext(), null, false, "Permissions regranted"); - } + if (Helper.hasPermissions(getContext(), permissions)) { + btnGrant.setVisibility(View.GONE); + ServiceSynchronize.reload(getContext(), null, false, "Permissions regranted"); + } } private void onSwipeRefresh() { diff --git a/app/src/main/java/eu/faircode/email/FragmentAnswer.java b/app/src/main/java/eu/faircode/email/FragmentAnswer.java index 05f4e8b27f..348be5ae53 100644 --- a/app/src/main/java/eu/faircode/email/FragmentAnswer.java +++ b/app/src/main/java/eu/faircode/email/FragmentAnswer.java @@ -514,7 +514,7 @@ public class FragmentAnswer extends FragmentBase { etText.setText(ssb); etText.setSelection(start + 2); } catch (NoStreamException ex) { - ex.report(getContext()); + ex.report(getActivity()); } catch (Throwable ex) { Log.unexpectedError(getParentFragmentManager(), ex); } diff --git a/app/src/main/java/eu/faircode/email/FragmentBase.java b/app/src/main/java/eu/faircode/email/FragmentBase.java index 249d2817dd..5914413a39 100644 --- a/app/src/main/java/eu/faircode/email/FragmentBase.java +++ b/app/src/main/java/eu/faircode/email/FragmentBase.java @@ -80,6 +80,8 @@ public class FragmentBase extends Fragment { private static final int REQUEST_ATTACHMENTS = 52; private static final int REQUEST_RECOVERABLE_PERMISSION = 53; + static final int REQUEST_PERMISSIONS = 1000; + static final String ACTION_STORE_ATTACHMENT = BuildConfig.APPLICATION_ID + ".STORE_ATTACHMENT"; static final String ACTION_STORE_ATTACHMENTS = BuildConfig.APPLICATION_ID + ".STORE_ATTACHMENTS"; diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 91e4ef7d32..9b94318d6d 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -320,7 +320,6 @@ public class FragmentCompose extends FragmentBase { private static final int REQUEST_LINK = 12; private static final int REQUEST_DISCARD = 13; private static final int REQUEST_SEND = 14; - private static final int REQUEST_PERMISSION = 15; private static ExecutorService executor = Helper.getBackgroundExecutor(1, "compose"); @@ -2679,7 +2678,7 @@ public class FragmentCompose extends FragmentBase { pickRequest = requestCode; pickUri = uri; String permission = Manifest.permission.READ_CONTACTS; - requestPermissions(new String[]{permission}, REQUEST_PERMISSION); + requestPermissions(new String[]{permission}, REQUEST_PERMISSIONS); } catch (Throwable ex1) { Log.unexpectedError(getParentFragmentManager(), ex1); } @@ -2691,10 +2690,11 @@ public class FragmentCompose extends FragmentBase { @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + if (pickUri == null) + return; for (int i = 0; i < permissions.length; i++) if (Manifest.permission.READ_CONTACTS.equals(permissions[i])) - if (pickUri != null && - grantResults[i] == PackageManager.PERMISSION_GRANTED) + if (grantResults[i] == PackageManager.PERMISSION_GRANTED) onPickContact(pickRequest, new Intent().setData(pickUri)); } @@ -2871,7 +2871,7 @@ public class FragmentCompose extends FragmentBase { protected void onException(Bundle args, Throwable ex) { // External app sending absolute file if (ex instanceof NoStreamException) - ((NoStreamException) ex).report(getContext()); + ((NoStreamException) ex).report(getActivity()); else if (ex instanceof FileNotFoundException || ex instanceof IllegalArgumentException || ex instanceof IllegalStateException) { @@ -2966,7 +2966,7 @@ public class FragmentCompose extends FragmentBase { @Override protected void onException(Bundle args, Throwable ex) { if (ex instanceof NoStreamException) - ((NoStreamException) ex).report(getContext()); + ((NoStreamException) ex).report(getActivity()); else Log.unexpectedError(getParentFragmentManager(), ex); } @@ -5335,7 +5335,7 @@ public class FragmentCompose extends FragmentBase { if (ex instanceof MessageRemovedException) finish(); if (ex instanceof NoStreamException) - ((NoStreamException) ex).report(getContext()); + ((NoStreamException) ex).report(getActivity()); else if (ex instanceof FileNotFoundException || ex instanceof IllegalArgumentException || ex instanceof IllegalStateException) diff --git a/app/src/main/java/eu/faircode/email/FragmentContacts.java b/app/src/main/java/eu/faircode/email/FragmentContacts.java index 635ff94709..0eec400f91 100644 --- a/app/src/main/java/eu/faircode/email/FragmentContacts.java +++ b/app/src/main/java/eu/faircode/email/FragmentContacts.java @@ -373,7 +373,7 @@ public class FragmentContacts extends FragmentBase { @Override protected void onException(Bundle args, Throwable ex) { if (ex instanceof NoStreamException) - ((NoStreamException) ex).report(getContext()); + ((NoStreamException) ex).report(getActivity()); else Log.unexpectedError(getParentFragmentManager(), ex); } diff --git a/app/src/main/java/eu/faircode/email/FragmentGmail.java b/app/src/main/java/eu/faircode/email/FragmentGmail.java index 050b561ec8..0134e5f5ee 100644 --- a/app/src/main/java/eu/faircode/email/FragmentGmail.java +++ b/app/src/main/java/eu/faircode/email/FragmentGmail.java @@ -143,7 +143,7 @@ public class FragmentGmail extends FragmentBase { @Override public void onClick(View v) { try { - requestPermissions(Helper.getOAuthPermissions(), ActivitySetup.REQUEST_CHOOSE_ACCOUNT); + requestPermissions(Helper.getOAuthPermissions(), REQUEST_PERMISSIONS); } catch (Throwable ex) { Log.unexpectedError(getParentFragmentManager(), ex); } diff --git a/app/src/main/java/eu/faircode/email/FragmentRules.java b/app/src/main/java/eu/faircode/email/FragmentRules.java index 2690217140..26895e055e 100644 --- a/app/src/main/java/eu/faircode/email/FragmentRules.java +++ b/app/src/main/java/eu/faircode/email/FragmentRules.java @@ -455,7 +455,7 @@ public class FragmentRules extends FragmentBase { @Override protected void onException(Bundle args, Throwable ex) { if (ex instanceof NoStreamException) - ((NoStreamException) ex).report(getContext()); + ((NoStreamException) ex).report(getActivity()); else if (ex instanceof FileNotFoundException || ex instanceof JSONException) ToastEx.makeText(getContext(), ex.getMessage(), Toast.LENGTH_LONG).show(); diff --git a/app/src/main/java/eu/faircode/email/FragmentSetup.java b/app/src/main/java/eu/faircode/email/FragmentSetup.java index 9c900151b9..4f0866f751 100644 --- a/app/src/main/java/eu/faircode/email/FragmentSetup.java +++ b/app/src/main/java/eu/faircode/email/FragmentSetup.java @@ -465,7 +465,7 @@ public class FragmentSetup extends FragmentBase { try { btnPermissions.setEnabled(false); String permission = Manifest.permission.READ_CONTACTS; - requestPermissions(new String[]{permission}, ActivitySetup.REQUEST_PERMISSION); + requestPermissions(new String[]{permission}, REQUEST_PERMISSIONS); } catch (Throwable ex) { Log.unexpectedError(getParentFragmentManager(), ex); /* diff --git a/app/src/main/java/eu/faircode/email/NoStreamException.java b/app/src/main/java/eu/faircode/email/NoStreamException.java index caeae3ed4a..43a77c0bd7 100644 --- a/app/src/main/java/eu/faircode/email/NoStreamException.java +++ b/app/src/main/java/eu/faircode/email/NoStreamException.java @@ -20,10 +20,12 @@ package eu.faircode.email; */ import android.Manifest; +import android.app.Activity; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; +import android.os.Build; import android.provider.Settings; import android.view.LayoutInflater; import android.view.View; @@ -55,7 +57,10 @@ public class NoStreamException extends SecurityException { throw new NoStreamException(uri); } - void report(Context context) { + void report(Activity context) { + if (context == null) + return; + View dview = LayoutInflater.from(context).inflate(R.layout.dialog_no_stream, null); TextView tvUri = dview.findViewById(R.id.tvUri); @@ -70,19 +75,19 @@ public class NoStreamException extends SecurityException { } }); - new AlertDialog.Builder(context) - .setView(dview) - .setNegativeButton(android.R.string.cancel, null) - .setPositiveButton(R.string.title_setup_grant, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - Uri uri = Uri.fromParts("package", context.getPackageName(), null); - intent.setData(uri); - context.startActivity(intent); - } - }) - .show(); + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setView(dview); + builder.setNegativeButton(android.R.string.cancel, null); + + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) + builder.setPositiveButton(R.string.title_setup_grant, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + String permission = Manifest.permission.READ_EXTERNAL_STORAGE; + context.requestPermissions(new String[]{permission}, FragmentBase.REQUEST_PERMISSIONS); + } + }); + + builder.show(); } }