Merge "Fixing notifications background in split shade mode" into sc-dev am: d319fb0081
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14389531 Change-Id: I150abb99d3d4b54813c01fc1c27388e05c60d37c
This commit is contained in:
@@ -163,7 +163,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
private final float mDefaultScrimAlpha;
|
private final float mDefaultScrimAlpha;
|
||||||
|
|
||||||
// Assuming the shade is expanded during initialization
|
// Assuming the shade is expanded during initialization
|
||||||
private float mExpansionFraction = 1f;
|
private float mPanelExpansion = 1f;
|
||||||
private float mQsExpansion;
|
private float mQsExpansion;
|
||||||
private boolean mQsBottomVisible;
|
private boolean mQsBottomVisible;
|
||||||
|
|
||||||
@@ -487,8 +487,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
if (isNaN(fraction)) {
|
if (isNaN(fraction)) {
|
||||||
throw new IllegalArgumentException("Fraction should not be NaN");
|
throw new IllegalArgumentException("Fraction should not be NaN");
|
||||||
}
|
}
|
||||||
if (mExpansionFraction != fraction) {
|
if (mPanelExpansion != fraction) {
|
||||||
mExpansionFraction = fraction;
|
mPanelExpansion = fraction;
|
||||||
|
|
||||||
boolean relevantState = (mState == ScrimState.UNLOCKED
|
boolean relevantState = (mState == ScrimState.UNLOCKED
|
||||||
|| mState == ScrimState.KEYGUARD
|
|| mState == ScrimState.KEYGUARD
|
||||||
@@ -641,7 +641,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
mBehindTint = Color.BLACK;
|
mBehindTint = Color.BLACK;
|
||||||
} else {
|
} else {
|
||||||
mBehindAlpha = backAlpha;
|
mBehindAlpha = backAlpha;
|
||||||
mNotificationsAlpha = Math.max(1.0f - getInterpolatedFraction(), mQsExpansion);
|
if (mState == ScrimState.SHADE_LOCKED) {
|
||||||
|
// going from KEYGUARD to SHADE_LOCKED state
|
||||||
|
mNotificationsAlpha = getInterpolatedFraction();
|
||||||
|
} else {
|
||||||
|
mNotificationsAlpha = Math.max(1.0f - getInterpolatedFraction(), mQsExpansion);
|
||||||
|
}
|
||||||
mBehindTint = backTint;
|
mBehindTint = backTint;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -805,7 +810,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
}
|
}
|
||||||
|
|
||||||
private float getInterpolatedFraction() {
|
private float getInterpolatedFraction() {
|
||||||
float frac = mExpansionFraction;
|
float frac = mPanelExpansion;
|
||||||
// let's start this 20% of the way down the screen
|
// let's start this 20% of the way down the screen
|
||||||
frac = frac * 1.2f - 0.2f;
|
frac = frac * 1.2f - 0.2f;
|
||||||
if (frac <= 0) {
|
if (frac <= 0) {
|
||||||
@@ -1165,7 +1170,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
pw.print(" mDefaultScrimAlpha=");
|
pw.print(" mDefaultScrimAlpha=");
|
||||||
pw.println(mDefaultScrimAlpha);
|
pw.println(mDefaultScrimAlpha);
|
||||||
pw.print(" mExpansionFraction=");
|
pw.print(" mExpansionFraction=");
|
||||||
pw.println(mExpansionFraction);
|
pw.println(mPanelExpansion);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setWallpaperSupportsAmbientMode(boolean wallpaperSupportsAmbientMode) {
|
public void setWallpaperSupportsAmbientMode(boolean wallpaperSupportsAmbientMode) {
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ 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 org.junit.Assert.assertEquals;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyFloat;
|
import static org.mockito.ArgumentMatchers.anyFloat;
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
@@ -165,7 +166,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
endAnimation(mScrimInFront);
|
endAnimation(mScrimInFront);
|
||||||
endAnimation(mScrimForBubble);
|
endAnimation(mScrimForBubble);
|
||||||
|
|
||||||
Assert.assertEquals("Animators did not finish",
|
assertEquals("Animators did not finish",
|
||||||
mAnimatorListener.getNumStarts(), mAnimatorListener.getNumEnds());
|
mAnimatorListener.getNumStarts(), mAnimatorListener.getNumEnds());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -422,7 +423,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
mScrimController.transitionTo(ScrimState.AOD);
|
mScrimController.transitionTo(ScrimState.AOD);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
mScrimController.setAodFrontScrimAlpha(0.3f);
|
mScrimController.setAodFrontScrimAlpha(0.3f);
|
||||||
Assert.assertEquals(ScrimState.AOD.getFrontAlpha(), mScrimInFront.getViewAlpha(), 0.001f);
|
assertEquals(ScrimState.AOD.getFrontAlpha(), mScrimInFront.getViewAlpha(), 0.001f);
|
||||||
Assert.assertNotEquals(0.3f, mScrimInFront.getViewAlpha(), 0.001f);
|
Assert.assertNotEquals(0.3f, mScrimInFront.getViewAlpha(), 0.001f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -601,13 +602,13 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
));
|
));
|
||||||
|
|
||||||
// Front scrim should be transparent
|
// Front scrim should be transparent
|
||||||
Assert.assertEquals(ScrimController.TRANSPARENT,
|
assertEquals(ScrimController.TRANSPARENT,
|
||||||
mScrimInFront.getViewAlpha(), 0.0f);
|
mScrimInFront.getViewAlpha(), 0.0f);
|
||||||
// Back scrim should be visible
|
// Back scrim should be visible
|
||||||
Assert.assertEquals(ScrimController.BUSY_SCRIM_ALPHA,
|
assertEquals(ScrimController.BUSY_SCRIM_ALPHA,
|
||||||
mScrimBehind.getViewAlpha(), 0.0f);
|
mScrimBehind.getViewAlpha(), 0.0f);
|
||||||
// Bubble scrim should be visible
|
// Bubble scrim should be visible
|
||||||
Assert.assertEquals(ScrimController.BUBBLE_SCRIM_ALPHA,
|
assertEquals(ScrimController.BUBBLE_SCRIM_ALPHA,
|
||||||
mScrimForBubble.getViewAlpha(), 0.0f);
|
mScrimForBubble.getViewAlpha(), 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -615,15 +616,15 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
public void scrimStateCallback() {
|
public void scrimStateCallback() {
|
||||||
mScrimController.transitionTo(ScrimState.UNLOCKED);
|
mScrimController.transitionTo(ScrimState.UNLOCKED);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
Assert.assertEquals(mScrimState, ScrimState.UNLOCKED);
|
assertEquals(mScrimState, ScrimState.UNLOCKED);
|
||||||
|
|
||||||
mScrimController.transitionTo(ScrimState.BOUNCER);
|
mScrimController.transitionTo(ScrimState.BOUNCER);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
Assert.assertEquals(mScrimState, ScrimState.BOUNCER);
|
assertEquals(mScrimState, ScrimState.BOUNCER);
|
||||||
|
|
||||||
mScrimController.transitionTo(ScrimState.BOUNCER_SCRIMMED);
|
mScrimController.transitionTo(ScrimState.BOUNCER_SCRIMMED);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
Assert.assertEquals(mScrimState, ScrimState.BOUNCER_SCRIMMED);
|
assertEquals(mScrimState, ScrimState.BOUNCER_SCRIMMED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -638,13 +639,13 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
mScrimController.setPanelExpansion(1.0f);
|
mScrimController.setPanelExpansion(1.0f);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
|
|
||||||
Assert.assertEquals("Scrim alpha should change after setPanelExpansion",
|
assertEquals("Scrim alpha should change after setPanelExpansion",
|
||||||
mScrimBehindAlpha, mScrimBehind.getViewAlpha(), 0.01f);
|
mScrimBehindAlpha, mScrimBehind.getViewAlpha(), 0.01f);
|
||||||
|
|
||||||
mScrimController.setPanelExpansion(0f);
|
mScrimController.setPanelExpansion(0f);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
|
|
||||||
Assert.assertEquals("Scrim alpha should change after setPanelExpansion",
|
assertEquals("Scrim alpha should change after setPanelExpansion",
|
||||||
mScrimBehindAlpha, mScrimBehind.getViewAlpha(), 0.01f);
|
mScrimBehindAlpha, mScrimBehind.getViewAlpha(), 0.01f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -698,7 +699,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
mScrimController.setExpansionAffectsAlpha(false);
|
mScrimController.setExpansionAffectsAlpha(false);
|
||||||
mScrimController.setPanelExpansion(0.8f);
|
mScrimController.setPanelExpansion(0.8f);
|
||||||
verifyZeroInteractions(mScrimBehind);
|
verifyZeroInteractions(mScrimBehind);
|
||||||
Assert.assertEquals("Scrim opacity shouldn't change when setExpansionAffectsAlpha "
|
assertEquals("Scrim opacity shouldn't change when setExpansionAffectsAlpha "
|
||||||
+ "is false", scrimAlpha, mScrimBehind.getViewAlpha(), 0.01f);
|
+ "is false", scrimAlpha, mScrimBehind.getViewAlpha(), 0.01f);
|
||||||
|
|
||||||
mScrimController.setExpansionAffectsAlpha(true);
|
mScrimController.setExpansionAffectsAlpha(true);
|
||||||
@@ -801,9 +802,9 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
Assert.assertEquals("onStart called in wrong order", 1, callOrder[0]);
|
assertEquals("onStart called in wrong order", 1, callOrder[0]);
|
||||||
Assert.assertEquals("onDisplayBlanked called in wrong order", 2, callOrder[1]);
|
assertEquals("onDisplayBlanked called in wrong order", 2, callOrder[1]);
|
||||||
Assert.assertEquals("onFinished called in wrong order", 3, callOrder[2]);
|
assertEquals("onFinished called in wrong order", 3, callOrder[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -911,7 +912,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
mScrimController.transitionTo(ScrimState.UNLOCKED);
|
mScrimController.transitionTo(ScrimState.UNLOCKED);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
|
|
||||||
Assert.assertEquals("Scrim expansion opacity wasn't conserved when transitioning back",
|
assertEquals("Scrim expansion opacity wasn't conserved when transitioning back",
|
||||||
expandedAlpha, mScrimBehind.getViewAlpha(), 0.01f);
|
expandedAlpha, mScrimBehind.getViewAlpha(), 0.01f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -981,7 +982,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
}
|
}
|
||||||
mScrimController.transitionTo(state);
|
mScrimController.transitionTo(state);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
Assert.assertEquals("Should be clickable unless AOD or PULSING, was: " + state,
|
assertEquals("Should be clickable unless AOD or PULSING, was: " + state,
|
||||||
mScrimBehind.getViewAlpha() != 0 && !eatsTouches.contains(state),
|
mScrimBehind.getViewAlpha() != 0 && !eatsTouches.contains(state),
|
||||||
mScrimBehind.isClickable());
|
mScrimBehind.isClickable());
|
||||||
}
|
}
|
||||||
@@ -1035,9 +1036,9 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
mScrimController.setQsPosition(0, 300);
|
mScrimController.setQsPosition(0, 300);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
|
|
||||||
Assert.assertEquals("Behind scrim should be opaque",
|
assertEquals("Behind scrim should be opaque",
|
||||||
mScrimBehind.getViewAlpha(), 1, 0.0);
|
mScrimBehind.getViewAlpha(), 1, 0.0);
|
||||||
Assert.assertEquals("Notifications scrim should be opaque",
|
assertEquals("Notifications scrim should be opaque",
|
||||||
mNotificationsScrim.getViewAlpha(), 1, 0.0);
|
mNotificationsScrim.getViewAlpha(), 1, 0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1093,6 +1094,40 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
mNotificationsScrim, TRANSPARENT));
|
mNotificationsScrim, TRANSPARENT));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNotificationScrimVisible_afterOpeningShadeFromLockscreen() {
|
||||||
|
mScrimController.setPanelExpansion(1);
|
||||||
|
mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
|
||||||
|
finishAnimationsImmediately();
|
||||||
|
|
||||||
|
assertScrimAlpha(Map.of(
|
||||||
|
mScrimBehind, OPAQUE,
|
||||||
|
mNotificationsScrim, OPAQUE));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNotificationTransparency_followsPanelExpansionInShadeLockedState() {
|
||||||
|
mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
|
||||||
|
|
||||||
|
assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.8f, /* expansion */ 0.8f);
|
||||||
|
assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.2f, /* expansion */ 0.2f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNotificationTransparency_inKeyguardState() {
|
||||||
|
mScrimController.transitionTo(ScrimState.KEYGUARD);
|
||||||
|
|
||||||
|
assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.2f, /* expansion */ 0.8f);
|
||||||
|
assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.8f, /* expansion */ 0.2f);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertAlphaAfterExpansion(ScrimView scrim, float expectedAlpha, float expansion) {
|
||||||
|
mScrimController.setPanelExpansion(expansion);
|
||||||
|
finishAnimationsImmediately();
|
||||||
|
// alpha is not changing linearly thus 0.2 of leeway when asserting
|
||||||
|
assertEquals(expectedAlpha, mNotificationsScrim.getViewAlpha(), 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
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));
|
||||||
}
|
}
|
||||||
@@ -1101,7 +1136,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
String message = "Tint test failed at state " + mScrimController.getState()
|
String message = "Tint test failed at state " + mScrimController.getState()
|
||||||
+ " with scrim: " + getScrimName(scrim) + " and tint: "
|
+ " with scrim: " + getScrimName(scrim) + " and tint: "
|
||||||
+ Integer.toHexString(scrim.getTint());
|
+ Integer.toHexString(scrim.getTint());
|
||||||
Assert.assertEquals(message, hasTint, scrim.getTint() != Color.TRANSPARENT);
|
assertEquals(message, hasTint, scrim.getTint() != Color.TRANSPARENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getScrimName(ScrimView scrim) {
|
private String getScrimName(ScrimView scrim) {
|
||||||
@@ -1146,13 +1181,13 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
} else {
|
} else {
|
||||||
visibility = TRANSPARENT;
|
visibility = TRANSPARENT;
|
||||||
}
|
}
|
||||||
Assert.assertEquals("Invalid visibility.",
|
assertEquals("Invalid visibility.",
|
||||||
visibility /* expected */,
|
visibility /* expected */,
|
||||||
mScrimVisibility);
|
mScrimVisibility);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertScrimAlpha(ScrimView scrim, int expectedAlpha) {
|
private void assertScrimAlpha(ScrimView scrim, int expectedAlpha) {
|
||||||
Assert.assertEquals("Unexpected " + getScrimName(scrim) + " scrim alpha: "
|
assertEquals("Unexpected " + getScrimName(scrim) + " scrim alpha: "
|
||||||
+ scrim.getViewAlpha(),
|
+ scrim.getViewAlpha(),
|
||||||
expectedAlpha != TRANSPARENT /* expected */,
|
expectedAlpha != TRANSPARENT /* expected */,
|
||||||
scrim.getViewAlpha() > TRANSPARENT /* actual */);
|
scrim.getViewAlpha() > TRANSPARENT /* actual */);
|
||||||
|
|||||||
Reference in New Issue
Block a user