Added a new set of permissions for DeviceConfig API.
Permissions READ_DEVICE_CONFIG and WRITE_DEVICE_CONFIG are required to
use DeviceConfig API. Actual checks for new permissions are not added
as we are waiting for gmscore to include them into manifest.
Also added "configurator" protection flag.
Test: atest FrameworksCoreTests:DeviceConfigTest
atest FrameworksCoreTests:SettingsProviderTest
atest SettingsProviderTest:DeviceConfigServiceTest
Bug:109919982
Bug:113100523
Bug:113101834
Bug:117663715
Change-Id: I66c256b57c5491201c6c7834620a287b6c81c23c
This commit is contained in:
@@ -55,6 +55,7 @@ public abstract class PackageManagerInternal {
|
||||
public static final int PACKAGE_PERMISSION_CONTROLLER = 6;
|
||||
public static final int PACKAGE_WELLBEING = 7;
|
||||
public static final int PACKAGE_DOCUMENTER = 8;
|
||||
public static final int PACKAGE_CONFIGURATOR = 9;
|
||||
@IntDef(value = {
|
||||
PACKAGE_SYSTEM,
|
||||
PACKAGE_SETUP_WIZARD,
|
||||
@@ -65,6 +66,7 @@ public abstract class PackageManagerInternal {
|
||||
PACKAGE_PERMISSION_CONTROLLER,
|
||||
PACKAGE_WELLBEING,
|
||||
PACKAGE_DOCUMENTER,
|
||||
PACKAGE_CONFIGURATOR,
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface KnownPackage {}
|
||||
|
||||
@@ -202,6 +202,16 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
|
||||
@TestApi
|
||||
public static final int PROTECTION_FLAG_DOCUMENTER = 0x40000;
|
||||
|
||||
/**
|
||||
* Additional flag for {@link #protectionLevel}, corresponding to the
|
||||
* {@code configurator} value of {@link android.R.attr#protectionLevel}.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@TestApi
|
||||
public static final int PROTECTION_FLAG_CONFIGURATOR = 0x80000;
|
||||
|
||||
|
||||
/** @hide */
|
||||
@IntDef(flag = true, prefix = { "PROTECTION_FLAG_" }, value = {
|
||||
@@ -221,6 +231,7 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
|
||||
PROTECTION_FLAG_SYSTEM_TEXT_CLASSIFIER,
|
||||
PROTECTION_FLAG_WELLBEING,
|
||||
PROTECTION_FLAG_DOCUMENTER,
|
||||
PROTECTION_FLAG_CONFIGURATOR,
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface ProtectionFlags {}
|
||||
@@ -416,6 +427,9 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
|
||||
if ((level & PermissionInfo.PROTECTION_FLAG_DOCUMENTER) != 0) {
|
||||
protLevel += "|documenter";
|
||||
}
|
||||
if ((level & PROTECTION_FLAG_CONFIGURATOR) != 0) {
|
||||
protLevel += "|configurator";
|
||||
}
|
||||
return protLevel;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,9 +16,13 @@
|
||||
|
||||
package android.provider;
|
||||
|
||||
import static android.Manifest.permission.READ_DEVICE_CONFIG;
|
||||
import static android.Manifest.permission.WRITE_DEVICE_CONFIG;
|
||||
|
||||
import android.annotation.CallbackExecutor;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.RequiresPermission;
|
||||
import android.annotation.SystemApi;
|
||||
import android.app.ActivityThread;
|
||||
import android.content.ContentResolver;
|
||||
@@ -69,6 +73,7 @@ public final class DeviceConfig {
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(READ_DEVICE_CONFIG)
|
||||
public static String getProperty(String namespace, String name) {
|
||||
ContentResolver contentResolver = ActivityThread.currentApplication().getContentResolver();
|
||||
String compositeName = createCompositeName(namespace, name);
|
||||
@@ -96,6 +101,7 @@ public final class DeviceConfig {
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(WRITE_DEVICE_CONFIG)
|
||||
public static boolean setProperty(
|
||||
String namespace, String name, String value, boolean makeDefault) {
|
||||
ContentResolver contentResolver = ActivityThread.currentApplication().getContentResolver();
|
||||
@@ -116,6 +122,7 @@ public final class DeviceConfig {
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(WRITE_DEVICE_CONFIG)
|
||||
public static void resetToDefaults(@ResetMode int resetMode, @Nullable String namespace) {
|
||||
ContentResolver contentResolver = ActivityThread.currentApplication().getContentResolver();
|
||||
Settings.Config.resetToDefaults(contentResolver, resetMode, namespace);
|
||||
@@ -137,10 +144,12 @@ public final class DeviceConfig {
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(READ_DEVICE_CONFIG)
|
||||
public static void addOnPropertyChangedListener(
|
||||
@NonNull String namespace,
|
||||
@NonNull @CallbackExecutor Executor executor,
|
||||
@NonNull OnPropertyChangedListener onPropertyChangedListener) {
|
||||
// TODO enforce READ_DEVICE_CONFIG permission
|
||||
synchronized (sLock) {
|
||||
Pair<String, Executor> oldNamespace = sListeners.get(onPropertyChangedListener);
|
||||
if (oldNamespace == null) {
|
||||
|
||||
@@ -14041,7 +14041,7 @@ public final class Settings {
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
// TODO(b/117663715): require a new read permission
|
||||
@RequiresPermission(Manifest.permission.READ_DEVICE_CONFIG)
|
||||
static String getString(ContentResolver resolver, String name) {
|
||||
return sNameValueCache.getStringForUser(resolver, name, resolver.getUserId());
|
||||
}
|
||||
@@ -14064,8 +14064,7 @@ public final class Settings {
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
// TODO(b/117663715): require a new write permission restricted to a single source
|
||||
@RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS)
|
||||
@RequiresPermission(Manifest.permission.WRITE_DEVICE_CONFIG)
|
||||
static boolean putString(@NonNull ContentResolver resolver, @NonNull String name,
|
||||
@Nullable String value, boolean makeDefault) {
|
||||
return sNameValueCache.putStringForUser(resolver, name, value, null, makeDefault,
|
||||
@@ -14087,7 +14086,7 @@ public final class Settings {
|
||||
* @hide
|
||||
*/
|
||||
// TODO(b/117663715): require a new write permission restricted to a single source
|
||||
@RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS)
|
||||
@RequiresPermission(Manifest.permission.WRITE_DEVICE_CONFIG)
|
||||
static void resetToDefaults(@NonNull ContentResolver resolver, @ResetMode int resetMode,
|
||||
@Nullable String prefix) {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user