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

Commit d2d8f0db authored by Bryce Lee's avatar Bryce Lee
Browse files

Limit ComplicationHostViewController observer to attached lifecycle.

This changelist makes the ComplicationHostViewController only observe
the lifecycle state while the associated view is attached. Previously,
this observation started during init and was never unregistered.

Fixes: 378102090
Test: atest ComplicationHostViewControllerTest
Flag: EXEMPT bugfix
Change-Id: I5603da2b5dd6e6b482b67e982458d2fa865b7259
parent e6ab634c
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);
    }

    /**