diff options
| author | Treehugger Robot <treehugger-gerrit@google.com> | 2022-03-31 19:22:46 +0000 |
|---|---|---|
| committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-03-31 19:22:46 +0000 |
| commit | f8adc1692b1a84be4e60a3f24b8932bd57cf39b4 (patch) | |
| tree | 0ba8fe646ebcd7928a58131b3b4437b7a7aeac70 /core/java | |
| parent | c5bdf9b7a4ac46df7d71196ef52d2862874643be (diff) | |
| parent | ab9e828a4379561e59d6189749b0fe4625f724e1 (diff) | |
Merge "[DeviceConfig] cherry-pick deleteProperty SystemApi" am: 6ff14106fc am: ab9e828a43
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2040764
Change-Id: Id0b7cb4f43df62a2a900fc0eab016aeb1a08c89c
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/provider/DeviceConfig.java | 18 | ||||
| -rw-r--r-- | core/java/android/provider/Settings.java | 47 |
2 files changed, 61 insertions, 4 deletions
diff --git a/core/java/android/provider/DeviceConfig.java b/core/java/android/provider/DeviceConfig.java index 0919e5b96be6..34c54c09d5e2 100644 --- a/core/java/android/provider/DeviceConfig.java +++ b/core/java/android/provider/DeviceConfig.java @@ -822,7 +822,7 @@ public final class DeviceConfig { } /** - * Create a new property with the the provided name and value in the provided namespace, or + * Create a new property with the provided name and value in the provided namespace, or * update the value of such a property if it already exists. The same name can exist in multiple * namespaces and might have different values in any or all namespaces. * <p> @@ -872,6 +872,22 @@ public final class DeviceConfig { } /** + * Delete a property with the provided name and value in the provided namespace + * + * @param namespace The namespace containing the property to create or update. + * @param name The name of the property to create or update. + * @return True if the property was deleted or it did not exist in the first place. + * False if the storage implementation throws errors. + * @hide + */ + @SystemApi + @RequiresPermission(WRITE_DEVICE_CONFIG) + public static boolean deleteProperty(@NonNull String namespace, @NonNull String name) { + ContentResolver contentResolver = ActivityThread.currentApplication().getContentResolver(); + return Settings.Config.deleteString(contentResolver, namespace, name); + } + + /** * Reset properties to their default values by removing the underlying values. * <p> * The method accepts an optional namespace parameter. If provided, only properties set within diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index aa66aa353714..134cca1bb367 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -2829,6 +2829,7 @@ public final class Settings { // for the fast path of retrieving settings. private final String mCallGetCommand; private final String mCallSetCommand; + private final String mCallDeleteCommand; private final String mCallListCommand; private final String mCallSetAllCommand; @@ -2840,17 +2841,19 @@ public final class Settings { private GenerationTracker mGenerationTracker; <T extends NameValueTable> NameValueCache(Uri uri, String getCommand, - String setCommand, ContentProviderHolder providerHolder, Class<T> callerClass) { - this(uri, getCommand, setCommand, null, null, providerHolder, + String setCommand, String deleteCommand, ContentProviderHolder providerHolder, + Class<T> callerClass) { + this(uri, getCommand, setCommand, deleteCommand, null, null, providerHolder, callerClass); } private <T extends NameValueTable> NameValueCache(Uri uri, String getCommand, - String setCommand, String listCommand, String setAllCommand, + String setCommand, String deleteCommand, String listCommand, String setAllCommand, ContentProviderHolder providerHolder, Class<T> callerClass) { mUri = uri; mCallGetCommand = getCommand; mCallSetCommand = setCommand; + mCallDeleteCommand = deleteCommand; mCallListCommand = listCommand; mCallSetAllCommand = setAllCommand; mProviderHolder = providerHolder; @@ -2908,6 +2911,20 @@ public final class Settings { } } + public boolean deleteStringForUser(ContentResolver cr, String name, final int userHandle) { + try { + Bundle arg = new Bundle(); + arg.putInt(CALL_METHOD_USER_KEY, userHandle); + IContentProvider cp = mProviderHolder.getProvider(cr); + cp.call(cr.getAttributionSource(), + mProviderHolder.mUri.getAuthority(), mCallDeleteCommand, name, arg); + } catch (RemoteException e) { + Log.w(TAG, "Can't delete key " + name + " in " + mUri, e); + return false; + } + return true; + } + @UnsupportedAppUsage public String getStringForUser(ContentResolver cr, String name, final int userHandle) { // Check if the target settings key is readable. Reject if the caller is not system and @@ -3370,6 +3387,7 @@ public final class Settings { CONTENT_URI, CALL_METHOD_GET_SYSTEM, CALL_METHOD_PUT_SYSTEM, + CALL_METHOD_DELETE_SYSTEM, sProviderHolder, System.class); @@ -5690,6 +5708,7 @@ public final class Settings { CONTENT_URI, CALL_METHOD_GET_SECURE, CALL_METHOD_PUT_SECURE, + CALL_METHOD_DELETE_SECURE, sProviderHolder, Secure.class); @@ -15176,6 +15195,7 @@ public final class Settings { CONTENT_URI, CALL_METHOD_GET_GLOBAL, CALL_METHOD_PUT_GLOBAL, + CALL_METHOD_DELETE_GLOBAL, sProviderHolder, Global.class); @@ -16408,6 +16428,7 @@ public final class Settings { DeviceConfig.CONTENT_URI, CALL_METHOD_GET_CONFIG, CALL_METHOD_PUT_CONFIG, + CALL_METHOD_DELETE_CONFIG, CALL_METHOD_LIST_CONFIG, CALL_METHOD_SET_ALL_CONFIG, sProviderHolder, @@ -16517,6 +16538,26 @@ public final class Settings { } /** + * Delete a name/value pair from the database for the specified namespace. + * + * @param resolver to access the database with. + * @param namespace to delete the name/value pair from. + * @param name to delete. + * @return true if the value was deleted, false on database errors. If the name/value pair + * did not exist, return True. + * + * @see #resetToDefaults(ContentResolver, int, String) + * + * @hide + */ + @RequiresPermission(Manifest.permission.WRITE_DEVICE_CONFIG) + static boolean deleteString(@NonNull ContentResolver resolver, @NonNull String namespace, + @NonNull String name) { + return sNameValueCache.deleteStringForUser(resolver, + createCompositeName(namespace, name), resolver.getUserId()); + } + + /** * Reset the values to their defaults. * <p> * The method accepts an optional prefix parameter. If provided, only pairs with a name that |
