summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/admin/DevicePolicyManager.java12
-rw-r--r--core/java/android/app/admin/IDevicePolicyManager.aidl2
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java24
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);
+ }
+ }
+ }
}