diff options
| author | 2022-12-07 00:18:09 +0000 | |
|---|---|---|
| committer | 2022-12-07 00:18:09 +0000 | |
| commit | 7660c6341f1ecd9fbde51921728555ed9bfb8b51 (patch) | |
| tree | ef2f25adb38e6993592b943d9c460178850da2a3 | |
| parent | 61698140cecb1c8a607cc1c5fe88d36a383aac1c (diff) | |
| parent | ab384c5b7210d35ebf88105859d353c7dad56d99 (diff) | |
Merge changes from topic "remove_read_permission"
* changes:
Stop calling Enforcereadpermission from DeviceConf
Move enforceReadPermission to Setting.config
7 files changed, 21 insertions, 34 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 561ec10e6709..a6873790879e 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -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); diff --git a/core/java/android/provider/DeviceConfig.java b/core/java/android/provider/DeviceConfig.java index ab878202cfda..7df9290274ce 100644 --- a/core/java/android/provider/DeviceConfig.java +++ b/core/java/android/provider/DeviceConfig.java @@ -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) { @@ -1296,20 +1293,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 */ diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index f3e8b7c1e941..03846dbcfb68 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -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) { diff --git a/core/java/com/android/internal/jank/InteractionJankMonitor.java b/core/java/com/android/internal/jank/InteractionJankMonitor.java index 614f96255acb..75f0bf574947 100644 --- a/core/java/com/android/internal/jank/InteractionJankMonitor.java +++ b/core/java/com/android/internal/jank/InteractionJankMonitor.java @@ -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<>(); diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index 503859b8dc38..9192086de98a 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -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) { diff --git a/packages/SystemUI/src/com/android/systemui/util/DeviceConfigProxy.java b/packages/SystemUI/src/com/android/systemui/util/DeviceConfigProxy.java index 0f3eddf2eb7c..bff6132d5e23 100644 --- a/packages/SystemUI/src/com/android/systemui/util/DeviceConfigProxy.java +++ b/packages/SystemUI/src/com/android/systemui/util/DeviceConfigProxy.java @@ -50,13 +50,6 @@ public class DeviceConfigProxy { } /** - * Wrapped version of {@link DeviceConfig#enforceReadPermission}. - */ - public void enforceReadPermission(String namespace) { - DeviceConfig.enforceReadPermission(namespace); - } - - /** * Wrapped version of {@link DeviceConfig#getBoolean}. */ public boolean getBoolean( diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/util/DeviceConfigProxyFake.java b/packages/SystemUI/tests/utils/src/com/android/systemui/util/DeviceConfigProxyFake.java index 21e16a1e7be4..8a10bf064910 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/util/DeviceConfigProxyFake.java +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/util/DeviceConfigProxyFake.java @@ -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) |