Merge "[Slit shade] Fix pulsing notification overlapping with centered clock" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
92180b407b
@@ -98,6 +98,7 @@ import com.android.internal.policy.ScreenDecorationsUtils;
|
||||
import com.android.internal.policy.SystemBarUtils;
|
||||
import com.android.internal.util.LatencyTracker;
|
||||
import com.android.keyguard.ActiveUnlockConfig;
|
||||
import com.android.keyguard.KeyguardClockSwitch.ClockSize;
|
||||
import com.android.keyguard.KeyguardStatusView;
|
||||
import com.android.keyguard.KeyguardStatusViewController;
|
||||
import com.android.keyguard.KeyguardUnfoldTransition;
|
||||
@@ -1427,19 +1428,10 @@ public final class NotificationPanelViewController extends PanelViewController {
|
||||
private void updateClockAppearance() {
|
||||
int userSwitcherPreferredY = mStatusBarHeaderHeightKeyguard;
|
||||
boolean bypassEnabled = mKeyguardBypassController.getBypassEnabled();
|
||||
final boolean hasVisibleNotifications = mNotificationStackScrollLayoutController
|
||||
.getVisibleNotificationCount() != 0
|
||||
|| mMediaDataManager.hasActiveMediaOrRecommendation();
|
||||
boolean splitShadeWithActiveMedia =
|
||||
mSplitShadeEnabled && mMediaDataManager.hasActiveMediaOrRecommendation();
|
||||
boolean shouldAnimateClockChange = mScreenOffAnimationController.shouldAnimateClockChange();
|
||||
if ((hasVisibleNotifications && !mSplitShadeEnabled)
|
||||
|| (splitShadeWithActiveMedia && !mDozing)) {
|
||||
mKeyguardStatusViewController.displayClock(SMALL, shouldAnimateClockChange);
|
||||
} else {
|
||||
mKeyguardStatusViewController.displayClock(LARGE, shouldAnimateClockChange);
|
||||
}
|
||||
updateKeyguardStatusViewAlignment(true /* animate */);
|
||||
mKeyguardStatusViewController.displayClock(computeDesiredClockSize(),
|
||||
shouldAnimateClockChange);
|
||||
updateKeyguardStatusViewAlignment(/* animate= */true);
|
||||
int userSwitcherHeight = mKeyguardQsUserSwitchController != null
|
||||
? mKeyguardQsUserSwitchController.getUserIconHeight() : 0;
|
||||
if (mKeyguardUserSwitcherController != null) {
|
||||
@@ -1448,7 +1440,7 @@ public final class NotificationPanelViewController extends PanelViewController {
|
||||
float expandedFraction =
|
||||
mScreenOffAnimationController.shouldExpandNotifications()
|
||||
? 1.0f : getExpandedFraction();
|
||||
float darkamount =
|
||||
float darkAmount =
|
||||
mScreenOffAnimationController.shouldExpandNotifications()
|
||||
? 1.0f : mInterpolatedDarkAmount;
|
||||
|
||||
@@ -1466,7 +1458,7 @@ public final class NotificationPanelViewController extends PanelViewController {
|
||||
mKeyguardStatusViewController.getLockscreenHeight(),
|
||||
userSwitcherHeight,
|
||||
userSwitcherPreferredY,
|
||||
darkamount, mOverStretchAmount,
|
||||
darkAmount, mOverStretchAmount,
|
||||
bypassEnabled, getUnlockedStackScrollerPadding(),
|
||||
computeQsExpansionFraction(),
|
||||
mDisplayTopInset,
|
||||
@@ -1498,6 +1490,34 @@ public final class NotificationPanelViewController extends PanelViewController {
|
||||
updateClock();
|
||||
}
|
||||
|
||||
@ClockSize
|
||||
private int computeDesiredClockSize() {
|
||||
if (mSplitShadeEnabled) {
|
||||
return computeDesiredClockSizeForSplitShade();
|
||||
}
|
||||
return computeDesiredClockSizeForSingleShade();
|
||||
}
|
||||
|
||||
@ClockSize
|
||||
private int computeDesiredClockSizeForSingleShade() {
|
||||
if (hasVisibleNotifications()) {
|
||||
return SMALL;
|
||||
}
|
||||
return LARGE;
|
||||
}
|
||||
|
||||
@ClockSize
|
||||
private int computeDesiredClockSizeForSplitShade() {
|
||||
// Media is not visible to the user on AOD.
|
||||
boolean isMediaVisibleToUser =
|
||||
mMediaDataManager.hasActiveMediaOrRecommendation() && !isOnAod();
|
||||
if (isMediaVisibleToUser) {
|
||||
// When media is visible, it overlaps with the large clock. Use small clock instead.
|
||||
return SMALL;
|
||||
}
|
||||
return LARGE;
|
||||
}
|
||||
|
||||
private void updateKeyguardStatusViewAlignment(boolean animate) {
|
||||
boolean shouldBeCentered = shouldKeyguardStatusViewBeCentered();
|
||||
if (mStatusViewCentered != shouldBeCentered) {
|
||||
@@ -1524,12 +1544,35 @@ public final class NotificationPanelViewController extends PanelViewController {
|
||||
}
|
||||
|
||||
private boolean shouldKeyguardStatusViewBeCentered() {
|
||||
boolean hasVisibleNotifications = mNotificationStackScrollLayoutController
|
||||
if (mSplitShadeEnabled) {
|
||||
return shouldKeyguardStatusViewBeCenteredInSplitShade();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean shouldKeyguardStatusViewBeCenteredInSplitShade() {
|
||||
if (!hasVisibleNotifications()) {
|
||||
// No notifications visible. It is safe to have the clock centered as there will be no
|
||||
// overlap.
|
||||
return true;
|
||||
}
|
||||
if (hasPulsingNotifications()) {
|
||||
// Pulsing notification appears on the right. Move clock left to avoid overlap.
|
||||
return false;
|
||||
}
|
||||
// "Visible" notifications are actually not visible on AOD (unless pulsing), so it is safe
|
||||
// to center the clock without overlap.
|
||||
return isOnAod();
|
||||
}
|
||||
|
||||
private boolean isOnAod() {
|
||||
return mDozing && mDozeParameters.getAlwaysOn();
|
||||
}
|
||||
|
||||
private boolean hasVisibleNotifications() {
|
||||
return mNotificationStackScrollLayoutController
|
||||
.getVisibleNotificationCount() != 0
|
||||
|| mMediaDataManager.hasActiveMediaOrRecommendation();
|
||||
boolean isOnAod = mDozing && mDozeParameters.getAlwaysOn();
|
||||
return !mSplitShadeEnabled || !hasVisibleNotifications || isOnAod
|
||||
|| hasPulsingNotifications();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3783,6 +3826,8 @@ public final class NotificationPanelViewController extends PanelViewController {
|
||||
mAnimateNextPositionUpdate = false;
|
||||
}
|
||||
mNotificationStackScrollLayoutController.setPulsing(pulsing, animatePulse);
|
||||
|
||||
updateKeyguardStatusViewAlignment(/* animate= */ true);
|
||||
}
|
||||
|
||||
public void setAmbientIndicationTop(int ambientIndicationTop, boolean ambientTextVisible) {
|
||||
|
||||
@@ -904,7 +904,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
||||
|
||||
setDozing(/* dozing= */ true, /* dozingAlwaysOn= */ true);
|
||||
|
||||
assertThat(isKeyguardStatusViewCentered()).isTrue();
|
||||
assertKeyguardStatusViewCentered();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -915,7 +915,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
||||
|
||||
setDozing(/* dozing= */ true, /* dozingAlwaysOn= */ false);
|
||||
|
||||
assertThat(isKeyguardStatusViewCentered()).isFalse();
|
||||
assertKeyguardStatusViewNotCentered();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -926,19 +926,19 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
||||
|
||||
setDozing(/* dozing= */ false, /* dozingAlwaysOn= */ true);
|
||||
|
||||
assertThat(isKeyguardStatusViewCentered()).isFalse();
|
||||
assertKeyguardStatusViewNotCentered();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void keyguardStatusView_splitShade_pulsing_isCentered() {
|
||||
public void keyguardStatusView_splitShade_pulsing_isNotCentered() {
|
||||
when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2);
|
||||
when(mNotificationListContainer.hasPulsingNotifications()).thenReturn(true);
|
||||
mStatusBarStateController.setState(KEYGUARD);
|
||||
enableSplitShade(/* enabled= */ true);
|
||||
|
||||
setDozing(/* dozing= */ false, /* dozingAlwaysOn= */ true);
|
||||
setDozing(/* dozing= */ false, /* dozingAlwaysOn= */ false);
|
||||
|
||||
assertThat(isKeyguardStatusViewCentered()).isFalse();
|
||||
assertKeyguardStatusViewNotCentered();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -948,9 +948,9 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
||||
mStatusBarStateController.setState(KEYGUARD);
|
||||
enableSplitShade(/* enabled= */ true);
|
||||
|
||||
setDozing(/* dozing= */ false, /* dozingAlwaysOn= */ true);
|
||||
setDozing(/* dozing= */ false, /* dozingAlwaysOn= */ false);
|
||||
|
||||
assertThat(isKeyguardStatusViewCentered()).isFalse();
|
||||
assertKeyguardStatusViewNotCentered();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -963,7 +963,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
||||
mStatusBarStateController.setState(KEYGUARD);
|
||||
setDozing(/* dozing= */ false, /* dozingAlwaysOn= */ false);
|
||||
|
||||
assertThat(isKeyguardStatusViewCentered()).isFalse();
|
||||
assertKeyguardStatusViewCentered();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -1208,16 +1208,31 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSwitchesToBigClockInSplitShadeOnAod() {
|
||||
public void clockSize_mediaShowing_inSplitShade_onAod_isLarge() {
|
||||
when(mDozeParameters.getAlwaysOn()).thenReturn(true);
|
||||
mStatusBarStateController.setState(KEYGUARD);
|
||||
enableSplitShade(/* enabled= */ true);
|
||||
when(mMediaDataManager.hasActiveMediaOrRecommendation()).thenReturn(true);
|
||||
when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2);
|
||||
clearInvocations(mKeyguardStatusViewController);
|
||||
|
||||
mNotificationPanelViewController.setDozing(true, false, null);
|
||||
mNotificationPanelViewController.setDozing(/* dozing= */ true, /* animate= */ false, null);
|
||||
|
||||
verify(mKeyguardStatusViewController).displayClock(LARGE, /* animate */ true);
|
||||
verify(mKeyguardStatusViewController).displayClock(LARGE, /* animate= */ true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void clockSize_mediaShowing_inSplitShade_screenOff_notAod_isSmall() {
|
||||
when(mDozeParameters.getAlwaysOn()).thenReturn(false);
|
||||
mStatusBarStateController.setState(KEYGUARD);
|
||||
enableSplitShade(/* enabled= */ true);
|
||||
when(mMediaDataManager.hasActiveMediaOrRecommendation()).thenReturn(true);
|
||||
when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2);
|
||||
clearInvocations(mKeyguardStatusViewController);
|
||||
|
||||
mNotificationPanelViewController.setDozing(/* dozing= */ true, /* animate= */ false, null);
|
||||
|
||||
verify(mKeyguardStatusViewController).displayClock(SMALL, /* animate= */ true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -1548,9 +1563,15 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
||||
);
|
||||
}
|
||||
|
||||
private boolean isKeyguardStatusViewCentered() {
|
||||
private void assertKeyguardStatusViewCentered() {
|
||||
mNotificationPanelViewController.updateResources();
|
||||
return getConstraintSetLayout(R.id.keyguard_status_view).endToEnd
|
||||
== ConstraintSet.PARENT_ID;
|
||||
assertThat(getConstraintSetLayout(R.id.keyguard_status_view).endToEnd).isAnyOf(
|
||||
ConstraintSet.PARENT_ID, ConstraintSet.UNSET);
|
||||
}
|
||||
|
||||
private void assertKeyguardStatusViewNotCentered() {
|
||||
mNotificationPanelViewController.updateResources();
|
||||
assertThat(getConstraintSetLayout(R.id.keyguard_status_view).endToEnd).isEqualTo(
|
||||
R.id.qs_edge_guideline);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user