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

Commit a3971d66 authored by Julia Tuttle's avatar Julia Tuttle
Browse files

Notification: expand flags and defaults in logs

When debugging notification issues, it would be awesome if logs and
dumpsys contained the names of the FLAG_ and DEFAULT_ bits that are set
in flags and defaults, instead of the raw hex values.

Make it so.

Bug: 328572356
Flag: NONE improvement to debug logging
Test: manual
Change-Id: Ia501e100488462c2eea8b50bf977530e53277bd1
parent a33f4a95
Loading
Loading
Loading
Loading
+122 −4
Original line number Diff line number Diff line
@@ -3792,10 +3792,10 @@ public class Notification implements Parcelable
        if (this.tickerText != null) {
            sb.append(" tick");
        }
        sb.append(" defaults=0x");
        sb.append(Integer.toHexString(this.defaults));
        sb.append(" flags=0x");
        sb.append(Integer.toHexString(this.flags));
        sb.append(" defaults=");
        sb.append(defaultsToString(this.defaults));
        sb.append(" flags=");
        sb.append(flagsToString(this.flags));
        sb.append(String.format(" color=0x%08x", this.color));
        if (this.category != null) {
            sb.append(" category=");
@@ -3863,6 +3863,124 @@ public class Notification implements Parcelable
        }
    }
    /**
     * {@hide}
     */
    public static String flagsToString(@NotificationFlags int flags) {
        final List<String> flagStrings = new ArrayList<String>();
        if ((flags & FLAG_SHOW_LIGHTS) != 0) {
            flagStrings.add("SHOW_LIGHTS");
            flags &= ~FLAG_SHOW_LIGHTS;
        }
        if ((flags & FLAG_ONGOING_EVENT) != 0) {
            flagStrings.add("ONGOING_EVENT");
            flags &= ~FLAG_ONGOING_EVENT;
        }
        if ((flags & FLAG_INSISTENT) != 0) {
            flagStrings.add("INSISTENT");
            flags &= ~FLAG_INSISTENT;
        }
        if ((flags & FLAG_ONLY_ALERT_ONCE) != 0) {
            flagStrings.add("ONLY_ALERT_ONCE");
            flags &= ~FLAG_ONLY_ALERT_ONCE;
        }
        if ((flags & FLAG_AUTO_CANCEL) != 0) {
            flagStrings.add("AUTO_CANCEL");
            flags &= ~FLAG_AUTO_CANCEL;
        }
        if ((flags & FLAG_NO_CLEAR) != 0) {
            flagStrings.add("NO_CLEAR");
            flags &= ~FLAG_NO_CLEAR;
        }
        if ((flags & FLAG_FOREGROUND_SERVICE) != 0) {
            flagStrings.add("FOREGROUND_SERVICE");
            flags &= ~FLAG_FOREGROUND_SERVICE;
        }
        if ((flags & FLAG_HIGH_PRIORITY) != 0) {
            flagStrings.add("HIGH_PRIORITY");
            flags &= ~FLAG_HIGH_PRIORITY;
        }
        if ((flags & FLAG_LOCAL_ONLY) != 0) {
            flagStrings.add("LOCAL_ONLY");
            flags &= ~FLAG_LOCAL_ONLY;
        }
        if ((flags & FLAG_GROUP_SUMMARY) != 0) {
            flagStrings.add("GROUP_SUMMARY");
            flags &= ~FLAG_GROUP_SUMMARY;
        }
        if ((flags & FLAG_AUTOGROUP_SUMMARY) != 0) {
            flagStrings.add("AUTOGROUP_SUMMARY");
            flags &= ~FLAG_AUTOGROUP_SUMMARY;
        }
        if ((flags & FLAG_CAN_COLORIZE) != 0) {
            flagStrings.add("CAN_COLORIZE");
            flags &= ~FLAG_CAN_COLORIZE;
        }
        if ((flags & FLAG_BUBBLE) != 0) {
            flagStrings.add("BUBBLE");
            flags &= ~FLAG_BUBBLE;
        }
        if ((flags & FLAG_NO_DISMISS) != 0) {
            flagStrings.add("NO_DISMISS");
            flags &= ~FLAG_NO_DISMISS;
        }
        if ((flags & FLAG_FSI_REQUESTED_BUT_DENIED) != 0) {
            flagStrings.add("FSI_REQUESTED_BUT_DENIED");
            flags &= ~FLAG_FSI_REQUESTED_BUT_DENIED;
        }
        if ((flags & FLAG_USER_INITIATED_JOB) != 0) {
            flagStrings.add("USER_INITIATED_JOB");
            flags &= ~FLAG_USER_INITIATED_JOB;
        }
        if (Flags.lifetimeExtensionRefactor()) {
            if ((flags & FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY) != 0) {
                flagStrings.add("LIFETIME_EXTENDED_BY_DIRECT_REPLY");
                flags &= ~FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY;
            }
        }
        if (flagStrings.isEmpty()) {
            return "0";
        }
        if (flags != 0) {
            flagStrings.add(String.format("UNKNOWN(0x%08x)", flags));
        }
        return String.join("|", flagStrings);
    }
    /** @hide */
    public static String defaultsToString(int defaults) {
        final List<String> defaultStrings = new ArrayList<String>();
        if ((defaults & DEFAULT_ALL) == DEFAULT_ALL) {
            defaultStrings.add("ALL");
            defaults &= ~DEFAULT_ALL;
        }
        if ((defaults & DEFAULT_SOUND) != 0) {
            defaultStrings.add("SOUND");
            defaults &= ~DEFAULT_SOUND;
        }
        if ((defaults & DEFAULT_VIBRATE) != 0) {
            defaultStrings.add("VIBRATE");
            defaults &= ~DEFAULT_VIBRATE;
        }
        if ((defaults & DEFAULT_LIGHTS) != 0) {
            defaultStrings.add("LIGHTS");
            defaults &= ~DEFAULT_LIGHTS;
        }
        if (defaultStrings.isEmpty()) {
            return "0";
        }
        if (defaults != 0) {
            defaultStrings.add(String.format("UNKNOWN(0x%08x)", defaults));
        }
        return String.join("|", defaultStrings);
    }
    /**
     * @hide
     */
