Merge "Limit ComplicationHostViewController observer to attached lifecycle." into main
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 dd3f991..2ae611d 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 @@
*/
@Test
public void testViewModelObservation() {
+ mController.onViewAttached();
final Observer<Collection<ComplicationViewModel>> observer =
captureComplicationViewModelsObserver();
@@ -152,6 +153,7 @@
@Test
public void testMalformedComplicationAddition() {
+ mController.onViewAttached();
final Observer<Collection<ComplicationViewModel>> observer =
captureComplicationViewModelsObserver();
@@ -167,6 +169,7 @@
@Test
public void testNewComplicationsBeforeEntryAnimationsFinishSetToInvisible() {
+ mController.onViewAttached();
final Observer<Collection<ComplicationViewModel>> observer =
captureComplicationViewModelsObserver();
@@ -181,6 +184,7 @@
@Test
public void testNewComplicationsAfterEntryAnimationsFinishNotSetToInvisible() {
+ mController.onViewAttached();
final Observer<Collection<ComplicationViewModel>> observer =
captureComplicationViewModelsObserver();
@@ -198,6 +202,7 @@
@Test
public void testAnimationsDisabled_ComplicationsNeverSetToInvisible() {
+ mController.onViewAttached();
//Disable animations
mController.mIsAnimationEnabled = false;
@@ -213,6 +218,16 @@
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 8527dcb3..35592a5 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 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 @@
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 @@
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 @@
@Override
protected void onViewAttached() {
+ mComplicationCollectionViewModel.getComplications().observe(mLifecycleOwner,
+ mComplicationViewModelObserver);
}
@Override
protected void onViewDetached() {
+ mComplicationCollectionViewModel.getComplications().removeObserver(
+ mComplicationViewModelObserver);
}
/**