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

Commit cb143ab6 authored by Felipe Leme's avatar Felipe Leme
Browse files

Revert "Skip main user designation/creation when booting to HSU on provisioned devices."

This reverts commit 201a8feb.

Reason for revert: need a different approach
(commit 869f7863c340a383f07f58baf09f8cfebffa4214)

Bug: 374926694
Bug: 443085470
Test: yes, tested
Flag: EXEMPT revert

Change-Id: I31d5f2f892c70ecd2227ea4fe17cdca097dc7e9a
parent b6a56c4f
Loading
Loading
Loading
Loading
+4 −17
Original line number Diff line number Diff line
@@ -76,9 +76,6 @@ public final class HsumBootUserInitializer {
    /** Whether it should create an initial user, but without setting it as the main user. */
    private final boolean mShouldCreateInitialUser;

    /** The boot strategy. */
    private final int mBootStrategy;

    /** Static factory method for creating a {@link HsumBootUserInitializer} instance. */
    public static @Nullable HsumBootUserInitializer createInstance(UserManagerService ums,
            ActivityManagerService ams, PackageManagerService pms, ContentResolver contentResolver,
@@ -88,21 +85,19 @@ public final class HsumBootUserInitializer {
            return null;
        }
        return new HsumBootUserInitializer(ums, ams, pms, contentResolver,
                designateMainUserOnBoot(context), createInitialUserOnBoot(context),
                getBootStrategy(context));
                designateMainUserOnBoot(context), createInitialUserOnBoot(context));
    }

    @VisibleForTesting
    HsumBootUserInitializer(UserManagerService ums, ActivityManagerService ams,
            PackageManagerService pms, ContentResolver contentResolver,
            boolean shouldDesignateMainUser, boolean shouldCreateInitialUser, int bootStrategy) {
            boolean shouldDesignateMainUser, boolean shouldCreateInitialUser) {
        mUms = ums;
        mAms = ams;
        mPms = pms;
        mContentResolver = contentResolver;
        mShouldDesignateMainUser = shouldDesignateMainUser;
        mShouldCreateInitialUser = shouldCreateInitialUser;
        mBootStrategy = bootStrategy;
        mDeviceProvisionedObserver = (Flags.hsuDeviceProvisioner()
                    ? new HsuDeviceProvisioner(new Handler(Looper.getMainLooper()), contentResolver)
                    : new ContentObserver(new Handler(Looper.getMainLooper())) {
@@ -200,10 +195,7 @@ public final class HsumBootUserInitializer {
        int mainUserId = mUms.getMainUserId();
        t.traceEnd();

        final boolean isHsumBootStrategyOnProvisionedDevice =
                (mBootStrategy == UserManagerService.BOOT_STRATEGY_TO_HSU_FOR_PROVISIONED_DEVICE
                        && isDeviceProvisioned());
        if (mShouldDesignateMainUser && !isHsumBootStrategyOnProvisionedDevice) {
        if (mShouldDesignateMainUser) {
            designateMainUserIfNeeded(t, mainUserId);
            return;
        }
@@ -212,7 +204,7 @@ public final class HsumBootUserInitializer {
        demoteMainUserIfNeeded(t, mainUserId);
        t.traceEnd();

        if (mShouldCreateInitialUser && !isHsumBootStrategyOnProvisionedDevice) {
        if (mShouldCreateInitialUser) {
            createAdminUserIfNeeded(t);
            return;
        }
@@ -479,9 +471,4 @@ public final class HsumBootUserInitializer {
    static boolean createInitialUserOnBoot(Context context) {
        return context.getResources().getBoolean(R.bool.config_createInitialUser);
    }

    @VisibleForTesting
    static int getBootStrategy(Context context) {
        return context.getResources().getInteger(R.integer.config_hsumBootStrategy);
    }
}
+33 −136
Original line number Diff line number Diff line
@@ -89,11 +89,6 @@ public final class HsumBootUserInitializerInitMethodTest {
    @UserIdInt
    private static final int REGULAR_USER_ID = 16;

    private static final int DESKTOP_BOOT_STRATEGY =
            UserManagerService.BOOT_STRATEGY_TO_HSU_FOR_PROVISIONED_DEVICE;
    private static final int MOBILE_BOOT_STRATEGY =
            UserManagerService.BOOT_STRATEGY_DO_NOT_OVERRIDE;

    // Pre-defined users. NOTE: only setting basic flags and not setting UserType.
    private final UserInfo mHeadlessSystemUser =
            createUser(USER_SYSTEM, FLAG_SYSTEM | FLAG_ADMIN);
@@ -131,143 +126,46 @@ public final class HsumBootUserInitializerInitMethodTest {

    private final boolean mShouldAlwaysHaveMainUser;
    private final boolean mShouldCreateInitialUser;
    private final int mBootStrategy;
    private final InitialUsers mInitialUsers;
    private final ExpectedResult mExpectedResult;

    /** Useless javadoc to make checkstyle happy... */
    @Parameters(
            name = "{index}: hasMain={0},createInitial={1},initial={2},bootStrategy={3},result={4}")
    @Parameters(name = "{index}: hasMain={0},createInitial={1},initial={2},result={3}")
    public static Collection<Object[]> junitParametersPassedToConstructor() {
        return Arrays.asList(
                new Object[][] {
                    // shouldAlwaysHaveMainUser false, shouldCreateInitialUser false,
                    // bootStrategy MOBILE_BOOT_STRATEGY
                    {false, false, SYSTEM_ONLY, MOBILE_BOOT_STRATEGY, NO_USER_CREATED},
                    {false, false, SYSTEM_AND_MAIN, MOBILE_BOOT_STRATEGY, MAIN_USER_DEMOTED},
                    {false, false, SYSTEM_AND_ADMINS, MOBILE_BOOT_STRATEGY, NO_USER_CREATED},
                    {
                        false,
                        false,
                        SYSTEM_AND_ADMINS_FIRST_ADMIN_UNPROMOTABLE,
                        MOBILE_BOOT_STRATEGY,
                        NO_USER_CREATED
                    },
                    {false, false, SYSTEM_AND_REGULAR, MOBILE_BOOT_STRATEGY, NO_USER_CREATED},
                    // shouldAlwaysHaveMainUser false, shouldCreateInitialUser true,
                    // bootStrategy MOBILE_BOOT_STRATEGY
                    // true
                    {false, true, SYSTEM_ONLY, MOBILE_BOOT_STRATEGY, ADMIN_USER_CREATED},
                    {false, true, SYSTEM_AND_MAIN, MOBILE_BOOT_STRATEGY, MAIN_USER_DEMOTED},
                    {false, true, SYSTEM_AND_ADMINS, MOBILE_BOOT_STRATEGY, NO_USER_CREATED},
                    {
                        false,
                        true,
                        SYSTEM_AND_ADMINS_FIRST_ADMIN_UNPROMOTABLE,
                        MOBILE_BOOT_STRATEGY,
                        NO_USER_CREATED
                    },
                    {false, true, SYSTEM_AND_REGULAR, MOBILE_BOOT_STRATEGY, NO_USER_CREATED},
                    // shouldAlwaysHaveMainUser true, shouldCreateInitialUser false,
                    // bootStrategy MOBILE_BOOT_STRATEGY
                    {true, false, SYSTEM_ONLY, MOBILE_BOOT_STRATEGY, MAIN_USER_CREATED},
                    {true, false, SYSTEM_AND_MAIN, MOBILE_BOOT_STRATEGY, NO_USER_CREATED},
                    {
                        true,
                        false,
                        SYSTEM_AND_ADMINS,
                        MOBILE_BOOT_STRATEGY,
                        FIRST_ADMIN_USER_PROMOTED_TO_MAIN
                    },
                    {
                        true,
                        false,
                        SYSTEM_AND_ADMINS_FIRST_ADMIN_UNPROMOTABLE,
                        MOBILE_BOOT_STRATEGY,
                        SECOND_ADMIN_USER_PROMOTED_TO_MAIN
                    },
                    {true, false, SYSTEM_AND_REGULAR, MOBILE_BOOT_STRATEGY, MAIN_USER_CREATED},
                    // shouldAlwaysHaveMainUser true, shouldCreateInitialUser true,
                    // bootStrategy MOBILE_BOOT_STRATEGY
                    {true, true, SYSTEM_ONLY, MOBILE_BOOT_STRATEGY, MAIN_USER_CREATED},
                    {true, true, SYSTEM_AND_MAIN, MOBILE_BOOT_STRATEGY, NO_USER_CREATED},
                    {
                        true,
                        true,
                        SYSTEM_AND_ADMINS_FIRST_ADMIN_UNPROMOTABLE,
                        MOBILE_BOOT_STRATEGY,
                        SECOND_ADMIN_USER_PROMOTED_TO_MAIN
                    },
                    {true, true, SYSTEM_AND_REGULAR, MOBILE_BOOT_STRATEGY, MAIN_USER_CREATED},
                    // bootStrategy DESKTOP_BOOT_STRATEGY
                    {true, true, SYSTEM_AND_MAIN, DESKTOP_BOOT_STRATEGY, NO_USER_CREATED},
                    {true, false, SYSTEM_AND_MAIN, DESKTOP_BOOT_STRATEGY, NO_USER_CREATED},
                    {false, true, SYSTEM_AND_MAIN, DESKTOP_BOOT_STRATEGY, MAIN_USER_DEMOTED},
                    {false, false, SYSTEM_AND_MAIN, DESKTOP_BOOT_STRATEGY, MAIN_USER_DEMOTED},
                    {true, true, SYSTEM_ONLY, DESKTOP_BOOT_STRATEGY, MAIN_USER_CREATED},
                    {
                        true,
                        true,
                        SYSTEM_AND_ADMINS,
                        DESKTOP_BOOT_STRATEGY,
                        FIRST_ADMIN_USER_PROMOTED_TO_MAIN
                    },
{
                        true,
                        true,
                        SYSTEM_AND_ADMINS_FIRST_ADMIN_UNPROMOTABLE,
                        DESKTOP_BOOT_STRATEGY,
                        SECOND_ADMIN_USER_PROMOTED_TO_MAIN
                    },
                    {true, true, SYSTEM_AND_REGULAR, DESKTOP_BOOT_STRATEGY, MAIN_USER_CREATED},
                    // hasMain=true, createInitial=false
                    {true, false, SYSTEM_ONLY, DESKTOP_BOOT_STRATEGY, MAIN_USER_CREATED},
                    {
                        true,
                        false,
                        SYSTEM_AND_ADMINS,
                        DESKTOP_BOOT_STRATEGY,
                        FIRST_ADMIN_USER_PROMOTED_TO_MAIN
                    },
                    {
                        true,
                        false,
                        SYSTEM_AND_ADMINS_FIRST_ADMIN_UNPROMOTABLE,
                        DESKTOP_BOOT_STRATEGY,
                        SECOND_ADMIN_USER_PROMOTED_TO_MAIN
                    },
                    {true, false, SYSTEM_AND_REGULAR, DESKTOP_BOOT_STRATEGY, MAIN_USER_CREATED},
                    // hasMain=false, createInitial=true
                    {false, true, SYSTEM_ONLY, DESKTOP_BOOT_STRATEGY, ADMIN_USER_CREATED},
                    {false, true, SYSTEM_AND_ADMINS, DESKTOP_BOOT_STRATEGY, NO_USER_CREATED},
                    {
                        false,
                        true,
                        SYSTEM_AND_ADMINS_FIRST_ADMIN_UNPROMOTABLE,
                        DESKTOP_BOOT_STRATEGY,
                        NO_USER_CREATED
                    },
                    {false, true, SYSTEM_AND_REGULAR, DESKTOP_BOOT_STRATEGY, NO_USER_CREATED},
                    // hasMain=false, createInitial=false
                    {false, false, SYSTEM_ONLY, DESKTOP_BOOT_STRATEGY, NO_USER_CREATED},
                    {false, false, SYSTEM_AND_ADMINS, DESKTOP_BOOT_STRATEGY, NO_USER_CREATED},
                    {
                        false,
                        false,
                        SYSTEM_AND_ADMINS_FIRST_ADMIN_UNPROMOTABLE,
                        DESKTOP_BOOT_STRATEGY,
                        NO_USER_CREATED
                    },
                    {false, false, SYSTEM_AND_REGULAR, DESKTOP_BOOT_STRATEGY, NO_USER_CREATED}
        return Arrays.asList(new Object[][] {
                // shouldAlwaysHaveMainUser false, shouldCreateInitialUser false
                { false, false, SYSTEM_ONLY, NO_USER_CREATED },
                { false, false, SYSTEM_AND_MAIN, MAIN_USER_DEMOTED },
                { false, false, SYSTEM_AND_ADMINS, NO_USER_CREATED },
                { false, false, SYSTEM_AND_ADMINS_FIRST_ADMIN_UNPROMOTABLE, NO_USER_CREATED },
                { false, false, SYSTEM_AND_REGULAR, NO_USER_CREATED },
                // shouldAlwaysHaveMainUser false, shouldCreateInitialUser true
                { false, true, SYSTEM_ONLY, ADMIN_USER_CREATED},
                { false, true, SYSTEM_AND_MAIN, MAIN_USER_DEMOTED },
                { false, true, SYSTEM_AND_ADMINS, NO_USER_CREATED },
                { false, true, SYSTEM_AND_ADMINS_FIRST_ADMIN_UNPROMOTABLE, NO_USER_CREATED },
                { false, true, SYSTEM_AND_REGULAR, NO_USER_CREATED },
                // shouldAlwaysHaveMainUser true, shouldCreateInitialUser false
                { true, false, SYSTEM_ONLY, MAIN_USER_CREATED },
                { true, false, SYSTEM_AND_MAIN, NO_USER_CREATED },
                { true, false, SYSTEM_AND_ADMINS, FIRST_ADMIN_USER_PROMOTED_TO_MAIN },
                { true, false, SYSTEM_AND_ADMINS_FIRST_ADMIN_UNPROMOTABLE,
                    SECOND_ADMIN_USER_PROMOTED_TO_MAIN },
                { true, false, SYSTEM_AND_REGULAR, MAIN_USER_CREATED },
                // shouldAlwaysHaveMainUser true, shouldCreateInitialUser true
                { true, true, SYSTEM_ONLY, MAIN_USER_CREATED },
                { true, true, SYSTEM_AND_MAIN, NO_USER_CREATED },
                { true, true, SYSTEM_AND_ADMINS_FIRST_ADMIN_UNPROMOTABLE,
                    SECOND_ADMIN_USER_PROMOTED_TO_MAIN },
                { true, true, SYSTEM_AND_REGULAR, MAIN_USER_CREATED }
        });
    }

    public HsumBootUserInitializerInitMethodTest(boolean shouldAlwaysHaveMainUser,
            boolean shouldCreateInitialUser, InitialUsers initialUsers, int bootStrategy,
            boolean shouldCreateInitialUser, InitialUsers initialUsers,
            ExpectedResult expectedResult) {
        mShouldAlwaysHaveMainUser = shouldAlwaysHaveMainUser;
        mShouldCreateInitialUser = shouldCreateInitialUser;
        mBootStrategy = bootStrategy;
        mInitialUsers = initialUsers;
        mExpectedResult = expectedResult;
        Log.i(TAG, "Constructor: shouldAlwaysHaveMainUser=" + shouldAlwaysHaveMainUser
@@ -337,7 +235,7 @@ public final class HsumBootUserInitializerInitMethodTest {
    @EnableFlags(FLAG_CREATE_INITIAL_USER)
    public void testFlagEnabled() {
        var initializer = createHsumBootUserInitializer(mShouldAlwaysHaveMainUser,
                mShouldCreateInitialUser, mBootStrategy);
                mShouldCreateInitialUser);

        initializer.init(mTracer);

@@ -383,8 +281,7 @@ public final class HsumBootUserInitializerInitMethodTest {
    @DisableFlags(FLAG_CREATE_INITIAL_USER)
    public void testFlagDisabled() {
        var initializer =
                createHsumBootUserInitializer(
                        mShouldAlwaysHaveMainUser, mShouldCreateInitialUser, mBootStrategy);
                createHsumBootUserInitializer(mShouldAlwaysHaveMainUser, mShouldCreateInitialUser);

        initializer.init(mTracer);

@@ -403,10 +300,10 @@ public final class HsumBootUserInitializerInitMethodTest {
    }

    private HsumBootUserInitializer createHsumBootUserInitializer(
            boolean shouldAlwaysHaveMainUser, boolean shouldCreateInitialUser, int bootStrategy) {
            boolean shouldAlwaysHaveMainUser, boolean shouldCreateInitialUser) {
        mTracer = new TimingsTraceAndSlog(TAG);
        return new HsumBootUserInitializer(mMockUms, mMockAms, mMockPms, mMockContentResolver,
                shouldAlwaysHaveMainUser, shouldCreateInitialUser, bootStrategy);
                shouldAlwaysHaveMainUser, shouldCreateInitialUser);
    }

    private void expectMainUserCreated() {
+1 −6
Original line number Diff line number Diff line
@@ -54,9 +54,6 @@ public final class HsumBootUserInitializerTest {

    private static final String TAG = HsumBootUserInitializerTest.class.getSimpleName();

    private static final int MOBILE_BOOT_STRATEGY =
            UserManagerService.BOOT_STRATEGY_TO_HSU_FOR_PROVISIONED_DEVICE;

    @Rule
    public final Expect expect = Expect.create();
    @Rule
@@ -86,9 +83,7 @@ public final class HsumBootUserInitializerTest {
    public void setFixtures() {
        mFixture = new HsumBootUserInitializer(mMockUms, mMockAms, mMockPms, mMockContentResolver,
                // value of args below don't matter
                /* shouldDesignateMainUser= */ false,
                /* shouldCreateInitialUser= */ false,
                /* bootStrategy= */ MOBILE_BOOT_STRATEGY);
                /* shouldDesignateMainUser= */ false, /* shouldCreateInitialUser= */ false);
    }

    @Test