diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java index 8c54b692c0fb5..2786867a75635 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java @@ -89,6 +89,7 @@ public abstract class BaseStatusBar extends SystemUI implements protected static final int MSG_CLOSE_SEARCH_PANEL = 1025; protected static final int MSG_SHOW_HEADS_UP = 1026; protected static final int MSG_HIDE_HEADS_UP = 1027; + protected static final int MSG_ESCALATE_HEADS_UP = 1028; protected static final boolean ENABLE_HEADS_UP = true; // scores above this threshold should be displayed in heads up mode. @@ -1035,6 +1036,12 @@ public abstract class BaseStatusBar extends SystemUI implements } } + protected void notifyHeadsUpScreenOn(boolean screenOn) { + if (!screenOn && mInterruptingNotificationEntry != null) { + mHandler.sendEmptyMessage(MSG_ESCALATE_HEADS_UP); + } + } + protected boolean shouldInterrupt(StatusBarNotification sbn) { Notification notification = sbn.getNotification(); // some predicates to make the boolean logic legible diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index db738c489ebc4..ed9b542eb43cd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -1354,6 +1354,27 @@ public class PhoneStatusBar extends BaseStatusBar { setHeadsUpVisibility(false); mInterruptingNotificationEntry = null; break; + case MSG_ESCALATE_HEADS_UP: + escalateHeadsUp(); + setHeadsUpVisibility(false); + mInterruptingNotificationEntry = null; + break; + } + } + } + + /** if the interrupting notification had a fullscreen intent, fire it now. */ + private void escalateHeadsUp() { + if (mInterruptingNotificationEntry != null) { + final StatusBarNotification sbn = mInterruptingNotificationEntry.notification; + final Notification notification = sbn.getNotification(); + if (notification.fullScreenIntent != null) { + if (DEBUG) + Log.d(TAG, "converting a heads up to fullScreen"); + try { + notification.fullScreenIntent.send(); + } catch (PendingIntent.CanceledException e) { + } } } } @@ -2516,6 +2537,7 @@ public class PhoneStatusBar extends BaseStatusBar { // no waiting! makeExpandedInvisible(); notifyNavigationBarScreenOn(false); + notifyHeadsUpScreenOn(false); } else if (Intent.ACTION_CONFIGURATION_CHANGED.equals(action)) { if (DEBUG) {