diff options
| author | 2018-03-29 22:24:25 +0000 | |
|---|---|---|
| committer | 2018-03-29 22:24:25 +0000 | |
| commit | 04446f9f68b904f13eac0a161ddea97f6a42912f (patch) | |
| tree | 9206c1efbe896b8d54ab53da8add67512d651880 | |
| parent | 3708933872cabb63f0a3042fe611cbb36d435b21 (diff) | |
| parent | c0281f10f5e79243abd087bb664054ac6ad6370b (diff) | |
Merge "Allow PO to call setSystemSetting." into pi-dev
5 files changed, 27 insertions, 22 deletions
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 1534a15ab889..3c6f13570d3e 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -7326,11 +7326,12 @@ public class DevicePolicyManager { public @interface SystemSettingsWhitelist {} /** - * Called by device owner to update {@link android.provider.Settings.System} settings. - * Validation that the value of the setting is in the correct form for the setting type should - * be performed by the caller. + * Called by a device or profile owner to update {@link android.provider.Settings.System} + * settings. Validation that the value of the setting is in the correct form for the setting + * type should be performed by the caller. * <p> - * The settings that can be updated with this method are: + * The settings that can be updated by a device owner or profile owner of secondary user with + * this method are: * <ul> * <li>{@link android.provider.Settings.System#SCREEN_BRIGHTNESS}</li> * <li>{@link android.provider.Settings.System#SCREEN_BRIGHTNESS_MODE}</li> @@ -7342,7 +7343,7 @@ public class DevicePolicyManager { * @param admin Which {@link DeviceAdminReceiver} this request is associated with. * @param setting The name of the setting to update. * @param value The value to update the setting to. - * @throws SecurityException if {@code admin} is not a device owner. + * @throws SecurityException if {@code admin} is not a device or profile owner. */ public void setSystemSetting(@NonNull ComponentName admin, @NonNull @SystemSettingsWhitelist String setting, String value) { diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 02cd3b6572ef..ffa7311f607d 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -2028,8 +2028,9 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { Settings.Global.putString(mContext.getContentResolver(), name, value); } - void settingsSystemPutString(String name, String value) { - Settings.System.putString(mContext.getContentResolver(), name, value); + void settingsSystemPutStringForUser(String name, String value, int userId) { + Settings.System.putStringForUser( + mContext.getContentResolver(), name, value, userId); } void securityLogSetLoggingEnabledProperty(boolean enabled) { @@ -10049,15 +10050,17 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { Preconditions.checkStringNotEmpty(setting, "String setting is null or empty"); synchronized (this) { - getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER); + getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER); if (!SYSTEM_SETTINGS_WHITELIST.contains(setting)) { throw new SecurityException(String.format( "Permission denial: device owners cannot update %1$s", setting)); } - mInjector.binderWithCleanCallingIdentity(() -> mInjector.settingsSystemPutString( - setting, value)); + final int callingUserId = mInjector.userHandleGetCallingUserId(); + + mInjector.binderWithCleanCallingIdentity(() -> + mInjector.settingsSystemPutStringForUser(setting, value, callingUserId)); } } diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java index ab0bfefbbd4d..520f31879e35 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java @@ -393,8 +393,8 @@ public class DevicePolicyManagerServiceTestable extends DevicePolicyManagerServi } @Override - void settingsSystemPutString(String name, String value) { - services.settings.settingsSystemPutString(name, value); + void settingsSystemPutStringForUser(String name, String value, int userId) { + services.settings.settingsSystemPutStringForUser(name, value, userId); } @Override diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java index fe47de602cda..ccf4a8293d67 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java @@ -3454,18 +3454,19 @@ public class DevicePolicyManagerTest extends DpmTestBase { dpm.setSystemSetting(admin1, Settings.System.SCREEN_BRIGHTNESS_FOR_VR, "0")); } - public void testSetSystemSettingFailWithPO() throws Exception { - setupProfileOwner(); - assertExpectException(SecurityException.class, null, () -> - dpm.setSystemSetting(admin1, Settings.System.SCREEN_BRIGHTNESS, "0")); - } - - public void testSetSystemSetting() throws Exception { + public void testSetSystemSettingWithDO() throws Exception { mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID; setupDeviceOwner(); dpm.setSystemSetting(admin1, Settings.System.SCREEN_BRIGHTNESS, "0"); - verify(getServices().settings).settingsSystemPutString( - Settings.System.SCREEN_BRIGHTNESS, "0"); + verify(getServices().settings).settingsSystemPutStringForUser( + Settings.System.SCREEN_BRIGHTNESS, "0", UserHandle.USER_SYSTEM); + } + + public void testSetSystemSettingWithPO() throws Exception { + setupProfileOwner(); + dpm.setSystemSetting(admin1, Settings.System.SCREEN_BRIGHTNESS, "0"); + verify(getServices().settings).settingsSystemPutStringForUser( + Settings.System.SCREEN_BRIGHTNESS, "0", DpmMockContext.CALLER_USER_HANDLE); } public void testSetTime() throws Exception { diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/MockSystemServices.java b/services/tests/servicestests/src/com/android/server/devicepolicy/MockSystemServices.java index 34c69f5b0c5b..81ed6e2588fd 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/MockSystemServices.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/MockSystemServices.java @@ -419,7 +419,7 @@ public class MockSystemServices { public void settingsGlobalPutString(String name, String value) { } - public void settingsSystemPutString(String name, String value) { + public void settingsSystemPutStringForUser(String name, String value, int callingUserId) { } public int settingsGlobalGetInt(String name, int value) { |