Merge "[Status Bar Refactor] 2.1/N: Migrate ScrimController's panelExpanisonChanged listener off of the StatusBar.ExpansionChangedListener interface and onto the PanelExpansionListener interface." into sc-v2-dev am: c3e4e96ef2

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16092652

Change-Id: I8a7d3c43d84f86cdcb04c885f47f35cbb987388b
This commit is contained in:
Caitlin Cassidy
2021-11-03 17:13:11 +00:00
committed by Automerger Merge Worker
5 changed files with 40 additions and 7 deletions

View File

@@ -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");

View File

@@ -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 =

View File

@@ -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) }
}
}

View File

@@ -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);

View File

@@ -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