Inline request read permissions

This commit is contained in:
M66B 2022-03-19 08:12:46 +01:00
parent c4b1c6a0b6
commit 40a505a252
10 changed files with 48 additions and 47 deletions

View File

@ -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;

View File

@ -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() {

View File

@ -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);
}

View File

@ -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";

View File

@ -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)

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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();

View File

@ -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);
/*

View File

@ -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();
}
}