summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/am/AppWaitingForDebuggerDialog.java3
-rw-r--r--services/core/java/com/android/server/am/BaseErrorDialog.java37
-rw-r--r--services/core/java/com/android/server/wm/FactoryErrorDialog.java3
3 files changed, 25 insertions, 18 deletions
diff --git a/services/core/java/com/android/server/am/AppWaitingForDebuggerDialog.java b/services/core/java/com/android/server/am/AppWaitingForDebuggerDialog.java
index 262e79521e8c..9b5f18caf71a 100644
--- a/services/core/java/com/android/server/am/AppWaitingForDebuggerDialog.java
+++ b/services/core/java/com/android/server/am/AppWaitingForDebuggerDialog.java
@@ -57,9 +57,6 @@ final class AppWaitingForDebuggerDialog extends BaseErrorDialog {
attrs.setTitle("Waiting For Debugger: " + app.info.processName);
getWindow().setAttributes(attrs);
}
-
- public void onStop() {
- }
@Override
protected void closeDialog() {
diff --git a/services/core/java/com/android/server/am/BaseErrorDialog.java b/services/core/java/com/android/server/am/BaseErrorDialog.java
index 259dd8ec567d..b1cfd7fa0f58 100644
--- a/services/core/java/com/android/server/am/BaseErrorDialog.java
+++ b/services/core/java/com/android/server/am/BaseErrorDialog.java
@@ -16,6 +16,8 @@
package com.android.server.am;
+import static android.content.Context.RECEIVER_EXPORTED;
+
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -34,6 +36,7 @@ public class BaseErrorDialog extends AlertDialog {
private static final int DISABLE_BUTTONS = 1;
private boolean mConsuming = true;
+ private BroadcastReceiver mReceiver;
public BaseErrorDialog(Context context) {
super(context, com.android.internal.R.style.Theme_DeviceDefault_Dialog_AppError);
@@ -52,14 +55,33 @@ public class BaseErrorDialog extends AlertDialog {
super.onStart();
mHandler.sendEmptyMessage(DISABLE_BUTTONS);
mHandler.sendMessageDelayed(mHandler.obtainMessage(ENABLE_BUTTONS), 1000);
- getContext().registerReceiver(mReceiver,
- new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS), Context.RECEIVER_EXPORTED);
+ if (mReceiver == null) {
+ mReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) {
+ closeDialog();
+ }
+ }
+ };
+ getContext().registerReceiver(mReceiver,
+ new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS), RECEIVER_EXPORTED);
+ }
}
@Override
protected void onStop() {
super.onStop();
- getContext().unregisterReceiver(mReceiver);
+ if (mReceiver != null) {
+ try {
+ getContext().unregisterReceiver(mReceiver);
+ } catch (IllegalArgumentException e) {
+ // Receiver not registered exception.
+ android.util.Slog.e("BaseErrorDialog",
+ "unregisterReceiver threw exception: " + e.getMessage());
+ }
+ mReceiver = null;
+ }
}
public boolean dispatchKeyEvent(KeyEvent event) {
@@ -107,13 +129,4 @@ public class BaseErrorDialog extends AlertDialog {
dismiss();
}
}
-
- private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) {
- closeDialog();
- }
- }
- };
}
diff --git a/services/core/java/com/android/server/wm/FactoryErrorDialog.java b/services/core/java/com/android/server/wm/FactoryErrorDialog.java
index afdf1ee4de7f..4ebaad98cd75 100644
--- a/services/core/java/com/android/server/wm/FactoryErrorDialog.java
+++ b/services/core/java/com/android/server/wm/FactoryErrorDialog.java
@@ -37,9 +37,6 @@ final class FactoryErrorDialog extends BaseErrorDialog {
attrs.setTitle("Factory Error");
getWindow().setAttributes(attrs);
}
-
- public void onStop() {
- }
@Override
protected void closeDialog() {