Merge "Fixed that notifications could be stuck and invisible on AOD" into qt-dev

This commit is contained in:
Lucas Dupin
2019-05-27 00:12:31 +00:00
committed by Android (Google) Code Review
8 changed files with 52 additions and 12 deletions

View File

@@ -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)

View File

@@ -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()
}

View File

@@ -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();

View File

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

View File

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

View File

@@ -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();

View File

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

View File

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