Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +11 −6 Original line number Diff line number Diff line Loading @@ -163,7 +163,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump private final float mDefaultScrimAlpha; // Assuming the shade is expanded during initialization private float mExpansionFraction = 1f; private float mPanelExpansion = 1f; private float mQsExpansion; private boolean mQsBottomVisible; Loading Loading @@ -487,8 +487,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump if (isNaN(fraction)) { throw new IllegalArgumentException("Fraction should not be NaN"); } if (mExpansionFraction != fraction) { mExpansionFraction = fraction; if (mPanelExpansion != fraction) { mPanelExpansion = fraction; boolean relevantState = (mState == ScrimState.UNLOCKED || mState == ScrimState.KEYGUARD Loading Loading @@ -641,7 +641,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump mBehindTint = Color.BLACK; } else { mBehindAlpha = backAlpha; if (mState == ScrimState.SHADE_LOCKED) { // going from KEYGUARD to SHADE_LOCKED state mNotificationsAlpha = getInterpolatedFraction(); } else { mNotificationsAlpha = Math.max(1.0f - getInterpolatedFraction(), mQsExpansion); } mBehindTint = backTint; } } Loading Loading @@ -805,7 +810,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump } private float getInterpolatedFraction() { float frac = mExpansionFraction; float frac = mPanelExpansion; // let's start this 20% of the way down the screen frac = frac * 1.2f - 0.2f; if (frac <= 0) { Loading Loading @@ -1165,7 +1170,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump pw.print(" mDefaultScrimAlpha="); pw.println(mDefaultScrimAlpha); pw.print(" mExpansionFraction="); pw.println(mExpansionFraction); pw.println(mPanelExpansion); } public void setWallpaperSupportsAmbientMode(boolean wallpaperSupportsAmbientMode) { Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java +56 −21 Original line number Diff line number Diff line Loading @@ -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.TRANSPARENT; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyInt; Loading Loading @@ -165,7 +166,7 @@ public class ScrimControllerTest extends SysuiTestCase { endAnimation(mScrimInFront); endAnimation(mScrimForBubble); Assert.assertEquals("Animators did not finish", assertEquals("Animators did not finish", mAnimatorListener.getNumStarts(), mAnimatorListener.getNumEnds()); } Loading Loading @@ -422,7 +423,7 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.transitionTo(ScrimState.AOD); finishAnimationsImmediately(); 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); } Loading Loading @@ -601,13 +602,13 @@ public class ScrimControllerTest extends SysuiTestCase { )); // Front scrim should be transparent Assert.assertEquals(ScrimController.TRANSPARENT, assertEquals(ScrimController.TRANSPARENT, mScrimInFront.getViewAlpha(), 0.0f); // Back scrim should be visible Assert.assertEquals(ScrimController.BUSY_SCRIM_ALPHA, assertEquals(ScrimController.BUSY_SCRIM_ALPHA, mScrimBehind.getViewAlpha(), 0.0f); // Bubble scrim should be visible Assert.assertEquals(ScrimController.BUBBLE_SCRIM_ALPHA, assertEquals(ScrimController.BUBBLE_SCRIM_ALPHA, mScrimForBubble.getViewAlpha(), 0.0f); } Loading @@ -615,15 +616,15 @@ public class ScrimControllerTest extends SysuiTestCase { public void scrimStateCallback() { mScrimController.transitionTo(ScrimState.UNLOCKED); finishAnimationsImmediately(); Assert.assertEquals(mScrimState, ScrimState.UNLOCKED); assertEquals(mScrimState, ScrimState.UNLOCKED); mScrimController.transitionTo(ScrimState.BOUNCER); finishAnimationsImmediately(); Assert.assertEquals(mScrimState, ScrimState.BOUNCER); assertEquals(mScrimState, ScrimState.BOUNCER); mScrimController.transitionTo(ScrimState.BOUNCER_SCRIMMED); finishAnimationsImmediately(); Assert.assertEquals(mScrimState, ScrimState.BOUNCER_SCRIMMED); assertEquals(mScrimState, ScrimState.BOUNCER_SCRIMMED); } @Test Loading @@ -638,13 +639,13 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.setPanelExpansion(1.0f); finishAnimationsImmediately(); Assert.assertEquals("Scrim alpha should change after setPanelExpansion", assertEquals("Scrim alpha should change after setPanelExpansion", mScrimBehindAlpha, mScrimBehind.getViewAlpha(), 0.01f); mScrimController.setPanelExpansion(0f); finishAnimationsImmediately(); Assert.assertEquals("Scrim alpha should change after setPanelExpansion", assertEquals("Scrim alpha should change after setPanelExpansion", mScrimBehindAlpha, mScrimBehind.getViewAlpha(), 0.01f); } Loading Loading @@ -698,7 +699,7 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.setExpansionAffectsAlpha(false); mScrimController.setPanelExpansion(0.8f); 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); mScrimController.setExpansionAffectsAlpha(true); Loading Loading @@ -801,9 +802,9 @@ public class ScrimControllerTest extends SysuiTestCase { } }); finishAnimationsImmediately(); Assert.assertEquals("onStart called in wrong order", 1, callOrder[0]); Assert.assertEquals("onDisplayBlanked called in wrong order", 2, callOrder[1]); Assert.assertEquals("onFinished called in wrong order", 3, callOrder[2]); assertEquals("onStart called in wrong order", 1, callOrder[0]); assertEquals("onDisplayBlanked called in wrong order", 2, callOrder[1]); assertEquals("onFinished called in wrong order", 3, callOrder[2]); } @Test Loading Loading @@ -911,7 +912,7 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.transitionTo(ScrimState.UNLOCKED); 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); } Loading Loading @@ -981,7 +982,7 @@ public class ScrimControllerTest extends SysuiTestCase { } mScrimController.transitionTo(state); 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.isClickable()); } Loading Loading @@ -1035,9 +1036,9 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.setQsPosition(0, 300); finishAnimationsImmediately(); Assert.assertEquals("Behind scrim should be opaque", assertEquals("Behind scrim should be opaque", mScrimBehind.getViewAlpha(), 1, 0.0); Assert.assertEquals("Notifications scrim should be opaque", assertEquals("Notifications scrim should be opaque", mNotificationsScrim.getViewAlpha(), 1, 0.0); } Loading Loading @@ -1093,6 +1094,40 @@ public class ScrimControllerTest extends SysuiTestCase { 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) { scrimToTint.forEach((scrim, hasTint) -> assertScrimTint(scrim, hasTint)); } Loading @@ -1101,7 +1136,7 @@ public class ScrimControllerTest extends SysuiTestCase { String message = "Tint test failed at state " + mScrimController.getState() + " with scrim: " + getScrimName(scrim) + " and tint: " + Integer.toHexString(scrim.getTint()); Assert.assertEquals(message, hasTint, scrim.getTint() != Color.TRANSPARENT); assertEquals(message, hasTint, scrim.getTint() != Color.TRANSPARENT); } private String getScrimName(ScrimView scrim) { Loading Loading @@ -1146,13 +1181,13 @@ public class ScrimControllerTest extends SysuiTestCase { } else { visibility = TRANSPARENT; } Assert.assertEquals("Invalid visibility.", assertEquals("Invalid visibility.", visibility /* expected */, mScrimVisibility); } private void assertScrimAlpha(ScrimView scrim, int expectedAlpha) { Assert.assertEquals("Unexpected " + getScrimName(scrim) + " scrim alpha: " assertEquals("Unexpected " + getScrimName(scrim) + " scrim alpha: " + scrim.getViewAlpha(), expectedAlpha != TRANSPARENT /* expected */, scrim.getViewAlpha() > TRANSPARENT /* actual */); Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +11 −6 Original line number Diff line number Diff line Loading @@ -163,7 +163,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump private final float mDefaultScrimAlpha; // Assuming the shade is expanded during initialization private float mExpansionFraction = 1f; private float mPanelExpansion = 1f; private float mQsExpansion; private boolean mQsBottomVisible; Loading Loading @@ -487,8 +487,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump if (isNaN(fraction)) { throw new IllegalArgumentException("Fraction should not be NaN"); } if (mExpansionFraction != fraction) { mExpansionFraction = fraction; if (mPanelExpansion != fraction) { mPanelExpansion = fraction; boolean relevantState = (mState == ScrimState.UNLOCKED || mState == ScrimState.KEYGUARD Loading Loading @@ -641,7 +641,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump mBehindTint = Color.BLACK; } else { mBehindAlpha = backAlpha; if (mState == ScrimState.SHADE_LOCKED) { // going from KEYGUARD to SHADE_LOCKED state mNotificationsAlpha = getInterpolatedFraction(); } else { mNotificationsAlpha = Math.max(1.0f - getInterpolatedFraction(), mQsExpansion); } mBehindTint = backTint; } } Loading Loading @@ -805,7 +810,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump } private float getInterpolatedFraction() { float frac = mExpansionFraction; float frac = mPanelExpansion; // let's start this 20% of the way down the screen frac = frac * 1.2f - 0.2f; if (frac <= 0) { Loading Loading @@ -1165,7 +1170,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump pw.print(" mDefaultScrimAlpha="); pw.println(mDefaultScrimAlpha); pw.print(" mExpansionFraction="); pw.println(mExpansionFraction); pw.println(mPanelExpansion); } public void setWallpaperSupportsAmbientMode(boolean wallpaperSupportsAmbientMode) { Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java +56 −21 Original line number Diff line number Diff line Loading @@ -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.TRANSPARENT; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyInt; Loading Loading @@ -165,7 +166,7 @@ public class ScrimControllerTest extends SysuiTestCase { endAnimation(mScrimInFront); endAnimation(mScrimForBubble); Assert.assertEquals("Animators did not finish", assertEquals("Animators did not finish", mAnimatorListener.getNumStarts(), mAnimatorListener.getNumEnds()); } Loading Loading @@ -422,7 +423,7 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.transitionTo(ScrimState.AOD); finishAnimationsImmediately(); 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); } Loading Loading @@ -601,13 +602,13 @@ public class ScrimControllerTest extends SysuiTestCase { )); // Front scrim should be transparent Assert.assertEquals(ScrimController.TRANSPARENT, assertEquals(ScrimController.TRANSPARENT, mScrimInFront.getViewAlpha(), 0.0f); // Back scrim should be visible Assert.assertEquals(ScrimController.BUSY_SCRIM_ALPHA, assertEquals(ScrimController.BUSY_SCRIM_ALPHA, mScrimBehind.getViewAlpha(), 0.0f); // Bubble scrim should be visible Assert.assertEquals(ScrimController.BUBBLE_SCRIM_ALPHA, assertEquals(ScrimController.BUBBLE_SCRIM_ALPHA, mScrimForBubble.getViewAlpha(), 0.0f); } Loading @@ -615,15 +616,15 @@ public class ScrimControllerTest extends SysuiTestCase { public void scrimStateCallback() { mScrimController.transitionTo(ScrimState.UNLOCKED); finishAnimationsImmediately(); Assert.assertEquals(mScrimState, ScrimState.UNLOCKED); assertEquals(mScrimState, ScrimState.UNLOCKED); mScrimController.transitionTo(ScrimState.BOUNCER); finishAnimationsImmediately(); Assert.assertEquals(mScrimState, ScrimState.BOUNCER); assertEquals(mScrimState, ScrimState.BOUNCER); mScrimController.transitionTo(ScrimState.BOUNCER_SCRIMMED); finishAnimationsImmediately(); Assert.assertEquals(mScrimState, ScrimState.BOUNCER_SCRIMMED); assertEquals(mScrimState, ScrimState.BOUNCER_SCRIMMED); } @Test Loading @@ -638,13 +639,13 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.setPanelExpansion(1.0f); finishAnimationsImmediately(); Assert.assertEquals("Scrim alpha should change after setPanelExpansion", assertEquals("Scrim alpha should change after setPanelExpansion", mScrimBehindAlpha, mScrimBehind.getViewAlpha(), 0.01f); mScrimController.setPanelExpansion(0f); finishAnimationsImmediately(); Assert.assertEquals("Scrim alpha should change after setPanelExpansion", assertEquals("Scrim alpha should change after setPanelExpansion", mScrimBehindAlpha, mScrimBehind.getViewAlpha(), 0.01f); } Loading Loading @@ -698,7 +699,7 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.setExpansionAffectsAlpha(false); mScrimController.setPanelExpansion(0.8f); 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); mScrimController.setExpansionAffectsAlpha(true); Loading Loading @@ -801,9 +802,9 @@ public class ScrimControllerTest extends SysuiTestCase { } }); finishAnimationsImmediately(); Assert.assertEquals("onStart called in wrong order", 1, callOrder[0]); Assert.assertEquals("onDisplayBlanked called in wrong order", 2, callOrder[1]); Assert.assertEquals("onFinished called in wrong order", 3, callOrder[2]); assertEquals("onStart called in wrong order", 1, callOrder[0]); assertEquals("onDisplayBlanked called in wrong order", 2, callOrder[1]); assertEquals("onFinished called in wrong order", 3, callOrder[2]); } @Test Loading Loading @@ -911,7 +912,7 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.transitionTo(ScrimState.UNLOCKED); 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); } Loading Loading @@ -981,7 +982,7 @@ public class ScrimControllerTest extends SysuiTestCase { } mScrimController.transitionTo(state); 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.isClickable()); } Loading Loading @@ -1035,9 +1036,9 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.setQsPosition(0, 300); finishAnimationsImmediately(); Assert.assertEquals("Behind scrim should be opaque", assertEquals("Behind scrim should be opaque", mScrimBehind.getViewAlpha(), 1, 0.0); Assert.assertEquals("Notifications scrim should be opaque", assertEquals("Notifications scrim should be opaque", mNotificationsScrim.getViewAlpha(), 1, 0.0); } Loading Loading @@ -1093,6 +1094,40 @@ public class ScrimControllerTest extends SysuiTestCase { 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) { scrimToTint.forEach((scrim, hasTint) -> assertScrimTint(scrim, hasTint)); } Loading @@ -1101,7 +1136,7 @@ public class ScrimControllerTest extends SysuiTestCase { String message = "Tint test failed at state " + mScrimController.getState() + " with scrim: " + getScrimName(scrim) + " and tint: " + Integer.toHexString(scrim.getTint()); Assert.assertEquals(message, hasTint, scrim.getTint() != Color.TRANSPARENT); assertEquals(message, hasTint, scrim.getTint() != Color.TRANSPARENT); } private String getScrimName(ScrimView scrim) { Loading Loading @@ -1146,13 +1181,13 @@ public class ScrimControllerTest extends SysuiTestCase { } else { visibility = TRANSPARENT; } Assert.assertEquals("Invalid visibility.", assertEquals("Invalid visibility.", visibility /* expected */, mScrimVisibility); } private void assertScrimAlpha(ScrimView scrim, int expectedAlpha) { Assert.assertEquals("Unexpected " + getScrimName(scrim) + " scrim alpha: " assertEquals("Unexpected " + getScrimName(scrim) + " scrim alpha: " + scrim.getViewAlpha(), expectedAlpha != TRANSPARENT /* expected */, scrim.getViewAlpha() > TRANSPARENT /* actual */); Loading