diff options
2 files changed, 28 insertions, 7 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/complication/ComplicationHostViewControllerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/complication/ComplicationHostViewControllerTest.java index dd3f991e60b7..2ae611d236e9 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/complication/ComplicationHostViewControllerTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/complication/ComplicationHostViewControllerTest.java @@ -133,6 +133,7 @@ public class ComplicationHostViewControllerTest extends SysuiTestCase { */ @Test public void testViewModelObservation() { + mController.onViewAttached(); final Observer<Collection<ComplicationViewModel>> observer = captureComplicationViewModelsObserver(); @@ -152,6 +153,7 @@ public class ComplicationHostViewControllerTest extends SysuiTestCase { @Test public void testMalformedComplicationAddition() { + mController.onViewAttached(); final Observer<Collection<ComplicationViewModel>> observer = captureComplicationViewModelsObserver(); @@ -167,6 +169,7 @@ public class ComplicationHostViewControllerTest extends SysuiTestCase { @Test public void testNewComplicationsBeforeEntryAnimationsFinishSetToInvisible() { + mController.onViewAttached(); final Observer<Collection<ComplicationViewModel>> observer = captureComplicationViewModelsObserver(); @@ -181,6 +184,7 @@ public class ComplicationHostViewControllerTest extends SysuiTestCase { @Test public void testNewComplicationsAfterEntryAnimationsFinishNotSetToInvisible() { + mController.onViewAttached(); final Observer<Collection<ComplicationViewModel>> observer = captureComplicationViewModelsObserver(); @@ -198,6 +202,7 @@ public class ComplicationHostViewControllerTest extends SysuiTestCase { @Test public void testAnimationsDisabled_ComplicationsNeverSetToInvisible() { + mController.onViewAttached(); //Disable animations mController.mIsAnimationEnabled = false; @@ -213,6 +218,16 @@ public class ComplicationHostViewControllerTest extends SysuiTestCase { verify(mComplicationView, never()).setVisibility(View.INVISIBLE); } + @Test + public void testLifecycleObserve_activeOnlyDuringAttachedState() { + verify(mComplicationViewModelLiveData, never()).observe(any(), any()); + mController.onViewAttached(); + final Observer<Collection<ComplicationViewModel>> observer = + captureComplicationViewModelsObserver(); + mController.onViewDetached(); + verify(mComplicationViewModelLiveData).removeObserver(eq(observer)); + } + private Observer<Collection<ComplicationViewModel>> captureComplicationViewModelsObserver() { verify(mComplicationViewModelLiveData).observe(eq(mLifecycleOwner), mObserverCaptor.capture()); diff --git a/packages/SystemUI/src/com/android/systemui/complication/ComplicationHostViewController.java b/packages/SystemUI/src/com/android/systemui/complication/ComplicationHostViewController.java index 8527dcb3794f..35592a5d87d9 100644 --- a/packages/SystemUI/src/com/android/systemui/complication/ComplicationHostViewController.java +++ b/packages/SystemUI/src/com/android/systemui/complication/ComplicationHostViewController.java @@ -29,6 +29,7 @@ import android.view.View; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.lifecycle.LifecycleOwner; +import androidx.lifecycle.Observer; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.dreams.DreamOverlayStateController; @@ -58,6 +59,14 @@ public class ComplicationHostViewController extends ViewController<ConstraintLay private final LifecycleOwner mLifecycleOwner; private final ComplicationCollectionViewModel mComplicationCollectionViewModel; private final HashMap<ComplicationId, Complication.ViewHolder> mComplications = new HashMap<>(); + + private final Observer<Collection<ComplicationViewModel>> mComplicationViewModelObserver = + new Observer<>() { + @Override + public void onChanged(Collection<ComplicationViewModel> complicationViewModels) { + updateComplications(complicationViewModels); + } + }; @VisibleForTesting boolean mIsAnimationEnabled; @@ -80,13 +89,6 @@ public class ComplicationHostViewController extends ViewController<ConstraintLay Settings.Global.ANIMATOR_DURATION_SCALE, 1.0f, UserHandle.USER_CURRENT) != 0.0f; } - @Override - protected void onInit() { - super.onInit(); - mComplicationCollectionViewModel.getComplications().observe(mLifecycleOwner, - complicationViewModels -> updateComplications(complicationViewModels)); - } - /** * Returns the region in display space occupied by complications. Touches in this region * (composed of a collection of individual rectangular regions) should be directed to the @@ -166,10 +168,14 @@ public class ComplicationHostViewController extends ViewController<ConstraintLay @Override protected void onViewAttached() { + mComplicationCollectionViewModel.getComplications().observe(mLifecycleOwner, + mComplicationViewModelObserver); } @Override protected void onViewDetached() { + mComplicationCollectionViewModel.getComplications().removeObserver( + mComplicationViewModelObserver); } /** |