From 39492a907f7c0fcb4bf2064b29c3ff4754348a40 Mon Sep 17 00:00:00 2001 From: Tetiana Meronyk Date: Tue, 2 May 2023 17:48:27 +0000 Subject: [PATCH] Update user creation dialog to happen in a single dialog Bug: 279566609 Test: atest UserInteractorTest Change-Id: I8592a8f3c6b4350e3ed1f389447ebc8511ca90cb --- .../systemui/user/CreateUserActivity.java | 75 ++++--------------- .../user/domain/interactor/UserInteractor.kt | 18 +++-- .../systemui/user/CreateUserActivityTest.kt | 5 +- .../domain/interactor/UserInteractorTest.kt | 19 +---- 4 files changed, 32 insertions(+), 85 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/user/CreateUserActivity.java b/packages/SystemUI/src/com/android/systemui/user/CreateUserActivity.java index 08dbb816b5e94..08b0c647628ca 100644 --- a/packages/SystemUI/src/com/android/systemui/user/CreateUserActivity.java +++ b/packages/SystemUI/src/com/android/systemui/user/CreateUserActivity.java @@ -32,11 +32,9 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.internal.logging.UiEventLogger; -import com.android.settingslib.users.EditUserInfoController; -import com.android.settingslib.users.GrantAdminDialogController; +import com.android.settingslib.users.CreateUserDialogController; import com.android.systemui.R; import com.android.systemui.plugins.ActivityStarter; -import com.android.systemui.user.utils.MultiUserActionsEvent; 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 final UserCreator mUserCreator; - private final EditUserInfoController mEditUserInfoController; + private CreateUserDialogController mCreateUserDialogController; private final IActivityManager mActivityManager; private final ActivityStarter mActivityStarter; private final UiEventLogger mUiEventLogger; - private Dialog mGrantAdminDialog; private Dialog mSetupUserDialog; private final OnBackInvokedCallback mBackCallback = this::onBackInvoked; - private boolean mGrantAdminRights; @Inject public CreateUserActivity(UserCreator userCreator, - EditUserInfoController editUserInfoController, IActivityManager activityManager, + CreateUserDialogController createUserDialogController, IActivityManager activityManager, ActivityStarter activityStarter, UiEventLogger uiEventLogger) { mUserCreator = userCreator; - mEditUserInfoController = editUserInfoController; + mCreateUserDialogController = createUserDialogController; mActivityManager = activityManager; mActivityStarter = activityStarter; mUiEventLogger = uiEventLogger; @@ -86,19 +82,10 @@ public class CreateUserActivity extends Activity { setShowWhenLocked(true); setContentView(R.layout.activity_create_new_user); if (savedInstanceState != null) { - mEditUserInfoController.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.show(); + mCreateUserDialogController.onRestoreInstanceState(savedInstanceState); } + mSetupUserDialog = createDialog(); + mSetupUserDialog.show(); getOnBackInvokedDispatcher().registerOnBackInvokedCallback( OnBackInvokedDispatcher.PRIORITY_DEFAULT, mBackCallback); @@ -110,7 +97,7 @@ public class CreateUserActivity extends Activity { outState.putBundle(DIALOG_STATE_KEY, mSetupUserDialog.onSaveInstanceState()); } - mEditUserInfoController.onSaveInstanceState(outState); + mCreateUserDialogController.onSaveInstanceState(outState); super.onSaveInstanceState(outState); } @@ -125,48 +112,21 @@ public class CreateUserActivity extends Activity { private Dialog createDialog() { String defaultUserName = getString(com.android.settingslib.R.string.user_new_user_name); - - return mEditUserInfoController.createDialog( + boolean isKeyguardShowing = getIntent().getBooleanExtra(EXTRA_IS_KEYGUARD_SHOWING, true); + return mCreateUserDialogController.createDialog( this, this::startActivity, - null, - defaultUserName, - getString(com.android.settingslib.R.string.user_add_user), + (mUserCreator.isMultipleAdminEnabled() && mUserCreator.isUserAdmin() + && !isKeyguardShowing), this::addUserNow, 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 protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - mEditUserInfoController.onActivityResult(requestCode, resultCode, data); + mCreateUserDialogController.onActivityResult(requestCode, resultCode, data); } @Override @@ -178,9 +138,6 @@ public class CreateUserActivity extends Activity { if (mSetupUserDialog != null) { mSetupUserDialog.dismiss(); } - if (mGrantAdminDialog != null) { - mGrantAdminDialog.dismiss(); - } finish(); } @@ -190,7 +147,7 @@ public class CreateUserActivity extends Activity { super.onDestroy(); } - private void addUserNow(String userName, Drawable userIcon) { + private void addUserNow(String userName, Drawable userIcon, Boolean isAdmin) { mSetupUserDialog.dismiss(); userName = (userName == null || userName.trim().isEmpty()) ? getString(com.android.settingslib.R.string.user_new_user_name) @@ -198,7 +155,7 @@ public class CreateUserActivity extends Activity { mUserCreator.createUser(userName, userIcon, userInfo -> { - if (mGrantAdminRights) { + if (isAdmin) { mUserCreator.setUserAdmin(userInfo.id); } switchToUser(userInfo.id); @@ -230,7 +187,7 @@ public class CreateUserActivity extends Activity { */ private void startActivity(Intent intent, int requestCode) { mActivityStarter.dismissKeyguardThenExecute(() -> { - mEditUserInfoController.startingActivityForResult(); + mCreateUserDialogController.startingActivityForResult(); startActivityForResult(intent, requestCode); return true; }, /* cancel= */ null, /* afterKeyguardGone= */ true); diff --git a/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserInteractor.kt b/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserInteractor.kt index 0ec1a214660cb..fe136dde1b02f 100644 --- a/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserInteractor.kt @@ -49,6 +49,7 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor import com.android.systemui.plugins.ActivityStarter import com.android.systemui.qs.user.UserSwitchDialogController 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.repository.UserRepository import com.android.systemui.user.data.source.UserRecord @@ -454,13 +455,16 @@ constructor( UserActionModel.ADD_USER -> { uiEventLogger.log(MultiUserActionsEvent.CREATE_USER_FROM_USER_SWITCHER) val currentUser = repository.getSelectedUserInfo() - showDialog( - ShowDialogRequestModel.ShowAddUserDialog( - userHandle = currentUser.userHandle, - isKeyguardShowing = keyguardInteractor.isKeyguardShowing(), - showEphemeralMessage = currentUser.isGuest && currentUser.isEphemeral, - dialogShower = dialogShower, - ) + dismissDialog() + activityStarter.startActivity( + CreateUserActivity.createIntentForStart( + applicationContext, + keyguardInteractor.isKeyguardShowing() + ), + /* dismissShade= */ true, + /* animationController */ null, + /* showOverLockscreenWhenLocked */ true, + /* userHandle */ currentUser.getUserHandle(), ) } UserActionModel.ADD_SUPERVISED_USER -> { diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/CreateUserActivityTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/CreateUserActivityTest.kt index 2b86cfdec04e7..6db35ae94a3f1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/user/CreateUserActivityTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/user/CreateUserActivityTest.kt @@ -6,6 +6,7 @@ import android.testing.TestableLooper import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.filters.SmallTest 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.nullable import com.android.systemui.util.mockito.whenever @@ -27,9 +28,7 @@ class CreateUserActivityTest : SysuiTestCase() { createDialog( /* activity = */ nullable(), /* activityStarter = */ nullable(), - /* oldUserIcon = */ nullable(), - /* defaultUserName = */ nullable(), - /* title = */ nullable(), + /* isMultipleAdminsEnabled = */ any(), /* successCallback = */ nullable(), /* cancelCallback = */ nullable() ) diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserInteractorTest.kt index d252d5317d066..ca83d49b19cad 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserInteractorTest.kt @@ -482,30 +482,17 @@ class UserInteractorTest : SysuiTestCase() { } @Test - fun executeAction_addUser_dialogShown() = + fun executeAction_addUser_dismissesDialogAndStartsActivity() = testScope.runTest { val userInfos = createUserInfos(count = 2, includeGuest = false) userRepository.setUserInfos(userInfos) userRepository.setSelectedUserInfo(userInfos[0]) 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)) .log(MultiUserActionsEvent.CREATE_USER_FROM_USER_SWITCHER) - assertThat(dialogRequest()) - .isEqualTo( - ShowDialogRequestModel.ShowAddUserDialog( - userHandle = userInfos[0].userHandle, - isKeyguardShowing = false, - showEphemeralMessage = false, - dialogShower = dialogShower, - ) - ) - underTest.onDialogShown() - assertThat(dialogRequest()).isNull() } @Test @@ -862,7 +849,7 @@ class UserInteractorTest : SysuiTestCase() { // Dialog is shown. assertThat(dialogRequest()) - .isEqualTo(ShowDialogRequestModel.ShowUserSwitcherFullscreenDialog(expandable)) + .isEqualTo(ShowDialogRequestModel.ShowUserSwitcherFullscreenDialog(expandable)) underTest.onDialogShown() assertThat(dialogRequest()).isNull()