Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0d37abc7 authored by Bryce Lee's avatar Bryce Lee Committed by Android (Google) Code Review
Browse files

Merge "Limit ComplicationHostViewController observer to attached lifecycle." into main

parents 18c28bf6 d2d8f0db
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -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());
+13 −7
Original line number Diff line number Diff line
@@ -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);
    }

    /**