Merge "Fixed that notifications could be stuck and invisible on AOD" into qt-dev
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user