OSDN Git Service

handle updates to the notification in the heads up
authorChris Wren <cwren@android.com>
Thu, 8 Aug 2013 20:48:48 +0000 (16:48 -0400)
committerChris Wren <cwren@android.com>
Thu, 22 Aug 2013 14:45:31 +0000 (10:45 -0400)
Bug: 10226356
Change-Id: I5bc9aecc3849617092e863868a6df610c615048b

packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

index 2786867..b8427f3 100644 (file)
@@ -437,7 +437,7 @@ public abstract class BaseStatusBar extends SystemUI implements
     }
 
     public void onHeadsUpDismissed() {
-        // pass
+        mHandler.sendEmptyMessage(MSG_HIDE_HEADS_UP);
     }
 
     @Override
@@ -958,20 +958,20 @@ public abstract class BaseStatusBar extends SystemUI implements
             if (DEBUG) Log.d(TAG, "reusing notification for key: " + key);
             oldEntry.notification = notification;
             try {
-                // Reapply the RemoteViews
-                contentView.reapply(mContext, oldEntry.expanded, mOnClickHandler);
-                if (bigContentView != null && oldEntry.getBigContentView() != null) {
-                    bigContentView.reapply(mContext, oldEntry.getBigContentView(), mOnClickHandler);
-                }
-                // update the contentIntent
-                final PendingIntent contentIntent = notification.getNotification().contentIntent;
-                if (contentIntent != null) {
-                    final View.OnClickListener listener = makeClicker(contentIntent,
-                            notification.getPackageName(), notification.getTag(), notification.getId());
-                    oldEntry.content.setOnClickListener(listener);
-                } else {
-                    oldEntry.content.setOnClickListener(null);
+                updateNotificationViews(oldEntry, notification);
+
+                if (ENABLE_HEADS_UP && mInterruptingNotificationEntry != null
+                        && oldNotification == mInterruptingNotificationEntry.notification) {
+                    if (!shouldInterrupt(notification)) {
+                        if (DEBUG) Log.d(TAG, "no longer interrupts!");
+                        mHandler.sendEmptyMessage(MSG_HIDE_HEADS_UP);
+                    } else {
+                        if (DEBUG) Log.d(TAG, "updating the current heads up:" + notification);
+                        mInterruptingNotificationEntry.notification = notification;
+                        updateNotificationViews(mInterruptingNotificationEntry, notification);
+                    }
                 }
+
                 // Update the icon.
                 final StatusBarIcon ic = new StatusBarIcon(notification.getPackageName(),
                         notification.getUser(),
@@ -997,7 +997,7 @@ public abstract class BaseStatusBar extends SystemUI implements
             if (DEBUG) Log.d(TAG, "notification is " + (isTopAnyway ? "top" : "not top"));
             final boolean wasExpanded = oldEntry.row.isUserExpanded();
             removeNotificationViews(key);
-            addNotificationViews(key, notification);
+            addNotificationViews(key, notification);  // will also replace the heads up
             if (wasExpanded) {
                 final NotificationData.Entry newEntry = mNotificationData.findByKey(key);
                 newEntry.row.setExpanded(true);
@@ -1022,17 +1022,25 @@ public abstract class BaseStatusBar extends SystemUI implements
         // Recalculate the position of the sliding windows and the titles.
         setAreThereNotifications();
         updateExpandedViewPos(EXPANDED_LEAVE_ALONE);
+    }
 
-        // See if we need to update the heads up.
-        if (ENABLE_HEADS_UP && mInterruptingNotificationEntry != null
-                && oldNotification == mInterruptingNotificationEntry.notification) {
-            if (DEBUG) Log.d(TAG, "updating the current heads up:" + notification);
-            // XXX: this is a hack for Alarms. The real implementation will need to *update*
-            // the heads up.
-            if (!shouldInterrupt(notification)) {
-                if (DEBUG) Log.d(TAG, "no longer interrupts!");
-                mHandler.sendEmptyMessage(MSG_HIDE_HEADS_UP);
-            }
+    private void updateNotificationViews(NotificationData.Entry entry,
+            StatusBarNotification notification) {
+        final RemoteViews contentView = notification.getNotification().contentView;
+        final RemoteViews bigContentView = notification.getNotification().bigContentView;
+        // Reapply the RemoteViews
+        contentView.reapply(mContext, entry.expanded, mOnClickHandler);
+        if (bigContentView != null && entry.getBigContentView() != null) {
+            bigContentView.reapply(mContext, entry.getBigContentView(), mOnClickHandler);
+        }
+        // update the contentIntent
+        final PendingIntent contentIntent = notification.getNotification().contentIntent;
+        if (contentIntent != null) {
+            final View.OnClickListener listener = makeClicker(contentIntent,
+                    notification.getPackageName(), notification.getTag(), notification.getId());
+            entry.content.setOnClickListener(listener);
+        } else {
+            entry.content.setOnClickListener(null);
         }
     }
 
index b36bedd..6256721 100644 (file)
@@ -1319,12 +1319,10 @@ public class PhoneStatusBar extends BaseStatusBar {
                     break;
                 case MSG_HIDE_HEADS_UP:
                     setHeadsUpVisibility(false);
-                    mInterruptingNotificationEntry = null;
                     break;
                 case MSG_ESCALATE_HEADS_UP:
                     escalateHeadsUp();
                     setHeadsUpVisibility(false);
-                    mInterruptingNotificationEntry = null;
                     break;
             }
         }
@@ -2507,6 +2505,10 @@ public class PhoneStatusBar extends BaseStatusBar {
         if (!ENABLE_HEADS_UP) return;
         if (DEBUG) Log.v(TAG, (vis ? "showing" : "hiding") + " heads up window");
         mHeadsUpNotificationView.setVisibility(vis ? View.VISIBLE : View.GONE);
+        if (!vis) {
+            if (DEBUG) Log.d(TAG, "setting heads up entry to null");
+            mInterruptingNotificationEntry = null;
+        }
     }
 
     public void animateHeadsUp(boolean animateInto, float frac) {