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