Loading services/core/java/com/android/server/notification/ManagedServices.java +206 −174 Original line number Original line Diff line number Diff line Loading @@ -196,6 +196,7 @@ abstract public class ManagedServices { public void dump(PrintWriter pw, DumpFilter filter) { public void dump(PrintWriter pw, DumpFilter filter) { pw.println(" Allowed " + getCaption() + "s:"); pw.println(" Allowed " + getCaption() + "s:"); synchronized (mApproved) { final int N = mApproved.size(); final int N = mApproved.size(); for (int i = 0; i < N; i++) { for (int i = 0; i < N; i++) { final int userId = mApproved.keyAt(i); final int userId = mApproved.keyAt(i); Loading @@ -212,6 +213,7 @@ abstract public class ManagedServices { } } } } } } } pw.println(" All " + getCaption() + "s (" + mEnabledServicesForCurrentProfiles.size() pw.println(" All " + getCaption() + "s (" + mEnabledServicesForCurrentProfiles.size() + ") enabled for current profiles:"); + ") enabled for current profiles:"); Loading Loading @@ -240,6 +242,7 @@ abstract public class ManagedServices { public void dump(ProtoOutputStream proto, DumpFilter filter) { public void dump(ProtoOutputStream proto, DumpFilter filter) { proto.write(ManagedServicesProto.CAPTION, getCaption()); proto.write(ManagedServicesProto.CAPTION, getCaption()); synchronized (mApproved) { final int N = mApproved.size(); final int N = mApproved.size(); for (int i = 0; i < N; i++) { for (int i = 0; i < N; i++) { final int userId = mApproved.keyAt(i); final int userId = mApproved.keyAt(i); Loading @@ -261,6 +264,7 @@ abstract public class ManagedServices { } } } } } } } for (ComponentName cmpt : mEnabledServicesForCurrentProfiles) { for (ComponentName cmpt : mEnabledServicesForCurrentProfiles) { if (filter != null && !filter.matches(cmpt)) continue; if (filter != null && !filter.matches(cmpt)) continue; Loading Loading @@ -315,6 +319,7 @@ abstract public class ManagedServices { trimApprovedListsAccordingToInstalledServices(userId); trimApprovedListsAccordingToInstalledServices(userId); } } synchronized (mApproved) { final int N = mApproved.size(); final int N = mApproved.size(); for (int i = 0; i < N; i++) { for (int i = 0; i < N; i++) { final int approvedUserId = mApproved.keyAt(i); final int approvedUserId = mApproved.keyAt(i); Loading @@ -339,13 +344,15 @@ abstract public class ManagedServices { if (!forBackup && isPrimary) { if (!forBackup && isPrimary) { // Also write values to settings, for observers who haven't migrated yet // Also write values to settings, for observers who haven't migrated yet Settings.Secure.putStringForUser(mContext.getContentResolver(), Settings.Secure.putStringForUser(mContext.getContentResolver(), getConfig().secureSettingName, allowedItems, approvedUserId); getConfig().secureSettingName, allowedItems, approvedUserId); } } } } } } } } } } } writeExtraXmlTags(out); writeExtraXmlTags(out); Loading Loading @@ -440,6 +447,7 @@ abstract public class ManagedServices { if (TextUtils.isEmpty(approved)) { if (TextUtils.isEmpty(approved)) { approved = ""; approved = ""; } } synchronized (mApproved) { ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.get(userId); ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.get(userId); if (approvedByType == null) { if (approvedByType == null) { approvedByType = new ArrayMap<>(); approvedByType = new ArrayMap<>(); Loading @@ -460,6 +468,7 @@ abstract public class ManagedServices { } } } } } } } protected boolean isComponentEnabledForPackage(String pkg) { protected boolean isComponentEnabledForPackage(String pkg) { return mEnabledServicesPackageNames.contains(pkg); return mEnabledServicesPackageNames.contains(pkg); Loading @@ -469,6 +478,7 @@ abstract public class ManagedServices { boolean isPrimary, boolean enabled) { boolean isPrimary, boolean enabled) { Slog.i(TAG, Slog.i(TAG, (enabled ? " Allowing " : "Disallowing ") + mConfig.caption + " " + pkgOrComponent); (enabled ? " Allowing " : "Disallowing ") + mConfig.caption + " " + pkgOrComponent); synchronized (mApproved) { ArrayMap<Boolean, ArraySet<String>> allowedByType = mApproved.get(userId); ArrayMap<Boolean, ArraySet<String>> allowedByType = mApproved.get(userId); if (allowedByType == null) { if (allowedByType == null) { allowedByType = new ArrayMap<>(); allowedByType = new ArrayMap<>(); Loading @@ -488,6 +498,7 @@ abstract public class ManagedServices { approved.remove(approvedItem); approved.remove(approvedItem); } } } } } rebindServices(false, userId); rebindServices(false, userId); } } Loading @@ -504,14 +515,17 @@ abstract public class ManagedServices { } } protected String getApproved(int userId, boolean primary) { protected String getApproved(int userId, boolean primary) { synchronized (mApproved) { final ArrayMap<Boolean, ArraySet<String>> allowedByType = final ArrayMap<Boolean, ArraySet<String>> allowedByType = mApproved.getOrDefault(userId, new ArrayMap<>()); mApproved.getOrDefault(userId, new ArrayMap<>()); ArraySet<String> approved = allowedByType.getOrDefault(primary, new ArraySet<>()); ArraySet<String> approved = allowedByType.getOrDefault(primary, new ArraySet<>()); return String.join(ENABLED_SERVICES_SEPARATOR, approved); return String.join(ENABLED_SERVICES_SEPARATOR, approved); } } } protected List<ComponentName> getAllowedComponents(int userId) { protected List<ComponentName> getAllowedComponents(int userId) { final List<ComponentName> allowedComponents = new ArrayList<>(); final List<ComponentName> allowedComponents = new ArrayList<>(); synchronized (mApproved) { final ArrayMap<Boolean, ArraySet<String>> allowedByType = final ArrayMap<Boolean, ArraySet<String>> allowedByType = mApproved.getOrDefault(userId, new ArrayMap<>()); mApproved.getOrDefault(userId, new ArrayMap<>()); for (int i = 0; i < allowedByType.size(); i++) { for (int i = 0; i < allowedByType.size(); i++) { Loading @@ -523,11 +537,13 @@ abstract public class ManagedServices { } } } } } } } return allowedComponents; return allowedComponents; } } protected List<String> getAllowedPackages(int userId) { protected List<String> getAllowedPackages(int userId) { final List<String> allowedPackages = new ArrayList<>(); final List<String> allowedPackages = new ArrayList<>(); synchronized (mApproved) { final ArrayMap<Boolean, ArraySet<String>> allowedByType = final ArrayMap<Boolean, ArraySet<String>> allowedByType = mApproved.getOrDefault(userId, new ArrayMap<>()); mApproved.getOrDefault(userId, new ArrayMap<>()); for (int i = 0; i < allowedByType.size(); i++) { for (int i = 0; i < allowedByType.size(); i++) { Loading @@ -539,10 +555,12 @@ abstract public class ManagedServices { } } } } } } } return allowedPackages; return allowedPackages; } } protected boolean isPackageOrComponentAllowed(String pkgOrComponent, int userId) { protected boolean isPackageOrComponentAllowed(String pkgOrComponent, int userId) { synchronized (mApproved) { ArrayMap<Boolean, ArraySet<String>> allowedByType = ArrayMap<Boolean, ArraySet<String>> allowedByType = mApproved.getOrDefault(userId, new ArrayMap<>()); mApproved.getOrDefault(userId, new ArrayMap<>()); for (int i = 0; i < allowedByType.size(); i++) { for (int i = 0; i < allowedByType.size(); i++) { Loading @@ -551,6 +569,7 @@ abstract public class ManagedServices { return true; return true; } } } } } return false; return false; } } Loading @@ -558,6 +577,7 @@ abstract public class ManagedServices { if (pkg == null) { if (pkg == null) { return false; return false; } } synchronized (mApproved) { ArrayMap<Boolean, ArraySet<String>> allowedByType = ArrayMap<Boolean, ArraySet<String>> allowedByType = mApproved.getOrDefault(userId, new ArrayMap<>()); mApproved.getOrDefault(userId, new ArrayMap<>()); for (int i = 0; i < allowedByType.size(); i++) { for (int i = 0; i < allowedByType.size(); i++) { Loading @@ -575,6 +595,7 @@ abstract public class ManagedServices { } } } } } } } return false; return false; } } Loading Loading @@ -616,7 +637,9 @@ abstract public class ManagedServices { public void onUserRemoved(int user) { public void onUserRemoved(int user) { Slog.i(TAG, "Removing approved services for removed user " + user); Slog.i(TAG, "Removing approved services for removed user " + user); synchronized (mApproved) { mApproved.remove(user); mApproved.remove(user); } rebindServices(true, user); rebindServices(true, user); } } Loading Loading @@ -797,6 +820,7 @@ abstract public class ManagedServices { protected Set<String> getAllowedPackages() { protected Set<String> getAllowedPackages() { final Set<String> allowedPackages = new ArraySet<>(); final Set<String> allowedPackages = new ArraySet<>(); synchronized (mApproved) { for (int k = 0; k < mApproved.size(); k++) { for (int k = 0; k < mApproved.size(); k++) { ArrayMap<Boolean, ArraySet<String>> allowedByType = mApproved.valueAt(k); ArrayMap<Boolean, ArraySet<String>> allowedByType = mApproved.valueAt(k); for (int i = 0; i < allowedByType.size(); i++) { for (int i = 0; i < allowedByType.size(); i++) { Loading @@ -809,10 +833,12 @@ abstract public class ManagedServices { } } } } } } } return allowedPackages; return allowedPackages; } } private void trimApprovedListsAccordingToInstalledServices(int userId) { private void trimApprovedListsAccordingToInstalledServices(int userId) { synchronized (mApproved) { final ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.get(userId); final ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.get(userId); if (approvedByType == null) { if (approvedByType == null) { return; return; Loading @@ -834,10 +860,13 @@ abstract public class ManagedServices { } } } } } } } private boolean removeUninstalledItemsFromApprovedLists(int uninstalledUserId, String pkg) { private boolean removeUninstalledItemsFromApprovedLists(int uninstalledUserId, String pkg) { boolean removed = false; boolean removed = false; final ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.get(uninstalledUserId); synchronized (mApproved) { final ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.get( uninstalledUserId); if (approvedByType != null) { if (approvedByType != null) { int M = approvedByType.size(); int M = approvedByType.size(); for (int j = 0; j < M; j++) { for (int j = 0; j < M; j++) { Loading @@ -856,6 +885,7 @@ abstract public class ManagedServices { } } } } } } } return removed; return removed; } } Loading Loading @@ -887,6 +917,7 @@ abstract public class ManagedServices { for (int i = 0; i < nUserIds; ++i) { for (int i = 0; i < nUserIds; ++i) { final int userId = userIds.get(i); final int userId = userIds.get(i); synchronized (mApproved) { final ArrayMap<Boolean, ArraySet<String>> approvedLists = mApproved.get(userId); final ArrayMap<Boolean, ArraySet<String>> approvedLists = mApproved.get(userId); if (approvedLists != null) { if (approvedLists != null) { final int N = approvedLists.size(); final int N = approvedLists.size(); Loading @@ -901,6 +932,7 @@ abstract public class ManagedServices { } } } } } } } return componentsByUser; return componentsByUser; } } Loading Loading
services/core/java/com/android/server/notification/ManagedServices.java +206 −174 Original line number Original line Diff line number Diff line Loading @@ -196,6 +196,7 @@ abstract public class ManagedServices { public void dump(PrintWriter pw, DumpFilter filter) { public void dump(PrintWriter pw, DumpFilter filter) { pw.println(" Allowed " + getCaption() + "s:"); pw.println(" Allowed " + getCaption() + "s:"); synchronized (mApproved) { final int N = mApproved.size(); final int N = mApproved.size(); for (int i = 0; i < N; i++) { for (int i = 0; i < N; i++) { final int userId = mApproved.keyAt(i); final int userId = mApproved.keyAt(i); Loading @@ -212,6 +213,7 @@ abstract public class ManagedServices { } } } } } } } pw.println(" All " + getCaption() + "s (" + mEnabledServicesForCurrentProfiles.size() pw.println(" All " + getCaption() + "s (" + mEnabledServicesForCurrentProfiles.size() + ") enabled for current profiles:"); + ") enabled for current profiles:"); Loading Loading @@ -240,6 +242,7 @@ abstract public class ManagedServices { public void dump(ProtoOutputStream proto, DumpFilter filter) { public void dump(ProtoOutputStream proto, DumpFilter filter) { proto.write(ManagedServicesProto.CAPTION, getCaption()); proto.write(ManagedServicesProto.CAPTION, getCaption()); synchronized (mApproved) { final int N = mApproved.size(); final int N = mApproved.size(); for (int i = 0; i < N; i++) { for (int i = 0; i < N; i++) { final int userId = mApproved.keyAt(i); final int userId = mApproved.keyAt(i); Loading @@ -261,6 +264,7 @@ abstract public class ManagedServices { } } } } } } } for (ComponentName cmpt : mEnabledServicesForCurrentProfiles) { for (ComponentName cmpt : mEnabledServicesForCurrentProfiles) { if (filter != null && !filter.matches(cmpt)) continue; if (filter != null && !filter.matches(cmpt)) continue; Loading Loading @@ -315,6 +319,7 @@ abstract public class ManagedServices { trimApprovedListsAccordingToInstalledServices(userId); trimApprovedListsAccordingToInstalledServices(userId); } } synchronized (mApproved) { final int N = mApproved.size(); final int N = mApproved.size(); for (int i = 0; i < N; i++) { for (int i = 0; i < N; i++) { final int approvedUserId = mApproved.keyAt(i); final int approvedUserId = mApproved.keyAt(i); Loading @@ -339,13 +344,15 @@ abstract public class ManagedServices { if (!forBackup && isPrimary) { if (!forBackup && isPrimary) { // Also write values to settings, for observers who haven't migrated yet // Also write values to settings, for observers who haven't migrated yet Settings.Secure.putStringForUser(mContext.getContentResolver(), Settings.Secure.putStringForUser(mContext.getContentResolver(), getConfig().secureSettingName, allowedItems, approvedUserId); getConfig().secureSettingName, allowedItems, approvedUserId); } } } } } } } } } } } writeExtraXmlTags(out); writeExtraXmlTags(out); Loading Loading @@ -440,6 +447,7 @@ abstract public class ManagedServices { if (TextUtils.isEmpty(approved)) { if (TextUtils.isEmpty(approved)) { approved = ""; approved = ""; } } synchronized (mApproved) { ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.get(userId); ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.get(userId); if (approvedByType == null) { if (approvedByType == null) { approvedByType = new ArrayMap<>(); approvedByType = new ArrayMap<>(); Loading @@ -460,6 +468,7 @@ abstract public class ManagedServices { } } } } } } } protected boolean isComponentEnabledForPackage(String pkg) { protected boolean isComponentEnabledForPackage(String pkg) { return mEnabledServicesPackageNames.contains(pkg); return mEnabledServicesPackageNames.contains(pkg); Loading @@ -469,6 +478,7 @@ abstract public class ManagedServices { boolean isPrimary, boolean enabled) { boolean isPrimary, boolean enabled) { Slog.i(TAG, Slog.i(TAG, (enabled ? " Allowing " : "Disallowing ") + mConfig.caption + " " + pkgOrComponent); (enabled ? " Allowing " : "Disallowing ") + mConfig.caption + " " + pkgOrComponent); synchronized (mApproved) { ArrayMap<Boolean, ArraySet<String>> allowedByType = mApproved.get(userId); ArrayMap<Boolean, ArraySet<String>> allowedByType = mApproved.get(userId); if (allowedByType == null) { if (allowedByType == null) { allowedByType = new ArrayMap<>(); allowedByType = new ArrayMap<>(); Loading @@ -488,6 +498,7 @@ abstract public class ManagedServices { approved.remove(approvedItem); approved.remove(approvedItem); } } } } } rebindServices(false, userId); rebindServices(false, userId); } } Loading @@ -504,14 +515,17 @@ abstract public class ManagedServices { } } protected String getApproved(int userId, boolean primary) { protected String getApproved(int userId, boolean primary) { synchronized (mApproved) { final ArrayMap<Boolean, ArraySet<String>> allowedByType = final ArrayMap<Boolean, ArraySet<String>> allowedByType = mApproved.getOrDefault(userId, new ArrayMap<>()); mApproved.getOrDefault(userId, new ArrayMap<>()); ArraySet<String> approved = allowedByType.getOrDefault(primary, new ArraySet<>()); ArraySet<String> approved = allowedByType.getOrDefault(primary, new ArraySet<>()); return String.join(ENABLED_SERVICES_SEPARATOR, approved); return String.join(ENABLED_SERVICES_SEPARATOR, approved); } } } protected List<ComponentName> getAllowedComponents(int userId) { protected List<ComponentName> getAllowedComponents(int userId) { final List<ComponentName> allowedComponents = new ArrayList<>(); final List<ComponentName> allowedComponents = new ArrayList<>(); synchronized (mApproved) { final ArrayMap<Boolean, ArraySet<String>> allowedByType = final ArrayMap<Boolean, ArraySet<String>> allowedByType = mApproved.getOrDefault(userId, new ArrayMap<>()); mApproved.getOrDefault(userId, new ArrayMap<>()); for (int i = 0; i < allowedByType.size(); i++) { for (int i = 0; i < allowedByType.size(); i++) { Loading @@ -523,11 +537,13 @@ abstract public class ManagedServices { } } } } } } } return allowedComponents; return allowedComponents; } } protected List<String> getAllowedPackages(int userId) { protected List<String> getAllowedPackages(int userId) { final List<String> allowedPackages = new ArrayList<>(); final List<String> allowedPackages = new ArrayList<>(); synchronized (mApproved) { final ArrayMap<Boolean, ArraySet<String>> allowedByType = final ArrayMap<Boolean, ArraySet<String>> allowedByType = mApproved.getOrDefault(userId, new ArrayMap<>()); mApproved.getOrDefault(userId, new ArrayMap<>()); for (int i = 0; i < allowedByType.size(); i++) { for (int i = 0; i < allowedByType.size(); i++) { Loading @@ -539,10 +555,12 @@ abstract public class ManagedServices { } } } } } } } return allowedPackages; return allowedPackages; } } protected boolean isPackageOrComponentAllowed(String pkgOrComponent, int userId) { protected boolean isPackageOrComponentAllowed(String pkgOrComponent, int userId) { synchronized (mApproved) { ArrayMap<Boolean, ArraySet<String>> allowedByType = ArrayMap<Boolean, ArraySet<String>> allowedByType = mApproved.getOrDefault(userId, new ArrayMap<>()); mApproved.getOrDefault(userId, new ArrayMap<>()); for (int i = 0; i < allowedByType.size(); i++) { for (int i = 0; i < allowedByType.size(); i++) { Loading @@ -551,6 +569,7 @@ abstract public class ManagedServices { return true; return true; } } } } } return false; return false; } } Loading @@ -558,6 +577,7 @@ abstract public class ManagedServices { if (pkg == null) { if (pkg == null) { return false; return false; } } synchronized (mApproved) { ArrayMap<Boolean, ArraySet<String>> allowedByType = ArrayMap<Boolean, ArraySet<String>> allowedByType = mApproved.getOrDefault(userId, new ArrayMap<>()); mApproved.getOrDefault(userId, new ArrayMap<>()); for (int i = 0; i < allowedByType.size(); i++) { for (int i = 0; i < allowedByType.size(); i++) { Loading @@ -575,6 +595,7 @@ abstract public class ManagedServices { } } } } } } } return false; return false; } } Loading Loading @@ -616,7 +637,9 @@ abstract public class ManagedServices { public void onUserRemoved(int user) { public void onUserRemoved(int user) { Slog.i(TAG, "Removing approved services for removed user " + user); Slog.i(TAG, "Removing approved services for removed user " + user); synchronized (mApproved) { mApproved.remove(user); mApproved.remove(user); } rebindServices(true, user); rebindServices(true, user); } } Loading Loading @@ -797,6 +820,7 @@ abstract public class ManagedServices { protected Set<String> getAllowedPackages() { protected Set<String> getAllowedPackages() { final Set<String> allowedPackages = new ArraySet<>(); final Set<String> allowedPackages = new ArraySet<>(); synchronized (mApproved) { for (int k = 0; k < mApproved.size(); k++) { for (int k = 0; k < mApproved.size(); k++) { ArrayMap<Boolean, ArraySet<String>> allowedByType = mApproved.valueAt(k); ArrayMap<Boolean, ArraySet<String>> allowedByType = mApproved.valueAt(k); for (int i = 0; i < allowedByType.size(); i++) { for (int i = 0; i < allowedByType.size(); i++) { Loading @@ -809,10 +833,12 @@ abstract public class ManagedServices { } } } } } } } return allowedPackages; return allowedPackages; } } private void trimApprovedListsAccordingToInstalledServices(int userId) { private void trimApprovedListsAccordingToInstalledServices(int userId) { synchronized (mApproved) { final ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.get(userId); final ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.get(userId); if (approvedByType == null) { if (approvedByType == null) { return; return; Loading @@ -834,10 +860,13 @@ abstract public class ManagedServices { } } } } } } } private boolean removeUninstalledItemsFromApprovedLists(int uninstalledUserId, String pkg) { private boolean removeUninstalledItemsFromApprovedLists(int uninstalledUserId, String pkg) { boolean removed = false; boolean removed = false; final ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.get(uninstalledUserId); synchronized (mApproved) { final ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.get( uninstalledUserId); if (approvedByType != null) { if (approvedByType != null) { int M = approvedByType.size(); int M = approvedByType.size(); for (int j = 0; j < M; j++) { for (int j = 0; j < M; j++) { Loading @@ -856,6 +885,7 @@ abstract public class ManagedServices { } } } } } } } return removed; return removed; } } Loading Loading @@ -887,6 +917,7 @@ abstract public class ManagedServices { for (int i = 0; i < nUserIds; ++i) { for (int i = 0; i < nUserIds; ++i) { final int userId = userIds.get(i); final int userId = userIds.get(i); synchronized (mApproved) { final ArrayMap<Boolean, ArraySet<String>> approvedLists = mApproved.get(userId); final ArrayMap<Boolean, ArraySet<String>> approvedLists = mApproved.get(userId); if (approvedLists != null) { if (approvedLists != null) { final int N = approvedLists.size(); final int N = approvedLists.size(); Loading @@ -901,6 +932,7 @@ abstract public class ManagedServices { } } } } } } } return componentsByUser; return componentsByUser; } } Loading