From a23f2dd5e90827e9004e960f7ed6951b598095ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=B6llner?= Date: Tue, 2 Aug 2022 14:32:07 +0200 Subject: [PATCH] [Large screens] Do not animate clock when turning on display not on AOD The problem was that the large clock was always being centered on large screens when the screen was off. The fix is to make sure that the large clock is only centered when AOD is enabled. Fixes: 233888543 Test: Manually Test: NotificationPanelViewControllerTest.java Change-Id: I29f5c6ddd0dde549f37a8eee9d5446b219b4fb9a --- .../NotificationPanelViewController.java | 14 ++- .../NotificationPanelViewControllerTest.java | 86 +++++++++++++++++++ 2 files changed, 96 insertions(+), 4 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java index 4e74540ff761e..b1cb8f49848a7 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java @@ -1504,10 +1504,7 @@ public final class NotificationPanelViewController extends PanelViewController { } private void updateKeyguardStatusViewAlignment(boolean animate) { - boolean hasVisibleNotifications = mNotificationStackScrollLayoutController - .getVisibleNotificationCount() != 0 - || mMediaDataManager.hasActiveMediaOrRecommendation(); - boolean shouldBeCentered = !mSplitShadeEnabled || !hasVisibleNotifications || mDozing; + boolean shouldBeCentered = shouldKeyguardStatusViewBeCentered(); if (mStatusViewCentered != shouldBeCentered) { mStatusViewCentered = shouldBeCentered; ConstraintSet constraintSet = new ConstraintSet(); @@ -1531,6 +1528,15 @@ public final class NotificationPanelViewController extends PanelViewController { mKeyguardUnfoldTransition.ifPresent(t -> t.setStatusViewCentered(mStatusViewCentered)); } + private boolean shouldKeyguardStatusViewBeCentered() { + boolean hasVisibleNotifications = mNotificationStackScrollLayoutController + .getVisibleNotificationCount() != 0 + || mMediaDataManager.hasActiveMediaOrRecommendation(); + boolean isOnAod = mDozing && mDozeParameters.getAlwaysOn(); + return !mSplitShadeEnabled || !hasVisibleNotifications || isOnAod + || hasPulsingNotifications(); + } + /** * @return the padding of the stackscroller when unlocked */ diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java index c9405c8902788..51a2373ab618c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java @@ -47,6 +47,7 @@ import android.content.ContentResolver; import android.content.res.Configuration; import android.content.res.Resources; import android.database.ContentObserver; +import android.graphics.PointF; import android.os.Handler; import android.os.Looper; import android.os.PowerManager; @@ -901,6 +902,76 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { .isEqualTo(ConstraintSet.PARENT_ID); } + @Test + public void keyguardStatusView_splitShade_dozing_alwaysDozingOn_isCentered() { + when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2); + mStatusBarStateController.setState(KEYGUARD); + enableSplitShade(/* enabled= */ true); + + setDozing(/* dozing= */ true, /* dozingAlwaysOn= */ true); + + assertThat(isKeyguardStatusViewCentered()).isTrue(); + } + + @Test + public void keyguardStatusView_splitShade_dozing_alwaysDozingOff_isNotCentered() { + when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2); + mStatusBarStateController.setState(KEYGUARD); + enableSplitShade(/* enabled= */ true); + + setDozing(/* dozing= */ true, /* dozingAlwaysOn= */ false); + + assertThat(isKeyguardStatusViewCentered()).isFalse(); + } + + @Test + public void keyguardStatusView_splitShade_notDozing_alwaysDozingOn_isNotCentered() { + when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2); + mStatusBarStateController.setState(KEYGUARD); + enableSplitShade(/* enabled= */ true); + + setDozing(/* dozing= */ false, /* dozingAlwaysOn= */ true); + + assertThat(isKeyguardStatusViewCentered()).isFalse(); + } + + @Test + public void keyguardStatusView_splitShade_pulsing_isCentered() { + when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2); + when(mNotificationListContainer.hasPulsingNotifications()).thenReturn(true); + mStatusBarStateController.setState(KEYGUARD); + enableSplitShade(/* enabled= */ true); + + setDozing(/* dozing= */ false, /* dozingAlwaysOn= */ true); + + assertThat(isKeyguardStatusViewCentered()).isFalse(); + } + + @Test + public void keyguardStatusView_splitShade_notPulsing_isNotCentered() { + when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2); + when(mNotificationListContainer.hasPulsingNotifications()).thenReturn(false); + mStatusBarStateController.setState(KEYGUARD); + enableSplitShade(/* enabled= */ true); + + setDozing(/* dozing= */ false, /* dozingAlwaysOn= */ true); + + assertThat(isKeyguardStatusViewCentered()).isFalse(); + } + + @Test + public void keyguardStatusView_singleShade_isCentered() { + enableSplitShade(/* enabled= */ false); + // The conditions below would make the clock NOT be centered on split shade. + // On single shade it should always be centered though. + when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2); + when(mNotificationListContainer.hasPulsingNotifications()).thenReturn(false); + mStatusBarStateController.setState(KEYGUARD); + setDozing(/* dozing= */ false, /* dozingAlwaysOn= */ false); + + assertThat(isKeyguardStatusViewCentered()).isFalse(); + } + @Test public void testDisableUserSwitcherAfterEnabling_returnsViewStubToTheViewHierarchy() { givenViewAttached(); @@ -1473,4 +1544,19 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { .thenReturn(splitShadeFullTransitionDistance); mNotificationPanelViewController.updateResources(); } + + private void setDozing(boolean dozing, boolean dozingAlwaysOn) { + when(mDozeParameters.getAlwaysOn()).thenReturn(dozingAlwaysOn); + mNotificationPanelViewController.setDozing( + /* dozing= */ dozing, + /* animate= */ false, + /* wakeUpTouchLocation= */ new PointF() + ); + } + + private boolean isKeyguardStatusViewCentered() { + mNotificationPanelViewController.updateResources(); + return getConstraintSetLayout(R.id.keyguard_status_view).endToEnd + == ConstraintSet.PARENT_ID; + } }