[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
This commit is contained in:
Christian Göllner
2022-08-02 14:32:07 +02:00
committed by Christian Go??llner
parent 4d334f4534
commit a23f2dd5e9
2 changed files with 96 additions and 4 deletions

View File

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

View File

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