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

Commit 8b9a75e5 authored by Darrell Shi's avatar Darrell Shi Committed by Android (Google) Code Review
Browse files

Merge "Add dream overlay open animation." into tm-qpr-dev

parents 8e91c4ef 9a868a7d
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -76,6 +76,9 @@ public class DreamOverlayContainerViewController extends ViewController<DreamOve
    private final int mDreamOverlayMaxTranslationY;
    private final BouncerCallbackInteractor mBouncerCallbackInteractor;

    private final int mOpenAnimationDuration;
    private final int mOpenAnimationDelay;

    private long mJitterStartTimeMillis;

    private boolean mBouncerAnimating;
@@ -134,7 +137,9 @@ public class DreamOverlayContainerViewController extends ViewController<DreamOve
            @Named(DreamOverlayModule.BURN_IN_PROTECTION_UPDATE_INTERVAL) long
                    burnInProtectionUpdateInterval,
            @Named(DreamOverlayModule.MILLIS_UNTIL_FULL_JITTER) long millisUntilFullJitter,
            BouncerCallbackInteractor bouncerCallbackInteractor) {
            BouncerCallbackInteractor bouncerCallbackInteractor,
            @Named(DreamOverlayModule.DREAM_OVERLAY_OPEN_ANIMATION_DURATION) int openAnimDuration,
            @Named(DreamOverlayModule.DREAM_OVERLAY_OPEN_ANIMATION_DELAY) int openAnimDelay) {
        super(containerView);
        mDreamOverlayContentView = contentView;
        mStatusBarViewController = statusBarViewController;
@@ -146,6 +151,7 @@ public class DreamOverlayContainerViewController extends ViewController<DreamOve
                R.dimen.dream_overlay_y_offset);
        final View view = mComplicationHostViewController.getView();

        mDreamOverlayContentView.setAlpha(0f);
        mDreamOverlayContentView.addView(view,
                new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                        ViewGroup.LayoutParams.MATCH_PARENT));
@@ -155,6 +161,8 @@ public class DreamOverlayContainerViewController extends ViewController<DreamOve
        mBurnInProtectionUpdateInterval = burnInProtectionUpdateInterval;
        mMillisUntilFullJitter = millisUntilFullJitter;
        mBouncerCallbackInteractor = bouncerCallbackInteractor;
        mOpenAnimationDuration = openAnimDuration;
        mOpenAnimationDelay = openAnimDelay;
    }

    @Override
@@ -172,6 +180,11 @@ public class DreamOverlayContainerViewController extends ViewController<DreamOve
            bouncer.addBouncerExpansionCallback(mBouncerExpansionCallback);
        }
        mBouncerCallbackInteractor.addBouncerExpansionCallback(mBouncerExpansionCallback);

        mDreamOverlayContentView.animate()
                .alpha(1f)
                .setStartDelay(mOpenAnimationDelay)
                .setDuration(mOpenAnimationDuration);
    }

    @Override
+17 −1
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import com.android.systemui.R;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dreams.DreamOverlayStatusBarItemsProvider.StatusBarItem;
import com.android.systemui.dreams.dagger.DreamOverlayComponent;
import com.android.systemui.dreams.dagger.DreamOverlayModule;
import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController;
import com.android.systemui.statusbar.policy.NextAlarmController;
import com.android.systemui.statusbar.policy.ZenModeController;
@@ -58,6 +59,7 @@ import java.util.concurrent.Executor;
import java.util.stream.Collectors;

import javax.inject.Inject;
import javax.inject.Named;

