Don't clear effects when the panel is fully collapsed.
Otherwise, a FLAG_SHOW_WHEN_LOCKED activity would be unable to make noise (particularly in conjunction with a long sound, or FLAG_INSISTENT) because the mere presence of the status bar on screen would generate an updateVisibleToUser() call, which would in turn use onPanelRevealed() to call clearEffects(). Instead, we have to clear effects from deep in the stack scroller; that's apparently the only place right now where we know with 100% certainty that notifications are actually visible to the user. We also no longer clear effects just because the keyguard is shown. That's silly. Bug: 26863782 Change-Id: I9ec53024f4be060da203b835d31da81104e8c8e6
This commit is contained in:
@@ -1856,15 +1856,16 @@ public abstract class BaseStatusBar extends SystemUI implements
|
||||
|
||||
/**
|
||||
* The LEDs are turned off when the notification panel is shown, even just a little bit.
|
||||
* See also NotificationStackScrollLayout.setIsExpanded() for another place where we
|
||||
* attempt to do this.
|
||||
*/
|
||||
protected void handleVisibleToUserChanged(boolean visibleToUser) {
|
||||
try {
|
||||
if (visibleToUser) {
|
||||
boolean pinnedHeadsUp = mHeadsUpManager.hasPinnedHeadsUp();
|
||||
boolean clearNotificationEffects =
|
||||
((mShowLockscreenNotifications && mState == StatusBarState.KEYGUARD) ||
|
||||
(!pinnedHeadsUp && (mState == StatusBarState.SHADE
|
||||
|| mState == StatusBarState.SHADE_LOCKED)));
|
||||
!isPanelFullyCollapsed() &&
|
||||
(mState == StatusBarState.SHADE || mState == StatusBarState.SHADE_LOCKED);
|
||||
int notificationLoad = mNotificationData.getActiveNotifications().size();
|
||||
if (pinnedHeadsUp && isPanelFullyCollapsed()) {
|
||||
notificationLoad = 1;
|
||||
|
||||
@@ -2691,6 +2691,16 @@ public class NotificationStackScrollLayout extends ViewGroup
|
||||
if (changed) {
|
||||
if (!mIsExpanded) {
|
||||
mGroupManager.collapseAllGroups();
|
||||
} else {
|
||||
// XXX: HACK: we should not be clearing notification effects from way down here.
|
||||
// But at the moment we don't have a reliable way to know when the window is
|
||||
// actually exposed to the air, so
|
||||
if (mPhoneStatusBar.getBarState() != StatusBarState.KEYGUARD) {
|
||||
if (DEBUG) {
|
||||
Log.v(TAG, "clearing notification effects from scroller");
|
||||
}
|
||||
mPhoneStatusBar.clearNotificationEffects();
|
||||
}
|
||||
}
|
||||
updateNotificationAnimationStates();
|
||||
updateChronometers();
|
||||
|
||||
Reference in New Issue
Block a user