Merge "Improved the heads up experience when notifications were blocked" into qt-r1-dev
am: fc039930d1
Change-Id: Id9238aa220d40c2bd4405b35a889e6e78391fc10
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt
index 6a3816c..f7e5bcf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt
@@ -64,7 +64,6 @@
private var mVisibilityAnimator: ObjectAnimator? = null
private var mVisibilityAmount = 0.0f
private var mLinearVisibilityAmount = 0.0f
- private var mWakingUp = false
private val mEntrySetToClearWhenFinished = mutableSetOf<NotificationEntry>()
private val mDozeParameters: DozeParameters
private var pulseExpanding: Boolean = false
@@ -73,6 +72,25 @@
var fullyAwake: Boolean = false
+ var wakingUp = false
+ set(value) {
+ field = value
+ willWakeUp = false
+ if (value) {
+ if (mNotificationsVisible && !mNotificationsVisibleForExpansion
+ && !bypassController.bypassEnabled) {
+ // We're waking up while pulsing, let's make sure the animation looks nice
+ mStackScroller.wakeUpFromPulse();
+ }
+ if (bypassController.bypassEnabled && !mNotificationsVisible) {
+ // Let's make sure our huns become visible once we are waking up in case
+ // they were blocked by the proximity sensor
+ updateNotificationVisibility(animate = shouldAnimateVisibility(),
+ increaseSpeed = false)
+ }
+ }
+ }
+
var willWakeUp = false
set(value) {
if (!value || mDozeAmount != 0.0f) {
@@ -112,7 +130,7 @@
var canShow = pulsing
if (bypassController.bypassEnabled) {
// We also allow pulsing on the lock screen!
- canShow = canShow || (mWakingUp || willWakeUp || fullyAwake)
+ canShow = canShow || (wakingUp || willWakeUp || fullyAwake)
&& statusBarStateController.state == StatusBarState.KEYGUARD
}
return canShow
@@ -160,7 +178,7 @@
wakeUpListeners.add(listener);
}
- fun removeFullyHiddenChangedListener(listener: WakeUpListener) {
+ fun removeListener(listener: WakeUpListener) {
wakeUpListeners.remove(listener);
}
@@ -169,7 +187,7 @@
var visible = mNotificationsVisibleForExpansion || mHeadsUpManagerPhone.hasNotifications()
visible = visible && canShowPulsingHuns
- if (!visible && mNotificationsVisible && (mWakingUp || willWakeUp) && mDozeAmount != 0.0f) {
+ if (!visible && mNotificationsVisible && (wakingUp || willWakeUp) && mDozeAmount != 0.0f) {
// let's not make notifications invisible while waking up, otherwise the animation
// is strange
return;
@@ -307,16 +325,6 @@
return if (bypassController.bypassEnabled) 0.0f else overflow
}
- fun setWakingUp(wakingUp: Boolean) {
- willWakeUp = false
- mWakingUp = wakingUp
- if (wakingUp && mNotificationsVisible && !mNotificationsVisibleForExpansion
- && !bypassController.bypassEnabled) {
- // We're waking up while pulsing, let's make sure the animation looks nice
- mStackScroller.wakeUpFromPulse();
- }
- }
-
override fun onHeadsUpStateChanged(entry: NotificationEntry, isHeadsUp: Boolean) {
var animate = shouldAnimateVisibility()
if (!isHeadsUp) {
@@ -325,7 +333,7 @@
// if we animate, we see the shelf briefly visible. Instead we fully animate
// the notification and its background out
animate = false
- } else if (!mWakingUp && !willWakeUp){
+ } else if (!wakingUp && !willWakeUp){
// TODO: look that this is done properly and not by anyone else
entry.setHeadsUpAnimatingAway(true)
mEntrySetToClearWhenFinished.add(entry)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java
index 46dd5e6..f53c4e8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java
@@ -35,6 +35,7 @@
import com.android.systemui.statusbar.HeadsUpStatusBarView;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
+import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
@@ -48,7 +49,7 @@
* Controls the appearance of heads up notifications in the icon area and the header itself.
*/
public class HeadsUpAppearanceController implements OnHeadsUpChangedListener,
- DarkIconDispatcher.DarkReceiver {
+ DarkIconDispatcher.DarkReceiver, NotificationWakeUpCoordinator.WakeUpListener {
public static final int CONTENT_FADE_DURATION = 110;
public static final int CONTENT_FADE_DELAY = 100;
private final NotificationIconAreaController mNotificationIconAreaController;
@@ -67,6 +68,7 @@
private final KeyguardBypassController mBypassController;
private final StatusBarStateController mStatusBarStateController;
private final CommandQueue mCommandQueue;
+ private final NotificationWakeUpCoordinator mWakeUpCoordinator;
@VisibleForTesting
float mExpandedHeight;
@VisibleForTesting
@@ -95,9 +97,10 @@
HeadsUpManagerPhone headsUpManager,
View statusbarView,
SysuiStatusBarStateController statusBarStateController,
- KeyguardBypassController keyguardBypassController) {
+ KeyguardBypassController keyguardBypassController,
+ NotificationWakeUpCoordinator wakeUpCoordinator) {
this(notificationIconAreaController, headsUpManager, statusBarStateController,
- keyguardBypassController,
+ keyguardBypassController, wakeUpCoordinator,
statusbarView.findViewById(R.id.heads_up_status_bar_view),
statusbarView.findViewById(R.id.notification_stack_scroller),
statusbarView.findViewById(R.id.notification_panel),
@@ -112,6 +115,7 @@
HeadsUpManagerPhone headsUpManager,
StatusBarStateController stateController,
KeyguardBypassController bypassController,
+ NotificationWakeUpCoordinator wakeUpCoordinator,
HeadsUpStatusBarView headsUpStatusBarView,
NotificationStackScrollLayout stackScroller,
NotificationPanelView panelView,
@@ -153,6 +157,8 @@
});
mBypassController = bypassController;
mStatusBarStateController = stateController;
+ mWakeUpCoordinator = wakeUpCoordinator;
+ wakeUpCoordinator.addListener(this);
mCommandQueue = getComponent(headsUpStatusBarView.getContext(), CommandQueue.class);
mKeyguardMonitor = Dependency.get(KeyguardMonitor.class);
}
@@ -161,6 +167,7 @@
public void destroy() {
mHeadsUpManager.removeListener(this);
mHeadsUpStatusBarView.setOnDrawingRectChangedListener(null);
+ mWakeUpCoordinator.removeListener(this);
mPanelView.removeTrackingHeadsUpListener(mSetTrackingHeadsUp);
mPanelView.removeVerticalTranslationListener(mUpdatePanelTranslation);
mPanelView.setHeadsUpAppearanceController(null);
@@ -289,6 +296,11 @@
updateParentClipping(true /* shouldClip */);
});
}
+ // Show the status bar icons when the view gets shown / hidden
+ if (mStatusBarStateController.getState() != StatusBarState.SHADE) {
+ mCommandQueue.recomputeDisableFlags(
+ mHeadsUpStatusBarView.getContext().getDisplayId(), false);
+ }
}
}
@@ -362,10 +374,12 @@
* @return if the heads up status bar view should be shown
*/
public boolean shouldBeVisible() {
- boolean canShow = !mIsExpanded;
+ boolean notificationsShown = !mWakeUpCoordinator.getNotificationsFullyHidden();
+ boolean canShow = !mIsExpanded && notificationsShown;
if (mBypassController.getBypassEnabled() &&
(mStatusBarStateController.getState() == StatusBarState.KEYGUARD
- || mKeyguardMonitor.isKeyguardGoingAway())) {
+ || mKeyguardMonitor.isKeyguardGoingAway())
+ && notificationsShown) {
canShow = true;
}
return canShow && mHeadsUpManager.hasPinnedHeadsUp();
@@ -377,15 +391,6 @@
updateHeader(entry);
}
- @Override
- public void onHeadsUpPinnedModeChanged(boolean inPinnedMode) {
- if (mStatusBarStateController.getState() != StatusBarState.SHADE) {
- // Show the status bar icons when the pinned mode changes
- mCommandQueue.recomputeDisableFlags(
- mHeadsUpStatusBarView.getContext().getDisplayId(), false);
- }
- }
-
public void setAppearFraction(float expandedHeight, float appearFraction) {
boolean changed = expandedHeight != mExpandedHeight;
mExpandedHeight = expandedHeight;
@@ -451,4 +456,9 @@
mAppearFraction = oldController.mAppearFraction;
}
}
+
+ @Override
+ public void onFullyHiddenChanged(boolean isFullyHidden) {
+ updateTopEntry();
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java
index 1360a08..b13af8b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java
@@ -217,7 +217,7 @@
mConfigurationController.removeCallback(this);
mKeyguardUpdateMonitor.removeCallback(mUpdateMonitorCallback);
mKeyguardMonitor.removeCallback(mKeyguardMonitorCallback);
- mWakeUpCoordinator.removeFullyHiddenChangedListener(this);
+ mWakeUpCoordinator.removeListener(this);
mUnlockMethodCache.removeListener(this);
if (mDockManager != null) {
mDockManager.removeListener(mDockEventListener);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
index 37855ae..d8b665e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -454,6 +454,11 @@
mPulseExpansionHandler.setUp(mNotificationStackScroller, this, mShadeController);
mWakeUpCoordinator.addListener(new NotificationWakeUpCoordinator.WakeUpListener() {
@Override
+ public void onFullyHiddenChanged(boolean isFullyHidden) {
+ updateKeyguardStatusBarForHeadsUp();
+ }
+
+ @Override
public void onPulseExpansionChanged(boolean expandingChanged) {
if (mKeyguardBypassController.getBypassEnabled()) {
// Position the notifications while dragging down while pulsing
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index d93dc95..32e9b11 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -856,7 +856,8 @@
}
mHeadsUpAppearanceController = new HeadsUpAppearanceController(
mNotificationIconAreaController, mHeadsUpManager, mStatusBarWindow,
- mStatusBarStateController, mKeyguardBypassController);
+ mStatusBarStateController, mKeyguardBypassController,
+ mWakeUpCoordinator);
mHeadsUpAppearanceController.readFrom(oldController);
mStatusBarWindow.setStatusBarView(mStatusBarView);
updateAreThereNotifications();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java
index b45707e..a38094d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java
@@ -35,6 +35,7 @@
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.HeadsUpStatusBarView;
import com.android.systemui.statusbar.NotificationTestHelper;
+import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
@@ -59,6 +60,7 @@
private View mOperatorNameView;
private StatusBarStateController mStatusbarStateController;
private KeyguardBypassController mBypassController;
+ private NotificationWakeUpCoordinator mWakeUpCoordinator;
@Before
public void setUp() throws Exception {
@@ -72,11 +74,13 @@
mOperatorNameView = new View(mContext);
mStatusbarStateController = mock(StatusBarStateController.class);
mBypassController = mock(KeyguardBypassController.class);
+ mWakeUpCoordinator = mock(NotificationWakeUpCoordinator.class);
mHeadsUpAppearanceController = new HeadsUpAppearanceController(
mock(NotificationIconAreaController.class),
mHeadsUpManager,
mStatusbarStateController,
mBypassController,
+ mWakeUpCoordinator,
mHeadsUpStatusBarView,
mStackScroller,
mPanelView,
@@ -153,6 +157,7 @@
mHeadsUpManager,
mStatusbarStateController,
mBypassController,
+ mWakeUpCoordinator,
mHeadsUpStatusBarView,
mStackScroller,
mPanelView,