diff options
5 files changed, 40 insertions, 7 deletions
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 1921357ddf7c..cc2f50a13ce8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -53,6 +53,7 @@ import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dock.DockManager; import com.android.systemui.scrim.ScrimView; import com.android.systemui.statusbar.notification.stack.ViewState; +import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.AlarmTimeout; @@ -233,7 +234,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump DelayedWakeLock.Builder delayedWakeLockBuilder, Handler handler, KeyguardUpdateMonitor keyguardUpdateMonitor, DockManager dockManager, ConfigurationController configurationController, @Main Executor mainExecutor, - UnlockedScreenOffAnimationController unlockedScreenOffAnimationController) { + UnlockedScreenOffAnimationController unlockedScreenOffAnimationController, + PanelExpansionStateManager panelExpansionStateManager) { mScrimStateListener = lightBarController::setScrimState; mDefaultScrimAlpha = BUSY_SCRIM_ALPHA; @@ -269,6 +271,9 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump ScrimController.this.onThemeChanged(); } }); + panelExpansionStateManager.addListener( + (fraction, tracking) -> setRawPanelExpansionFraction(fraction) + ); mColors = new GradientColors(); } @@ -481,11 +486,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump * * The expansion fraction is tied to the scrim opacity. * - * See {@link PanelBar#panelExpansionChanged}. + * See {@link PanelExpansionListener#onPanelExpansionChanged}. * * @param rawPanelExpansionFraction From 0 to 1 where 0 means collapsed and 1 expanded. */ - public void setRawPanelExpansionFraction( + @VisibleForTesting + void setRawPanelExpansionFraction( @FloatRange(from = 0.0, to = 1.0) float rawPanelExpansionFraction) { if (isNaN(rawPanelExpansionFraction)) { throw new IllegalArgumentException("rawPanelExpansionFraction should not be NaN"); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index c9dd9833999a..04b1279c70e3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -912,8 +912,6 @@ public class StatusBar extends SystemUI implements lockscreenShadeTransitionController.setStatusbar(this); mExpansionChangedListeners = new ArrayList<>(); - addExpansionChangedListener( - (expansion, expanded) -> mScrimController.setRawPanelExpansionFraction(expansion)); addExpansionChangedListener(this::onPanelExpansionChanged); mBubbleExpandListener = diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionStateManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionStateManager.kt index 1c8b1a8ed4b5..c7424b976f62 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionStateManager.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionStateManager.kt @@ -31,9 +31,17 @@ class PanelExpansionStateManager @Inject constructor() { private val listeners: MutableList<PanelExpansionListener> = mutableListOf() - /** Adds a listener that will be notified about panel events. */ + @FloatRange(from = 0.0, to = 1.0) private var fraction: Float = 0f + private var tracking: Boolean = false + + /** + * Adds a listener that will be notified when the panel expansion has changed. + * + * Listener will also be immediately notified with the current values. + */ fun addListener(listener: PanelExpansionListener) { listeners.add(listener) + listener.onPanelExpansionChanged(fraction, tracking) } /** Called when the panel expansion has changed. Notifies all listeners of change. */ @@ -41,6 +49,8 @@ class PanelExpansionStateManager @Inject constructor() { @FloatRange(from = 0.0, to = 1.0) fraction: Float, tracking: Boolean ) { + this.fraction = fraction + this.tracking = tracking listeners.forEach { it.onPanelExpansionChanged(fraction, tracking) } } } 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 6849dab1a19a..42f22063110e 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 @@ -55,6 +55,7 @@ import com.android.systemui.DejankUtils; import com.android.systemui.SysuiTestCase; import com.android.systemui.dock.DockManager; import com.android.systemui.scrim.ScrimView; +import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.concurrency.FakeExecutor; @@ -112,6 +113,10 @@ public class ScrimControllerTest extends SysuiTestCase { private ConfigurationController mConfigurationController; @Mock private UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController; + // TODO(b/204991468): Use a real PanelExpansionStateManager object once this bug is fixed. (The + // event-dispatch-on-registration pattern caused some of these unit tests to fail.) + @Mock + private PanelExpansionStateManager mPanelExpansionStateManager; private static class AnimatorListener implements Animator.AnimatorListener { @@ -224,7 +229,8 @@ public class ScrimControllerTest extends SysuiTestCase { mDozeParameters, mAlarmManager, mKeyguardStateController, mDelayedWakeLockBuilder, new FakeHandler(mLooper.getLooper()), mKeyguardUpdateMonitor, mDockManager, mConfigurationController, new FakeExecutor(new FakeSystemClock()), - mUnlockedScreenOffAnimationController); + mUnlockedScreenOffAnimationController, + mPanelExpansionStateManager); mScrimController.setScrimVisibleListener(visible -> mScrimVisibility = visible); mScrimController.attachViews(mScrimBehind, mNotificationsScrim, mScrimInFront); mScrimController.setAnimatorListener(mAnimatorListener); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionStateManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionStateManagerTest.kt index 8a1099768483..ef184ea175d6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionStateManagerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionStateManagerTest.kt @@ -45,6 +45,19 @@ class PanelExpansionStateManagerTest : SysuiTestCase() { assertThat(listener.tracking).isEqualTo(tracking) } + @Test + fun addPanelExpansionListener_listenerNotifiedOfCurrentValues() { + val fraction = 0.6f + val tracking = true + panelExpansionStateManager.onPanelExpansionChanged(fraction, tracking) + val listener = TestPanelExpansionListener() + + panelExpansionStateManager.addListener(listener) + + assertThat(listener.fraction).isEqualTo(fraction) + assertThat(listener.tracking).isEqualTo(tracking) + } + class TestPanelExpansionListener : PanelExpansionListener { var fraction: Float = 0f var tracking: Boolean = false |