diff options
6 files changed, 31 insertions, 28 deletions
diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl index 6428e15..caa6b98 100644 --- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl +++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl @@ -42,7 +42,7 @@ interface IStatusBarService out int[] switches, out List<IBinder> binders); void onPanelRevealed(); void onPanelHidden(); - void onNotificationClick(String pkg, String tag, int id, int userId); + void onNotificationClick(String key); void onNotificationError(String pkg, String tag, int id, int uid, int initialPid, String message, int userId); void onClearAllNotifications(int userId); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java index 9149e2d..360f4bf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java @@ -768,8 +768,8 @@ public abstract class BaseStatusBar extends SystemUI implements PendingIntent contentIntent = sbn.getNotification().contentIntent; if (contentIntent != null) { - final View.OnClickListener listener = makeClicker(contentIntent, - sbn.getPackageName(), sbn.getTag(), sbn.getId(), isHeadsUp, sbn.getUserId()); + final View.OnClickListener listener = makeClicker(contentIntent, sbn.getKey(), + isHeadsUp); row.setOnClickListener(listener); } else { row.setOnClickListener(null); @@ -879,27 +879,20 @@ public abstract class BaseStatusBar extends SystemUI implements return true; } - public NotificationClicker makeClicker(PendingIntent intent, String pkg, String tag, - int id, boolean forHun, int userId) { - return new NotificationClicker(intent, pkg, tag, id, forHun, userId); + public NotificationClicker makeClicker(PendingIntent intent, String notificationKey, + boolean forHun) { + return new NotificationClicker(intent, notificationKey, forHun); } protected class NotificationClicker implements View.OnClickListener { private PendingIntent mIntent; - private String mPkg; - private String mTag; - private int mId; + private final String mNotificationKey; private boolean mIsHeadsUp; - private int mUserId; - public NotificationClicker(PendingIntent intent, String pkg, String tag, int id, - boolean forHun, int userId) { + public NotificationClicker(PendingIntent intent, String notificationKey, boolean forHun) { mIntent = intent; - mPkg = pkg; - mTag = tag; - mId = id; + mNotificationKey = notificationKey; mIsHeadsUp = forHun; - mUserId = userId; } public void onClick(View v) { @@ -935,7 +928,7 @@ public abstract class BaseStatusBar extends SystemUI implements if (mIsHeadsUp) { mHandler.sendEmptyMessage(MSG_HIDE_HEADS_UP); } - mBarService.onNotificationClick(mPkg, mTag, mId, mUserId); + mBarService.onNotificationClick(mNotificationKey); } catch (RemoteException ex) { // system process is dead if we're here. } @@ -1338,9 +1331,8 @@ public abstract class BaseStatusBar extends SystemUI implements // update the contentIntent final PendingIntent contentIntent = notification.getNotification().contentIntent; if (contentIntent != null) { - final View.OnClickListener listener = makeClicker(contentIntent, - notification.getPackageName(), notification.getTag(), notification.getId(), - isHeadsUp, notification.getUserId()); + final View.OnClickListener listener = makeClicker(contentIntent, notification.getKey(), + isHeadsUp); entry.row.setOnClickListener(listener); } else { entry.row.setOnClickListener(null); diff --git a/services/core/java/com/android/server/EventLogTags.logtags b/services/core/java/com/android/server/EventLogTags.logtags index 5083d44..6fab37c 100644 --- a/services/core/java/com/android/server/EventLogTags.logtags +++ b/services/core/java/com/android/server/EventLogTags.logtags @@ -65,6 +65,8 @@ option java_package com.android.server 27501 notification_panel_hidden # when notifications are newly displayed on screen, or disappear from screen 27510 notification_visibility_changed (newlyVisibleKeys|3),(noLongerVisibleKeys|3) +# when a notification has been clicked +27520 notification_clicked (key|3) # --------------------------- # Watchdog.java diff --git a/services/core/java/com/android/server/notification/NotificationDelegate.java b/services/core/java/com/android/server/notification/NotificationDelegate.java index ce4c1ed..b41b478 100644 --- a/services/core/java/com/android/server/notification/NotificationDelegate.java +++ b/services/core/java/com/android/server/notification/NotificationDelegate.java @@ -21,8 +21,7 @@ import android.os.IBinder; public interface NotificationDelegate { void onSetDisabled(int status); void onClearAll(int callingUid, int callingPid, int userId); - void onNotificationClick(int callingUid, int callingPid, - String pkg, String tag, int id, int userId); + void onNotificationClick(int callingUid, int callingPid, String key); void onNotificationClear(int callingUid, int callingPid, String pkg, String tag, int id, int userId); void onNotificationError(int callingUid, int callingPid, diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 6e4eb56..76b4c89 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -602,10 +602,20 @@ public class NotificationManagerService extends SystemService { } @Override - public void onNotificationClick(int callingUid, int callingPid, - String pkg, String tag, int id, int userId) { - cancelNotification(callingUid, callingPid, pkg, tag, id, Notification.FLAG_AUTO_CANCEL, - Notification.FLAG_FOREGROUND_SERVICE, false, userId, REASON_DELEGATE_CLICK, null); + public void onNotificationClick(int callingUid, int callingPid, String key) { + synchronized (mNotificationList) { + EventLogTags.writeNotificationClicked(key); + NotificationRecord r = mNotificationsByKey.get(key); + if (r == null) { + Log.w(TAG, "No notification with key: " + key); + return; + } + StatusBarNotification sbn = r.sbn; + cancelNotification(callingUid, callingPid, sbn.getPackageName(), sbn.getTag(), + sbn.getId(), Notification.FLAG_AUTO_CANCEL, + Notification.FLAG_FOREGROUND_SERVICE, false, r.getUserId(), + REASON_DELEGATE_CLICK, null); + } } @Override diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java index 91f796b..022bdae 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java @@ -546,13 +546,13 @@ public class StatusBarManagerService extends IStatusBarService.Stub } @Override - public void onNotificationClick(String pkg, String tag, int id, int userId) { + public void onNotificationClick(String key) { enforceStatusBarService(); final int callingUid = Binder.getCallingUid(); final int callingPid = Binder.getCallingPid(); long identity = Binder.clearCallingIdentity(); try { - mNotificationDelegate.onNotificationClick(callingUid, callingPid, pkg, tag, id, userId); + mNotificationDelegate.onNotificationClick(callingUid, callingPid, key); } finally { Binder.restoreCallingIdentity(identity); } |