Merge "Allow notifications to not specify a contentIntent."
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LatestItemView.java b/packages/SystemUI/src/com/android/systemui/statusbar/LatestItemView.java
index 1e89624..2f94af6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/LatestItemView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/LatestItemView.java
@@ -23,12 +23,22 @@
 import android.widget.FrameLayout;
 
 public class LatestItemView extends FrameLayout {
+    private boolean mDispatchTorches;
 
     public LatestItemView(Context context, AttributeSet attrs) {
         super(context, attrs);
     }
 
     public boolean dispatchTouchEvent(MotionEvent ev) {
-        return onTouchEvent(ev);
+        if (mDispatchTorches) {
+            return super.dispatchTouchEvent(ev);
+        } else {
+            return onTouchEvent(ev);
+        }
+    }
+
+    public void setOnClickListener(OnClickListener l) {
+        mDispatchTorches = l == null;
+        super.setOnClickListener(l);
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/PhoneStatusBarService.java b/packages/SystemUI/src/com/android/systemui/statusbar/PhoneStatusBarService.java
index 57ebd27..0a8d22b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/PhoneStatusBarService.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/PhoneStatusBarService.java
@@ -440,6 +440,8 @@
                 if (contentIntent != null) {
                     oldEntry.content.setOnClickListener(new Launcher(contentIntent,
                                 notification.pkg, notification.tag, notification.id));
+                } else {
+                    oldEntry.content.setOnClickListener(null);
                 }
                 // Update the icon.
                 final StatusBarIcon ic = new StatusBarIcon(notification.pkg,
@@ -516,6 +518,8 @@
         if (contentIntent != null) {
             content.setOnClickListener(new Launcher(contentIntent, notification.pkg,
                         notification.tag, notification.id));
+        } else {
+            oldEntry.content.setOnClickListener(null);
         }
 
         View expanded = null;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java
index 0e26f52..c4ab785 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java
@@ -370,6 +370,8 @@
                 if (contentIntent != null) {
                     oldEntry.content.setOnClickListener(new NotificationClicker(contentIntent,
                                 notification.pkg, notification.tag, notification.id));
+                } else {
+                    oldEntry.content.setOnClickListener(null);
                 }
                 // Update the icon.
                 final StatusBarIcon ic = new StatusBarIcon(notification.pkg,
@@ -760,6 +762,8 @@
         if (contentIntent != null) {
             content.setOnClickListener(new NotificationClicker(contentIntent,
                         sbn.pkg, sbn.tag, sbn.id));
+        } else {
+            content.setOnClickListener(null);
         }
 
         View expanded = null;
diff --git a/services/java/com/android/server/NotificationManagerService.java b/services/java/com/android/server/NotificationManagerService.java
index 5afabbd..15eaa9e 100755
--- a/services/java/com/android/server/NotificationManagerService.java
+++ b/services/java/com/android/server/NotificationManagerService.java
@@ -741,10 +741,6 @@
                 throw new IllegalArgumentException("contentView required: pkg=" + pkg
                         + " id=" + id + " notification=" + notification);
             }
-            if (notification.contentIntent == null) {
-                throw new IllegalArgumentException("contentIntent required: pkg=" + pkg
-                        + " id=" + id + " notification=" + notification);
-            }
         }
 
         synchronized (mNotificationList) {
diff --git a/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java b/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java
index e30cf4a..9c267d6 100644
--- a/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java
+++ b/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java
@@ -86,6 +86,18 @@
             }
         },
 
+        new Test("custom intent on text view") {
+            public void run() {
+                Notification n = new Notification(R.drawable.icon1, null,
+                        mActivityCreateTime);
+                n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
+                            "This is a notification!!!", null);
+                n.contentView.setOnClickPendingIntent(com.android.internal.R.id.text,
+                        makeIntent2());
+                mNM.notify(1, n);
+            }
+        },
+
         new Test("Ticker 1 line") {
             public void run() {
                 Notification n = new Notification(R.drawable.icon1, "tick tick tick",
@@ -776,6 +788,12 @@
         return PendingIntent.getActivity(this, 0, intent, 0);
     }
 
+    private PendingIntent makeIntent2() {
+        Intent intent = new Intent(this, StatusBarTest.class);
+        return PendingIntent.getActivity(this, 0, intent, 0);
+    }
+
+
     class StateStress extends Test {
         StateStress(String name, int pause, int iterations, Runnable[] tasks) {
             super(name);