From d9f7fba943948e3e79d7413c35af6e10c7eee2e7 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Thu, 7 Jun 2018 11:51:09 -0700 Subject: [PATCH] Fix context leak in AudioSwitchPreferenceController. In this controller the context is stored into a global singleton but was not cleared, thus leaking context and associated views. Change-Id: I4247f8ff753bc0a331c6c81a0e4b5b4bc41588de Bug: 80507279 Test: robotests Test: inspected hprof before/after change --- .../settings/sound/AudioSwitchPreferenceController.java | 3 ++- .../sound/AudioOutputSwitchPreferenceControllerTest.java | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/sound/AudioSwitchPreferenceController.java b/src/com/android/settings/sound/AudioSwitchPreferenceController.java index f35fd60ad54..119fadbd4ba 100644 --- a/src/com/android/settings/sound/AudioSwitchPreferenceController.java +++ b/src/com/android/settings/sound/AudioSwitchPreferenceController.java @@ -118,7 +118,6 @@ public abstract class AudioSwitchPreferenceController extends BasePreferenceCont Log.e(TAG, "Bluetooth is not supported on this device"); return; } - mLocalBluetoothManager.setForegroundActivity(mContext); mProfileManager = mLocalBluetoothManager.getProfileManager(); } @@ -171,11 +170,13 @@ public abstract class AudioSwitchPreferenceController extends BasePreferenceCont @Override public void onStart() { + mLocalBluetoothManager.setForegroundActivity(mContext); register(); } @Override public void onStop() { + mLocalBluetoothManager.setForegroundActivity(null); unregister(); } diff --git a/tests/robotests/src/com/android/settings/sound/AudioOutputSwitchPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/sound/AudioOutputSwitchPreferenceControllerTest.java index 56a5aa709fe..748aa0ca302 100644 --- a/tests/robotests/src/com/android/settings/sound/AudioOutputSwitchPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/sound/AudioOutputSwitchPreferenceControllerTest.java @@ -230,6 +230,7 @@ public class AudioOutputSwitchPreferenceControllerTest { verify(mLocalBluetoothManager.getEventManager()).registerCallback( any(BluetoothCallback.class)); verify(mContext).registerReceiver(any(BroadcastReceiver.class), any(IntentFilter.class)); + verify(mLocalBluetoothManager).setForegroundActivity(mContext); } @Test @@ -240,6 +241,7 @@ public class AudioOutputSwitchPreferenceControllerTest { verify(mLocalBluetoothManager.getEventManager()).unregisterCallback( any(BluetoothCallback.class)); verify(mContext).unregisterReceiver(any(BroadcastReceiver.class)); + verify(mLocalBluetoothManager).setForegroundActivity(null); } @Test