Merge changes from topic "single_dialog" into udc-dev am: 0624d822d4

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22966468

Change-Id: Ic9d828e4021effccaa4fa1bb8824f5db80352b41
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Tetiana Meronyk
2023-05-12 00:17:04 +00:00
committed by Automerger Merge Worker
4 changed files with 32 additions and 85 deletions

View File

@@ -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.show();
} }
mSetupUserDialog = createDialog();
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);

View File

@@ -50,6 +50,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
@@ -455,13 +456,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 -> {

View File

@@ -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()
) )

View File

@@ -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
@@ -862,7 +849,7 @@ class UserInteractorTest : SysuiTestCase() {
// Dialog is shown. // Dialog is shown.
assertThat(dialogRequest()) assertThat(dialogRequest())
.isEqualTo(ShowDialogRequestModel.ShowUserSwitcherFullscreenDialog(expandable)) .isEqualTo(ShowDialogRequestModel.ShowUserSwitcherFullscreenDialog(expandable))
underTest.onDialogShown() underTest.onDialogShown()
assertThat(dialogRequest()).isNull() assertThat(dialogRequest()).isNull()