/**
 * View controller for {@link DreamOverlayStatusBarView}.
@@ -83,6 +85,9 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve

    private boolean mIsAttached;

    private final int mOpenAnimationDuration;
    private final int mOpenAnimationDelay;

    private final NetworkRequest mNetworkRequest = new NetworkRequest.Builder()
            .clearCapabilities()
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build();
@@ -152,7 +157,9 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
            ZenModeController zenModeController,
            StatusBarWindowStateController statusBarWindowStateController,
            DreamOverlayStatusBarItemsProvider statusBarItemsProvider,
            DreamOverlayStateController dreamOverlayStateController) {
            DreamOverlayStateController dreamOverlayStateController,
            @Named(DreamOverlayModule.DREAM_OVERLAY_OPEN_ANIMATION_DURATION) int openAnimDuration,
            @Named(DreamOverlayModule.DREAM_OVERLAY_OPEN_ANIMATION_DELAY) int openAnimDelay) {
        super(view);
        mResources = resources;
        mMainExecutor = mainExecutor;
@@ -167,6 +174,10 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
        mStatusBarItemsProvider = statusBarItemsProvider;
        mZenModeController = zenModeController;
        mDreamOverlayStateController = dreamOverlayStateController;
        mOpenAnimationDuration = openAnimDuration;
        mOpenAnimationDelay = openAnimDelay;

        mView.setAlpha(0f);

        // Register to receive show/hide updates for the system status bar. Our custom status bar
        // needs to hide when the system status bar is showing to ovoid overlapping status bars.
@@ -198,6 +209,11 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
        updateLowLightState();

        mTouchInsetSession.addViewToTracking(mView);

        mView.animate()
                .alpha(1f)
                .setStartDelay(mOpenAnimationDelay)
                .setDuration(mOpenAnimationDuration);
    }

    @Override
+24 −0
Original line number Diff line number Diff line
@@ -47,6 +47,8 @@ public abstract class DreamOverlayModule {
    public static final String BURN_IN_PROTECTION_UPDATE_INTERVAL =
            "burn_in_protection_update_interval";
    public static final String MILLIS_UNTIL_FULL_JITTER = "millis_until_full_jitter";
    public static final String DREAM_OVERLAY_OPEN_ANIMATION_DURATION = "over_open_anim_duration";
    public static final String DREAM_OVERLAY_OPEN_ANIMATION_DELAY = "over_open_anim_delay";

    /** */
    @Provides
