OSDN Git Service

Support for tapping on an immersive-mode priority notification.
authorDaniel Sandler <dsandler@android.com>
Tue, 29 Jun 2010 19:19:54 +0000 (15:19 -0400)
committerDaniel Sandler <dsandler@android.com>
Tue, 29 Jun 2010 19:19:54 +0000 (15:19 -0400)
When the user taps on an intruder alert (the priority
notification in immersive mode), the .contentIntent in the
Notification object will be sent, just as we handle tapping
on a normal Notification in the windowshade.

Change-Id: Ib6991837b0b2122fe138cddacf347fdbc426b99d

packages/SystemUI/src/com/android/systemui/statusbar/StatusBarService.java
tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java

index 641abb8..7eef0e9 100644 (file)
@@ -273,12 +273,6 @@ public class StatusBarService extends Service implements CommandQueue.Callbacks
         mIntruderAlertView = View.inflate(context, R.layout.intruder_alert, null);
         mIntruderAlertView.setVisibility(View.GONE);
         mIntruderAlertView.setClickable(true);
-        mIntruderAlertView.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                Slog.d(TAG, "Intruder Alert clicked!");
-                mHandler.sendEmptyMessage(MSG_HIDE_INTRUDER);
-            }
-        });
 
         StatusBarView sb = (StatusBarView)View.inflate(context, R.layout.status_bar, null);
         sb.mService = this;
@@ -423,13 +417,16 @@ public class StatusBarService extends Service implements CommandQueue.Callbacks
                     iconView.getStatusBarIcon()));
                 alertText.setText(notification.notification.tickerText);
 
+                mIntruderAlertView.setOnClickListener(
+                    new Launcher(notification.notification.contentIntent,
+                        notification.pkg, notification.tag, notification.id));
+
                 // 2. Animate mIntruderAlertView in
-                mHandler.removeMessages(MSG_HIDE_INTRUDER);
                 mHandler.sendEmptyMessage(MSG_SHOW_INTRUDER);
-                mHandler.sendEmptyMessageDelayed(MSG_HIDE_INTRUDER, INTRUDER_ALERT_DECAY_MS);
 
                 // 3. Set alarm to age the notification off (TODO)
-
+                mHandler.removeMessages(MSG_HIDE_INTRUDER);
+                mHandler.sendEmptyMessageDelayed(MSG_HIDE_INTRUDER, INTRUDER_ALERT_DECAY_MS);
             }
         } else if (notification.notification.fullScreenIntent != null) {
             // not immersive & a full-screen alert should be shown
@@ -1085,23 +1082,32 @@ public class StatusBarService extends Service implements CommandQueue.Callbacks
                 ActivityManagerNative.getDefault().resumeAppSwitches();
             } catch (RemoteException e) {
             }
-            int[] pos = new int[2];
-            v.getLocationOnScreen(pos);
-            Intent overlay = new Intent();
-            overlay.setSourceBounds(
-                    new Rect(pos[0], pos[1], pos[0]+v.getWidth(), pos[1]+v.getHeight()));
-            try {
-                mIntent.send(StatusBarService.this, 0, overlay);
-            } catch (PendingIntent.CanceledException e) {
-                // the stack trace isn't very helpful here.  Just log the exception message.
-                Slog.w(TAG, "Sending contentIntent failed: " + e);
+
+            if (mIntent != null) {
+                int[] pos = new int[2];
+                v.getLocationOnScreen(pos);
+                Intent overlay = new Intent();
+                overlay.setSourceBounds(
+                        new Rect(pos[0], pos[1], pos[0]+v.getWidth(), pos[1]+v.getHeight()));
+                try {
+                    mIntent.send(StatusBarService.this, 0, overlay);
+                } catch (PendingIntent.CanceledException e) {
+                    // the stack trace isn't very helpful here.  Just log the exception message.
+                    Slog.w(TAG, "Sending contentIntent failed: " + e);
+                }
             }
+
             try {
                 mBarService.onNotificationClick(mPkg, mTag, mId);
             } catch (RemoteException ex) {
                 // system process is dead if we're here.
             }
+
+            // close the shade if it was open
             animateCollapse();
+
+            // If this click was on the intruder alert, hide that instead
+            mHandler.sendEmptyMessage(MSG_HIDE_INTRUDER);
         }
     }
 
index 8c343b5..c6a4134 100644 (file)
@@ -104,6 +104,8 @@ public class StatusBarTest extends TestActivity
                     0,
                     fullScreenIntent,
                     PendingIntent.FLAG_CANCEL_CURRENT);
+                // if you tap on it you should get the original alert box
+                not.contentIntent = not.fullScreenIntent;
                 mNotificationManager.notify(id, not);
             }
         },