diff options
| author | 2019-05-27 00:12:31 +0000 | |
|---|---|---|
| committer | 2019-05-27 00:12:31 +0000 | |
| commit | 791b161405e6e4e3c27731ab3ea87a7eaba376cd (patch) | |
| tree | 31edfa7a82d305f9f69ab1e1673535470a200270 | |
| parent | 3a0a965cded239793fb20250d80b11f1d92a399c (diff) | |
| parent | d0b48e36668503e5ba7ca3b3b6e955149b0a29bc (diff) | |
Merge "Fixed that notifications could be stuck and invisible on AOD" into qt-dev
8 files changed, 52 insertions, 12 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt b/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt index bf9947450126..a9d4fdeae397 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt @@ -149,6 +149,7 @@ constructor(context: Context, } isExpanding = false isWakingToShadeLocked = true + mWakeUpCoordinator.willWakeUp = true mPowerManager!!.wakeUp(SystemClock.uptimeMillis(), WAKE_REASON_GESTURE, "com.android.systemui:PULSEDRAG") mShadeController!!.goToLockedShade(mStartingChild) 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 1e506ad0ee94..c65e90ea7bea 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt @@ -63,6 +63,25 @@ class NotificationWakeUpCoordinator @Inject constructor( private var mWakingUp = false private val mEntrySetToClearWhenFinished = mutableSetOf<NotificationEntry>() private val mDozeParameters: DozeParameters; + var willWakeUp = false + set(value) { + if (value && mDozeAmount != 0.0f) { + field = value + } + } + + var pulsing: Boolean = false + set(value) { + field = value + if (value) { + // Only when setting pulsing to true we want an immediate update, since we get + // this already when the doze service finishes which is usually before we get + // the waking up callback + updateNotificationVisibility(animate = shouldAnimateVisibility(), + increaseSpeed = false) + } + } + init { mAmbientPulseManager.addListener(this) @@ -92,8 +111,9 @@ class NotificationWakeUpCoordinator @Inject constructor( } private fun updateNotificationVisibility(animate: Boolean, increaseSpeed: Boolean) { - var visible = mNotificationsVisibleForExpansion || mAmbientPulseManager.hasNotifications() - if (!visible && mNotificationsVisible && mWakingUp && mDozeAmount != 0.0f) { + var visible = (mNotificationsVisibleForExpansion || mAmbientPulseManager.hasNotifications()) + && pulsing; + if (!visible && mNotificationsVisible && (mWakingUp || willWakeUp) && mDozeAmount != 0.0f) { // let's not make notifications invisible while waking up, otherwise the animation // is strange return; @@ -192,6 +212,7 @@ class NotificationWakeUpCoordinator @Inject constructor( } fun setWakingUp(wakingUp: Boolean) { + willWakeUp = false mWakingUp = wakingUp if (wakingUp && mNotificationsVisible && !mNotificationsVisibleForExpansion) { // We're waking up while pulsing, let's make sure the animation looks nice @@ -200,9 +221,9 @@ class NotificationWakeUpCoordinator @Inject constructor( } override fun onAmbientStateChanged(entry: NotificationEntry, isPulsing: Boolean) { - var animate = mDozeParameters.getAlwaysOn() && !mDozeParameters.getDisplayNeedsBlanking() + var animate = shouldAnimateVisibility() if (!isPulsing) { - if (mLinearDozeAmount != 0.0f) { + if (mLinearDozeAmount != 0.0f && mLinearVisibilityAmount != 0.0f) { if (entry.isRowDismissed) { // if we animate, we see the shelf briefly visible. Instead we fully animate // the notification and its background out @@ -218,4 +239,7 @@ class NotificationWakeUpCoordinator @Inject constructor( } updateNotificationVisibility(animate, increaseSpeed = false) } + + private fun shouldAnimateVisibility() = + mDozeParameters.getAlwaysOn() && !mDozeParameters.getDisplayNeedsBlanking() }
\ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java index 73f7732fe4ab..ecbb2161a0cf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java @@ -340,6 +340,7 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl && !NotificationStackScrollLayout.isPinnedHeadsUp(getParent()) && !mParent.areGutsExposed() && !mParent.isDark() + && !mParent.showingAmbientPulsing() && (mCheckForDrag == null || !mHandler.hasCallbacks(mCheckForDrag))) { // Only show the menu if we're not a heads up view and guts aren't exposed. mCheckForDrag = new CheckForDrag(); 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 8c6d1015bd4d..e5fbf6396667 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 @@ -395,6 +395,13 @@ public class AmbientState { mPulsing = hasPulsing; } + /** + * @return if we're pulsing in general + */ + public boolean isPulsing() { + return mPulsing; + } + public boolean isPulsing(NotificationEntry entry) { if (!mPulsing || mAmbientPulseManager == null) { return false; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSection.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSection.java index dd6d3833f147..cbcfdd4b2ea7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSection.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSection.java @@ -260,6 +260,7 @@ class NotificationSection { + ExpandableViewState.getFinalActualHeight(firstView)); if (shiftBackgroundWithFirst) { mBounds.left += Math.max(firstView.getTranslation(), 0); + mBounds.right += Math.min(firstView.getTranslation(), 0); } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java index 8c73e9834195..dccf404f0483 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java @@ -871,6 +871,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd int lastSectionBottom = mSections[0].getCurrentBounds().bottom + animationYOffset; int previousLeft = left; + int previousRight = right; boolean first = true; for (NotificationSection section : mSections) { if (section.getFirstVisibleChild() == null) { @@ -878,6 +879,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd } int sectionTop = section.getCurrentBounds().top + animationYOffset; int ownLeft = Math.min(Math.max(left, section.getCurrentBounds().left), right); + int ownRight = Math.max(Math.min(right, section.getCurrentBounds().right), ownLeft); // If sections are directly adjacent to each other, we don't want to draw them // as separate roundrects, as the rounded corners right next to each other look // bad. @@ -885,19 +887,20 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd || (previousLeft != ownLeft && !first)) { canvas.drawRoundRect(ownLeft, backgroundRectTop, - right, + ownRight, lastSectionBottom, mCornerRadius, mCornerRadius, mBackgroundPaint); backgroundRectTop = sectionTop; } previousLeft = ownLeft; + previousRight = ownRight; lastSectionBottom = section.getCurrentBounds().bottom + animationYOffset; first = false; } canvas.drawRoundRect(previousLeft, backgroundRectTop, - right, + previousRight, lastSectionBottom, mCornerRadius, mCornerRadius, mBackgroundPaint); } @@ -2406,11 +2409,6 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd mAmbientState.setLayoutMaxHeight(mContentHeight); } - @ShadeViewRefactor(RefactorComponent.SHADE_VIEW) - private boolean isPulsing(NotificationEntry entry) { - return mAmbientState.isPulsing(entry); - } - @Override @ShadeViewRefactor(RefactorComponent.SHADE_VIEW) public boolean hasPulsingNotifications() { @@ -5170,6 +5168,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd } mPulsing = pulsing; mAmbientState.setPulsing(pulsing); + mSwipeHelper.setPulsing(pulsing); updateNotificationAnimationStates(); updateAlgorithmHeightAndPadding(); updateContentHeight(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java index 0f71192277df..8dd324b33287 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java @@ -49,6 +49,7 @@ class NotificationSwipeHelper extends SwipeHelper private NotificationMenuRowPlugin mCurrMenuRow; private boolean mIsExpanded; + private boolean mPulsing; public NotificationSwipeHelper(int swipeDirection, NotificationCallback callback, Context context, NotificationMenuRowPlugin.OnMenuEventListener menuListener) { @@ -205,7 +206,8 @@ class NotificationSwipeHelper extends SwipeHelper boolean slowSwipedFarEnough = swipedEnoughToShowMenu(menuRow) && isSlowSwipe; boolean isFastNonDismissGesture = gestureFastEnough && !gestureTowardsMenu && !isDismissGesture; - boolean isAbleToShowMenu = menuRow.shouldShowGutsOnSnapOpen() || mIsExpanded; + boolean isAbleToShowMenu = menuRow.shouldShowGutsOnSnapOpen() + || mIsExpanded && !mPulsing; boolean isMenuRevealingGestureAwayFromMenu = slowSwipedFarEnough || (isFastNonDismissGesture && isAbleToShowMenu); int menuSnapTarget = menuRow.getMenuSnapTarget(); @@ -436,6 +438,10 @@ class NotificationSwipeHelper extends SwipeHelper return ret; } + public void setPulsing(boolean pulsing) { + mPulsing = pulsing; + } + public interface NotificationCallback extends SwipeHelper.Callback{ /** * @return if the view should be dismissed as soon as the touch is released, otherwise its 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 4e8f58413303..1da819f1a764 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -3982,6 +3982,7 @@ public class StatusBar extends SystemUI implements DemoMode, } updateScrimController(); mPulseExpansionHandler.setPulsing(pulsing); + mWakeUpCoordinator.setPulsing(pulsing); } }, reason); // DozeScrimController is in pulse state, now let's ask ScrimController to start |