Unregister for posture callback on destroy

To prevent a memory leak

Test: atest DozeTriggersTest DozeSensorsTest
Fixes: 218886701

Change-Id: I23debb6e0738521f1611f28250d48251fb0cf1a9
This commit is contained in:
Beverly
2022-02-14 16:41:44 +00:00
committed by Beverly Tai
parent 82212e908e
commit 7ae51035e2
8 changed files with 41 additions and 4 deletions

View File

@@ -288,7 +288,7 @@ public class DozeSensors {
for (TriggerSensor triggerSensor : mTriggerSensors) {
triggerSensor.setListening(false);
}
mProximitySensor.pause();
mProximitySensor.destroy();
mDevicePostureController.removeCallback(mDevicePostureCallback);
mAuthController.removeCallback(mAuthControllerCallback);

View File

@@ -228,6 +228,7 @@ public class DozeTriggers implements DozeMachine.Part {
@Override
public void destroy() {
mDozeSensors.destroy();
mProxCheck.destroy();
}
private void onNotification(Runnable onPulseSuppressedListener) {

View File

@@ -37,6 +37,8 @@ class PostureDependentProximitySensor extends ProximitySensorImpl {
private final ThresholdSensor[] mPostureToPrimaryProxSensorMap;
private final ThresholdSensor[] mPostureToSecondaryProxSensorMap;
private final DevicePostureController mDevicePostureController;
@Inject
PostureDependentProximitySensor(
@PrimaryProxSensor ThresholdSensor[] postureToPrimaryProxSensorMap,
@@ -53,15 +55,24 @@ class PostureDependentProximitySensor extends ProximitySensorImpl {
);
mPostureToPrimaryProxSensorMap = postureToPrimaryProxSensorMap;
mPostureToSecondaryProxSensorMap = postureToSecondaryProxSensorMap;
mDevicePosture = devicePostureController.getDevicePosture();
devicePostureController.addCallback(mDevicePostureCallback);
mDevicePostureController = devicePostureController;
mDevicePosture = mDevicePostureController.getDevicePosture();
mDevicePostureController.addCallback(mDevicePostureCallback);
chooseSensors();
}
@Override
public void destroy() {
super.destroy();
mDevicePostureController.removeCallback(mDevicePostureCallback);
}
private void chooseSensors() {
if (mDevicePosture >= mPostureToPrimaryProxSensorMap.length
|| mDevicePosture >= mPostureToSecondaryProxSensorMap.length) {
Log.e("PostureDependentProxSensor",
Log.e("PostureDependProxSensor",
"unsupported devicePosture=" + mDevicePosture);
return;
}

View File

@@ -73,6 +73,13 @@ public class ProximityCheck implements Runnable {
}
}
/**
* Cleanup after no longer needed.
*/
public void destroy() {
mSensor.destroy();
}
private void unregister() {
mSensor.unregister(mListener);
mRegistered.set(false);

View File

@@ -42,4 +42,10 @@ public interface ProximitySensor extends ThresholdSensor {
* of what is reported by the primary sensor.
*/
void setSecondarySafe(boolean safe);
/**
* Called when the proximity sensor is no longer needed. All listeners should
* be unregistered and cleaned up.
*/
void destroy();
}

View File

@@ -251,6 +251,11 @@ class ProximitySensorImpl implements ProximitySensor {
}
}
@Override
public void destroy() {
pause();
}
@Override
public String getName() {
return mPrimaryThresholdSensor.getName();

View File

@@ -175,6 +175,7 @@ public class DozeSensorsTest extends SysuiTestCase {
public void testDestroy() {
mDozeSensors.destroy();
verify(mProximitySensor).destroy();
verify(mTriggerSensor).setListening(false);
}

View File

@@ -299,6 +299,12 @@ public class DozeTriggersTest extends SysuiTestCase {
verify(mAuthController).onAodInterrupt(eq(screenX), eq(screenY), eq(major), eq(minor));
}
@Test
public void testDestroy() {
mTriggers.destroy();
verify(mProximityCheck).destroy();
}
private void waitForSensorManager() {
mExecutor.runAllReady();
}