diff options
3 files changed, 38 insertions, 0 deletions
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 593432e9c0c7..ae9b169cc12b 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -6465,6 +6465,18 @@ public class DevicePolicyManager { } } + /** + * @hide + * Force update user setup completed status + */ + public void forceUpdateUserSetupComplete() { + try { + mService.forceUpdateUserSetupComplete(); + } catch (RemoteException re) { + throw re.rethrowFromSystemServer(); + } + } + private void throwIfParentInstance(String functionName) { if (mParentInstance) { throw new SecurityException(functionName + " cannot be called on the parent instance"); diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index 1036f0499a54..8d06ef17b9e5 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -305,4 +305,6 @@ interface IDevicePolicyManager { boolean isDeviceProvisioned(); boolean isDeviceProvisioningConfigApplied(); void setDeviceProvisioningConfigApplied(); + + void forceUpdateUserSetupComplete(); } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 46ce398e9b6a..b28843a1056b 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -9131,4 +9131,28 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { return policy.mDeviceProvisioningConfigApplied; } } + + /** + * Force update internal persistent state from Settings.Secure.USER_SETUP_COMPLETE. + * + * It's added for testing only. Please use this API carefully if it's used by other system app + * and bare in mind Settings.Secure.USER_SETUP_COMPLETE can be modified by user and other system + * apps. + */ + @Override + public void forceUpdateUserSetupComplete() { + enforceCanManageProfileAndDeviceOwners(); + List<UserInfo> users = mUserManager.getUsers(true); + final int N = users.size(); + for (int i = 0; i < N; i++) { + int userHandle = users.get(i).id; + boolean isUserCompleted = mInjector.settingsSecureGetIntForUser( + Settings.Secure.USER_SETUP_COMPLETE, 0, userHandle) != 0; + DevicePolicyData policy = getUserData(userHandle); + policy.mUserSetupComplete = isUserCompleted; + synchronized (this) { + saveSettingsLocked(userHandle); + } + } + } } |