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

This commit is contained in:
Darrell Shi
2022-10-21 20:56:02 +00:00
committed by Android (Google) Code Review
5 changed files with 82 additions and 5 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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) {

View File

@@ -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

View File

@@ -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());