diff options
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() { |