Merge changes from topic "remove_read_permission"

* changes:
  Stop calling Enforcereadpermission from DeviceConf
  Move enforceReadPermission to Setting.config
This commit is contained in:
Hassan Ali
2022-12-07 00:18:09 +00:00
committed by Android (Google) Code Review
7 changed files with 21 additions and 34 deletions

View File

@@ -10704,7 +10704,7 @@ package android.provider {
}
public final class DeviceConfig {
method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static void addOnPropertiesChangedListener(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.provider.DeviceConfig.OnPropertiesChangedListener);
method public static void addOnPropertiesChangedListener(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.provider.DeviceConfig.OnPropertiesChangedListener);
method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static boolean deleteProperty(@NonNull String, @NonNull String);
method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static boolean getBoolean(@NonNull String, @NonNull String, boolean);
method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static float getFloat(@NonNull String, @NonNull String, float);

View File

@@ -25,7 +25,6 @@ import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.content.pm.PackageManager;
import android.database.ContentObserver;
import android.net.Uri;
import android.provider.Settings.Config.SyncDisabledMode;
@@ -1168,12 +1167,10 @@ public final class DeviceConfig {
* @see #removeOnPropertiesChangedListener(OnPropertiesChangedListener)
*/
@SystemApi
@RequiresPermission(READ_DEVICE_CONFIG)
public static void addOnPropertiesChangedListener(
@NonNull String namespace,
@NonNull @CallbackExecutor Executor executor,
@NonNull OnPropertiesChangedListener onPropertiesChangedListener) {
enforceReadPermission(namespace);
synchronized (sLock) {
Pair<String, Executor> oldNamespace = sListeners.get(onPropertiesChangedListener);
if (oldNamespace == null) {
@@ -1295,20 +1292,6 @@ public final class DeviceConfig {
}
}
/**
* Enforces READ_DEVICE_CONFIG permission if namespace is not one of public namespaces.
* @hide
*/
public static void enforceReadPermission(@NonNull String namespace) {
if (Settings.Config.checkCallingOrSelfPermission(READ_DEVICE_CONFIG)
!= PackageManager.PERMISSION_GRANTED) {
if (!PUBLIC_NAMESPACES.contains(namespace)) {
throw new SecurityException("Permission denial: reading from settings requires:"
+ READ_DEVICE_CONFIG);
}
}
}
/**
* Returns list of namespaces that can be read without READ_DEVICE_CONFIG_PERMISSION;
* @hide

View File

@@ -3366,7 +3366,7 @@ public final class Settings {
public ArrayMap<String, String> getStringsForPrefix(ContentResolver cr, String prefix,
List<String> names) {
String namespace = prefix.substring(0, prefix.length() - 1);
DeviceConfig.enforceReadPermission(namespace);
Config.enforceReadPermission(namespace);
ArrayMap<String, String> keyValues = new ArrayMap<>();
int currentGeneration = -1;
@@ -18370,6 +18370,21 @@ public final class Settings {
.getApplicationContext().checkCallingOrSelfPermission(permission);
}
/**
* Enforces READ_DEVICE_CONFIG permission if namespace is not one of public namespaces.
* @hide
*/
public static void enforceReadPermission(String namespace) {
if (ActivityThread.currentApplication().getApplicationContext()
.checkCallingOrSelfPermission(Manifest.permission.READ_DEVICE_CONFIG)
!= PackageManager.PERMISSION_GRANTED) {
if (!DeviceConfig.getPublicNamespaces().contains(namespace)) {
throw new SecurityException("Permission denial: reading from settings requires:"
+ Manifest.permission.READ_DEVICE_CONFIG);
}
}
}
private static void registerMonitorCallbackAsUser(
@NonNull ContentResolver resolver, @UserIdInt int userHandle,
@NonNull RemoteCallback callback) {

View File

@@ -97,6 +97,7 @@ import android.os.Handler;
import android.os.HandlerExecutor;
import android.os.HandlerThread;
import android.provider.DeviceConfig;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.util.SparseArray;
@@ -415,7 +416,7 @@ public class InteractionJankMonitor {
@VisibleForTesting
public InteractionJankMonitor(@NonNull HandlerThread worker) {
// Check permission early.
DeviceConfig.enforceReadPermission(
Settings.Config.enforceReadPermission(
DeviceConfig.NAMESPACE_INTERACTION_JANK_MONITOR);
mRunningTrackers = new SparseArray<>();

View File

@@ -1144,7 +1144,7 @@ public class SettingsProvider extends ContentProvider {
Slog.v(LOG_TAG, "getConfigSetting(" + name + ")");
}
DeviceConfig.enforceReadPermission(/*namespace=*/name.split("/")[0]);
Settings.Config.enforceReadPermission(/*namespace=*/name.split("/")[0]);
// Get the value.
synchronized (mLock) {
@@ -1317,7 +1317,7 @@ public class SettingsProvider extends ContentProvider {
Slog.v(LOG_TAG, "getAllConfigFlags() for " + prefix);
}
DeviceConfig.enforceReadPermission(
Settings.Config.enforceReadPermission(
prefix != null ? prefix.split("/")[0] : null);
synchronized (mLock) {

View File

@@ -49,13 +49,6 @@ public class DeviceConfigProxy {
namespace, executor, onPropertiesChangedListener);
}
/**
* Wrapped version of {@link DeviceConfig#enforceReadPermission}.
*/
public void enforceReadPermission(String namespace) {
DeviceConfig.enforceReadPermission(namespace);
}
/**
* Wrapped version of {@link DeviceConfig#getBoolean}.
*/

View File

@@ -81,11 +81,6 @@ public class DeviceConfigProxyFake extends DeviceConfigProxy {
properties.get(namespace).put(name, value);
}
@Override
public void enforceReadPermission(String namespace) {
// no-op
}
private Properties propsForNamespaceAndName(String namespace, String name) {
if (mProperties.containsKey(namespace) && mProperties.get(namespace).containsKey(name)) {
return new Properties.Builder(namespace)