QSTileImpl is set to DESTROYED when handleDestroy
This will guarantee that there are no remaining references in the
CallbackController.
Test: atest QSTileImplTest CallbackControllerTest
Bug: 160160246
Change-Id: I308ea00b2d24febf9ad0ab1c533c4f3d2f34c675
Merged-In: I308ea00b2d24febf9ad0ab1c533c4f3d2f34c675
(cherry picked from commit c6db4059da)
This commit is contained in:
committed by
Colin Cross
parent
efc3806b1c
commit
c529168031
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user