Add check and request for SMS read permission to perform export.

This commit is contained in:
Cody Henthorne
2022-10-20 20:50:54 -04:00
parent dfdf68b7b5
commit 08b7dcb1ee
4 changed files with 53 additions and 8 deletions

View File

@@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.permissions;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -16,12 +15,14 @@ import android.view.WindowManager;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import com.annimon.stream.Stream;
import com.annimon.stream.function.Consumer;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.R;
@@ -104,7 +105,11 @@ public class Permissions {
}
public PermissionsBuilder withPermanentDenialDialog(@NonNull String message) {
return onAnyPermanentlyDenied(new SettingsDialogListener(permissionObject.getContext(), message));
return withPermanentDenialDialog(message, null);
}
public PermissionsBuilder withPermanentDenialDialog(@NonNull String message, @Nullable Runnable onDialogDismissed) {
return onAnyPermanentlyDenied(new SettingsDialogListener(permissionObject.getContext(), message, onDialogDismissed));
}
public PermissionsBuilder onAllGranted(Runnable allGrantedListener) {
@@ -360,11 +365,13 @@ public class Permissions {
private static class SettingsDialogListener implements Runnable {
private final WeakReference<Context> context;
private final Runnable onDialogDismissed;
private final String message;
SettingsDialogListener(Context context, String message) {
this.message = message;
this.context = new WeakReference<>(context);
SettingsDialogListener(Context context, String message, @Nullable Runnable onDialogDismissed) {
this.message = message;
this.context = new WeakReference<>(context);
this.onDialogDismissed = onDialogDismissed;
}
@Override
@@ -372,11 +379,17 @@ public class Permissions {
Context context = this.context.get();
if (context != null) {
new AlertDialog.Builder(context)
new MaterialAlertDialogBuilder(context)
.setTitle(R.string.Permissions_permission_required)
.setMessage(message)
.setCancelable(false)
.setPositiveButton(R.string.Permissions_continue, (dialog, which) -> context.startActivity(getApplicationSettingsIntent(context)))
.setNegativeButton(android.R.string.cancel, null)
.setOnDismissListener(d -> {
if (onDialogDismissed != null) {
onDialogDismissed.run();
}
})
.show();
}
}