Merge "fix broadcast receivers overflow for system_server" am: 9ba1a0d576 am: ad9467332c

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1339995

Change-Id: Icad186f7a973ebf08a7b506561573a963d762d49
This commit is contained in:
Philip P. Moltmann
2020-10-14 21:42:28 +00:00
committed by Automerger Merge Worker
3 changed files with 17 additions and 2 deletions

View File

@@ -64,12 +64,13 @@ class MtpNotificationManager {
private final Context mContext; private final Context mContext;
private final OnOpenInAppListener mListener; private final OnOpenInAppListener mListener;
private final Receiver mReceiver;
MtpNotificationManager(Context context, OnOpenInAppListener listener) { MtpNotificationManager(Context context, OnOpenInAppListener listener) {
mContext = context; mContext = context;
mListener = listener; mListener = listener;
final Receiver receiver = new Receiver(); mReceiver = new Receiver();
context.registerReceiver(receiver, new IntentFilter(ACTION_OPEN_IN_APPS)); context.registerReceiver(mReceiver, new IntentFilter(ACTION_OPEN_IN_APPS));
} }
void showNotification(UsbDevice device) { void showNotification(UsbDevice device) {
@@ -154,4 +155,8 @@ class MtpNotificationManager {
static interface OnOpenInAppListener { static interface OnOpenInAppListener {
void onOpenInApp(UsbDevice device); void onOpenInApp(UsbDevice device);
} }
public void unregister() {
mContext.unregisterReceiver(mReceiver);
}
} }

View File

@@ -260,6 +260,15 @@ class UsbProfileGroupSettingsManager {
mUsbHandlerManager = usbResolveActivityManager; mUsbHandlerManager = usbResolveActivityManager;
} }
/**
* 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. * Remove all defaults and denied packages for a user.
* *

View File

@@ -124,6 +124,7 @@ class UsbSettingsManager {
if (mSettingsByProfileGroup.indexOfKey(userToRemove.getIdentifier()) >= 0) { if (mSettingsByProfileGroup.indexOfKey(userToRemove.getIdentifier()) >= 0) {
// The user to remove is the parent user of the group. The parent is the last user // 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 // that gets removed. All state will be removed with the user
mSettingsByProfileGroup.get(userToRemove.getIdentifier()).unregisterReceivers();
mSettingsByProfileGroup.remove(userToRemove.getIdentifier()); mSettingsByProfileGroup.remove(userToRemove.getIdentifier());
} else { } else {
// We cannot find the parent user of the user that is removed, hence try to remove // We cannot find the parent user of the user that is removed, hence try to remove