diff --git a/packages/CMSettingsProvider/src/org/cyanogenmod/cmsettings/CMSettingsProvider.java b/packages/CMSettingsProvider/src/org/cyanogenmod/cmsettings/CMSettingsProvider.java index 196c942..2f91e1e 100644 --- a/packages/CMSettingsProvider/src/org/cyanogenmod/cmsettings/CMSettingsProvider.java +++ b/packages/CMSettingsProvider/src/org/cyanogenmod/cmsettings/CMSettingsProvider.java @@ -316,12 +316,10 @@ public class CMSettingsProvider extends ContentProvider { // Framework can't do automatic permission checking for calls, so we need // to do it here. - if (getContext().checkCallingOrSelfPermission( - cyanogenmod.platform.Manifest.permission.WRITE_SETTINGS) != - PackageManager.PERMISSION_GRANTED) { - throw new SecurityException( - String.format("Permission denial: writing to settings requires %1$s", - cyanogenmod.platform.Manifest.permission.WRITE_SETTINGS)); + if (CMSettings.CALL_METHOD_PUT_SYSTEM.equals(method)) { + enforceWritePermission(cyanogenmod.platform.Manifest.permission.WRITE_SETTINGS); + } else { + enforceWritePermission(cyanogenmod.platform.Manifest.permission.WRITE_SECURE_SETTINGS); } // Put methods @@ -342,6 +340,15 @@ public class CMSettingsProvider extends ContentProvider { return null; } + private void enforceWritePermission(String permission) { + if (getContext().checkCallingOrSelfPermission(permission) + != PackageManager.PERMISSION_GRANTED) { + throw new SecurityException( + String.format("Permission denial: writing to settings requires %s", + permission)); + } + } + /** * Looks up a single value for a specific user, uri, and key. * @param userId The id of the user to perform the lookup for.