diff --git a/res/values/strings.xml b/res/values/strings.xml
index d87ef66c51..7088252e8d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1311,6 +1311,8 @@
Transport icon
Loading...
Connecting...
+ Permission required
+ Continue
diff --git a/src/org/thoughtcrime/securesms/permissions/Permissions.java b/src/org/thoughtcrime/securesms/permissions/Permissions.java
index 89c0c9556a..127a4a6e00 100644
--- a/src/org/thoughtcrime/securesms/permissions/Permissions.java
+++ b/src/org/thoughtcrime/securesms/permissions/Permissions.java
@@ -22,9 +22,11 @@ import android.view.WindowManager;
import com.annimon.stream.Stream;
import com.annimon.stream.function.Consumer;
+import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.util.LRUCache;
import org.thoughtcrime.securesms.util.ServiceUtil;
+import java.lang.ref.WeakReference;
import java.security.SecureRandom;
import java.util.List;
import java.util.Map;
@@ -309,22 +311,26 @@ public class Permissions {
private static class SettingsDialogListener implements Runnable {
- private final Context context;
- private final String message;
+ private final WeakReference context;
+ private final String message;
SettingsDialogListener(Context context, String message) {
this.message = message;
- this.context = context.getApplicationContext();
+ this.context = new WeakReference<>(context);
}
@Override
public void run() {
- new AlertDialog.Builder(context)
- .setTitle("Permission required")
- .setMessage(message)
- .setPositiveButton("Continue", (dialog, which) -> context.startActivity(getApplicationSettingsIntent(context)))
- .setNegativeButton("Cancel", null)
- .show();
+ Context context = this.context.get();
+
+ if (context != null) {
+ new AlertDialog.Builder(context)
+ .setTitle(R.string.Permissions_permission_required)
+ .setMessage(message)
+ .setPositiveButton(R.string.Permissions_continue, (dialog, which) -> context.startActivity(getApplicationSettingsIntent(context)))
+ .setNegativeButton(android.R.string.cancel, null)
+ .show();
+ }
}
}
}