Fix trying to launch a dialog from an application context

This commit is contained in:
Moxie Marlinspike 2017-11-30 13:04:41 -08:00
parent c58d5c32bb
commit 6f10de5e30
2 changed files with 17 additions and 9 deletions

View File

@ -1311,6 +1311,8 @@
<string name="transport_selection_list_item__transport_icon">Transport icon</string>
<string name="ConversationListFragment_loading">Loading...</string>
<string name="CallNotificationBuilder_connecting">Connecting...</string>
<string name="Permissions_permission_required">Permission required</string>
<string name="Permissions_continue">Continue</string>
<!-- EOF -->

View File

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