am df9e20f2: Merge changes Iffd15e95,Id2db95ec

* commit 'df9e20f28839a61dd487c2a67f914e87da1dede9':
  Log notification clicks
  Add userId to StatusBarNotification key
This commit is contained in:
Christoph Studer
2014-05-05 19:07:50 +00:00
committed by Android Git Automerger
7 changed files with 32 additions and 29 deletions

View File

@@ -87,7 +87,7 @@ public class StatusBarNotification implements Parcelable {
}
private String key() {
return pkg + '|' + id + '|' + tag + '|' + uid;
return user.getIdentifier() + "|" + pkg + "|" + id + "|" + tag + "|" + uid;
}
public void writeToParcel(Parcel out, int flags) {

View File

@@ -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);

View File

@@ -773,8 +773,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);
@@ -884,27 +884,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) {
@@ -940,7 +933,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.
}
@@ -1344,9 +1337,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);

View File

@@ -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

View File

@@ -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,

View File

@@ -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

View File

@@ -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);
}