Add dream overlay open animation.
After dream content has fully animated in, dream overlay starts fading in in a duration of 500ms. Bug: 222507937 Test: start dream on device and observe overlay animate in correctly Change-Id: Ic648b42c5cb23b6e8e40d32be4185a399d3d44f8
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user