Inline request read permissions

pull/207/head
M66B 4 years ago
parent c4b1c6a0b6
commit 40a505a252

@ -133,16 +133,15 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
private static final int KEY_ITERATIONS = 65536; private static final int KEY_ITERATIONS = 65536;
private static final int KEY_LENGTH = 256; private static final int KEY_LENGTH = 256;
static final int REQUEST_PERMISSION = 1; static final int REQUEST_SOUND = 1;
static final int REQUEST_SOUND = 2; static final int REQUEST_EXPORT = 2;
static final int REQUEST_EXPORT = 3; static final int REQUEST_IMPORT = 3;
static final int REQUEST_IMPORT = 4; static final int REQUEST_CHOOSE_ACCOUNT = 4;
static final int REQUEST_CHOOSE_ACCOUNT = 5; static final int REQUEST_DONE = 5;
static final int REQUEST_DONE = 6; static final int REQUEST_IMPORT_CERTIFICATE = 6;
static final int REQUEST_IMPORT_CERTIFICATE = 7; static final int REQUEST_OAUTH = 7;
static final int REQUEST_OAUTH = 8; static final int REQUEST_STILL = 8;
static final int REQUEST_STILL = 9; static final int REQUEST_DELETE_ACCOUNT = 9;
static final int REQUEST_DELETE_ACCOUNT = 10;
static final int PI_MISC = 1; static final int PI_MISC = 1;

