diff options
3 files changed, 17 insertions, 2 deletions
diff --git a/services/usb/java/com/android/server/usb/MtpNotificationManager.java b/services/usb/java/com/android/server/usb/MtpNotificationManager.java index 462ee19124ff..39f2f296a305 100644 --- a/services/usb/java/com/android/server/usb/MtpNotificationManager.java +++ b/services/usb/java/com/android/server/usb/MtpNotificationManager.java @@ -64,12 +64,13 @@ class MtpNotificationManager { private final Context mContext; private final OnOpenInAppListener mListener; + private final Receiver mReceiver; MtpNotificationManager(Context context, OnOpenInAppListener listener) { mContext = context; mListener = listener; - final Receiver receiver = new Receiver(); - context.registerReceiver(receiver, new IntentFilter(ACTION_OPEN_IN_APPS)); + mReceiver = new Receiver(); + context.registerReceiver(mReceiver, new IntentFilter(ACTION_OPEN_IN_APPS)); } void showNotification(UsbDevice device) { @@ -154,4 +155,8 @@ class MtpNotificationManager { static interface OnOpenInAppListener { void onOpenInApp(UsbDevice device); } + + public void unregister() { + mContext.unregisterReceiver(mReceiver); + } } diff --git a/services/usb/java/com/android/server/usb/UsbProfileGroupSettingsManager.java b/services/usb/java/com/android/server/usb/UsbProfileGroupSettingsManager.java index d7b6b5d0d36a..26ee03c25013 100644 --- a/services/usb/java/com/android/server/usb/UsbProfileGroupSettingsManager.java +++ b/services/usb/java/com/android/server/usb/UsbProfileGroupSettingsManager.java @@ -261,6 +261,15 @@ class UsbProfileGroupSettingsManager { } /** + * Unregister all broadcast receivers. Must be called explicitly before + * object deletion. + */ + public void unregisterReceivers() { + mPackageMonitor.unregister(); + mMtpNotificationManager.unregister(); + } + + /** * Remove all defaults and denied packages for a user. * * @param userToRemove The user diff --git a/services/usb/java/com/android/server/usb/UsbSettingsManager.java b/services/usb/java/com/android/server/usb/UsbSettingsManager.java index 7b677eea6b8f..8e53ff412f0a 100644 --- a/services/usb/java/com/android/server/usb/UsbSettingsManager.java +++ b/services/usb/java/com/android/server/usb/UsbSettingsManager.java @@ -124,6 +124,7 @@ class UsbSettingsManager { if (mSettingsByProfileGroup.indexOfKey(userToRemove.getIdentifier()) >= 0) { // The user to remove is the parent user of the group. The parent is the last user // that gets removed. All state will be removed with the user + mSettingsByProfileGroup.get(userToRemove.getIdentifier()).unregisterReceivers(); mSettingsByProfileGroup.remove(userToRemove.getIdentifier()); } else { // We cannot find the parent user of the user that is removed, hence try to remove |