summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Studer <chstuder@google.com>2014-04-30 17:33:27 +0200
committerChristoph Studer <chstuder@google.com>2014-04-30 18:00:55 +0200
commit03b87a2f40c26948b7b0c9409c33ad44857218cf (patch)
treebb97024d9004a3dee7aae483f6d51c6e637ef067
parentff8dbe52eb3452df4d2cbd7af90483969bb061f4 (diff)
downloadframeworks_base-03b87a2f40c26948b7b0c9409c33ad44857218cf.zip
frameworks_base-03b87a2f40c26948b7b0c9409c33ad44857218cf.tar.gz
frameworks_base-03b87a2f40c26948b7b0c9409c33ad44857218cf.tar.bz2
Log notification clicks
Emit notification_clicked log events when a notification is clicked from SystemUI. Also refactor the onNotificationClicked method to work with a key instead of individual notification params. Change-Id: Iffd15e95d46371b2ae7bfd00b2c348d9f4cf5d14
-rw-r--r--core/java/com/android/internal/statusbar/IStatusBarService.aidl2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java30
-rw-r--r--services/core/java/com/android/server/EventLogTags.logtags2
-rw-r--r--services/core/java/com/android/server/notification/NotificationDelegate.java3
-rw-r--r--services/core/java/com/android/server/notification/NotificationManagerService.java18
-rw-r--r--services/core/java/com/android/server/statusbar/StatusBarManagerService.java4
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);
}