@@ -114,6 +116,28 @@ public abstract class DreamOverlayModule {
        return resources.getInteger(R.integer.config_dreamOverlayMillisUntilFullJitter);
    }

    /**
     * The duration in milliseconds of the dream overlay open animation.
     */
    @Provides
    @Named(DREAM_OVERLAY_OPEN_ANIMATION_DURATION)
    static int providesOverlayOpenAnimationDuration(@Main Resources resources) {
        return resources.getInteger(R.integer.complicationFadeInMs);
    }

    /**
     * The delay in milliseconds before dream overlay starts animating in.
     *
     * We use the dream open animation duration here so overlay starts animating after dream content
     * has fully animated in.
     */
    @Provides
    @Named(DREAM_OVERLAY_OPEN_ANIMATION_DELAY)
    static int providesOverlayOpenAnimationDelay(@Main Resources resources) {
        return resources.getInteger(
                com.android.internal.R.integer.config_dreamOpenAnimationDuration);
    }

    @Provides
    @DreamOverlayComponent.DreamOverlayScope
    static LifecycleOwner providesLifecycleOwner(Lazy<LifecycleRegistry> lifecycleRegistryLazy) {
+12 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.dreams;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@@ -28,6 +29,7 @@ import android.content.res.Resources;
import android.os.Handler;
import android.testing.AndroidTestingRunner;
import android.view.ViewGroup;
import android.view.ViewPropertyAnimator;
import android.view.ViewRootImpl;
import android.view.ViewTreeObserver;

@@ -92,6 +94,9 @@ public class DreamOverlayContainerViewControllerTest extends SysuiTestCase {
    @Mock
    BouncerCallbackInteractor mBouncerCallbackInteractor;

    @Mock
    ViewPropertyAnimator mViewPropertyAnimator;

    DreamOverlayContainerViewController mController;

    @Before
@@ -100,8 +105,12 @@ public class DreamOverlayContainerViewControllerTest extends SysuiTestCase {

        when(mDreamOverlayContainerView.getResources()).thenReturn(mResources);
        when(mDreamOverlayContainerView.getViewTreeObserver()).thenReturn(mViewTreeObserver);
        when(mDreamOverlayContainerView.animate()).thenReturn(mViewPropertyAnimator);
        when(mStatusBarKeyguardViewManager.getBouncer()).thenReturn(mBouncer);
        when(mDreamOverlayContainerView.getViewRootImpl()).thenReturn(mViewRoot);
        when(mViewPropertyAnimator.alpha(anyFloat())).thenReturn(mViewPropertyAnimator);
        when(mViewPropertyAnimator.setStartDelay(anyLong())).thenReturn(mViewPropertyAnimator);
        when(mViewPropertyAnimator.setDuration(anyLong())).thenReturn(mViewPropertyAnimator);

        mController = new DreamOverlayContainerViewController(
                mDreamOverlayContainerView,
@@ -115,7 +124,9 @@ public class DreamOverlayContainerViewControllerTest extends SysuiTestCase {
                MAX_BURN_IN_OFFSET,
                BURN_IN_PROTECTION_UPDATE_INTERVAL,
                MILLIS_UNTIL_FULL_JITTER,
                mBouncerCallbackInteractor);
                mBouncerCallbackInteractor,
                100 /*openAnimationDuration*/,
                100 /*openAnimationDelay*/);
    }

    @Test
+15 −2
Original line number Diff line number Diff line
@@ -20,7 +20,9 @@ import static android.app.StatusBarManager.WINDOW_STATE_HIDDEN;
import static android.app.StatusBarManager.WINDOW_STATE_SHOWING;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.never;
@@ -38,6 +40,7 @@ import android.net.NetworkRequest;
import android.provider.Settings;
import android.testing.AndroidTestingRunner;
import android.view.View;
import android.view.ViewPropertyAnimator;

import androidx.test.filters.SmallTest;

@@ -104,6 +107,8 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
    View mStatusBarItemView;
    @Mock
    DreamOverlayStateController mDreamOverlayStateController;
    @Mock
    ViewPropertyAnimator mViewPropertyAnimator;

    private final Executor mMainExecutor = Runnable::run;

@@ -115,6 +120,10 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {

        when(mResources.getString(R.string.dream_overlay_status_bar_notification_indicator))
                .thenReturn(NOTIFICATION_INDICATOR_FORMATTER_STRING);
        when(mView.animate()).thenReturn(mViewPropertyAnimator);
        when(mViewPropertyAnimator.alpha(anyFloat())).thenReturn(mViewPropertyAnimator);
        when(mViewPropertyAnimator.setStartDelay(anyLong())).thenReturn(mViewPropertyAnimator);
        when(mViewPropertyAnimator.setDuration(anyLong())).thenReturn(mViewPropertyAnimator);

        mController = new DreamOverlayStatusBarViewController(
                mView,
@@ -130,7 +139,9 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
                mZenModeController,
                mStatusBarWindowStateController,
                mDreamOverlayStatusBarItemsProvider,
                mDreamOverlayStateController);
                mDreamOverlayStateController,
                100 /*openAnimationDuration*/,
                100 /*openAnimationDelay*/);
    }

    @Test
@@ -272,7 +283,9 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
                mZenModeController,
                mStatusBarWindowStateController,
                mDreamOverlayStatusBarItemsProvider,
                mDreamOverlayStateController);
                mDreamOverlayStateController,
                100 /*openAnimationDuration*/,
                100 /*openAnimationDelay*/);
        controller.onViewAttached();
        verify(mView, never()).showIcon(
                eq(DreamOverlayStatusBarView.STATUS_ICON_NOTIFICATIONS), eq(true), any());