From 2f273f38c494cc51ee73c2d028b3255be3ff19af Mon Sep 17 00:00:00 2001 From: Aaron Liu Date: Mon, 11 Apr 2022 21:17:06 +0000 Subject: [PATCH] [Bouncer] Fix translation speed for notifications. Read bouncer state in order to determine when to use bouncer interpolation for alpha. Also rename boolean to be prefixed with is. Bug: 228831465 Test: Manual and unit tests Change-Id: I6f872db0655d04efae926fdd04e82a4aa460a408 --- .../UdfpsKeyguardViewController.java | 2 +- .../com/android/systemui/qs/QSFragment.java | 2 +- .../systemui/qs/QSPanelController.java | 4 ++-- .../notification/stack/AmbientState.java | 19 ++++++++++++++++++- .../stack/StackScrollAlgorithm.java | 5 ++++- .../statusbar/phone/PanelViewController.java | 5 +---- .../statusbar/phone/ScrimController.java | 2 +- .../phone/StatusBarKeyguardViewManager.java | 2 +- .../android/systemui/qs/QSFragmentTest.java | 4 ++-- .../systemui/qs/QSPanelControllerTest.kt | 12 ++++++------ .../NotificationStackScrollLayoutTest.java | 5 ++++- .../stack/StackScrollAlgorithmTest.kt | 11 ++++++++--- .../statusbar/phone/ScrimControllerTest.java | 12 ++++++------ .../StatusBarKeyguardViewManagerTest.java | 8 ++++---- 14 files changed, 59 insertions(+), 34 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java index f5f07c8ca989..1a726ce4448f 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java @@ -475,7 +475,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController 0 && view.getVisibility() != View.VISIBLE) { view.setVisibility((View.VISIBLE)); } - float alpha = mQSPanelController.bouncerInTransit() + float alpha = mQSPanelController.isBouncerInTransit() ? BouncerPanelExpansionCalculator.aboutToShowBouncerProgress(progress) : ShadeInterpolation.getContentAlpha(progress); view.setAlpha(alpha); diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java index 5670836566ab..851307ac615f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java @@ -254,8 +254,8 @@ public class QSPanelController extends QSPanelControllerBase { * * @return if bouncer is in transit */ - public boolean bouncerInTransit() { - return mStatusBarKeyguardViewManager.bouncerIsInTransit(); + public boolean isBouncerInTransit() { + return mStatusBarKeyguardViewManager.isBouncerInTransit(); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java index 2f1022a904e8..25999a7f8dba 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java @@ -31,6 +31,7 @@ import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.ExpandableView; import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.BypassController; import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.SectionProvider; +import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import javax.inject.Inject; @@ -45,6 +46,10 @@ public class AmbientState { private final SectionProvider mSectionProvider; private final BypassController mBypassController; + /** + * Used to read bouncer states. + */ + private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; private int mScrollY; private boolean mDimmed; private ActivatableNotificationView mActivatedChild; @@ -204,9 +209,11 @@ public class AmbientState { public AmbientState( Context context, @NonNull SectionProvider sectionProvider, - @NonNull BypassController bypassController) { + @NonNull BypassController bypassController, + @Nullable StatusBarKeyguardViewManager statusBarKeyguardViewManager) { mSectionProvider = sectionProvider; mBypassController = bypassController; + mStatusBarKeyguardViewManager = statusBarKeyguardViewManager; reload(context); } @@ -661,4 +668,14 @@ public class AmbientState { public int getStackTopMargin() { return mStackTopMargin; } + + /** + * Check to see if we are about to show bouncer. + * + * @return if bouncer expansion is between 0 and 1. + */ + public boolean isBouncerInTransit() { + return mStatusBarKeyguardViewManager != null + && mStatusBarKeyguardViewManager.isBouncerInTransit(); + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java index c0971337a19f..9204c45ea1d5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java @@ -27,6 +27,7 @@ import android.view.ViewGroup; import androidx.annotation.VisibleForTesting; import com.android.internal.policy.SystemBarUtils; +import com.android.keyguard.BouncerPanelExpansionCalculator; import com.android.systemui.R; import com.android.systemui.animation.ShadeInterpolation; import com.android.systemui.statusbar.EmptyShadeView; @@ -431,7 +432,9 @@ public class StackScrollAlgorithm { } else if (ambientState.isExpansionChanging()) { // Adjust alpha for shade open & close. float expansion = ambientState.getExpansionFraction(); - viewState.alpha = ShadeInterpolation.getContentAlpha(expansion); + viewState.alpha = ambientState.isBouncerInTransit() + ? BouncerPanelExpansionCalculator.aboutToShowBouncerProgress(expansion) + : ShadeInterpolation.getContentAlpha(expansion); } if (ambientState.isShadeExpanded() && view.mustStayOnScreen() diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java index d492c57dfa0c..4ba8441fc9a6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java @@ -48,7 +48,6 @@ import android.view.animation.Interpolator; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.util.LatencyTracker; -import com.android.keyguard.BouncerPanelExpansionCalculator; import com.android.systemui.DejankUtils; import com.android.systemui.R; import com.android.systemui.animation.Interpolators; @@ -796,9 +795,7 @@ public abstract class PanelViewController { } mExpandedFraction = Math.min(1f, maxPanelHeight == 0 ? 0 : mExpandedHeight / maxPanelHeight); - mAmbientState.setExpansionFraction(mStatusBarKeyguardViewManager.bouncerIsInTransit() - ? BouncerPanelExpansionCalculator.aboutToShowBouncerProgress(mExpandedFraction) - : mExpandedFraction); + mAmbientState.setExpansionFraction(mExpandedFraction); onHeightUpdated(mExpandedHeight); updatePanelExpansionAndVisibility(); }); 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 cc2ff3fb4388..8c1ed19a8dcc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -1074,7 +1074,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump } private float getInterpolatedFraction() { - if (mStatusBarKeyguardViewManager.bouncerIsInTransit()) { + if (mStatusBarKeyguardViewManager.isBouncerInTransit()) { return BouncerPanelExpansionCalculator .aboutToShowBouncerProgress(mPanelExpansionFraction); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java index ce1289e0885c..6ca94cccc452 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -1378,7 +1378,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb /** * Returns if bouncer expansion is between 0 and 1 non-inclusive. */ - public boolean bouncerIsInTransit() { + public boolean isBouncerInTransit() { if (mBouncer == null) return false; return mBouncer.inTransit(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java index f5d19e24bfa6..72601a65f414 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java @@ -190,7 +190,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest { QSFragment fragment = resumeAndGetFragment(); enableSplitShade(); setStatusBarState(StatusBarState.KEYGUARD); - when(mQSPanelController.bouncerInTransit()).thenReturn(false); + when(mQSPanelController.isBouncerInTransit()).thenReturn(false); int transitionPxAmount = 123; float transitionProgress = 0.5f; @@ -206,7 +206,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest { QSFragment fragment = resumeAndGetFragment(); enableSplitShade(); setStatusBarState(StatusBarState.KEYGUARD); - when(mQSPanelController.bouncerInTransit()).thenReturn(true); + when(mQSPanelController.isBouncerInTransit()).thenReturn(true); int transitionPxAmount = 123; float transitionProgress = 0.5f; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.kt index 689de50d5b4a..69d3f8b313c9 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.kt @@ -61,7 +61,7 @@ class QSPanelControllerTest : SysuiTestCase() { whenever(brightnessSliderFactory.create(any(), any())).thenReturn(brightnessSlider) whenever(brightnessControllerFactory.create(any())).thenReturn(brightnessController) whenever(qsPanel.resources).thenReturn(mContext.orCreateTestableResources.resources) - whenever(statusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(false) + whenever(statusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(false) controller = QSPanelController( qsPanel, @@ -109,10 +109,10 @@ class QSPanelControllerTest : SysuiTestCase() { } @Test - fun testBouncerIsInTransit() { - whenever(statusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(true) - assertThat(controller.bouncerInTransit()).isEqualTo(true) - whenever(statusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(false) - assertThat(controller.bouncerInTransit()).isEqualTo(false) + fun testIsBouncerInTransit() { + whenever(statusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(true) + assertThat(controller.isBouncerInTransit()).isEqualTo(true) + whenever(statusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(false) + assertThat(controller.isBouncerInTransit()).isEqualTo(false) } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java index 7a92b96f40db..077f6bfc5f31 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java @@ -64,6 +64,7 @@ import com.android.systemui.statusbar.notification.row.FooterView; import com.android.systemui.statusbar.phone.CentralSurfaces; import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.ShadeController; +import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController; import org.junit.Assert; @@ -104,6 +105,7 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { @Mock private UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController; @Mock private NotificationShelf mNotificationShelf; @Mock private NotificationStackSizeCalculator mNotificationStackSizeCalculator; + @Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; @Before @UiThreadTest @@ -111,7 +113,8 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { allowTestableLooperAsMainThread(); // Interact with real instance of AmbientState. - mAmbientState = new AmbientState(mContext, mNotificationSectionsManager, mBypassController); + mAmbientState = new AmbientState(mContext, mNotificationSectionsManager, mBypassController, + mStatusBarKeyguardViewManager); // Inject dependencies before initializing the layout mDependency.injectTestDependency(SysuiStatusBarStateController.class, mBarState); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt index 1da9bbcdb836..6b4dc5883f08 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt @@ -8,6 +8,7 @@ import com.android.systemui.statusbar.EmptyShadeView import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.BypassController import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.SectionProvider +import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Test @@ -21,10 +22,14 @@ class StackScrollAlgorithmTest : SysuiTestCase() { private val stackScrollAlgorithm = StackScrollAlgorithm(context, hostView) private val expandableViewState = ExpandableViewState() private val notificationRow = mock(ExpandableNotificationRow::class.java) + private val mStatusBarKeyguardViewManager = mock(StatusBarKeyguardViewManager::class.java) + private val ambientState = AmbientState( - context, - SectionProvider { _, _ -> false }, - BypassController { false }) + context, + SectionProvider { _, _ -> false }, + BypassController { false }, + mStatusBarKeyguardViewManager + ) @Before fun setUp() { 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 69d7932a81fb..ff2c05b04160 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 @@ -1238,7 +1238,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void expansionNotificationAlpha_shadeLocked_bouncerActive_usesBouncerInterpolator() { - when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(true); + when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(true); mScrimController.transitionTo(ScrimState.SHADE_LOCKED); @@ -1254,7 +1254,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void expansionNotificationAlpha_shadeLocked_bouncerNotActive_usesShadeInterpolator() { - when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(false); + when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(false); mScrimController.transitionTo(ScrimState.SHADE_LOCKED); @@ -1269,7 +1269,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void notificationAlpha_unnocclusionAnimating_bouncerActive_usesKeyguardNotifAlpha() { - when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(true); + when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(true); mScrimController.transitionTo(ScrimState.KEYGUARD); mScrimController.setUnocclusionAnimationRunning(true); @@ -1290,7 +1290,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void notificationAlpha_unnocclusionAnimating_bouncerNotActive_usesKeyguardNotifAlpha() { - when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(false); + when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(false); mScrimController.transitionTo(ScrimState.KEYGUARD); mScrimController.setUnocclusionAnimationRunning(true); @@ -1311,7 +1311,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void notificationAlpha_inKeyguardState_bouncerActive_usesInvertedBouncerInterpolator() { - when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(true); + when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(true); mScrimController.transitionTo(ScrimState.KEYGUARD); @@ -1330,7 +1330,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void notificationAlpha_inKeyguardState_bouncerNotActive_usesInvertedShadeInterpolator() { - when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(false); + when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(false); mScrimController.transitionTo(ScrimState.KEYGUARD); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java index 90cbf540004e..2b018727eb98 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java @@ -438,12 +438,12 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { } @Test - public void testBouncerIsInTransit() { + public void testIsBouncerInTransit() { when(mBouncer.inTransit()).thenReturn(true); - Truth.assertThat(mStatusBarKeyguardViewManager.bouncerIsInTransit()).isTrue(); + Truth.assertThat(mStatusBarKeyguardViewManager.isBouncerInTransit()).isTrue(); when(mBouncer.inTransit()).thenReturn(false); - Truth.assertThat(mStatusBarKeyguardViewManager.bouncerIsInTransit()).isFalse(); + Truth.assertThat(mStatusBarKeyguardViewManager.isBouncerInTransit()).isFalse(); mBouncer = null; - Truth.assertThat(mStatusBarKeyguardViewManager.bouncerIsInTransit()).isFalse(); + Truth.assertThat(mStatusBarKeyguardViewManager.isBouncerInTransit()).isFalse(); } } -- GitLab