diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index adde4d83a31ac..58488ef8ffd28 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -497,7 +497,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump return; } shiftNotificationsScrim(qsPanelBottomY); - updateNotificationsScrimAlpha(qsPanelBottomY); + updateNotificationsScrimAlpha(expansionFraction, qsPanelBottomY); if (mQsExpansion != expansionFraction) { mQsExpansion = expansionFraction; boolean relevantState = (mState == ScrimState.SHADE_LOCKED @@ -519,14 +519,14 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump } } - private void updateNotificationsScrimAlpha(int qsPanelBottomY) { + private void updateNotificationsScrimAlpha(float qsExpansion, int qsPanelBottomY) { float newAlpha = 0; if (qsPanelBottomY > 0) { float interpolator = 0; if (mState == ScrimState.UNLOCKED || mState == ScrimState.SHADE_LOCKED) { interpolator = getInterpolatedFraction(); } else { - interpolator = mQsExpansion; + interpolator = qsExpansion; } newAlpha = MathUtils.lerp(0, 1, interpolator); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java index 123e4ef446b93..8633eb466b6ce 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java @@ -70,6 +70,7 @@ import org.mockito.stubbing.Answer; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; +import java.util.Map; @RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper @@ -245,13 +246,14 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.transitionTo(ScrimState.KEYGUARD); finishAnimationsImmediately(); - assertScrimAlpha(TRANSPARENT /* front */, - SEMI_TRANSPARENT /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, SEMI_TRANSPARENT)); - assertScrimTint(true /* front */, - true /* behind */, - false /* bubble */); + assertScrimTinted(Map.of( + mScrimInFront, true, + mScrimBehind, true, + mScrimForBubble, false)); } @Test @@ -259,13 +261,15 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.transitionTo(ScrimState.SHADE_LOCKED); finishAnimationsImmediately(); - assertScrimAlpha(TRANSPARENT /* front */, - OPAQUE /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, OPAQUE)); - assertScrimTint(false /* front */, - true /* behind */, - false /* bubble */); + assertScrimTinted(Map.of( + mScrimInFront, false, + mScrimBehind, true, + mScrimForBubble, false + )); } @Test @@ -273,13 +277,15 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.transitionTo(ScrimState.OFF); finishAnimationsImmediately(); - assertScrimAlpha(OPAQUE /* front */, - OPAQUE /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, OPAQUE, + mScrimBehind, OPAQUE)); - assertScrimTint(true /* front */, - true /* behind */, - false /* bubble */); + assertScrimTinted(Map.of( + mScrimInFront, true, + mScrimBehind, true, + mScrimForBubble, false + )); } @Test @@ -287,13 +293,16 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.transitionTo(ScrimState.AOD); finishAnimationsImmediately(); - assertScrimAlpha(TRANSPARENT /* front */, - OPAQUE /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, OPAQUE, + mNotificationsScrim, TRANSPARENT)); - assertScrimTint(true /* front */, - true /* behind */, - false /* bubble */); + assertScrimTinted(Map.of( + mScrimInFront, true, + mScrimBehind, true, + mScrimForBubble, false + )); } @Test @@ -302,17 +311,17 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.transitionTo(ScrimState.AOD); finishAnimationsImmediately(); - assertScrimAlpha(TRANSPARENT /* front */, - TRANSPARENT /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, TRANSPARENT)); // Pulsing notification should conserve AOD wallpaper. mScrimController.transitionTo(ScrimState.PULSING); finishAnimationsImmediately(); - assertScrimAlpha(TRANSPARENT /* front */, - TRANSPARENT /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, TRANSPARENT)); } @Test @@ -322,13 +331,15 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.transitionTo(ScrimState.AOD); finishAnimationsImmediately(); - assertScrimAlpha(TRANSPARENT /* front */, - OPAQUE /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, OPAQUE)); - assertScrimTint(true /* front */, - true /* behind */, - false /* bubble */); + assertScrimTinted(Map.of( + mScrimInFront, true, + mScrimBehind, true, + mScrimForBubble, false + )); } @Test @@ -339,13 +350,15 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.setHasBackdrop(true); finishAnimationsImmediately(); - assertScrimAlpha(TRANSPARENT /* front */, - OPAQUE /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, OPAQUE)); - assertScrimTint(true /* front */, - true /* behind */, - false /* bubble */); + assertScrimTinted(Map.of( + mScrimInFront, true, + mScrimBehind, true, + mScrimForBubble, false + )); } @Test @@ -355,31 +368,31 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.setAodFrontScrimAlpha(0.5f); finishAnimationsImmediately(); - assertScrimAlpha(TRANSPARENT /* front */, - SEMI_TRANSPARENT /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, SEMI_TRANSPARENT)); // ... but that it does take effect once we enter the AOD state. mScrimController.transitionTo(ScrimState.AOD); finishAnimationsImmediately(); - assertScrimAlpha(SEMI_TRANSPARENT /* front */, - OPAQUE /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, SEMI_TRANSPARENT, + mScrimBehind, OPAQUE)); // ... and that if we set it while we're in AOD, it does take immediate effect. mScrimController.setAodFrontScrimAlpha(1f); - assertScrimAlpha(OPAQUE /* front */, - OPAQUE /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, OPAQUE, + mScrimBehind, OPAQUE)); // ... and make sure we recall the previous front scrim alpha even if we transition away // for a bit. mScrimController.transitionTo(ScrimState.UNLOCKED); mScrimController.transitionTo(ScrimState.AOD); finishAnimationsImmediately(); - assertScrimAlpha(OPAQUE /* front */, - OPAQUE /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, OPAQUE, + mScrimBehind, OPAQUE)); // ... and alpha updates should be completely ignored if always_on is off. // Passing it forward would mess up the wake-up transition. @@ -402,17 +415,17 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.setAodFrontScrimAlpha(0.5f); finishAnimationsImmediately(); - assertScrimAlpha(TRANSPARENT /* front */, - SEMI_TRANSPARENT /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, SEMI_TRANSPARENT)); // ... and doesn't take effect when disabled always_on mAlwaysOnEnabled = false; mScrimController.transitionTo(ScrimState.AOD); finishAnimationsImmediately(); - assertScrimAlpha(OPAQUE /* front */, - OPAQUE /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, OPAQUE, + mScrimBehind, OPAQUE)); // ... but will take effect after docked when(mDockManager.isDocked()).thenReturn(true); @@ -420,15 +433,15 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.setAodFrontScrimAlpha(0.5f); mScrimController.transitionTo(ScrimState.AOD); - assertScrimAlpha(SEMI_TRANSPARENT /* front */, - OPAQUE /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, SEMI_TRANSPARENT, + mScrimBehind, OPAQUE)); // ... and that if we set it while we're in AOD, it does take immediate effect after docked. mScrimController.setAodFrontScrimAlpha(1f); - assertScrimAlpha(OPAQUE /* front */, - OPAQUE /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, OPAQUE, + mScrimBehind, OPAQUE)); // Reset value since enums are static. mScrimController.setAodFrontScrimAlpha(0f); @@ -442,36 +455,38 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.setWallpaperSupportsAmbientMode(false); mScrimController.transitionTo(ScrimState.AOD); finishAnimationsImmediately(); - assertScrimAlpha(TRANSPARENT /* front */, - OPAQUE /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, OPAQUE)); mScrimController.transitionTo(ScrimState.PULSING); finishAnimationsImmediately(); // Front scrim should be transparent, but tinted // Back scrim should be semi-transparent so the user can see the wallpaper // Pulse callback should have been invoked - assertScrimAlpha(TRANSPARENT /* front */, - OPAQUE /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, OPAQUE)); - assertScrimTint(true /* front */, - true /* behind */, - false /* bubble */); + assertScrimTinted(Map.of( + mScrimInFront, true, + mScrimBehind, true, + mScrimForBubble, false + )); // ... and when ambient goes dark, front scrim should be semi-transparent mScrimController.setAodFrontScrimAlpha(0.5f); finishAnimationsImmediately(); // Front scrim should be semi-transparent - assertScrimAlpha(SEMI_TRANSPARENT /* front */, - OPAQUE /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, SEMI_TRANSPARENT, + mScrimBehind, OPAQUE)); mScrimController.setWakeLockScreenSensorActive(true); finishAnimationsImmediately(); - assertScrimAlpha(SEMI_TRANSPARENT /* front */, - SEMI_TRANSPARENT /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, SEMI_TRANSPARENT, + mScrimBehind, SEMI_TRANSPARENT)); // Reset value since enums are static. mScrimController.setAodFrontScrimAlpha(0f); @@ -483,27 +498,29 @@ public class ScrimControllerTest extends SysuiTestCase { finishAnimationsImmediately(); // Front scrim should be transparent // Back scrim should be visible without tint - assertScrimAlpha(TRANSPARENT /* front */, - OPAQUE /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, OPAQUE)); - assertScrimTint(false /* front */, - false /* behind */, - false /* bubble */); + assertScrimTinted(Map.of( + mScrimInFront, false, + mScrimBehind, false, + mScrimForBubble, false + )); } @Test public void transitionToBouncer() { mScrimController.transitionTo(ScrimState.BOUNCER_SCRIMMED); finishAnimationsImmediately(); - // Front scrim should be transparent - // Back scrim should be visible without tint - assertScrimAlpha(OPAQUE /* front */, - TRANSPARENT /* back */, - TRANSPARENT /* bubble */); - assertScrimTint(false /* front */, - false /* behind */, - false /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, OPAQUE, + mScrimBehind, TRANSPARENT)); + assertScrimTinted(Map.of( + mScrimInFront, false, + mScrimBehind, false, + mScrimForBubble, false + )); } @Test @@ -511,19 +528,21 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.setPanelExpansion(0f); mScrimController.transitionTo(ScrimState.UNLOCKED); finishAnimationsImmediately(); - assertScrimAlpha(TRANSPARENT /* front */, - TRANSPARENT /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, TRANSPARENT)); - assertScrimTint(false /* front */, - true /* behind */, - false /* bubble */); + assertScrimTinted(Map.of( + mScrimInFront, false, + mScrimBehind, true, + mScrimForBubble, false + )); // Back scrim should be visible after start dragging mScrimController.setPanelExpansion(0.5f); - assertScrimAlpha(TRANSPARENT /* front */, - SEMI_TRANSPARENT /* back */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, SEMI_TRANSPARENT)); } @Test @@ -531,9 +550,11 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.transitionTo(ScrimState.BUBBLE_EXPANDED); finishAnimationsImmediately(); - assertScrimTint(false /* front */, - false /* behind */, - false /* bubble */); + assertScrimTinted(Map.of( + mScrimInFront, false, + mScrimBehind, false, + mScrimForBubble, false + )); // Front scrim should be transparent Assert.assertEquals(ScrimController.TRANSPARENT, @@ -589,7 +610,10 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.setQsPosition(1f, 999 /* value doesn't matter */); finishAnimationsImmediately(); - assertScrimAlpha(TRANSPARENT, OPAQUE, TRANSPARENT); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, OPAQUE, + mNotificationsScrim, OPAQUE)); } @Test @@ -623,21 +647,26 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.transitionTo(ScrimState.UNLOCKED); // Immediately tinted black after the transition starts - assertScrimTint(true /* front */, - true /* behind */, - true /* bubble */); + assertScrimTinted(Map.of( + mScrimInFront, true, + mScrimBehind, true, + mScrimForBubble, true + )); finishAnimationsImmediately(); // All scrims should be transparent at the end of fade transition. - assertScrimAlpha(TRANSPARENT /* front */, - TRANSPARENT /* behind */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, TRANSPARENT, + mScrimForBubble, TRANSPARENT)); // Make sure at the very end of the animation, we're reset to transparent - assertScrimTint(false /* front */, - true /* behind */, - false /* bubble */); + assertScrimTinted(Map.of( + mScrimInFront, false, + mScrimBehind, true, + mScrimForBubble, false + )); } @Test @@ -652,9 +681,11 @@ public class ScrimControllerTest extends SysuiTestCase { // Front scrim should be black in the middle of the transition Assert.assertTrue("Scrim should be visible during transition. Alpha: " + mScrimInFront.getViewAlpha(), mScrimInFront.getViewAlpha() > 0); - assertScrimTint(true /* front */, - true /* behind */, - true /* bubble */); + assertScrimTinted(Map.of( + mScrimInFront, true, + mScrimBehind, true, + mScrimForBubble, true + )); Assert.assertSame("Scrim should be visible during transition.", mScrimVisibility, OPAQUE); } @@ -843,15 +874,15 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.setKeyguardOccluded(true); mScrimController.transitionTo(ScrimState.AOD); finishAnimationsImmediately(); - assertScrimAlpha(TRANSPARENT /* front */, - OPAQUE /* behind */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, OPAQUE)); mScrimController.transitionTo(ScrimState.PULSING); finishAnimationsImmediately(); - assertScrimAlpha(TRANSPARENT /* front */, - OPAQUE /* behind */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, OPAQUE)); } @Test @@ -859,15 +890,15 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.setWallpaperSupportsAmbientMode(true); mScrimController.transitionTo(ScrimState.AOD); finishAnimationsImmediately(); - assertScrimAlpha(TRANSPARENT /* front */, - TRANSPARENT /* behind */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, TRANSPARENT)); mScrimController.setKeyguardOccluded(true); finishAnimationsImmediately(); - assertScrimAlpha(TRANSPARENT /* front */, - OPAQUE /* behind */, - TRANSPARENT /* bubble */); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, OPAQUE)); } @Test @@ -926,21 +957,67 @@ public class ScrimControllerTest extends SysuiTestCase { } } - private void assertScrimTint(boolean front, boolean behind, boolean bubble) { - Assert.assertEquals("Tint test failed at state " + mScrimController.getState() - + " with scrim: " + getScrimName(mScrimInFront) + " and tint: " - + Integer.toHexString(mScrimInFront.getTint()), - front, mScrimInFront.getTint() != Color.TRANSPARENT); + @Test + public void testScrimsOpaque_whenShadeFullyExpanded() { + mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.setPanelExpansion(1); + // notifications scrim alpha change require calling setQsPosition + mScrimController.setQsPosition(0, 300); + finishAnimationsImmediately(); - Assert.assertEquals("Tint test failed at state " + mScrimController.getState() - + " with scrim: " + getScrimName(mScrimBehind) + " and tint: " - + Integer.toHexString(mScrimBehind.getTint()), - behind, mScrimBehind.getTint() != Color.TRANSPARENT); + Assert.assertEquals("Behind scrim should be opaque", + mScrimBehind.getViewAlpha(), 1, 0.0); + Assert.assertEquals("Notifications scrim should be opaque", + mNotificationsScrim.getViewAlpha(), 1, 0.0); + } - Assert.assertEquals("Tint test failed at state " + mScrimController.getState() - + " with scrim: " + getScrimName(mScrimForBubble) + " and tint: " - + Integer.toHexString(mScrimForBubble.getTint()), - bubble, mScrimForBubble.getTint() != Color.TRANSPARENT); + @Test + public void testScrimsVisible_whenShadeVisible() { + mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.setPanelExpansion(0.5f); + // notifications scrim alpha change require calling setQsPosition + mScrimController.setQsPosition(0, 300); + + assertScrimAlpha(Map.of( + mScrimBehind, SEMI_TRANSPARENT, + mNotificationsScrim, SEMI_TRANSPARENT, + mScrimInFront, TRANSPARENT)); + } + + @Test + public void testScrimsVisible_whenShadeVisibleOnLockscreen() { + mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.setQsPosition(0.5f, 300); + + assertScrimAlpha(Map.of( + mScrimBehind, SEMI_TRANSPARENT, + mNotificationsScrim, SEMI_TRANSPARENT, + mScrimInFront, TRANSPARENT)); + } + + @Test + public void testNotificationScrimTransparent_whenOnLockscreen() { + mScrimController.transitionTo(ScrimState.KEYGUARD); + // even if shade is not pulled down, panel has expansion of 1 on the lockscreen + mScrimController.setPanelExpansion(1); + mScrimController.setQsPosition(0f, /*qs panel bottom*/ 0); + + assertScrimAlpha(Map.of( + mScrimBehind, SEMI_TRANSPARENT, + mNotificationsScrim, TRANSPARENT)); + } + + private void assertScrimTinted(Map scrimToTint) { + // notifications scrim should have always transparent tint + assertScrimTint(mNotificationsScrim, false); + scrimToTint.forEach((scrim, hasTint) -> assertScrimTint(scrim, hasTint)); + } + + private void assertScrimTint(ScrimView scrim, boolean hasTint) { + 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); } private String getScrimName(ScrimView scrim) { @@ -956,29 +1033,25 @@ public class ScrimControllerTest extends SysuiTestCase { return "unknown_scrim"; } - private void assertScrimAlpha(int front, int behind, int bubble) { + /** + * If {@link #mScrimForBubble} or {@link #mNotificationsScrim} is not passed in the map + * we assume it must be transparent + */ + private void assertScrimAlpha(Map scrimToAlpha) { // Check single scrim visibility. - Assert.assertEquals("Unexpected front scrim alpha: " - + mScrimInFront.getViewAlpha(), - front != TRANSPARENT /* expected */, - mScrimInFront.getViewAlpha() > TRANSPARENT /* actual */); - - Assert.assertEquals("Unexpected back scrim alpha: " - + mScrimBehind.getViewAlpha(), - behind != TRANSPARENT /* expected */, - mScrimBehind.getViewAlpha() > TRANSPARENT /* actual */); - - Assert.assertEquals( - "Unexpected bubble scrim alpha: " - + mScrimForBubble.getViewAlpha(), /* message */ - bubble != TRANSPARENT /* expected */, - mScrimForBubble.getViewAlpha() > TRANSPARENT /* actual */); + if (!scrimToAlpha.containsKey(mScrimForBubble)) { + assertScrimAlpha(mScrimForBubble, TRANSPARENT); + } + if (!scrimToAlpha.containsKey(mNotificationsScrim)) { + assertScrimAlpha(mNotificationsScrim, TRANSPARENT); + } + scrimToAlpha.forEach((scrimView, alpha) -> assertScrimAlpha(scrimView, alpha)); // Check combined scrim visibility. final int visibility; - if (front == OPAQUE || behind == OPAQUE || bubble == OPAQUE) { + if (scrimToAlpha.values().contains(OPAQUE)) { visibility = OPAQUE; - } else if (front > TRANSPARENT || behind > TRANSPARENT || bubble > TRANSPARENT) { + } else if (scrimToAlpha.values().contains(SEMI_TRANSPARENT)) { visibility = SEMI_TRANSPARENT; } else { visibility = TRANSPARENT; @@ -987,4 +1060,11 @@ public class ScrimControllerTest extends SysuiTestCase { visibility /* expected */, mScrimVisibility); } + + private void assertScrimAlpha(ScrimView scrim, int expectedAlpha) { + Assert.assertEquals("Unexpected " + getScrimName(scrim) + " scrim alpha: " + + scrim.getViewAlpha(), + expectedAlpha != TRANSPARENT /* expected */, + scrim.getViewAlpha() > TRANSPARENT /* actual */); + } }