Non-managed profiles autoapply USER_SETUP_COMPLETE

Profiles, other than managed profiles, typically do not go through
SetupWizard or have a DPC-guided setup flow. Consequently, there is no
app that sets the USER_SETUP_COMPLETE secure setting for them, which
leads to oddities.

For such profiles, we should automatically consider them as being "setup
complete", so we set the USER_SETUP_COMPLETE setting as creation time.

Bug: 276761898
Test: atest atest com.android.server.pm.UserManagerTest#testCloneUser
Change-Id: I9245334986f520f4c3a4eaab454769149ae07729
This commit is contained in:
Adam Bookatz
2023-04-03 12:43:40 -07:00
parent 9faf11fc4e
commit 9058cb22f4
2 changed files with 14 additions and 1 deletions

View File

@@ -136,6 +136,7 @@ public final class UserTypeFactory {
com.android.internal.R.color.system_neutral2_900)
.setDefaultRestrictions(null)
.setDefaultCrossProfileIntentFilters(getDefaultCloneCrossProfileIntentFilter())
.setDefaultSecureSettings(getDefaultNonManagedProfileSecureSettings())
.setDefaultUserProperties(new UserProperties.Builder()
.setStartWithParent(true)
.setShowInLauncher(UserProperties.SHOW_IN_LAUNCHER_WITH_PARENT)
@@ -216,7 +217,8 @@ public final class UserTypeFactory {
com.android.internal.R.color.profile_badge_1_dark,
com.android.internal.R.color.profile_badge_2_dark,
com.android.internal.R.color.profile_badge_3_dark)
.setDefaultRestrictions(restrictions);
.setDefaultRestrictions(restrictions)
.setDefaultSecureSettings(getDefaultNonManagedProfileSecureSettings());
}
/**
@@ -337,6 +339,15 @@ public final class UserTypeFactory {
return DefaultCrossProfileIntentFiltersUtils.getDefaultCloneProfileFilters();
}
/** Gets a default bundle, keyed by Settings.Secure String names, for non-managed profiles. */
private static Bundle getDefaultNonManagedProfileSecureSettings() {
final Bundle settings = new Bundle();
// Non-managed profiles go through neither SetupWizard nor DPC flows, so we automatically
// mark them as setup.
settings.putString(android.provider.Settings.Secure.USER_SETUP_COMPLETE, "1");
return settings;
}
/**
* Reads the given xml parser to obtain device user-type customization, and updates the given
* map of {@link UserTypeDetails.Builder}s accordingly.

View File

@@ -178,6 +178,8 @@ public final class UserManagerTest {
UserHandle.of(userInfo.id));
assertThat(userContext.getSystemService(
UserManager.class).isMediaSharedWithParent()).isTrue();
assertThat(Settings.Secure.getInt(userContext.getContentResolver(),
Settings.Secure.USER_SETUP_COMPLETE, 0)).isEqualTo(1);
List<UserInfo> list = mUserManager.getUsers();
List<UserInfo> cloneUsers = list.stream().filter(