@ -82,8 +82,6 @@ public class FragmentAccounts extends FragmentBase {
private AdapterAccount adapter; private AdapterAccount adapter;
private static final int REQUEST_IMPORT_OAUTH = 1;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -132,7 +130,7 @@ public class FragmentAccounts extends FragmentBase {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
try { try {
requestPermissions(Helper.getOAuthPermissions(), REQUEST_IMPORT_OAUTH); requestPermissions(Helper.getOAuthPermissions(), REQUEST_PERMISSIONS);
} catch (Throwable ex) { } catch (Throwable ex) {
Log.unexpectedError(getParentFragmentManager(), ex); Log.unexpectedError(getParentFragmentManager(), ex);
} }
@ -432,9 +430,6 @@ public class FragmentAccounts extends FragmentBase {
@Override @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 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)) { if (Helper.hasPermissions(getContext(), permissions)) {
btnGrant.setVisibility(View.GONE); btnGrant.setVisibility(View.GONE);
ServiceSynchronize.reload(getContext(), null, false, "Permissions regranted"); ServiceSynchronize.reload(getContext(), null, false, "Permissions regranted");

@ -514,7 +514,7 @@ public class FragmentAnswer extends FragmentBase {
etText.setText(ssb); etText.setText(ssb);
etText.setSelection(start + 2); etText.setSelection(start + 2);
} catch (NoStreamException ex) { } catch (NoStreamException ex) {
ex.report(getContext()); ex.report(getActivity());
} catch (Throwable ex) { } catch (Throwable ex) {
Log.unexpectedError(getParentFragmentManager(), ex); Log.unexpectedError(getParentFragmentManager(), ex);
} }

@ -80,6 +80,8 @@ public class FragmentBase extends Fragment {
private static final int REQUEST_ATTACHMENTS = 52; private static final int REQUEST_ATTACHMENTS = 52;
private static final int REQUEST_RECOVERABLE_PERMISSION = 53; 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_ATTACHMENT = BuildConfig.APPLICATION_ID + ".STORE_ATTACHMENT";
static final String ACTION_STORE_ATTACHMENTS = BuildConfig.APPLICATION_ID + ".STORE_ATTACHMENTS"; static final String ACTION_STORE_ATTACHMENTS = BuildConfig.APPLICATION_ID + ".STORE_ATTACHMENTS";

@ -320,7 +320,6 @@ public class FragmentCompose extends FragmentBase {
private static final int REQUEST_LINK = 12; private static final int REQUEST_LINK = 12;
private static final int REQUEST_DISCARD = 13; private static final int REQUEST_DISCARD = 13;
private static final int REQUEST_SEND = 14; private static final int REQUEST_SEND = 14;
private static final int REQUEST_PERMISSION = 15;
private static ExecutorService executor = Helper.getBackgroundExecutor(1, "compose"); private static ExecutorService executor = Helper.getBackgroundExecutor(1, "compose");
@ -2679,7 +2678,7 @@ public class FragmentCompose extends FragmentBase {
pickRequest = requestCode; pickRequest = requestCode;
pickUri = uri; pickUri = uri;
String permission = Manifest.permission.READ_CONTACTS; String permission = Manifest.permission.READ_CONTACTS;
requestPermissions(new String[]{permission}, REQUEST_PERMISSION); requestPermissions(new String[]{permission}, REQUEST_PERMISSIONS);
} catch (Throwable ex1) { } catch (Throwable ex1) {
Log.unexpectedError(getParentFragmentManager(), ex1); Log.unexpectedError(getParentFragmentManager(), ex1);
} }
@ -2691,10 +2690,11 @@ public class FragmentCompose extends FragmentBase {
@Override @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (pickUri == null)
return;
for (int i = 0; i < permissions.length; i++) for (int i = 0; i < permissions.length; i++)
if (Manifest.permission.READ_CONTACTS.equals(permissions[i])) if (Manifest.permission.READ_CONTACTS.equals(permissions[i]))
if (pickUri != null && if (grantResults[i] == PackageManager.PERMISSION_GRANTED)
grantResults[i] == PackageManager.PERMISSION_GRANTED)
onPickContact(pickRequest, new Intent().setData(pickUri)); onPickContact(pickRequest, new Intent().setData(pickUri));
} }
@ -2871,7 +2871,7 @@ public class FragmentCompose extends FragmentBase {
protected void onException(Bundle args, Throwable ex) { protected void onException(Bundle args, Throwable ex) {
// External app sending absolute file // External app sending absolute file
if (ex instanceof NoStreamException) if (ex instanceof NoStreamException)
((NoStreamException) ex).report(getContext()); ((NoStreamException) ex).report(getActivity());
else if (ex instanceof FileNotFoundException || else if (ex instanceof FileNotFoundException ||
ex instanceof IllegalArgumentException || ex instanceof IllegalArgumentException ||
ex instanceof IllegalStateException) { ex instanceof IllegalStateException) {
@ -2966,7 +2966,7 @@ public class FragmentCompose extends FragmentBase {
@Override @Override
protected void onException(Bundle args, Throwable ex) { protected void onException(Bundle args, Throwable ex) {
if (ex instanceof NoStreamException) if (ex instanceof NoStreamException)
((NoStreamException) ex).report(getContext()); ((NoStreamException) ex).report(getActivity());
else else
Log.unexpectedError(getParentFragmentManager(), ex); Log.unexpectedError(getParentFragmentManager(), ex);
} }
@ -5335,7 +5335,7 @@ public class FragmentCompose extends FragmentBase {
if (ex instanceof MessageRemovedException) if (ex instanceof MessageRemovedException)
finish(); finish();
if (ex instanceof NoStreamException) if (ex instanceof NoStreamException)
((NoStreamException) ex).report(getContext()); ((NoStreamException) ex).report(getActivity());
else if (ex instanceof FileNotFoundException || else if (ex instanceof FileNotFoundException ||
ex instanceof IllegalArgumentException || ex instanceof IllegalArgumentException ||
ex instanceof IllegalStateException) ex instanceof IllegalStateException)

@ -373,7 +373,7 @@ public class FragmentContacts extends FragmentBase {
@Override @Override
protected void onException(Bundle args, Throwable ex) { protected void onException(Bundle args, Throwable ex) {
if (ex instanceof NoStreamException) if (ex instanceof NoStreamException)
((NoStreamException) ex).report(getContext()); ((NoStreamException) ex).report(getActivity());
else else
Log.unexpectedError(getParentFragmentManager(), ex); Log.unexpectedError(getParentFragmentManager(), ex);
} }

@ -143,7 +143,7 @@ public class FragmentGmail extends FragmentBase {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
try { try {
requestPermissions(Helper.getOAuthPermissions(), ActivitySetup.REQUEST_CHOOSE_ACCOUNT); requestPermissions(Helper.getOAuthPermissions(), REQUEST_PERMISSIONS);
} catch (Throwable ex) { } catch (Throwable ex) {
Log.unexpectedError(getParentFragmentManager(), ex); Log.unexpectedError(getParentFragmentManager(), ex);
} }

@ -455,7 +455,7 @@ public class FragmentRules extends FragmentBase {
@Override @Override
protected void onException(Bundle args, Throwable ex) { protected void onException(Bundle args, Throwable ex) {
if (ex instanceof NoStreamException) if (ex instanceof NoStreamException)
((NoStreamException) ex).report(getContext()); ((NoStreamException) ex).report(getActivity());
else if (ex instanceof FileNotFoundException || else if (ex instanceof FileNotFoundException ||
ex instanceof JSONException) ex instanceof JSONException)
ToastEx.makeText(getContext(), ex.getMessage(), Toast.LENGTH_LONG).show(); ToastEx.makeText(getContext(), ex.getMessage(), Toast.LENGTH_LONG).show();

@ -465,7 +465,7 @@ public class FragmentSetup extends FragmentBase {
try { try {
btnPermissions.setEnabled(false); btnPermissions.setEnabled(false);
String permission = Manifest.permission.READ_CONTACTS; String permission = Manifest.permission.READ_CONTACTS;
requestPermissions(new String[]{permission}, ActivitySetup.REQUEST_PERMISSION); requestPermissions(new String[]{permission}, REQUEST_PERMISSIONS);
} catch (Throwable ex) { } catch (Throwable ex) {
Log.unexpectedError(getParentFragmentManager(), ex); Log.unexpectedError(getParentFragmentManager(), ex);
/* /*

@ -20,10 +20,12 @@ package eu.faircode.email;
*/ */
import android.Manifest; import android.Manifest;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Build;
import android.provider.Settings; import android.provider.Settings;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -55,7 +57,10 @@ public class NoStreamException extends SecurityException {
throw new NoStreamException(uri); 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); View dview = LayoutInflater.from(context).inflate(R.layout.dialog_no_stream, null);
TextView tvUri = dview.findViewById(R.id.tvUri); TextView tvUri = dview.findViewById(R.id.tvUri);
@ -70,19 +75,19 @@ public class NoStreamException extends SecurityException {
} }
}); });
new AlertDialog.Builder(context) AlertDialog.Builder builder = new AlertDialog.Builder(context);
.setView(dview) builder.setView(dview);
.setNegativeButton(android.R.string.cancel, null) builder.setNegativeButton(android.R.string.cancel, null);
.setPositiveButton(R.string.title_setup_grant, new DialogInterface.OnClickListener() {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M)
builder.setPositiveButton(R.string.title_setup_grant, new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialogInterface, int i) { public void onClick(DialogInterface dialogInterface, int i) {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); String permission = Manifest.permission.READ_EXTERNAL_STORAGE;
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.requestPermissions(new String[]{permission}, FragmentBase.REQUEST_PERMISSIONS);
Uri uri = Uri.fromParts("package", context.getPackageName(), null);
intent.setData(uri);
context.startActivity(intent);
} }
}) });
.show();
builder.show();
} }
} }

Loading…
Cancel
Save