summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Lucas Dupin <dupin@google.com> 2019-05-27 00:12:31 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-05-27 00:12:31 +0000
commit791b161405e6e4e3c27731ab3ea87a7eaba376cd (patch)
tree31edfa7a82d305f9f69ab1e1673535470a200270
parent3a0a965cded239793fb20250d80b11f1d92a399c (diff)
parentd0b48e36668503e5ba7ca3b3b6e955149b0a29bc (diff)
Merge "Fixed that notifications could be stuck and invisible on AOD" into qt-dev
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt1
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt32
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java1
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSection.java1
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java1
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