Loading services/core/java/com/android/server/notification/PreferencesHelper.java +148 −138 Original line number Diff line number Diff line Loading @@ -107,7 +107,7 @@ public class PreferencesHelper implements RankingConfig { } // pkg|uid => PackagePreferences private final ArrayMap<String, PackagePreferences> mPackagePreferencess = new ArrayMap<>(); private final ArrayMap<String, PackagePreferences> mPackagePreferences = new ArrayMap<>(); // pkg => PackagePreferences private final ArrayMap<String, PackagePreferences> mRestoredWithoutUids = new ArrayMap<>(); Loading Loading @@ -142,7 +142,9 @@ public class PreferencesHelper implements RankingConfig { if (type != XmlPullParser.START_TAG) return; String tag = parser.getName(); if (!TAG_RANKING.equals(tag)) return; synchronized (mPackagePreferences) { // Clobber groups and channels with the xml, but don't delete other data that wasn't present // at the time of serialization. mRestoredWithoutUids.clear(); while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) { Loading @@ -168,7 +170,8 @@ public class PreferencesHelper implements RankingConfig { PackagePreferences r = getOrCreatePackagePreferences(name, uid, XmlUtils.readIntAttribute( parser, ATT_IMPORTANCE, DEFAULT_IMPORTANCE), XmlUtils.readIntAttribute(parser, ATT_PRIORITY, DEFAULT_PRIORITY), XmlUtils.readIntAttribute(parser, ATT_PRIORITY, DEFAULT_PRIORITY), XmlUtils.readIntAttribute( parser, ATT_VISIBILITY, DEFAULT_VISIBILITY), XmlUtils.readBooleanAttribute( Loading Loading @@ -196,7 +199,8 @@ public class PreferencesHelper implements RankingConfig { // Channel groups if (TAG_GROUP.equals(tagName)) { String id = parser.getAttributeValue(null, ATT_ID); CharSequence groupName = parser.getAttributeValue(null, ATT_NAME); CharSequence groupName = parser.getAttributeValue(null, ATT_NAME); if (!TextUtils.isEmpty(id)) { NotificationChannelGroup group = new NotificationChannelGroup(id, groupName); Loading Loading @@ -230,11 +234,14 @@ public class PreferencesHelper implements RankingConfig { boolean delegateEnabled = XmlUtils.readBooleanAttribute( parser, ATT_ENABLED, Delegate.DEFAULT_ENABLED); boolean userAllowed = XmlUtils.readBooleanAttribute( parser, ATT_USER_ALLOWED, Delegate.DEFAULT_USER_ALLOWED); parser, ATT_USER_ALLOWED, Delegate.DEFAULT_USER_ALLOWED); Delegate d = null; if (delegateId != UNKNOWN_UID && !TextUtils.isEmpty(delegateName)) { if (delegateId != UNKNOWN_UID && !TextUtils.isEmpty( delegateName)) { d = new Delegate( delegateName, delegateId, delegateEnabled, userAllowed); delegateName, delegateId, delegateEnabled, userAllowed); } r.delegate = d; } Loading @@ -250,13 +257,14 @@ public class PreferencesHelper implements RankingConfig { } } } } throw new IllegalStateException("Failed to reach END_DOCUMENT"); } private PackagePreferences getPackagePreferences(String pkg, int uid) { final String key = packagePreferencesKey(pkg, uid); synchronized (mPackagePreferencess) { return mPackagePreferencess.get(key); synchronized (mPackagePreferences) { return mPackagePreferences.get(key); } } Loading @@ -268,10 +276,10 @@ public class PreferencesHelper implements RankingConfig { private PackagePreferences getOrCreatePackagePreferences(String pkg, int uid, int importance, int priority, int visibility, boolean showBadge) { final String key = packagePreferencesKey(pkg, uid); synchronized (mPackagePreferencess) { synchronized (mPackagePreferences) { PackagePreferences r = (uid == UNKNOWN_UID) ? mRestoredWithoutUids.get(pkg) : mPackagePreferencess.get(key); : mPackagePreferences.get(key); if (r == null) { r = new PackagePreferences(); r.pkg = pkg; Loading @@ -290,7 +298,7 @@ public class PreferencesHelper implements RankingConfig { if (r.uid == UNKNOWN_UID) { mRestoredWithoutUids.put(pkg, r); } else { mPackagePreferencess.put(key, r); mPackagePreferences.put(key, r); } } return r; Loading Loading @@ -364,10 +372,10 @@ public class PreferencesHelper implements RankingConfig { out.startTag(null, TAG_RANKING); out.attribute(null, ATT_VERSION, Integer.toString(XML_VERSION)); synchronized (mPackagePreferencess) { final int N = mPackagePreferencess.size(); synchronized (mPackagePreferences) { final int N = mPackagePreferences.size(); for (int i = 0; i < N; i++) { final PackagePreferences r = mPackagePreferencess.valueAt(i); final PackagePreferences r = mPackagePreferences.valueAt(i); //TODO: http://b/22388012 if (forBackup && UserHandle.getUserId(r.uid) != UserHandle.USER_SYSTEM) { continue; Loading Loading @@ -882,10 +890,10 @@ public class PreferencesHelper implements RankingConfig { public int getBlockedAppCount(int userId) { int count = 0; synchronized (mPackagePreferencess) { final int N = mPackagePreferencess.size(); synchronized (mPackagePreferences) { final int N = mPackagePreferences.size(); for (int i = 0; i < N; i++) { final PackagePreferences r = mPackagePreferencess.valueAt(i); final PackagePreferences r = mPackagePreferences.valueAt(i); if (userId == UserHandle.getUserId(r.uid) && r.importance == IMPORTANCE_NONE) { count++; Loading @@ -896,11 +904,11 @@ public class PreferencesHelper implements RankingConfig { } public void updateChannelsBypassingDnd() { synchronized (mPackagePreferencess) { final int numPackagePreferencess = mPackagePreferencess.size(); synchronized (mPackagePreferences) { final int numPackagePreferencess = mPackagePreferences.size(); for (int PackagePreferencesIndex = 0; PackagePreferencesIndex < numPackagePreferencess; PackagePreferencesIndex++) { final PackagePreferences r = mPackagePreferencess.valueAt(PackagePreferencesIndex); final PackagePreferences r = mPackagePreferences.valueAt(PackagePreferencesIndex); final int numChannels = r.channels.size(); for (int channelIndex = 0; channelIndex < numChannels; channelIndex++) { Loading Loading @@ -1064,8 +1072,8 @@ public class PreferencesHelper implements RankingConfig { pw.println("per-package config:"); pw.println("PackagePreferencess:"); synchronized (mPackagePreferencess) { dumpPackagePreferencess(pw, prefix, filter, mPackagePreferencess); synchronized (mPackagePreferences) { dumpPackagePreferencess(pw, prefix, filter, mPackagePreferences); } pw.println("Restored without uid:"); dumpPackagePreferencess(pw, prefix, filter, mRestoredWithoutUids); Loading @@ -1073,9 +1081,9 @@ public class PreferencesHelper implements RankingConfig { public void dump(ProtoOutputStream proto, @NonNull NotificationManagerService.DumpFilter filter) { synchronized (mPackagePreferencess) { synchronized (mPackagePreferences) { dumpPackagePreferencess(proto, RankingHelperProto.RECORDS, filter, mPackagePreferencess); mPackagePreferences); } dumpPackagePreferencess(proto, RankingHelperProto.RECORDS_RESTORED_WITHOUT_UID, filter, mRestoredWithoutUids); Loading Loading @@ -1160,10 +1168,10 @@ public class PreferencesHelper implements RankingConfig { } catch (JSONException e) { // pass } synchronized (mPackagePreferencess) { final int N = mPackagePreferencess.size(); synchronized (mPackagePreferences) { final int N = mPackagePreferences.size(); for (int i = 0; i < N; i++) { final PackagePreferences r = mPackagePreferencess.valueAt(i); final PackagePreferences r = mPackagePreferences.valueAt(i); if (filter == null || filter.matches(r.pkg)) { JSONObject PackagePreferences = new JSONObject(); try { Loading Loading @@ -1240,11 +1248,11 @@ public class PreferencesHelper implements RankingConfig { } public Map<Integer, String> getPackageBans() { synchronized (mPackagePreferencess) { final int N = mPackagePreferencess.size(); synchronized (mPackagePreferences) { final int N = mPackagePreferences.size(); ArrayMap<Integer, String> packageBans = new ArrayMap<>(N); for (int i = 0; i < N; i++) { final PackagePreferences r = mPackagePreferencess.valueAt(i); final PackagePreferences r = mPackagePreferences.valueAt(i); if (r.importance == IMPORTANCE_NONE) { packageBans.put(r.uid, r.pkg); } Loading Loading @@ -1284,9 +1292,9 @@ public class PreferencesHelper implements RankingConfig { private Map<String, Integer> getPackageChannels() { ArrayMap<String, Integer> packageChannels = new ArrayMap<>(); synchronized (mPackagePreferencess) { for (int i = 0; i < mPackagePreferencess.size(); i++) { final PackagePreferences r = mPackagePreferencess.valueAt(i); synchronized (mPackagePreferences) { for (int i = 0; i < mPackagePreferences.size(); i++) { final PackagePreferences r = mPackagePreferences.valueAt(i); int channelCount = 0; for (int j = 0; j < r.channels.size(); j++) { if (!r.channels.valueAt(j).isDeleted()) { Loading @@ -1300,22 +1308,22 @@ public class PreferencesHelper implements RankingConfig { } public void onUserRemoved(int userId) { synchronized (mPackagePreferencess) { int N = mPackagePreferencess.size(); synchronized (mPackagePreferences) { int N = mPackagePreferences.size(); for (int i = N - 1; i >= 0; i--) { PackagePreferences PackagePreferences = mPackagePreferencess.valueAt(i); PackagePreferences PackagePreferences = mPackagePreferences.valueAt(i); if (UserHandle.getUserId(PackagePreferences.uid) == userId) { mPackagePreferencess.removeAt(i); mPackagePreferences.removeAt(i); } } } } protected void onLocaleChanged(Context context, int userId) { synchronized (mPackagePreferencess) { int N = mPackagePreferencess.size(); synchronized (mPackagePreferences) { int N = mPackagePreferences.size(); for (int i = 0; i < N; i++) { PackagePreferences PackagePreferences = mPackagePreferencess.valueAt(i); PackagePreferences PackagePreferences = mPackagePreferences.valueAt(i); if (UserHandle.getUserId(PackagePreferences.uid) == userId) { if (PackagePreferences.channels.containsKey( NotificationChannel.DEFAULT_CHANNEL_ID)) { Loading @@ -1341,8 +1349,8 @@ public class PreferencesHelper implements RankingConfig { for (int i = 0; i < size; i++) { final String pkg = pkgList[i]; final int uid = uidList[i]; synchronized (mPackagePreferencess) { mPackagePreferencess.remove(packagePreferencesKey(pkg, uid)); synchronized (mPackagePreferences) { mPackagePreferences.remove(packagePreferencesKey(pkg, uid)); } mRestoredWithoutUids.remove(pkg); updated = true; Loading @@ -1355,8 +1363,8 @@ public class PreferencesHelper implements RankingConfig { try { r.uid = mPm.getPackageUidAsUser(r.pkg, changeUserId); mRestoredWithoutUids.remove(pkg); synchronized (mPackagePreferencess) { mPackagePreferencess.put(packagePreferencesKey(r.pkg, r.uid), r); synchronized (mPackagePreferences) { mPackagePreferences.put(packagePreferencesKey(r.pkg, r.uid), r); } updated = true; } catch (PackageManager.NameNotFoundException e) { Loading @@ -1365,12 +1373,14 @@ public class PreferencesHelper implements RankingConfig { } // Package upgrade try { synchronized (mPackagePreferences) { PackagePreferences fullPackagePreferences = getPackagePreferences(pkg, mPm.getPackageUidAsUser(pkg, changeUserId)); if (fullPackagePreferences != null) { createDefaultChannelIfNeeded(fullPackagePreferences); deleteDefaultChannelIfNeeded(fullPackagePreferences); } } } catch (PackageManager.NameNotFoundException e) { } } Loading Loading
services/core/java/com/android/server/notification/PreferencesHelper.java +148 −138 Original line number Diff line number Diff line Loading @@ -107,7 +107,7 @@ public class PreferencesHelper implements RankingConfig { } // pkg|uid => PackagePreferences private final ArrayMap<String, PackagePreferences> mPackagePreferencess = new ArrayMap<>(); private final ArrayMap<String, PackagePreferences> mPackagePreferences = new ArrayMap<>(); // pkg => PackagePreferences private final ArrayMap<String, PackagePreferences> mRestoredWithoutUids = new ArrayMap<>(); Loading Loading @@ -142,7 +142,9 @@ public class PreferencesHelper implements RankingConfig { if (type != XmlPullParser.START_TAG) return; String tag = parser.getName(); if (!TAG_RANKING.equals(tag)) return; synchronized (mPackagePreferences) { // Clobber groups and channels with the xml, but don't delete other data that wasn't present // at the time of serialization. mRestoredWithoutUids.clear(); while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) { Loading @@ -168,7 +170,8 @@ public class PreferencesHelper implements RankingConfig { PackagePreferences r = getOrCreatePackagePreferences(name, uid, XmlUtils.readIntAttribute( parser, ATT_IMPORTANCE, DEFAULT_IMPORTANCE), XmlUtils.readIntAttribute(parser, ATT_PRIORITY, DEFAULT_PRIORITY), XmlUtils.readIntAttribute(parser, ATT_PRIORITY, DEFAULT_PRIORITY), XmlUtils.readIntAttribute( parser, ATT_VISIBILITY, DEFAULT_VISIBILITY), XmlUtils.readBooleanAttribute( Loading Loading @@ -196,7 +199,8 @@ public class PreferencesHelper implements RankingConfig { // Channel groups if (TAG_GROUP.equals(tagName)) { String id = parser.getAttributeValue(null, ATT_ID); CharSequence groupName = parser.getAttributeValue(null, ATT_NAME); CharSequence groupName = parser.getAttributeValue(null, ATT_NAME); if (!TextUtils.isEmpty(id)) { NotificationChannelGroup group = new NotificationChannelGroup(id, groupName); Loading Loading @@ -230,11 +234,14 @@ public class PreferencesHelper implements RankingConfig { boolean delegateEnabled = XmlUtils.readBooleanAttribute( parser, ATT_ENABLED, Delegate.DEFAULT_ENABLED); boolean userAllowed = XmlUtils.readBooleanAttribute( parser, ATT_USER_ALLOWED, Delegate.DEFAULT_USER_ALLOWED); parser, ATT_USER_ALLOWED, Delegate.DEFAULT_USER_ALLOWED); Delegate d = null; if (delegateId != UNKNOWN_UID && !TextUtils.isEmpty(delegateName)) { if (delegateId != UNKNOWN_UID && !TextUtils.isEmpty( delegateName)) { d = new Delegate( delegateName, delegateId, delegateEnabled, userAllowed); delegateName, delegateId, delegateEnabled, userAllowed); } r.delegate = d; } Loading @@ -250,13 +257,14 @@ public class PreferencesHelper implements RankingConfig { } } } } throw new IllegalStateException("Failed to reach END_DOCUMENT"); } private PackagePreferences getPackagePreferences(String pkg, int uid) { final String key = packagePreferencesKey(pkg, uid); synchronized (mPackagePreferencess) { return mPackagePreferencess.get(key); synchronized (mPackagePreferences) { return mPackagePreferences.get(key); } } Loading @@ -268,10 +276,10 @@ public class PreferencesHelper implements RankingConfig { private PackagePreferences getOrCreatePackagePreferences(String pkg, int uid, int importance, int priority, int visibility, boolean showBadge) { final String key = packagePreferencesKey(pkg, uid); synchronized (mPackagePreferencess) { synchronized (mPackagePreferences) { PackagePreferences r = (uid == UNKNOWN_UID) ? mRestoredWithoutUids.get(pkg) : mPackagePreferencess.get(key); : mPackagePreferences.get(key); if (r == null) { r = new PackagePreferences(); r.pkg = pkg; Loading @@ -290,7 +298,7 @@ public class PreferencesHelper implements RankingConfig { if (r.uid == UNKNOWN_UID) { mRestoredWithoutUids.put(pkg, r); } else { mPackagePreferencess.put(key, r); mPackagePreferences.put(key, r); } } return r; Loading Loading @@ -364,10 +372,10 @@ public class PreferencesHelper implements RankingConfig { out.startTag(null, TAG_RANKING); out.attribute(null, ATT_VERSION, Integer.toString(XML_VERSION)); synchronized (mPackagePreferencess) { final int N = mPackagePreferencess.size(); synchronized (mPackagePreferences) { final int N = mPackagePreferences.size(); for (int i = 0; i < N; i++) { final PackagePreferences r = mPackagePreferencess.valueAt(i); final PackagePreferences r = mPackagePreferences.valueAt(i); //TODO: http://b/22388012 if (forBackup && UserHandle.getUserId(r.uid) != UserHandle.USER_SYSTEM) { continue; Loading Loading @@ -882,10 +890,10 @@ public class PreferencesHelper implements RankingConfig { public int getBlockedAppCount(int userId) { int count = 0; synchronized (mPackagePreferencess) { final int N = mPackagePreferencess.size(); synchronized (mPackagePreferences) { final int N = mPackagePreferences.size(); for (int i = 0; i < N; i++) { final PackagePreferences r = mPackagePreferencess.valueAt(i); final PackagePreferences r = mPackagePreferences.valueAt(i); if (userId == UserHandle.getUserId(r.uid) && r.importance == IMPORTANCE_NONE) { count++; Loading @@ -896,11 +904,11 @@ public class PreferencesHelper implements RankingConfig { } public void updateChannelsBypassingDnd() { synchronized (mPackagePreferencess) { final int numPackagePreferencess = mPackagePreferencess.size(); synchronized (mPackagePreferences) { final int numPackagePreferencess = mPackagePreferences.size(); for (int PackagePreferencesIndex = 0; PackagePreferencesIndex < numPackagePreferencess; PackagePreferencesIndex++) { final PackagePreferences r = mPackagePreferencess.valueAt(PackagePreferencesIndex); final PackagePreferences r = mPackagePreferences.valueAt(PackagePreferencesIndex); final int numChannels = r.channels.size(); for (int channelIndex = 0; channelIndex < numChannels; channelIndex++) { Loading Loading @@ -1064,8 +1072,8 @@ public class PreferencesHelper implements RankingConfig { pw.println("per-package config:"); pw.println("PackagePreferencess:"); synchronized (mPackagePreferencess) { dumpPackagePreferencess(pw, prefix, filter, mPackagePreferencess); synchronized (mPackagePreferences) { dumpPackagePreferencess(pw, prefix, filter, mPackagePreferences); } pw.println("Restored without uid:"); dumpPackagePreferencess(pw, prefix, filter, mRestoredWithoutUids); Loading @@ -1073,9 +1081,9 @@ public class PreferencesHelper implements RankingConfig { public void dump(ProtoOutputStream proto, @NonNull NotificationManagerService.DumpFilter filter) { synchronized (mPackagePreferencess) { synchronized (mPackagePreferences) { dumpPackagePreferencess(proto, RankingHelperProto.RECORDS, filter, mPackagePreferencess); mPackagePreferences); } dumpPackagePreferencess(proto, RankingHelperProto.RECORDS_RESTORED_WITHOUT_UID, filter, mRestoredWithoutUids); Loading Loading @@ -1160,10 +1168,10 @@ public class PreferencesHelper implements RankingConfig { } catch (JSONException e) { // pass } synchronized (mPackagePreferencess) { final int N = mPackagePreferencess.size(); synchronized (mPackagePreferences) { final int N = mPackagePreferences.size(); for (int i = 0; i < N; i++) { final PackagePreferences r = mPackagePreferencess.valueAt(i); final PackagePreferences r = mPackagePreferences.valueAt(i); if (filter == null || filter.matches(r.pkg)) { JSONObject PackagePreferences = new JSONObject(); try { Loading Loading @@ -1240,11 +1248,11 @@ public class PreferencesHelper implements RankingConfig { } public Map<Integer, String> getPackageBans() { synchronized (mPackagePreferencess) { final int N = mPackagePreferencess.size(); synchronized (mPackagePreferences) { final int N = mPackagePreferences.size(); ArrayMap<Integer, String> packageBans = new ArrayMap<>(N); for (int i = 0; i < N; i++) { final PackagePreferences r = mPackagePreferencess.valueAt(i); final PackagePreferences r = mPackagePreferences.valueAt(i); if (r.importance == IMPORTANCE_NONE) { packageBans.put(r.uid, r.pkg); } Loading Loading @@ -1284,9 +1292,9 @@ public class PreferencesHelper implements RankingConfig { private Map<String, Integer> getPackageChannels() { ArrayMap<String, Integer> packageChannels = new ArrayMap<>(); synchronized (mPackagePreferencess) { for (int i = 0; i < mPackagePreferencess.size(); i++) { final PackagePreferences r = mPackagePreferencess.valueAt(i); synchronized (mPackagePreferences) { for (int i = 0; i < mPackagePreferences.size(); i++) { final PackagePreferences r = mPackagePreferences.valueAt(i); int channelCount = 0; for (int j = 0; j < r.channels.size(); j++) { if (!r.channels.valueAt(j).isDeleted()) { Loading @@ -1300,22 +1308,22 @@ public class PreferencesHelper implements RankingConfig { } public void onUserRemoved(int userId) { synchronized (mPackagePreferencess) { int N = mPackagePreferencess.size(); synchronized (mPackagePreferences) { int N = mPackagePreferences.size(); for (int i = N - 1; i >= 0; i--) { PackagePreferences PackagePreferences = mPackagePreferencess.valueAt(i); PackagePreferences PackagePreferences = mPackagePreferences.valueAt(i); if (UserHandle.getUserId(PackagePreferences.uid) == userId) { mPackagePreferencess.removeAt(i); mPackagePreferences.removeAt(i); } } } } protected void onLocaleChanged(Context context, int userId) { synchronized (mPackagePreferencess) { int N = mPackagePreferencess.size(); synchronized (mPackagePreferences) { int N = mPackagePreferences.size(); for (int i = 0; i < N; i++) { PackagePreferences PackagePreferences = mPackagePreferencess.valueAt(i); PackagePreferences PackagePreferences = mPackagePreferences.valueAt(i); if (UserHandle.getUserId(PackagePreferences.uid) == userId) { if (PackagePreferences.channels.containsKey( NotificationChannel.DEFAULT_CHANNEL_ID)) { Loading @@ -1341,8 +1349,8 @@ public class PreferencesHelper implements RankingConfig { for (int i = 0; i < size; i++) { final String pkg = pkgList[i]; final int uid = uidList[i]; synchronized (mPackagePreferencess) { mPackagePreferencess.remove(packagePreferencesKey(pkg, uid)); synchronized (mPackagePreferences) { mPackagePreferences.remove(packagePreferencesKey(pkg, uid)); } mRestoredWithoutUids.remove(pkg); updated = true; Loading @@ -1355,8 +1363,8 @@ public class PreferencesHelper implements RankingConfig { try { r.uid = mPm.getPackageUidAsUser(r.pkg, changeUserId); mRestoredWithoutUids.remove(pkg); synchronized (mPackagePreferencess) { mPackagePreferencess.put(packagePreferencesKey(r.pkg, r.uid), r); synchronized (mPackagePreferences) { mPackagePreferences.put(packagePreferencesKey(r.pkg, r.uid), r); } updated = true; } catch (PackageManager.NameNotFoundException e) { Loading @@ -1365,12 +1373,14 @@ public class PreferencesHelper implements RankingConfig { } // Package upgrade try { synchronized (mPackagePreferences) { PackagePreferences fullPackagePreferences = getPackagePreferences(pkg, mPm.getPackageUidAsUser(pkg, changeUserId)); if (fullPackagePreferences != null) { createDefaultChannelIfNeeded(fullPackagePreferences); deleteDefaultChannelIfNeeded(fullPackagePreferences); } } } catch (PackageManager.NameNotFoundException e) { } } Loading