Merge "Fixing tiles on lockscreen and scrims transitions with QS expanded" into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
3950e281b0
@@ -4712,6 +4712,11 @@ public class NotificationPanelViewController extends PanelViewController {
|
|||||||
duration = StackStateAnimator.ANIMATION_DURATION_STANDARD;
|
duration = StackStateAnimator.ANIMATION_DURATION_STANDARD;
|
||||||
}
|
}
|
||||||
mKeyguardStatusBarViewController.animateKeyguardStatusBarOut(startDelay, duration);
|
mKeyguardStatusBarViewController.animateKeyguardStatusBarOut(startDelay, duration);
|
||||||
|
if (mSplitShadeEnabled) {
|
||||||
|
// temporary workaround for QS height not being updated during lockscreen to
|
||||||
|
// shade transition
|
||||||
|
setQsExpanded(true);
|
||||||
|
}
|
||||||
updateQSMinHeight();
|
updateQSMinHeight();
|
||||||
} else if (oldState == StatusBarState.SHADE_LOCKED
|
} else if (oldState == StatusBarState.SHADE_LOCKED
|
||||||
&& statusBarState == KEYGUARD) {
|
&& statusBarState == KEYGUARD) {
|
||||||
|
|||||||
@@ -906,9 +906,19 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
}
|
}
|
||||||
if (mQsExpansion > 0) {
|
if (mQsExpansion > 0) {
|
||||||
behindAlpha = MathUtils.lerp(behindAlpha, mDefaultScrimAlpha, mQsExpansion);
|
behindAlpha = MathUtils.lerp(behindAlpha, mDefaultScrimAlpha, mQsExpansion);
|
||||||
|
float tintProgress = mQsExpansion;
|
||||||
|
if (mStatusBarKeyguardViewManager.isBouncerInTransit()) {
|
||||||
|
// this is case of - on lockscreen - going from expanded QS to bouncer.
|
||||||
|
// Because mQsExpansion is already interpolated and transition between tints
|
||||||
|
// is too slow, we want to speed it up and make it more aligned to bouncer
|
||||||
|
// showing up progress. This issue is visible on large screens, both portrait and
|
||||||
|
// split shade because then transition is between very different tints
|
||||||
|
tintProgress = BouncerPanelExpansionCalculator
|
||||||
|
.showBouncerProgress(mPanelExpansionFraction);
|
||||||
|
}
|
||||||
int stateTint = mClipsQsScrim ? ScrimState.SHADE_LOCKED.getNotifTint()
|
int stateTint = mClipsQsScrim ? ScrimState.SHADE_LOCKED.getNotifTint()
|
||||||
: ScrimState.SHADE_LOCKED.getBehindTint();
|
: ScrimState.SHADE_LOCKED.getBehindTint();
|
||||||
behindTint = ColorUtils.blendARGB(behindTint, stateTint, mQsExpansion);
|
behindTint = ColorUtils.blendARGB(behindTint, stateTint, tintProgress);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the keyguard is going away, we should not be opaque.
|
// If the keyguard is going away, we should not be opaque.
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ package com.android.systemui.statusbar.phone;
|
|||||||
import static com.android.systemui.statusbar.phone.ScrimController.OPAQUE;
|
import static com.android.systemui.statusbar.phone.ScrimController.OPAQUE;
|
||||||
import static com.android.systemui.statusbar.phone.ScrimController.SEMI_TRANSPARENT;
|
import static com.android.systemui.statusbar.phone.ScrimController.SEMI_TRANSPARENT;
|
||||||
import static com.android.systemui.statusbar.phone.ScrimController.TRANSPARENT;
|
import static com.android.systemui.statusbar.phone.ScrimController.TRANSPARENT;
|
||||||
|
import static com.android.systemui.statusbar.phone.ScrimState.BOUNCER;
|
||||||
|
import static com.android.systemui.statusbar.phone.ScrimState.SHADE_LOCKED;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
@@ -275,7 +277,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void transitionToShadeLocked() {
|
public void transitionToShadeLocked() {
|
||||||
mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
|
mScrimController.transitionTo(SHADE_LOCKED);
|
||||||
mScrimController.setQsPosition(1f, 0);
|
mScrimController.setQsPosition(1f, 0);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
|
|
||||||
@@ -293,7 +295,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
@Test
|
@Test
|
||||||
public void transitionToShadeLocked_clippingQs() {
|
public void transitionToShadeLocked_clippingQs() {
|
||||||
mScrimController.setClipsQsScrim(true);
|
mScrimController.setClipsQsScrim(true);
|
||||||
mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
|
mScrimController.transitionTo(SHADE_LOCKED);
|
||||||
mScrimController.setQsPosition(1f, 0);
|
mScrimController.setQsPosition(1f, 0);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
|
|
||||||
@@ -542,7 +544,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void transitionToKeyguardBouncer() {
|
public void transitionToKeyguardBouncer() {
|
||||||
mScrimController.transitionTo(ScrimState.BOUNCER);
|
mScrimController.transitionTo(BOUNCER);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
// Front scrim should be transparent
|
// Front scrim should be transparent
|
||||||
// Back scrim should be visible without tint
|
// Back scrim should be visible without tint
|
||||||
@@ -561,7 +563,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
@Test
|
@Test
|
||||||
public void transitionToKeyguardBouncer_clippingQs() {
|
public void transitionToKeyguardBouncer_clippingQs() {
|
||||||
mScrimController.setClipsQsScrim(true);
|
mScrimController.setClipsQsScrim(true);
|
||||||
mScrimController.transitionTo(ScrimState.BOUNCER);
|
mScrimController.transitionTo(BOUNCER);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
// Front scrim should be transparent
|
// Front scrim should be transparent
|
||||||
// Back scrim should be clipping QS
|
// Back scrim should be clipping QS
|
||||||
@@ -581,7 +583,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
@Test
|
@Test
|
||||||
public void disableClipQsScrimWithoutStateTransition_updatesTintAndAlpha() {
|
public void disableClipQsScrimWithoutStateTransition_updatesTintAndAlpha() {
|
||||||
mScrimController.setClipsQsScrim(true);
|
mScrimController.setClipsQsScrim(true);
|
||||||
mScrimController.transitionTo(ScrimState.BOUNCER);
|
mScrimController.transitionTo(BOUNCER);
|
||||||
|
|
||||||
mScrimController.setClipsQsScrim(false);
|
mScrimController.setClipsQsScrim(false);
|
||||||
|
|
||||||
@@ -602,7 +604,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
@Test
|
@Test
|
||||||
public void enableClipQsScrimWithoutStateTransition_updatesTintAndAlpha() {
|
public void enableClipQsScrimWithoutStateTransition_updatesTintAndAlpha() {
|
||||||
mScrimController.setClipsQsScrim(false);
|
mScrimController.setClipsQsScrim(false);
|
||||||
mScrimController.transitionTo(ScrimState.BOUNCER);
|
mScrimController.transitionTo(BOUNCER);
|
||||||
|
|
||||||
mScrimController.setClipsQsScrim(true);
|
mScrimController.setClipsQsScrim(true);
|
||||||
|
|
||||||
@@ -672,9 +674,9 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
assertEquals(mScrimState, ScrimState.UNLOCKED);
|
assertEquals(mScrimState, ScrimState.UNLOCKED);
|
||||||
|
|
||||||
mScrimController.transitionTo(ScrimState.BOUNCER);
|
mScrimController.transitionTo(BOUNCER);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
assertEquals(mScrimState, ScrimState.BOUNCER);
|
assertEquals(mScrimState, BOUNCER);
|
||||||
|
|
||||||
mScrimController.transitionTo(ScrimState.BOUNCER_SCRIMMED);
|
mScrimController.transitionTo(ScrimState.BOUNCER_SCRIMMED);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
@@ -1081,9 +1083,9 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
HashSet<ScrimState> lowPowerModeStates = new HashSet<>(Arrays.asList(
|
HashSet<ScrimState> lowPowerModeStates = new HashSet<>(Arrays.asList(
|
||||||
ScrimState.OFF, ScrimState.AOD, ScrimState.PULSING));
|
ScrimState.OFF, ScrimState.AOD, ScrimState.PULSING));
|
||||||
HashSet<ScrimState> regularStates = new HashSet<>(Arrays.asList(
|
HashSet<ScrimState> regularStates = new HashSet<>(Arrays.asList(
|
||||||
ScrimState.UNINITIALIZED, ScrimState.KEYGUARD, ScrimState.BOUNCER,
|
ScrimState.UNINITIALIZED, ScrimState.KEYGUARD, BOUNCER,
|
||||||
ScrimState.DREAMING, ScrimState.BOUNCER_SCRIMMED, ScrimState.BRIGHTNESS_MIRROR,
|
ScrimState.DREAMING, ScrimState.BOUNCER_SCRIMMED, ScrimState.BRIGHTNESS_MIRROR,
|
||||||
ScrimState.UNLOCKED, ScrimState.SHADE_LOCKED, ScrimState.AUTH_SCRIMMED,
|
ScrimState.UNLOCKED, SHADE_LOCKED, ScrimState.AUTH_SCRIMMED,
|
||||||
ScrimState.AUTH_SCRIMMED_SHADE));
|
ScrimState.AUTH_SCRIMMED_SHADE));
|
||||||
|
|
||||||
for (ScrimState state : ScrimState.values()) {
|
for (ScrimState state : ScrimState.values()) {
|
||||||
@@ -1228,7 +1230,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
@Test
|
@Test
|
||||||
public void testNotificationScrimVisible_afterOpeningShadeFromLockscreen() {
|
public void testNotificationScrimVisible_afterOpeningShadeFromLockscreen() {
|
||||||
mScrimController.setRawPanelExpansionFraction(1);
|
mScrimController.setRawPanelExpansionFraction(1);
|
||||||
mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
|
mScrimController.transitionTo(SHADE_LOCKED);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
|
|
||||||
assertScrimAlpha(Map.of(
|
assertScrimAlpha(Map.of(
|
||||||
@@ -1236,11 +1238,27 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
mNotificationsScrim, OPAQUE));
|
mNotificationsScrim, OPAQUE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void qsExpansion_BehindTint_shadeLocked_bouncerActive_usesBouncerProgress() {
|
||||||
|
when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(true);
|
||||||
|
// clipping doesn't change tested logic but allows to assert scrims more in line with
|
||||||
|
// their expected large screen behaviour
|
||||||
|
mScrimController.setClipsQsScrim(false);
|
||||||
|
mScrimController.transitionTo(SHADE_LOCKED);
|
||||||
|
|
||||||
|
mScrimController.setQsPosition(1f, 100 /* value doesn't matter */);
|
||||||
|
assertTintAfterExpansion(mScrimBehind, SHADE_LOCKED.getBehindTint(), /* expansion= */ 1f);
|
||||||
|
|
||||||
|
mScrimController.setQsPosition(0.8f, 100 /* value doesn't matter */);
|
||||||
|
// panel expansion of 0.6 means its fully transitioned with bouncer progress interpolation
|
||||||
|
assertTintAfterExpansion(mScrimBehind, BOUNCER.getBehindTint(), /* expansion= */ 0.6f);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void expansionNotificationAlpha_shadeLocked_bouncerActive_usesBouncerInterpolator() {
|
public void expansionNotificationAlpha_shadeLocked_bouncerActive_usesBouncerInterpolator() {
|
||||||
when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(true);
|
when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(true);
|
||||||
|
|
||||||
mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
|
mScrimController.transitionTo(SHADE_LOCKED);
|
||||||
|
|
||||||
float expansion = 0.8f;
|
float expansion = 0.8f;
|
||||||
float expectedAlpha =
|
float expectedAlpha =
|
||||||
@@ -1256,7 +1274,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
public void expansionNotificationAlpha_shadeLocked_bouncerNotActive_usesShadeInterpolator() {
|
public void expansionNotificationAlpha_shadeLocked_bouncerNotActive_usesShadeInterpolator() {
|
||||||
when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(false);
|
when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(false);
|
||||||
|
|
||||||
mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
|
mScrimController.transitionTo(SHADE_LOCKED);
|
||||||
|
|
||||||
float expansion = 0.8f;
|
float expansion = 0.8f;
|
||||||
float expectedAlpha = ShadeInterpolation.getNotificationScrimAlpha(expansion);
|
float expectedAlpha = ShadeInterpolation.getNotificationScrimAlpha(expansion);
|
||||||
@@ -1352,7 +1370,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNotificationTransparency_followsTransitionToFullShade() {
|
public void testNotificationTransparency_followsTransitionToFullShade() {
|
||||||
mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
|
mScrimController.transitionTo(SHADE_LOCKED);
|
||||||
mScrimController.setRawPanelExpansionFraction(1.0f);
|
mScrimController.setRawPanelExpansionFraction(1.0f);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
float shadeLockedAlpha = mNotificationsScrim.getViewAlpha();
|
float shadeLockedAlpha = mNotificationsScrim.getViewAlpha();
|
||||||
@@ -1379,7 +1397,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void notificationTransparency_followsNotificationScrimProgress() {
|
public void notificationTransparency_followsNotificationScrimProgress() {
|
||||||
mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
|
mScrimController.transitionTo(SHADE_LOCKED);
|
||||||
mScrimController.setRawPanelExpansionFraction(1.0f);
|
mScrimController.setRawPanelExpansionFraction(1.0f);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
mScrimController.transitionTo(ScrimState.KEYGUARD);
|
mScrimController.transitionTo(ScrimState.KEYGUARD);
|
||||||
@@ -1473,7 +1491,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
mScrimBehind, TRANSPARENT,
|
mScrimBehind, TRANSPARENT,
|
||||||
mNotificationsScrim, TRANSPARENT));
|
mNotificationsScrim, TRANSPARENT));
|
||||||
|
|
||||||
mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
|
mScrimController.transitionTo(SHADE_LOCKED);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
assertScrimAlpha(Map.of(
|
assertScrimAlpha(Map.of(
|
||||||
mScrimInFront, TRANSPARENT,
|
mScrimInFront, TRANSPARENT,
|
||||||
@@ -1504,6 +1522,15 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
assertEquals(expectedAlpha, scrim.getViewAlpha(), 0.2);
|
assertEquals(expectedAlpha, scrim.getViewAlpha(), 0.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void assertTintAfterExpansion(ScrimView scrim, int expectedTint, float expansion) {
|
||||||
|
String message = "Tint test failed with expected scrim tint: "
|
||||||
|
+ Integer.toHexString(expectedTint) + " and actual tint: "
|
||||||
|
+ Integer.toHexString(scrim.getTint()) + " for scrim: " + getScrimName(scrim);
|
||||||
|
mScrimController.setRawPanelExpansionFraction(expansion);
|
||||||
|
finishAnimationsImmediately();
|
||||||
|
assertEquals(message, expectedTint, scrim.getTint(), 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
private void assertScrimTinted(Map<ScrimView, Boolean> scrimToTint) {
|
private void assertScrimTinted(Map<ScrimView, Boolean> scrimToTint) {
|
||||||
scrimToTint.forEach((scrim, hasTint) -> assertScrimTint(scrim, hasTint));
|
scrimToTint.forEach((scrim, hasTint) -> assertScrimTint(scrim, hasTint));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user