+3 −4
Original line number Diff line number Diff line
@@ -502,8 +502,8 @@ public final class NotificationRecord {
        pw.println(prefix + "uid=" + getSbn().getUid() + " userId=" + getSbn().getUserId());
        pw.println(prefix + "opPkg=" + getSbn().getOpPkg());
        pw.println(prefix + "icon=" + notification.getSmallIcon());
        pw.println(prefix + "flags=0x" + Integer.toHexString(notification.flags));
        pw.println(prefix + "originalFlags=0x" + Integer.toHexString(mOriginalFlags));
        pw.println(prefix + "flags=" + Notification.flagsToString(notification.flags));
        pw.println(prefix + "originalFlags=" + Notification.flagsToString(mOriginalFlags));
        pw.println(prefix + "pri=" + notification.priority);
        pw.println(prefix + "key=" + getSbn().getKey());
        pw.println(prefix + "seen=" + mStats.hasSeen());
@@ -538,8 +538,7 @@ public final class NotificationRecord {
        pw.println(prefix + "mInterruptionTimeMs=" + mInterruptionTimeMs);
        pw.println(prefix + "mSuppressedVisualEffects= " + mSuppressedVisualEffects);
        if (mPreChannelsNotification) {
            pw.println(prefix + String.format("defaults=0x%08x flags=0x%08x",
                    notification.defaults, notification.flags));
            pw.println(prefix + "defaults=" + Notification.defaultsToString(notification.defaults));
            pw.println(prefix + "n.sound=" + notification.sound);
            pw.println(prefix + "n.audioStreamType=" + notification.audioStreamType);
            pw.println(prefix + "n.audioAttributes=" + notification.audioAttributes);