diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java index 36319380ad50d..52db1bd00c8e0 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java @@ -105,17 +105,7 @@ public class DozeScreenState implements DozeMachine.Part { updateUdfpsController(); if (mUdfpsController == null) { - mAuthController.addCallback(new AuthController.Callback() { - @Override - public void onAllAuthenticatorsRegistered() { - updateUdfpsController(); - } - - @Override - public void onEnrollmentsChanged() { - updateUdfpsController(); - } - }); + mAuthController.addCallback(mAuthControllerCallback); } } @@ -127,6 +117,11 @@ public class DozeScreenState implements DozeMachine.Part { } } + @Override + public void destroy() { + mAuthController.removeCallback(mAuthControllerCallback); + } + @Override public void transitionTo(DozeMachine.State oldState, DozeMachine.State newState) { int screenState = newState.screenState(mParameters); @@ -222,4 +217,16 @@ public class DozeScreenState implements DozeMachine.Part { mWakeLock.setAcquired(false); } } + + private final AuthController.Callback mAuthControllerCallback = new AuthController.Callback() { + @Override + public void onAllAuthenticatorsRegistered() { + updateUdfpsController(); + } + + @Override + public void onEnrollmentsChanged() { + updateUdfpsController(); + } + }; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java index 3e19cc436dca6..992a82b6e7fec 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java @@ -35,6 +35,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Matchers.anyObject; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.verify; @@ -306,4 +307,11 @@ public class DozeScreenStateTest extends SysuiTestCase { // THEN the display screen state will change assertEquals(Display.STATE_DOZE_SUSPEND, mServiceFake.screenState); } + + @Test + public void authCallbackRemovedOnDestroy() { + mScreen.destroy(); + + verify(mAuthController).removeCallback(anyObject()); + } } \ No newline at end of file