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

Commit 39492a90 authored by Tetiana Meronyk's avatar Tetiana Meronyk
Browse files

Update user creation dialog to happen in a single dialog

Bug: 279566609
Test: atest UserInteractorTest
Change-Id: I8592a8f3c6b4350e3ed1f389447ebc8511ca90cb
parent 709264ad
Loading
Loading
Loading
Loading
+16 −59
Original line number Original line Diff line number Diff line
@@ -32,11 +32,9 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.Nullable;


import com.android.internal.logging.UiEventLogger;
import com.android.internal.logging.UiEventLogger;
import com.android.settingslib.users.EditUserInfoController;
import com.android.settingslib.users.CreateUserDialogController;
import com.android.settingslib.users.GrantAdminDialogController;
import com.android.systemui.R;
import com.android.systemui.R;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.user.utils.MultiUserActionsEvent;


import javax.inject.Inject;
import javax.inject.Inject;


@@ -61,20 +59,18 @@ public class CreateUserActivity extends Activity {
    private static final String EXTRA_IS_KEYGUARD_SHOWING = "extra_is_keyguard_showing";
    private static final String EXTRA_IS_KEYGUARD_SHOWING = "extra_is_keyguard_showing";


    private final UserCreator mUserCreator;
    private final UserCreator mUserCreator;
    private final EditUserInfoController mEditUserInfoController;
    private CreateUserDialogController mCreateUserDialogController;
    private final IActivityManager mActivityManager;
    private final IActivityManager mActivityManager;
    private final ActivityStarter mActivityStarter;
    private final ActivityStarter mActivityStarter;
    private final UiEventLogger mUiEventLogger;
    private final UiEventLogger mUiEventLogger;
    private Dialog mGrantAdminDialog;
    private Dialog mSetupUserDialog;
    private Dialog mSetupUserDialog;
    private final OnBackInvokedCallback mBackCallback = this::onBackInvoked;
    private final OnBackInvokedCallback mBackCallback = this::onBackInvoked;
    private boolean mGrantAdminRights;
    @Inject
    @Inject
    public CreateUserActivity(UserCreator userCreator,
    public CreateUserActivity(UserCreator userCreator,
            EditUserInfoController editUserInfoController, IActivityManager activityManager,
            CreateUserDialogController createUserDialogController, IActivityManager activityManager,
            ActivityStarter activityStarter, UiEventLogger uiEventLogger) {
            ActivityStarter activityStarter, UiEventLogger uiEventLogger) {
        mUserCreator = userCreator;
        mUserCreator = userCreator;
        mEditUserInfoController = editUserInfoController;
        mCreateUserDialogController = createUserDialogController;
        mActivityManager = activityManager;
        mActivityManager = activityManager;
        mActivityStarter = activityStarter;
        mActivityStarter = activityStarter;
        mUiEventLogger = uiEventLogger;
        mUiEventLogger = uiEventLogger;
@@ -86,19 +82,10 @@ public class CreateUserActivity extends Activity {
        setShowWhenLocked(true);
        setShowWhenLocked(true);
        setContentView(R.layout.activity_create_new_user);
        setContentView(R.layout.activity_create_new_user);
        if (savedInstanceState != null) {
        if (savedInstanceState != null) {
            mEditUserInfoController.onRestoreInstanceState(savedInstanceState);
            mCreateUserDialogController.onRestoreInstanceState(savedInstanceState);
        }
        }
        boolean isKeyguardShowing = getIntent().getBooleanExtra(EXTRA_IS_KEYGUARD_SHOWING, true);
        // Display grant admin dialog only on unlocked device to admin users if multiple admins
        // are allowed on this device.
        if (mUserCreator.isMultipleAdminEnabled() && mUserCreator.isUserAdmin()
                && !isKeyguardShowing) {
            mGrantAdminDialog = buildGrantAdminDialog();
            mGrantAdminDialog.show();
        } else {
        mSetupUserDialog = createDialog();
        mSetupUserDialog = createDialog();
        mSetupUserDialog.show();
        mSetupUserDialog.show();
        }
        getOnBackInvokedDispatcher().registerOnBackInvokedCallback(
        getOnBackInvokedDispatcher().registerOnBackInvokedCallback(
                        OnBackInvokedDispatcher.PRIORITY_DEFAULT,
                        OnBackInvokedDispatcher.PRIORITY_DEFAULT,
                        mBackCallback);
                        mBackCallback);
@@ -110,7 +97,7 @@ public class CreateUserActivity extends Activity {
            outState.putBundle(DIALOG_STATE_KEY, mSetupUserDialog.onSaveInstanceState());
            outState.putBundle(DIALOG_STATE_KEY, mSetupUserDialog.onSaveInstanceState());
        }
        }


        mEditUserInfoController.onSaveInstanceState(outState);
        mCreateUserDialogController.onSaveInstanceState(outState);
        super.onSaveInstanceState(outState);
        super.onSaveInstanceState(outState);
    }
    }


@@ -125,48 +112,21 @@ public class CreateUserActivity extends Activity {


    private Dialog createDialog() {
    private Dialog createDialog() {
        String defaultUserName = getString(com.android.settingslib.R.string.user_new_user_name);
        String defaultUserName = getString(com.android.settingslib.R.string.user_new_user_name);

        boolean isKeyguardShowing = getIntent().getBooleanExtra(EXTRA_IS_KEYGUARD_SHOWING, true);
        return mEditUserInfoController.createDialog(
        return mCreateUserDialogController.createDialog(
                this,
                this,
                this::startActivity,
                this::startActivity,
                null,
                (mUserCreator.isMultipleAdminEnabled() && mUserCreator.isUserAdmin()
                defaultUserName,
                        && !isKeyguardShowing),
                getString(com.android.settingslib.R.string.user_add_user),
                this::addUserNow,
                this::addUserNow,
                this::finish
                this::finish
        );
        );
    }
    }


    /**
     * Returns dialog that allows to grant user admin rights.
     */
    private Dialog buildGrantAdminDialog() {
        return new GrantAdminDialogController().createDialog(
                this,
                (grantAdminRights) -> {
                    mGrantAdminDialog.dismiss();
                    mGrantAdminRights = grantAdminRights;
                    if (mGrantAdminRights) {
                        mUiEventLogger.log(MultiUserActionsEvent
                                        .GRANT_ADMIN_FROM_USER_SWITCHER_CREATION_DIALOG);
                    } else {
                        mUiEventLogger.log(MultiUserActionsEvent
                                        .NOT_GRANT_ADMIN_FROM_USER_SWITCHER_CREATION_DIALOG);
                    }
                    mSetupUserDialog = createDialog();
                    mSetupUserDialog.show();
                },
                () -> {
                    mGrantAdminRights = false;
                    finish();
                }
        );
    }

    @Override
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);
        mEditUserInfoController.onActivityResult(requestCode, resultCode, data);
        mCreateUserDialogController.onActivityResult(requestCode, resultCode, data);
    }
    }


    @Override
    @Override
