Loading services/core/java/com/android/server/notification/ConditionProviders.java +9 −5 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import android.util.ArraySet; import android.util.Slog; import com.android.internal.R; import com.android.server.notification.NotificationManagerService.DumpFilter; import java.io.PrintWriter; import java.util.ArrayList; Loading Loading @@ -74,16 +75,19 @@ public class ConditionProviders extends ManagedServices { } @Override public void dump(PrintWriter pw) { super.dump(pw); public void dump(PrintWriter pw, DumpFilter filter) { super.dump(pw, filter); synchronized(mMutex) { if (filter == null) { pw.print(" mListeners("); pw.print(mListeners.size()); pw.println("):"); for (int i = 0; i < mListeners.size(); i++) { pw.print(" "); pw.println(mListeners.keyAt(i)); } } pw.print(" mRecords("); pw.print(mRecords.size()); pw.println("):"); for (int i = 0; i < mRecords.size(); i++) { final ConditionRecord r = mRecords.get(i); if (filter != null && !filter.matches(r.component)) continue; pw.print(" "); pw.println(r); final String countdownDesc = CountdownConditionProvider.tryParseDescription(r.id); if (countdownDesc != null) { Loading services/core/java/com/android/server/notification/ManagedServices.java +5 −1 Original line number Diff line number Diff line Loading @@ -44,6 +44,8 @@ import android.util.ArraySet; import android.util.Slog; import android.util.SparseArray; import com.android.server.notification.NotificationManagerService.DumpFilter; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; Loading Loading @@ -116,15 +118,17 @@ abstract public class ManagedServices { mSettingsObserver.observe(); } public void dump(PrintWriter pw) { public void dump(PrintWriter pw, DumpFilter filter) { pw.println(" All " + getCaption() + "s (" + mEnabledServicesForCurrentProfiles.size() + ") enabled for current profiles:"); for (ComponentName cmpt : mEnabledServicesForCurrentProfiles) { if (filter != null && !filter.matches(cmpt)) continue; pw.println(" " + cmpt); } pw.println(" Live " + getCaption() + "s (" + mServices.size() + "):"); for (ManagedServiceInfo info : mServices) { if (filter != null && !filter.matches(info.component)) continue; pw.println(" " + info.component + " (user " + info.userid + "): " + info.service + (info.isSystem?" SYSTEM":"")); Loading services/core/java/com/android/server/notification/NotificationManagerService.java +62 −25 Original line number Diff line number Diff line Loading @@ -440,7 +440,8 @@ public class NotificationManagerService extends SystemService { this.duration = duration; } void dump(PrintWriter pw, String prefix) { void dump(PrintWriter pw, String prefix, DumpFilter filter) { if (filter != null && !filter.matches(pkg)) return; pw.println(prefix + this); } Loading Loading @@ -1313,7 +1314,7 @@ public class NotificationManagerService extends SystemService { return; } dumpImpl(pw); dumpImpl(pw, DumpFilter.parseFromArguments(args)); } }; Loading @@ -1334,9 +1335,12 @@ public class NotificationManagerService extends SystemService { return keys.toArray(new String[keys.size()]); } void dumpImpl(PrintWriter pw) { pw.println("Current Notification Manager state:"); void dumpImpl(PrintWriter pw, DumpFilter filter) { pw.print("Current Notification Manager state"); if (filter != null) { pw.print(" (filtered to '"); pw.print(filter.pkgFilter); pw.print("')"); } pw.println(':'); int N; synchronized (mToastQueue) { Loading @@ -1344,11 +1348,10 @@ public class NotificationManagerService extends SystemService { if (N > 0) { pw.println(" Toast Queue:"); for (int i=0; i<N; i++) { mToastQueue.get(i).dump(pw, " "); mToastQueue.get(i).dump(pw, " ", filter); } pw.println(" "); } } synchronized (mNotificationList) { Loading @@ -1356,11 +1359,14 @@ public class NotificationManagerService extends SystemService { if (N > 0) { pw.println(" Notification List:"); for (int i=0; i<N; i++) { mNotificationList.get(i).dump(pw, " ", getContext()); final NotificationRecord nr = mNotificationList.get(i); if (filter != null && !filter.matches(nr.sbn)) continue; nr.dump(pw, " ", getContext()); } pw.println(" "); } if (filter == null) { N = mLights.size(); if (N > 0) { pw.println(" Lights List:"); Loading @@ -1374,11 +1380,14 @@ public class NotificationManagerService extends SystemService { pw.println(" mVibrateNotification=" + mVibrateNotification); pw.println(" mDisableNotificationAlerts=" + mDisableNotificationAlerts); pw.println(" mSystemReady=" + mSystemReady); } pw.println(" mArchive=" + mArchive.toString()); Iterator<StatusBarNotification> iter = mArchive.descendingIterator(); int i=0; while (iter.hasNext()) { pw.println(" " + iter.next()); final StatusBarNotification sbn = iter.next(); if (filter != null && !filter.matches(sbn)) continue; pw.println(" " + sbn); if (++i >= 5) { if (iter.hasNext()) pw.println(" ..."); break; Loading @@ -1386,16 +1395,18 @@ public class NotificationManagerService extends SystemService { } pw.println("\n Usage Stats:"); mUsageStats.dump(pw, " "); mUsageStats.dump(pw, " ", filter); if (filter == null) { pw.println("\n Zen Mode:"); mZenModeHelper.dump(pw, " "); } pw.println("\n Notification listeners:"); mListeners.dump(pw); mListeners.dump(pw, filter); pw.println("\n Condition providers:"); mConditionProviders.dump(pw); mConditionProviders.dump(pw, filter); } } Loading Loading @@ -2447,4 +2458,30 @@ public class NotificationManagerService extends SystemService { } } } public static final class DumpFilter { public String pkgFilter; public static DumpFilter parseFromArguments(String[] args) { if (args == null || args.length != 2 || !"p".equals(args[0]) || args[1] == null || args[1].trim().isEmpty()) { return null; } final DumpFilter filter = new DumpFilter(); filter.pkgFilter = args[1].trim().toLowerCase(); return filter; } public boolean matches(StatusBarNotification sbn) { return sbn != null && (matches(sbn.getPackageName()) || matches(sbn.getOpPkg())); } public boolean matches(ComponentName component) { return component != null && matches(component.getPackageName()); } public boolean matches(String pkg) { return pkg != null && pkg.toLowerCase().contains(pkgFilter); } } } services/core/java/com/android/server/notification/NotificationUsageStats.java +9 −5 Original line number Diff line number Diff line Loading @@ -28,6 +28,8 @@ import android.os.SystemClock; import android.service.notification.StatusBarNotification; import android.util.Log; import com.android.server.notification.NotificationManagerService.DumpFilter; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; Loading Loading @@ -168,12 +170,13 @@ public class NotificationUsageStats { return result; } public synchronized void dump(PrintWriter pw, String indent) { public synchronized void dump(PrintWriter pw, String indent, DumpFilter filter) { for (AggregatedStats as : mStats.values()) { if (filter != null && !filter.matches(as.key)) continue; as.dump(pw, indent); } if (ENABLE_SQLITE_LOG) { mSQLiteLog.dump(pw, indent); mSQLiteLog.dump(pw, indent, filter); } } Loading Loading @@ -511,7 +514,7 @@ public class NotificationUsageStats { mWriteHandler.sendMessage(mWriteHandler.obtainMessage(MSG_DISMISS, notification)); } public void printPostFrequencies(PrintWriter pw, String indent) { public void printPostFrequencies(PrintWriter pw, String indent, DumpFilter filter) { SQLiteDatabase db = mHelper.getReadableDatabase(); long nowMs = System.currentTimeMillis(); String q = "SELECT " + Loading @@ -530,6 +533,7 @@ public class NotificationUsageStats { for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { int userId = cursor.getInt(0); String pkg = cursor.getString(1); if (filter != null && !filter.matches(pkg)) continue; int day = cursor.getInt(2); int count = cursor.getInt(3); pw.println(indent + "post_frequency{user_id=" + userId + ",pkg=" + pkg + Loading Loading @@ -598,8 +602,8 @@ public class NotificationUsageStats { outCv.put(COL_AIRTIME_MS, r.stats.getCurrentAirtimeMs()); } public void dump(PrintWriter pw, String indent) { printPostFrequencies(pw, indent); public void dump(PrintWriter pw, String indent, DumpFilter filter) { printPostFrequencies(pw, indent, filter); } } } Loading
services/core/java/com/android/server/notification/ConditionProviders.java +9 −5 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import android.util.ArraySet; import android.util.Slog; import com.android.internal.R; import com.android.server.notification.NotificationManagerService.DumpFilter; import java.io.PrintWriter; import java.util.ArrayList; Loading Loading @@ -74,16 +75,19 @@ public class ConditionProviders extends ManagedServices { } @Override public void dump(PrintWriter pw) { super.dump(pw); public void dump(PrintWriter pw, DumpFilter filter) { super.dump(pw, filter); synchronized(mMutex) { if (filter == null) { pw.print(" mListeners("); pw.print(mListeners.size()); pw.println("):"); for (int i = 0; i < mListeners.size(); i++) { pw.print(" "); pw.println(mListeners.keyAt(i)); } } pw.print(" mRecords("); pw.print(mRecords.size()); pw.println("):"); for (int i = 0; i < mRecords.size(); i++) { final ConditionRecord r = mRecords.get(i); if (filter != null && !filter.matches(r.component)) continue; pw.print(" "); pw.println(r); final String countdownDesc = CountdownConditionProvider.tryParseDescription(r.id); if (countdownDesc != null) { Loading
services/core/java/com/android/server/notification/ManagedServices.java +5 −1 Original line number Diff line number Diff line Loading @@ -44,6 +44,8 @@ import android.util.ArraySet; import android.util.Slog; import android.util.SparseArray; import com.android.server.notification.NotificationManagerService.DumpFilter; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; Loading Loading @@ -116,15 +118,17 @@ abstract public class ManagedServices { mSettingsObserver.observe(); } public void dump(PrintWriter pw) { public void dump(PrintWriter pw, DumpFilter filter) { pw.println(" All " + getCaption() + "s (" + mEnabledServicesForCurrentProfiles.size() + ") enabled for current profiles:"); for (ComponentName cmpt : mEnabledServicesForCurrentProfiles) { if (filter != null && !filter.matches(cmpt)) continue; pw.println(" " + cmpt); } pw.println(" Live " + getCaption() + "s (" + mServices.size() + "):"); for (ManagedServiceInfo info : mServices) { if (filter != null && !filter.matches(info.component)) continue; pw.println(" " + info.component + " (user " + info.userid + "): " + info.service + (info.isSystem?" SYSTEM":"")); Loading
services/core/java/com/android/server/notification/NotificationManagerService.java +62 −25 Original line number Diff line number Diff line Loading @@ -440,7 +440,8 @@ public class NotificationManagerService extends SystemService { this.duration = duration; } void dump(PrintWriter pw, String prefix) { void dump(PrintWriter pw, String prefix, DumpFilter filter) { if (filter != null && !filter.matches(pkg)) return; pw.println(prefix + this); } Loading Loading @@ -1313,7 +1314,7 @@ public class NotificationManagerService extends SystemService { return; } dumpImpl(pw); dumpImpl(pw, DumpFilter.parseFromArguments(args)); } }; Loading @@ -1334,9 +1335,12 @@ public class NotificationManagerService extends SystemService { return keys.toArray(new String[keys.size()]); } void dumpImpl(PrintWriter pw) { pw.println("Current Notification Manager state:"); void dumpImpl(PrintWriter pw, DumpFilter filter) { pw.print("Current Notification Manager state"); if (filter != null) { pw.print(" (filtered to '"); pw.print(filter.pkgFilter); pw.print("')"); } pw.println(':'); int N; synchronized (mToastQueue) { Loading @@ -1344,11 +1348,10 @@ public class NotificationManagerService extends SystemService { if (N > 0) { pw.println(" Toast Queue:"); for (int i=0; i<N; i++) { mToastQueue.get(i).dump(pw, " "); mToastQueue.get(i).dump(pw, " ", filter); } pw.println(" "); } } synchronized (mNotificationList) { Loading @@ -1356,11 +1359,14 @@ public class NotificationManagerService extends SystemService { if (N > 0) { pw.println(" Notification List:"); for (int i=0; i<N; i++) { mNotificationList.get(i).dump(pw, " ", getContext()); final NotificationRecord nr = mNotificationList.get(i); if (filter != null && !filter.matches(nr.sbn)) continue; nr.dump(pw, " ", getContext()); } pw.println(" "); } if (filter == null) { N = mLights.size(); if (N > 0) { pw.println(" Lights List:"); Loading @@ -1374,11 +1380,14 @@ public class NotificationManagerService extends SystemService { pw.println(" mVibrateNotification=" + mVibrateNotification); pw.println(" mDisableNotificationAlerts=" + mDisableNotificationAlerts); pw.println(" mSystemReady=" + mSystemReady); } pw.println(" mArchive=" + mArchive.toString()); Iterator<StatusBarNotification> iter = mArchive.descendingIterator(); int i=0; while (iter.hasNext()) { pw.println(" " + iter.next()); final StatusBarNotification sbn = iter.next(); if (filter != null && !filter.matches(sbn)) continue; pw.println(" " + sbn); if (++i >= 5) { if (iter.hasNext()) pw.println(" ..."); break; Loading @@ -1386,16 +1395,18 @@ public class NotificationManagerService extends SystemService { } pw.println("\n Usage Stats:"); mUsageStats.dump(pw, " "); mUsageStats.dump(pw, " ", filter); if (filter == null) { pw.println("\n Zen Mode:"); mZenModeHelper.dump(pw, " "); } pw.println("\n Notification listeners:"); mListeners.dump(pw); mListeners.dump(pw, filter); pw.println("\n Condition providers:"); mConditionProviders.dump(pw); mConditionProviders.dump(pw, filter); } } Loading Loading @@ -2447,4 +2458,30 @@ public class NotificationManagerService extends SystemService { } } } public static final class DumpFilter { public String pkgFilter; public static DumpFilter parseFromArguments(String[] args) { if (args == null || args.length != 2 || !"p".equals(args[0]) || args[1] == null || args[1].trim().isEmpty()) { return null; } final DumpFilter filter = new DumpFilter(); filter.pkgFilter = args[1].trim().toLowerCase(); return filter; } public boolean matches(StatusBarNotification sbn) { return sbn != null && (matches(sbn.getPackageName()) || matches(sbn.getOpPkg())); } public boolean matches(ComponentName component) { return component != null && matches(component.getPackageName()); } public boolean matches(String pkg) { return pkg != null && pkg.toLowerCase().contains(pkgFilter); } } }
services/core/java/com/android/server/notification/NotificationUsageStats.java +9 −5 Original line number Diff line number Diff line Loading @@ -28,6 +28,8 @@ import android.os.SystemClock; import android.service.notification.StatusBarNotification; import android.util.Log; import com.android.server.notification.NotificationManagerService.DumpFilter; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; Loading Loading @@ -168,12 +170,13 @@ public class NotificationUsageStats { return result; } public synchronized void dump(PrintWriter pw, String indent) { public synchronized void dump(PrintWriter pw, String indent, DumpFilter filter) { for (AggregatedStats as : mStats.values()) { if (filter != null && !filter.matches(as.key)) continue; as.dump(pw, indent); } if (ENABLE_SQLITE_LOG) { mSQLiteLog.dump(pw, indent); mSQLiteLog.dump(pw, indent, filter); } } Loading Loading @@ -511,7 +514,7 @@ public class NotificationUsageStats { mWriteHandler.sendMessage(mWriteHandler.obtainMessage(MSG_DISMISS, notification)); } public void printPostFrequencies(PrintWriter pw, String indent) { public void printPostFrequencies(PrintWriter pw, String indent, DumpFilter filter) { SQLiteDatabase db = mHelper.getReadableDatabase(); long nowMs = System.currentTimeMillis(); String q = "SELECT " + Loading @@ -530,6 +533,7 @@ public class NotificationUsageStats { for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { int userId = cursor.getInt(0); String pkg = cursor.getString(1); if (filter != null && !filter.matches(pkg)) continue; int day = cursor.getInt(2); int count = cursor.getInt(3); pw.println(indent + "post_frequency{user_id=" + userId + ",pkg=" + pkg + Loading Loading @@ -598,8 +602,8 @@ public class NotificationUsageStats { outCv.put(COL_AIRTIME_MS, r.stats.getCurrentAirtimeMs()); } public void dump(PrintWriter pw, String indent) { printPostFrequencies(pw, indent); public void dump(PrintWriter pw, String indent, DumpFilter filter) { printPostFrequencies(pw, indent, filter); } } }