Loading core/java/android/app/admin/DevicePolicyManager.java +6 −5 Original line number Diff line number Diff line Loading @@ -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> Loading @@ -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) { Loading services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +8 −5 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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)); } } Loading services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java +2 −2 Original line number Diff line number Diff line Loading @@ -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 Loading services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java +10 −9 Original line number Diff line number Diff line Loading @@ -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 { Loading services/tests/servicestests/src/com/android/server/devicepolicy/MockSystemServices.java +1 −1 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading
core/java/android/app/admin/DevicePolicyManager.java +6 −5 Original line number Diff line number Diff line Loading @@ -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> Loading @@ -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) { Loading
services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +8 −5 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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)); } } Loading
services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java +2 −2 Original line number Diff line number Diff line Loading @@ -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 Loading
services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java +10 −9 Original line number Diff line number Diff line Loading @@ -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 { Loading
services/tests/servicestests/src/com/android/server/devicepolicy/MockSystemServices.java +1 −1 Original line number Diff line number Diff line Loading @@ -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) { Loading