@@ -178,9 +138,6 @@ public class CreateUserActivity extends Activity {
        if (mSetupUserDialog != null) {
        if (mSetupUserDialog != null) {
            mSetupUserDialog.dismiss();
            mSetupUserDialog.dismiss();
        }
        }
        if (mGrantAdminDialog != null) {
            mGrantAdminDialog.dismiss();
        }
        finish();
        finish();
    }
    }


@@ -190,7 +147,7 @@ public class CreateUserActivity extends Activity {
        super.onDestroy();
        super.onDestroy();
    }
    }


    private void addUserNow(String userName, Drawable userIcon) {
    private void addUserNow(String userName, Drawable userIcon, Boolean isAdmin) {
        mSetupUserDialog.dismiss();
        mSetupUserDialog.dismiss();
        userName = (userName == null || userName.trim().isEmpty())
        userName = (userName == null || userName.trim().isEmpty())
                ? getString(com.android.settingslib.R.string.user_new_user_name)
                ? getString(com.android.settingslib.R.string.user_new_user_name)
@@ -198,7 +155,7 @@ public class CreateUserActivity extends Activity {


        mUserCreator.createUser(userName, userIcon,
        mUserCreator.createUser(userName, userIcon,
                userInfo -> {
                userInfo -> {
                    if (mGrantAdminRights) {
                    if (isAdmin) {
                        mUserCreator.setUserAdmin(userInfo.id);
                        mUserCreator.setUserAdmin(userInfo.id);
                    }
                    }
                    switchToUser(userInfo.id);
                    switchToUser(userInfo.id);
@@ -230,7 +187,7 @@ public class CreateUserActivity extends Activity {
     */
     */
    private void startActivity(Intent intent, int requestCode) {
    private void startActivity(Intent intent, int requestCode) {
        mActivityStarter.dismissKeyguardThenExecute(() -> {
        mActivityStarter.dismissKeyguardThenExecute(() -> {
            mEditUserInfoController.startingActivityForResult();
            mCreateUserDialogController.startingActivityForResult();
            startActivityForResult(intent, requestCode);
            startActivityForResult(intent, requestCode);
            return true;
            return true;
        }, /* cancel= */ null, /* afterKeyguardGone= */ true);
        }, /* cancel= */ null, /* afterKeyguardGone= */ true);
+11 −7
Original line number Original line Diff line number Diff line
@@ -49,6 +49,7 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.qs.user.UserSwitchDialogController
import com.android.systemui.qs.user.UserSwitchDialogController
import com.android.systemui.telephony.domain.interactor.TelephonyInteractor
import com.android.systemui.telephony.domain.interactor.TelephonyInteractor
import com.android.systemui.user.CreateUserActivity
import com.android.systemui.user.data.model.UserSwitcherSettingsModel
import com.android.systemui.user.data.model.UserSwitcherSettingsModel
import com.android.systemui.user.data.repository.UserRepository
import com.android.systemui.user.data.repository.UserRepository
import com.android.systemui.user.data.source.UserRecord
import com.android.systemui.user.data.source.UserRecord
@@ -454,13 +455,16 @@ constructor(
            UserActionModel.ADD_USER -> {
            UserActionModel.ADD_USER -> {
                uiEventLogger.log(MultiUserActionsEvent.CREATE_USER_FROM_USER_SWITCHER)
                uiEventLogger.log(MultiUserActionsEvent.CREATE_USER_FROM_USER_SWITCHER)
                val currentUser = repository.getSelectedUserInfo()
                val currentUser = repository.getSelectedUserInfo()
                showDialog(
                dismissDialog()
                    ShowDialogRequestModel.ShowAddUserDialog(
                activityStarter.startActivity(
                        userHandle = currentUser.userHandle,
                    CreateUserActivity.createIntentForStart(
                        isKeyguardShowing = keyguardInteractor.isKeyguardShowing(),
                        applicationContext,
                        showEphemeralMessage = currentUser.isGuest && currentUser.isEphemeral,
                        keyguardInteractor.isKeyguardShowing()
                        dialogShower = dialogShower,
                    ),
                    )
                    /* dismissShade= */ true,
                    /* animationController */ null,
                    /* showOverLockscreenWhenLocked */ true,
                    /* userHandle */ currentUser.getUserHandle(),
                )
                )
            }
            }
            UserActionModel.ADD_SUPERVISED_USER -> {
            UserActionModel.ADD_SUPERVISED_USER -> {
+2 −3
Original line number Original line Diff line number Diff line
@@ -6,6 +6,7 @@ import android.testing.TestableLooper
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.filters.SmallTest
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.SysuiTestCase
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.nullable
import com.android.systemui.util.mockito.nullable
import com.android.systemui.util.mockito.whenever
import com.android.systemui.util.mockito.whenever
@@ -27,9 +28,7 @@ class CreateUserActivityTest : SysuiTestCase() {
                        createDialog(
                        createDialog(
                            /* activity = */ nullable(),
                            /* activity = */ nullable(),
                            /* activityStarter = */ nullable(),
                            /* activityStarter = */ nullable(),
                            /* oldUserIcon = */ nullable(),
                            /* isMultipleAdminsEnabled = */ any(),
                            /* defaultUserName = */ nullable(),
                            /* title = */ nullable(),
                            /* successCallback = */ nullable(),
                            /* successCallback = */ nullable(),
                            /* cancelCallback = */ nullable()
                            /* cancelCallback = */ nullable()
                        )
                        )
+3 −16
Original line number Original line Diff line number Diff line
@@ -482,30 +482,17 @@ class UserInteractorTest : SysuiTestCase() {
        }
        }


    @Test
    @Test
    fun executeAction_addUser_dialogShown() =
    fun executeAction_addUser_dismissesDialogAndStartsActivity() =
        testScope.runTest {
        testScope.runTest {
            val userInfos = createUserInfos(count = 2, includeGuest = false)
            val userInfos = createUserInfos(count = 2, includeGuest = false)
            userRepository.setUserInfos(userInfos)
            userRepository.setUserInfos(userInfos)
            userRepository.setSelectedUserInfo(userInfos[0])
            userRepository.setSelectedUserInfo(userInfos[0])
            keyguardRepository.setKeyguardShowing(false)
            keyguardRepository.setKeyguardShowing(false)
            val dialogRequest = collectLastValue(underTest.dialogShowRequests)
            val dialogShower: UserSwitchDialogController.DialogShower = mock()


            underTest.executeAction(UserActionModel.ADD_USER, dialogShower)
            underTest.executeAction(UserActionModel.ADD_USER)
            verify(uiEventLogger, times(1))
            verify(uiEventLogger, times(1))
                .log(MultiUserActionsEvent.CREATE_USER_FROM_USER_SWITCHER)
                .log(MultiUserActionsEvent.CREATE_USER_FROM_USER_SWITCHER)
            assertThat(dialogRequest())
                .isEqualTo(
                    ShowDialogRequestModel.ShowAddUserDialog(
                        userHandle = userInfos[0].userHandle,
                        isKeyguardShowing = false,
                        showEphemeralMessage = false,
                        dialogShower = dialogShower,
                    )
                )

            underTest.onDialogShown()
            underTest.onDialogShown()
            assertThat(dialogRequest()).isNull()
        }
        }


    @Test
    @Test