Loading packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java +3 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ package com.android.systemui.qs.tileimpl; import static androidx.lifecycle.Lifecycle.State.DESTROYED; import static androidx.lifecycle.Lifecycle.State.RESUMED; import static androidx.lifecycle.Lifecycle.State.STARTED; Loading Loading @@ -475,6 +476,8 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy } mCallbacks.clear(); mHandler.removeCallbacksAndMessages(null); // This will force it to be removed from all controllers that may have it registered. mLifecycle.setCurrentState(DESTROYED); } protected void checkIfRestrictionEnforcedByAdminOnly(State state, String userRestriction) { Loading packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java +8 −0 Original line number Diff line number Diff line Loading @@ -259,6 +259,14 @@ public class QSTileImplTest extends SysuiTestCase { verify(mTile, never()).handleStale(); } @Test public void testHandleDestroyLifecycle() { assertNotEquals(DESTROYED, mTile.getLifecycle().getCurrentState()); mTile.handleDestroy(); assertEquals(DESTROYED, mTile.getLifecycle().getCurrentState()); } @Test public void testHandleDestroy_log() { mTile.handleDestroy(); Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackControllerTest.java +30 −0 Original line number Diff line number Diff line Loading @@ -23,10 +23,12 @@ import static org.mockito.Mockito.verify; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper.RunWithLooper; import androidx.annotation.NonNull; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.Lifecycle.Event; import androidx.lifecycle.LifecycleEventObserver; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleRegistry; import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; Loading Loading @@ -76,6 +78,34 @@ public class CallbackControllerTest extends SysuiTestCase { verify(controller).removeCallback(eq(callback)); } @Test public void testCallbackIsRemovedOnDestroy() { SimpleLifecycleOwner owner = new SimpleLifecycleOwner(); Object callback = new Object(); Controller controller = mock(Controller.class); controller.observe(owner, callback); owner.setState(Lifecycle.State.RESUMED); verify(controller).addCallback(callback); owner.setState(Lifecycle.State.DESTROYED); verify(controller).removeCallback(callback); } private static class SimpleLifecycleOwner implements LifecycleOwner { LifecycleRegistry mLifecycle = new LifecycleRegistry(this); @NonNull @Override public Lifecycle getLifecycle() { return mLifecycle; } public void setState(Lifecycle.State state) { mLifecycle.setCurrentState(state); } } private static class Controller implements CallbackController<Object> { @Override public void addCallback(Object listener) { Loading Loading
packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java +3 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ package com.android.systemui.qs.tileimpl; import static androidx.lifecycle.Lifecycle.State.DESTROYED; import static androidx.lifecycle.Lifecycle.State.RESUMED; import static androidx.lifecycle.Lifecycle.State.STARTED; Loading Loading @@ -475,6 +476,8 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy } mCallbacks.clear(); mHandler.removeCallbacksAndMessages(null); // This will force it to be removed from all controllers that may have it registered. mLifecycle.setCurrentState(DESTROYED); } protected void checkIfRestrictionEnforcedByAdminOnly(State state, String userRestriction) { Loading
packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java +8 −0 Original line number Diff line number Diff line Loading @@ -259,6 +259,14 @@ public class QSTileImplTest extends SysuiTestCase { verify(mTile, never()).handleStale(); } @Test public void testHandleDestroyLifecycle() { assertNotEquals(DESTROYED, mTile.getLifecycle().getCurrentState()); mTile.handleDestroy(); assertEquals(DESTROYED, mTile.getLifecycle().getCurrentState()); } @Test public void testHandleDestroy_log() { mTile.handleDestroy(); Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackControllerTest.java +30 −0 Original line number Diff line number Diff line Loading @@ -23,10 +23,12 @@ import static org.mockito.Mockito.verify; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper.RunWithLooper; import androidx.annotation.NonNull; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.Lifecycle.Event; import androidx.lifecycle.LifecycleEventObserver; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleRegistry; import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; Loading Loading @@ -76,6 +78,34 @@ public class CallbackControllerTest extends SysuiTestCase { verify(controller).removeCallback(eq(callback)); } @Test public void testCallbackIsRemovedOnDestroy() { SimpleLifecycleOwner owner = new SimpleLifecycleOwner(); Object callback = new Object(); Controller controller = mock(Controller.class); controller.observe(owner, callback); owner.setState(Lifecycle.State.RESUMED); verify(controller).addCallback(callback); owner.setState(Lifecycle.State.DESTROYED); verify(controller).removeCallback(callback); } private static class SimpleLifecycleOwner implements LifecycleOwner { LifecycleRegistry mLifecycle = new LifecycleRegistry(this); @NonNull @Override public Lifecycle getLifecycle() { return mLifecycle; } public void setState(Lifecycle.State state) { mLifecycle.setCurrentState(state); } } private static class Controller implements CallbackController<Object> { @Override public void addCallback(Object listener) { Loading