summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Bryce Lee <brycelee@google.com> 2024-12-11 14:13:07 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2024-12-11 14:13:07 -0800
commit0d37abc71518fc27e10c4bd11c8d5810fa5d8dcc (patch)
tree0a4c665e3afc728f40ccff659b3fb857116ea530
parent18c28bf6127ebb0354bad098046749edcec925c6 (diff)
parentd2d8f0dbebbcf78c58fe95f28b95e78a0970ea91 (diff)
Merge "Limit ComplicationHostViewController observer to attached lifecycle." into main
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/complication/ComplicationHostViewControllerTest.java15
-rw-r--r--packages/SystemUI/src/com/android/systemui/complication/ComplicationHostViewController.java20
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);
}
/**