Migrate managed services from setting to policy xml
Change-Id: Ie20f91dbdd0ba6b57b5909cbf0152a32754fe02d
Fixes: 62263757
Test: runtest systemui-notification, cts AudioManagerTest,
cts-verifier DND tests, verify bug reports after toggling
access for various types of managed services, verified
default approved services aren't renabled on boot; verified that
they are reenabled after a device reset, verified that
settings are migrated after a restore from OC backup.
diff --git a/services/core/java/com/android/server/notification/ConditionProviders.java b/services/core/java/com/android/server/notification/ConditionProviders.java
index c28fb67..5cc14b5 100644
--- a/services/core/java/com/android/server/notification/ConditionProviders.java
+++ b/services/core/java/com/android/server/notification/ConditionProviders.java
@@ -16,14 +16,12 @@
package com.android.server.notification;
-import android.annotation.NonNull;
import android.app.INotificationManager;
import android.app.NotificationManager;
import android.content.ComponentName;
-import android.content.ContentResolver;
import android.content.Context;
+import android.content.pm.IPackageManager;
import android.net.Uri;
-import android.os.Handler;
import android.os.IBinder;
import android.os.IInterface;
import android.os.RemoteException;
@@ -32,7 +30,6 @@
import android.service.notification.Condition;
import android.service.notification.ConditionProviderService;
import android.service.notification.IConditionProvider;
-import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Slog;
@@ -45,6 +42,9 @@
import java.util.Arrays;
public class ConditionProviders extends ManagedServices {
+
+ private static final String TAG_ENABLED_DND_APPS = "dnd_apps";
+
private final ArrayList<ConditionRecord> mRecords = new ArrayList<>();
private final ArraySet<String> mSystemConditionProviderNames;
private final ArraySet<SystemConditionProviderService> mSystemConditionProviders
@@ -52,11 +52,12 @@
private Callback mCallback;
- public ConditionProviders(Context context, Handler handler, UserProfiles userProfiles) {
- super(context, handler, new Object(), userProfiles);
+ public ConditionProviders(Context context, UserProfiles userProfiles, IPackageManager pm) {
+ super(context, new Object(), userProfiles, pm);
mSystemConditionProviderNames = safeSet(PropConfig.getStringArray(mContext,
"system.condition.providers",
R.array.config_system_condition_providers));
+ mApprovalLevel = APPROVAL_BY_PACKAGE;
}
public void setCallback(Callback callback) {
@@ -83,6 +84,7 @@
c.caption = "condition provider";
c.serviceInterface = ConditionProviderService.SERVICE_INTERFACE;
c.secureSettingName = Settings.Secure.ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES;
+ c.managedServiceTypeTag = TAG_ENABLED_DND_APPS;
c.secondarySettingName = Settings.Secure.ENABLED_NOTIFICATION_LISTENERS;
c.bindPermission = android.Manifest.permission.BIND_CONDITION_PROVIDER_SERVICE;
c.settingsAction = Settings.ACTION_CONDITION_PROVIDER_SETTINGS;
@@ -164,7 +166,7 @@
}
@Override
- public void onPackagesChanged(boolean removingPackage, String[] pkgList) {
+ public void onPackagesChanged(boolean removingPackage, String[] pkgList, int[] uid) {
if (removingPackage) {
INotificationManager inm = NotificationManager.getService();
@@ -179,7 +181,7 @@
}
}
}
- super.onPackagesChanged(removingPackage, pkgList);
+ super.onPackagesChanged(removingPackage, pkgList, uid);
}
public ManagedServiceInfo checkServiceToken(IConditionProvider provider) {
@@ -277,31 +279,6 @@
}
}
- @Override
- protected @NonNull ArraySet<ComponentName> loadComponentNamesFromSetting(String settingName,
- int userId) {
- final ContentResolver cr = mContext.getContentResolver();
- String settingValue = Settings.Secure.getStringForUser(
- cr,
- settingName,
- userId);
- if (TextUtils.isEmpty(settingValue))
- return new ArraySet<>();
- String[] packages = settingValue.split(ENABLED_SERVICES_SEPARATOR);
- ArraySet<ComponentName> result = new ArraySet<>(packages.length);
- for (int i = 0; i < packages.length; i++) {
- if (!TextUtils.isEmpty(packages[i])) {
- final ComponentName component = ComponentName.unflattenFromString(packages[i]);
- if (component != null) {
- result.addAll(queryPackageForServices(component.getPackageName(), userId));
- } else {
- result.addAll(queryPackageForServices(packages[i], userId));
- }
- }
- }
- return result;
- }
-
public boolean subscribeIfNecessary(ComponentName component, Uri conditionId) {
synchronized (mMutex) {
final ConditionRecord r = getRecordLocked(conditionId, component, false /*create*/);