Guest mode UX flow updates to user settings

- Add option in user settings to enable/disable ephemeral
  mode for guest user
- Update user settings to show exit guest and reset guest preferences
- Update user settings to show guest related preferences grouped together

Bug: 214031645, 175795666
Screenshots: go/ephemeral-guest-b-214031645-ux
Test: Manual test on sunfish, atest SystemUITests, atest SettingsRoboTests
Change-Id: I7cf205883f8250178ac24c67c74b9142ceb6c1f5
This commit is contained in:
Kedar Chitnis
2021-12-28 13:30:04 +00:00
parent c9e1a00fea
commit 948dee1b6f
13 changed files with 915 additions and 118 deletions

View File

@@ -73,6 +73,7 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
private static final int DIALOG_CONFIRM_ENABLE_CALLING_AND_SMS = 3;
private static final int DIALOG_SETUP_USER = 4;
private static final int DIALOG_CONFIRM_RESET_GUEST = 5;
private static final int DIALOG_CONFIRM_RESET_GUEST_AND_SWITCH_USER = 6;
/** Whether to enable the app_copying fragment. */
private static final boolean SHOW_APP_COPYING_PREF = false;
@@ -142,6 +143,11 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
if (canSwitchUserNow()) {
if (shouldShowSetupPromptDialog()) {
showDialog(DIALOG_SETUP_USER);
} else if (mUserCaps.mIsGuest && mUserCaps.mIsEphemeral) {
// if we are switching away from a ephemeral guest then,
// show a dialog that guest user will be reset and then switch
// the user
showDialog(DIALOG_CONFIRM_RESET_GUEST_AND_SWITCH_USER);
} else {
switchUser();
}
@@ -173,6 +179,7 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
switch (dialogId) {
case DIALOG_CONFIRM_REMOVE:
case DIALOG_CONFIRM_RESET_GUEST:
case DIALOG_CONFIRM_RESET_GUEST_AND_SWITCH_USER:
return SettingsEnums.DIALOG_USER_REMOVE;
case DIALOG_CONFIRM_ENABLE_CALLING:
return SettingsEnums.DIALOG_USER_ENABLE_CALLING;
@@ -211,6 +218,9 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
case DIALOG_CONFIRM_RESET_GUEST:
return UserDialogs.createResetGuestDialog(getActivity(),
(dialog, which) -> resetGuest());
case DIALOG_CONFIRM_RESET_GUEST_AND_SWITCH_USER:
return UserDialogs.createResetGuestDialog(getActivity(),
(dialog, which) -> switchUser());
}
throw new IllegalArgumentException("Unsupported dialogId " + dialogId);
}
@@ -356,6 +366,16 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
if (mUserInfo.isGuest()) {
mMetricsFeatureProvider.action(getActivity(), SettingsEnums.ACTION_SWITCH_TO_GUEST);
}
if (mUserCaps.mIsGuest && mUserCaps.mIsEphemeral) {
int guestUserId = UserHandle.myUserId();
// Using markGuestForDeletion allows us to create a new guest before this one is
// fully removed.
boolean marked = mUserManager.markGuestForDeletion(guestUserId);
if (!marked) {
Log.w(TAG, "Couldn't mark the guest for deletion for user " + guestUserId);
return;
}
}
ActivityManager.getService().switchUser(mUserInfo.id);
} catch (RemoteException re) {
Log.e(TAG, "Error while switching to other user.");