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

Commit 868bcb8f authored by Prerana Patil's avatar Prerana Patil Committed by Android (Google) Code Review
Browse files

Merge "Use HsuDeviceProvisioner class in HsumBootUserInitializer" into main

parents fab1b2a6 da773056
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.server.pm;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.os.Handler;
import android.os.Looper;
import android.provider.Settings;
import android.util.Log;

@@ -31,6 +30,7 @@ import com.android.server.utils.Slogf;
final class HsuDeviceProvisioner extends ContentObserver {

    private static final String TAG = HsuDeviceProvisioner.class.getSimpleName();
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);

    private final ContentResolver mContentResolver;

@@ -55,6 +55,9 @@ final class HsuDeviceProvisioner extends ContentObserver {

    @Override
    public void onChange(boolean selfChange) {
        if (DEBUG) {
            Slogf.d(TAG, "onChange(%b): isDeviceProvisioned=%b", selfChange, isDeviceProvisioned());
        }
        // Set USER_SETUP_COMPLETE for the (headless) system user only when the device
        // has been set up at least once.
        if (isDeviceProvisioned()) {
+32 −19
Original line number Diff line number Diff line
@@ -65,26 +65,10 @@ public final class HsumBootUserInitializer {
    private final ActivityManagerService mAms;
    private final PackageManagerService mPms;
    private final ContentResolver mContentResolver;
    // TODO(b/322150148): Change the type to HsuDeviceProvisioner and remove the cast once the flag
    // is completely pushed.
    private final ContentObserver mDeviceProvisionedObserver;

    private final ContentObserver mDeviceProvisionedObserver =
            new ContentObserver(new Handler(Looper.getMainLooper())) {
                @Override
                public void onChange(boolean selfChange) {
                    boolean isDeviceProvisioned = isDeviceProvisioned();
                    if (DEBUG) {
                        Slogf.d(TAG, "onChange(%b): isDeviceProvisioned=%b", selfChange,
                                isDeviceProvisioned);
                    }
                    // Set USER_SETUP_COMPLETE for the (headless) system user only when the device
                    // has been set up at least once.
                    if (isDeviceProvisioned) {
                        Slogf.i(TAG, "Marking USER_SETUP_COMPLETE for system user");
                        Settings.Secure.putInt(mContentResolver,
                                Settings.Secure.USER_SETUP_COMPLETE, 1);
                        mContentResolver.unregisterContentObserver(mDeviceProvisionedObserver);
                    }
                }
            };

    /** Whether it should create a main user on first boot. */
    private final boolean mShouldDesignateMainUser;
@@ -114,6 +98,31 @@ public final class HsumBootUserInitializer {
        mContentResolver = contentResolver;
        mShouldDesignateMainUser = shouldDesignateMainUser;
        mShouldCreateInitialUser = shouldCreateInitialUser;
        mDeviceProvisionedObserver = (Flags.hsuDeviceProvisioner()
                    ? new HsuDeviceProvisioner(new Handler(Looper.getMainLooper()), contentResolver)
                    : new ContentObserver(new Handler(Looper.getMainLooper())) {
                        @Override
                        public void onChange(boolean selfChange) {
                            boolean isDeviceProvisioned = isDeviceProvisioned();
                            if (DEBUG) {
                                Slogf.d(
                                        TAG,
                                        "onChange(%b): isDeviceProvisioned=%b",
                                        selfChange,
                                        isDeviceProvisioned);
                            }
                            // Set USER_SETUP_COMPLETE for the (headless) system user only when the
                            // device
                            // has been set up at least once.
                            if (isDeviceProvisioned) {
                                Slogf.i(TAG, "Marking USER_SETUP_COMPLETE for system user");
                                Settings.Secure.putInt(
                                        mContentResolver, Settings.Secure.USER_SETUP_COMPLETE, 1);
                                mContentResolver.unregisterContentObserver(
                                        mDeviceProvisionedObserver);
                            }
                        }
                    });
    }

    // TODO(b/409650316): remove after flag's completely pushed
@@ -359,6 +368,10 @@ public final class HsumBootUserInitializer {

    @VisibleForTesting
    void observeDeviceProvisioning() {
        if (Flags.hsuDeviceProvisioner()) {
            ((HsuDeviceProvisioner) mDeviceProvisionedObserver).init();
            return;
        }
        if (isDeviceProvisioned()) {
            return;
        }
+18 −2
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@ import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.os.UserManager;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.provider.Settings;
import android.util.Log;

@@ -104,7 +106,8 @@ public final class HsumBootUserInitializerTest {
    }

    @Test
    public void testObserveDeviceProvisioning_provisioned() {
    @DisableFlags(android.multiuser.Flags.FLAG_HSU_DEVICE_PROVISIONER)
    public void testObserveDeviceProvisioning_flagDisabled_provisioned() {
        mockIsDeviceProvisioned(true);

        mFixture.observeDeviceProvisioning();
@@ -114,7 +117,8 @@ public final class HsumBootUserInitializerTest {
    }

    @Test
    public void testObserveDeviceProvisioning_notProvisioned() {
    @DisableFlags(android.multiuser.Flags.FLAG_HSU_DEVICE_PROVISIONER)
    public void testObserveDeviceProvisioning_flagDisabled_notProvisioned() {
        mockIsDeviceProvisioned(false);

        // First trigger setting an observer...
@@ -131,6 +135,18 @@ public final class HsumBootUserInitializerTest {
        verifyContentObserverUnregistered(contentObserver);
    }

    @Test
    @EnableFlags(android.multiuser.Flags.FLAG_HSU_DEVICE_PROVISIONER)
    public void testObserveDeviceProvisioning_flagEnabled_provisioned() {
        testObserveDeviceProvisioning_flagDisabled_provisioned();
    }

    @Test
    @EnableFlags(android.multiuser.Flags.FLAG_HSU_DEVICE_PROVISIONER)
    public void testObserveDeviceProvisioning_flagEnabled_notprovisioned() {
        testObserveDeviceProvisioning_flagDisabled_notProvisioned();
    }

    private void mockIsHsum(boolean value) {
        Log.v(TAG, "mockIsHsum(" + value + ")");
        doReturn(value).when(UserManager::isHeadlessSystemUserMode);