summaryrefslogtreecommitdiffstats
path: root/services/core/java
diff options
context:
space:
mode:
authorDan Sandler <dsandler@android.com>2015-07-14 19:37:53 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-07-14 19:38:16 +0000
commit66cc6bb65eac220a01b6a300cf64f1035a0463af (patch)
treeb5d2e6a35474d077a3c163642f3fcea6e45bf78f /services/core/java
parent46d1864ceee7229cd7fe7bac80226c930539861d (diff)
parenta17703138b0c51226c0e73dd8d34ea037d260aeb (diff)
downloadframeworks_base-66cc6bb65eac220a01b6a300cf64f1035a0463af.zip
frameworks_base-66cc6bb65eac220a01b6a300cf64f1035a0463af.tar.gz
frameworks_base-66cc6bb65eac220a01b6a300cf64f1035a0463af.tar.bz2
Merge "Allow notification strings to be unredacted in dump output." into mnc-dev
Diffstat (limited to 'services/core/java')
-rw-r--r--services/core/java/com/android/server/notification/NotificationManagerService.java65
-rw-r--r--services/core/java/com/android/server/notification/NotificationRecord.java13
2 files changed, 49 insertions, 29 deletions
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index b23b856..7a6895f 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -1837,7 +1837,7 @@ public class NotificationManagerService extends SystemService {
void dumpImpl(PrintWriter pw, DumpFilter filter) {
pw.print("Current Notification Manager state");
- if (filter != null) {
+ if (filter.filtered) {
pw.print(" (filtered to "); pw.print(filter); pw.print(")");
}
pw.println(':');
@@ -1865,7 +1865,7 @@ public class NotificationManagerService extends SystemService {
for (int i=0; i<N; i++) {
final NotificationRecord nr = mNotificationList.get(i);
if (filter != null && !filter.matches(nr.sbn)) continue;
- nr.dump(pw, " ", getContext());
+ nr.dump(pw, " ", getContext(), filter.redact);
}
pw.println(" ");
}
@@ -1948,7 +1948,7 @@ public class NotificationManagerService extends SystemService {
pw.println(" " + entry.getKey() + " -> " + r.getKey());
if (mNotificationsByKey.get(r.getKey()) != r) {
pw.println("!!!!!!LEAK: Record not found in mNotificationsByKey.");
- r.dump(pw, " ", getContext());
+ r.dump(pw, " ", getContext(), filter.redact);
}
}
@@ -3499,46 +3499,59 @@ public class NotificationManagerService extends SystemService {
}
public static final class DumpFilter {
+ public boolean filtered = false;
public String pkgFilter;
public boolean zen;
public long since;
public boolean stats;
- private boolean all;
+ public boolean redact = true;
public static DumpFilter parseFromArguments(String[] args) {
- if (args != null && args.length == 2 && "p".equals(args[0])
- && args[1] != null && !args[1].trim().isEmpty()) {
- final DumpFilter filter = new DumpFilter();
- filter.pkgFilter = args[1].trim().toLowerCase();
- return filter;
- }
- if (args != null && args.length == 1 && "zen".equals(args[0])) {
- final DumpFilter filter = new DumpFilter();
- filter.zen = true;
- filter.all = true;
- return filter;
- }
- if (args != null && args.length >= 1 && "--stats".equals(args[0])) {
- final DumpFilter filter = new DumpFilter();
- filter.stats = true;
- filter.since = args.length == 2 ? Long.valueOf(args[1]) : 0;
- filter.all = true;
- return filter;
+ final DumpFilter filter = new DumpFilter();
+ for (int ai = 0; ai < args.length; ai++) {
+ final String a = args[ai];
+ if ("--noredact".equals(a) || "--reveal".equals(a)) {
+ filter.redact = false;
+ } else if ("p".equals(a) || "pkg".equals(a) || "--package".equals(a)) {
+ if (ai < args.length-1) {
+ ai++;
+ filter.pkgFilter = args[ai].trim().toLowerCase();
+ if (filter.pkgFilter.isEmpty()) {
+ filter.pkgFilter = null;
+ } else {
+ filter.filtered = true;
+ }
+ }
+ } else if ("--zen".equals(a) || "zen".equals(a)) {
+ filter.filtered = true;
+ filter.zen = true;
+ } else if ("--stats".equals(a)) {
+ filter.stats = true;
+ if (ai < args.length-1) {
+ ai++;
+ filter.since = Long.valueOf(args[ai]);
+ } else {
+ filter.since = 0;
+ }
+ }
}
- return null;
+ return filter;
}
public boolean matches(StatusBarNotification sbn) {
- return all ? true : sbn != null
+ if (!filtered) return true;
+ return zen ? true : sbn != null
&& (matches(sbn.getPackageName()) || matches(sbn.getOpPkg()));
}
public boolean matches(ComponentName component) {
- return all ? true : component != null && matches(component.getPackageName());
+ if (!filtered) return true;
+ return zen ? true : component != null && matches(component.getPackageName());
}
public boolean matches(String pkg) {
- return all ? true : pkg != null && pkg.toLowerCase().contains(pkgFilter);
+ if (!filtered) return true;
+ return zen ? true : pkg != null && pkg.toLowerCase().contains(pkgFilter);
}
@Override
diff --git a/services/core/java/com/android/server/notification/NotificationRecord.java b/services/core/java/com/android/server/notification/NotificationRecord.java
index b7aea9d..f37702c 100644
--- a/services/core/java/com/android/server/notification/NotificationRecord.java
+++ b/services/core/java/com/android/server/notification/NotificationRecord.java
@@ -114,7 +114,7 @@ public final class NotificationRecord {
/** @deprecated Use {@link #getUser()} instead. */
public int getUserId() { return sbn.getUserId(); }
- void dump(PrintWriter pw, String prefix, Context baseContext) {
+ void dump(PrintWriter pw, String prefix, Context baseContext, boolean redact) {
final Notification notification = sbn.getNotification();
final Icon icon = notification.getSmallIcon();
String iconStr = String.valueOf(icon);
@@ -164,7 +164,7 @@ public final class NotificationRecord {
pw.println("null");
} else {
pw.print(val.getClass().getSimpleName());
- if (val instanceof CharSequence || val instanceof String) {
+ if (redact && (val instanceof CharSequence || val instanceof String)) {
// redact contents from bugreports
} else if (val instanceof Bitmap) {
pw.print(String.format(" (%dx%d)",
@@ -172,7 +172,14 @@ public final class NotificationRecord {
((Bitmap) val).getHeight()));
} else if (val.getClass().isArray()) {
final int N = Array.getLength(val);
- pw.println(" (" + N + ")");
+ pw.print(" (" + N + ")");
+ if (!redact) {
+ for (int j=0; j<N; j++) {
+ pw.println();
+ pw.print(String.format("%s [%d] %s",
+ prefix, j, String.valueOf(Array.get(val, j))));
+ }
+ }
} else {
pw.print(" (" + String.valueOf(val) + ")");
}