Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4f3bd0fe authored by Dan Sandler's avatar Dan Sandler Committed by Android Git Automerger
Browse files

am a5dfba34: am 50e79b9f: am 66cc6bb6: Merge "Allow notification strings to be...

am a5dfba34: am 50e79b9f: am 66cc6bb6: Merge "Allow notification strings to be unredacted in dump output." into mnc-dev

* commit 'a5dfba34':
  Allow notification strings to be unredacted in dump output.
parents 3d2c2980 a5dfba34
Loading
Loading
Loading
Loading
+39 −26
Original line number Diff line number Diff line
@@ -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;
            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;
                        }
            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();
                } else if ("--zen".equals(a) || "zen".equals(a)) {
                    filter.filtered = true;
                    filter.zen = true;
                } else if ("--stats".equals(a)) {
                    filter.stats = true;
                filter.since = args.length == 2 ? Long.valueOf(args[1]) : 0;
                filter.all = true;
                return filter;
                    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
+10 −3
Original line number Diff line number Diff line
@@ -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) + ")");
                    }