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

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

Changed behavior of HsumBootUserInitializer to "ramp-up" a config.

This change will allow devices disabling the main user to be ramped
up by a flag (create_initial_user), even after they changed
config_designateMainUser (from true to false)

Bug: 402486365
Test: atest FrameworksMockingServicesTests:HsumBootUserInitializerDesignateMainUserOnBootTest
Flag: android.multiuser.create_initial_user

Change-Id: I866d20b9356976e922168e41968a1a8dd56189f6
parent c7abac6f
Loading
Loading
Loading
Loading
+19 −1
Original line number Diff line number Diff line
@@ -342,7 +342,9 @@ public final class HsumBootUserInitializer {
        pw.print(" config_isMainUserPermanentAdmin: ");
        pw.print(res.getBoolean(R.bool.config_isMainUserPermanentAdmin));
        pw.print(" " + SYSPROP_DESIGNATE_MAIN_USER + ": ");
        pw.println(SystemProperties.get(SYSPROP_DESIGNATE_MAIN_USER, "N/A"));
        pw.print(SystemProperties.get(SYSPROP_DESIGNATE_MAIN_USER, "N/A"));
        pw.print(" flag_create_initial_user: ");
        pw.println(Flags.createInitialUser());

        pw.print("Create initial user on boot: ");
        pw.println(createInitialUserOnBoot(context));
@@ -424,6 +426,22 @@ public final class HsumBootUserInitializer {
        var res = context.getResources();
        boolean defaultValue = res.getBoolean(R.bool.config_designateMainUser)
                || res.getBoolean(R.bool.config_isMainUserPermanentAdmin);
        if (DEBUG) {
            Slogf.d(TAG, "designateMainUserOnBoot(): defaultValue=%b (because "
                    + "config_designateMainUser=%b and config_isMainUserPermanentAdmin=%b)",
                    defaultValue,
                    res.getBoolean(R.bool.config_designateMainUser),
                    res.getBoolean(R.bool.config_isMainUserPermanentAdmin));
        }
        // Ignore devices that should not create a main user while flag is not ramped up yet
        // TODO(b/402486365): remove this workaround after flag is ramped up
        if (!Flags.createInitialUser() && res.getBoolean(R.bool.config_createInitialUser)
                && !defaultValue) {
            Slogf.i(TAG, "designateMainUserOnBoot(): overriding defaultValue to true (because "
                    + "Flags.createInitialUser()=%b and config_createInitialUser=%b)",
                    Flags.createInitialUser(), res.getBoolean(R.bool.config_createInitialUser));
            defaultValue = true;
        }
        if (!Build.isDebuggable()) {
            return defaultValue;
        }
+28 −0
Original line number Diff line number Diff line
@@ -15,6 +15,8 @@
 */
package com.android.server.pm;

import static android.multiuser.Flags.FLAG_CREATE_INITIAL_USER;

import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.server.pm.HsumBootUserInitializer.SYSPROP_DESIGNATE_MAIN_USER;

@@ -24,8 +26,10 @@ import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.res.Resources;
import android.multiuser.Flags;
import android.os.Build;
import android.os.SystemProperties;
import android.platform.test.flag.junit.SetFlagsRule;
import android.util.Log;

import com.android.internal.R;
@@ -52,6 +56,10 @@ abstract class AbstractHsumBootUserInitializerConstructorHelpersTestCase {
            .mockStatic(SystemProperties.class)
            .build();

    @Rule
    public final SetFlagsRule setFlagsRule =
            new SetFlagsRule(SetFlagsRule.DefaultInitValueType.DEVICE_DEFAULT);

    protected final String mTag = getClass().getSimpleName();

    @Mock
@@ -91,6 +99,22 @@ abstract class AbstractHsumBootUserInitializerConstructorHelpersTestCase {
                () -> SystemProperties.getBoolean(eq(SYSPROP_DESIGNATE_MAIN_USER), anyBoolean()));
    }

    @SuppressWarnings("deprecation") // TODO(b/341129262): SetFlagsRule methods are deprecated
    protected final void setCreateInitialUserFlag(boolean value) {
        boolean before =  Flags.createInitialUser();
        if (before == value) {
            Log.v(mTag, "setCreateInitialUserFlag(): already " + value);
            return;
        }
        Log.v(mTag, "setCreateInitialUserFlag(): changing from " + before + " to " + value);
        if (value) {
            setFlagsRule.enableFlags(FLAG_CREATE_INITIAL_USER);
        } else {
            setFlagsRule.disableFlags(FLAG_CREATE_INITIAL_USER);
        }
    }


    // Helper methods to make values parameterized values easier to read
    // NOTE: not really "Generated code", but that's the only why to calm down checkstyle, otherwise
    // it will complain they should be all upper case
@@ -104,6 +128,10 @@ abstract class AbstractHsumBootUserInitializerConstructorHelpersTestCase {
        return value;
    }

    protected static boolean FLAG(boolean value) {
        return value;
    }

    protected static boolean CFG_DESIGNATE_MAIN(boolean value) {
        return value;
    }
+287 −25

File changed.

Preview size limit exceeded, changes collapsed.