Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9058cb22 authored by Adam Bookatz's avatar Adam Bookatz
Browse files

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
parent 9faf11fc
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -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.
+2 −0
Original line number Diff line number Diff line
@@ -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(