OSDN Git Service

Fix context leak in AudioSwitchPreferenceController.
authorFan Zhang <zhfan@google.com>
Thu, 7 Jun 2018 18:51:09 +0000 (11:51 -0700)
committerFan Zhang <zhfan@google.com>
Thu, 7 Jun 2018 18:53:59 +0000 (18:53 +0000)
In this controller the context is stored into a global singleton but was
not cleared, thus leaking context and associated views.

Change-Id: I4247f8ff753bc0a331c6c81a0e4b5b4bc41588de
Fixes: 80507279
Test: robotests
Test: inspected hprof before/after change

src/com/android/settings/sound/AudioSwitchPreferenceController.java
tests/robotests/src/com/android/settings/sound/AudioOutputSwitchPreferenceControllerTest.java

index 44e175c..6723660 100644 (file)
@@ -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();
     }
 
index 2455f16..1140aee 100644 (file)
@@ -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