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

Commit ea2cf6c2 authored by Victor Truong's avatar Victor Truong
Browse files

Stop complications from hiding if animations are disabled.

When device is set to no animation, the entry transition animation
finishes before smartspace is ready. This causes smartspace to have its
visibility set to off.

Bug: 268532256
Test: atest ComplicationHostViewControllerTest

Change-Id: If970924615f0e8c7dbcf38d32d69450331705b20
parent 6bd488e4
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -22,14 +22,18 @@ import static com.android.systemui.dreams.complication.dagger.ComplicationModule
import android.graphics.Rect;
import android.graphics.Region;
import android.os.Debug;
import android.os.UserHandle;
import android.provider.Settings;
import android.util.Log;
import android.view.View;

import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.lifecycle.LifecycleOwner;

import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.dreams.DreamOverlayStateController;
import com.android.systemui.util.ViewController;
import com.android.systemui.util.settings.SecureSettings;

import java.util.Collection;
import java.util.HashMap;
@@ -54,6 +58,8 @@ public class ComplicationHostViewController extends ViewController<ConstraintLay
    private final LifecycleOwner mLifecycleOwner;
    private final ComplicationCollectionViewModel mComplicationCollectionViewModel;
    private final HashMap<ComplicationId, Complication.ViewHolder> mComplications = new HashMap<>();
    @VisibleForTesting
    boolean mIsAnimationEnabled;

    // Whether dream entry animations are finished.
    private boolean mEntryAnimationsFinished = false;
@@ -64,7 +70,8 @@ public class ComplicationHostViewController extends ViewController<ConstraintLay
            ComplicationLayoutEngine layoutEngine,
            DreamOverlayStateController dreamOverlayStateController,
            LifecycleOwner lifecycleOwner,
            @Named(SCOPED_COMPLICATIONS_MODEL) ComplicationCollectionViewModel viewModel) {
            @Named(SCOPED_COMPLICATIONS_MODEL) ComplicationCollectionViewModel viewModel,
            SecureSettings secureSettings) {
        super(view);
        mLayoutEngine = layoutEngine;
        mLifecycleOwner = lifecycleOwner;
@@ -78,6 +85,10 @@ public class ComplicationHostViewController extends ViewController<ConstraintLay
                        mDreamOverlayStateController.areEntryAnimationsFinished();
            }
        });

        // Whether animations are enabled.
        mIsAnimationEnabled = secureSettings.getFloatForUser(
                Settings.Global.ANIMATOR_DURATION_SCALE, 1.0f, UserHandle.USER_CURRENT) != 0.0f;
    }

    @Override
@@ -148,7 +159,7 @@ public class ComplicationHostViewController extends ViewController<ConstraintLay

                    // Complications to be added before dream entry animations are finished are set
                    // to invisible and are animated in.
                    if (!mEntryAnimationsFinished) {
                    if (!mEntryAnimationsFinished && mIsAnimationEnabled) {
                        view.setVisibility(View.INVISIBLE);
                    }
                    mComplications.put(id, viewHolder);
+31 −1
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.os.UserHandle;
import android.provider.Settings;
import android.testing.AndroidTestingRunner;
import android.view.View;

@@ -33,6 +35,8 @@ import androidx.test.filters.SmallTest;

import com.android.systemui.SysuiTestCase;
import com.android.systemui.dreams.DreamOverlayStateController;
import com.android.systemui.util.settings.FakeSettings;
import com.android.systemui.util.settings.SecureSettings;

import org.junit.Before;
import org.junit.Test;
@@ -96,6 +100,10 @@ public class ComplicationHostViewControllerTest extends SysuiTestCase {

    private ComplicationHostViewController mController;

    private SecureSettings mSecureSettings;

    private static final int CURRENT_USER_ID = UserHandle.USER_SYSTEM;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
@@ -108,12 +116,17 @@ public class ComplicationHostViewControllerTest extends SysuiTestCase {
        when(mViewHolder.getLayoutParams()).thenReturn(mComplicationLayoutParams);
        when(mComplicationView.getParent()).thenReturn(mComplicationHostView);

        mSecureSettings = new FakeSettings();
        mSecureSettings.putFloatForUser(
                        Settings.Global.ANIMATOR_DURATION_SCALE, 1.0f, CURRENT_USER_ID);

        mController = new ComplicationHostViewController(
                mComplicationHostView,
                mLayoutEngine,
                mDreamOverlayStateController,
                mLifecycleOwner,
                mViewModel);
                mViewModel,
                mSecureSettings);

        mController.init();
    }
@@ -188,6 +201,23 @@ public class ComplicationHostViewControllerTest extends SysuiTestCase {
        verify(mComplicationView, never()).setVisibility(View.INVISIBLE);
    }

    @Test
    public void testAnimationsDisabled_ComplicationsNeverSetToInvisible() {
        //Disable animations
        mController.mIsAnimationEnabled = false;

        final Observer<Collection<ComplicationViewModel>> observer =
                captureComplicationViewModelsObserver();

        // Add a complication before entry animations are finished.
        final HashSet<ComplicationViewModel> complications = new HashSet<>(
                Collections.singletonList(mComplicationViewModel));
        observer.onChanged(complications);

        // The complication view should not be set to invisible.
        verify(mComplicationView, never()).setVisibility(View.INVISIBLE);
    }

    private Observer<Collection<ComplicationViewModel>> captureComplicationViewModelsObserver() {
        verify(mComplicationViewModelLiveData).observe(eq(mLifecycleOwner),
                mObserverCaptor.capture());