Merge "Synchronize managed services approval list" into qt-qpr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
4091b07fe8
@@ -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);
|
||||||
@@ -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:");
|
||||||
@@ -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);
|
||||||
@@ -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;
|
||||||
@@ -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);
|
||||||
@@ -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);
|
||||||
|
|
||||||
@@ -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<>();
|
||||||
@@ -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);
|
||||||
@@ -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<>();
|
||||||
@@ -488,6 +498,7 @@ abstract public class ManagedServices {
|
|||||||
approved.remove(approvedItem);
|
approved.remove(approvedItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
rebindServices(false, userId);
|
rebindServices(false, userId);
|
||||||
}
|
}
|
||||||
@@ -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++) {
|
||||||
@@ -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++) {
|
||||||
@@ -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++) {
|
||||||
@@ -551,6 +569,7 @@ abstract public class ManagedServices {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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++) {
|
||||||
@@ -575,6 +595,7 @@ abstract public class ManagedServices {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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++) {
|
||||||
@@ -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;
|
||||||
@@ -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++) {
|
||||||
@@ -856,6 +885,7 @@ abstract public class ManagedServices {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return removed;
|
return removed;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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();
|
||||||
@@ -901,6 +932,7 @@ abstract public class ManagedServices {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return componentsByUser;
|
return componentsByUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user