Merge "Guest mode UX flow updates to user settings"
This commit is contained in:
committed by
Android (Google) Code Review
commit
1149c12949
@@ -226,4 +226,32 @@ public class ShadowUserManager extends org.robolectric.shadows.ShadowUserManager
|
||||
return new UserInfo(PRIMARY_USER_ID, null, null,
|
||||
UserInfo.FLAG_INITIALIZED | UserInfo.FLAG_ADMIN | UserInfo.FLAG_PRIMARY);
|
||||
}
|
||||
|
||||
protected boolean setUserEphemeral(@UserIdInt int userId, boolean enableEphemeral) {
|
||||
UserInfo userInfo = mUserProfileInfos.stream()
|
||||
.filter(user -> user.id == userId)
|
||||
.findFirst()
|
||||
.orElse(super.getUserInfo(userId));
|
||||
|
||||
boolean isSuccess = false;
|
||||
boolean isEphemeralUser =
|
||||
(userInfo.flags & UserInfo.FLAG_EPHEMERAL) != 0;
|
||||
boolean isEphemeralOnCreateUser =
|
||||
(userInfo.flags & UserInfo.FLAG_EPHEMERAL_ON_CREATE)
|
||||
!= 0;
|
||||
// when user is created in ephemeral mode via FLAG_EPHEMERAL
|
||||
// its state cannot be changed.
|
||||
// FLAG_EPHEMERAL_ON_CREATE is used to keep track of this state
|
||||
if (!isEphemeralOnCreateUser) {
|
||||
isSuccess = true;
|
||||
if (isEphemeralUser != enableEphemeral) {
|
||||
if (enableEphemeral) {
|
||||
userInfo.flags |= UserInfo.FLAG_EPHEMERAL;
|
||||
} else {
|
||||
userInfo.flags &= ~UserInfo.FLAG_EPHEMERAL;
|
||||
}
|
||||
}
|
||||
}
|
||||
return isSuccess;
|
||||
}
|
||||
}
|
||||
|
@@ -56,6 +56,7 @@ import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.PreferenceManager;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
@@ -152,6 +153,8 @@ public class UserSettingsTest {
|
||||
ReflectionHelpers.setField(mFragment, "mDefaultIconDrawable", mDefaultIconDrawable);
|
||||
ReflectionHelpers.setField(mFragment, "mAddingUser", false);
|
||||
ReflectionHelpers.setField(mFragment, "mMetricsFeatureProvider", mMetricsFeatureProvider);
|
||||
ReflectionHelpers.setField(mFragment, "mRemoveGuestOnExitPreferenceController",
|
||||
mock(RemoveGuestOnExitPreferenceController.class));
|
||||
|
||||
doReturn(mUserManager).when(mActivity).getSystemService(UserManager.class);
|
||||
doReturn(mPackageManager).when(mActivity).getPackageManager();
|
||||
@@ -178,6 +181,11 @@ public class UserSettingsTest {
|
||||
mFragment.mAddSupervisedUser = mAddSupervisedUserPreference;
|
||||
mFragment.mAddGuest = mAddGuestPreference;
|
||||
mFragment.mUserListCategory = mock(PreferenceCategory.class);
|
||||
mFragment.mGuestUserCategory = mock(PreferenceCategory.class);
|
||||
mFragment.mGuestCategory = mock(PreferenceCategory.class);
|
||||
mFragment.mGuestResetPreference = mock(Preference.class);
|
||||
mFragment.mGuestExitPreference = mock(Preference.class);
|
||||
mFragment.mGuestInfoPreference = mock(Preference.class);
|
||||
}
|
||||
|
||||
@After
|
||||
@@ -219,7 +227,7 @@ public class UserSettingsTest {
|
||||
@Test
|
||||
public void testExitGuest_ShouldLogAction() {
|
||||
mUserCapabilities.mIsGuest = true;
|
||||
mFragment.exitGuest();
|
||||
mFragment.clearAndExitGuest();
|
||||
verify(mMetricsFeatureProvider).action(any(),
|
||||
eq(SettingsEnums.ACTION_USER_GUEST_EXIT_CONFIRMED));
|
||||
}
|
||||
@@ -227,7 +235,7 @@ public class UserSettingsTest {
|
||||
@Test
|
||||
public void testExitGuestWhenNotGuest_ShouldNotLogAction() {
|
||||
mUserCapabilities.mIsGuest = false;
|
||||
mFragment.exitGuest();
|
||||
mFragment.clearAndExitGuest();
|
||||
verify(mMetricsFeatureProvider, never()).action(any(),
|
||||
eq(SettingsEnums.ACTION_USER_GUEST_EXIT_CONFIRMED));
|
||||
}
|
||||
@@ -323,7 +331,6 @@ public class UserSettingsTest {
|
||||
|
||||
verify(mAddGuestPreference).setVisible(true);
|
||||
verify(mAddGuestPreference).setEnabled(true);
|
||||
verify(mAddGuestPreference).setIcon(any(Drawable.class));
|
||||
verify(mAddGuestPreference).setSelectable(true);
|
||||
}
|
||||
|
||||
@@ -371,7 +378,6 @@ public class UserSettingsTest {
|
||||
|
||||
verify(mAddGuestPreference).setVisible(true);
|
||||
verify(mAddGuestPreference).setEnabled(false);
|
||||
verify(mAddGuestPreference).setIcon(any(Drawable.class));
|
||||
verify(mAddGuestPreference).setSelectable(true);
|
||||
}
|
||||
|
||||
@@ -473,9 +479,9 @@ public class UserSettingsTest {
|
||||
mFragment.updateUserList();
|
||||
|
||||
ArgumentCaptor<UserPreference> captor = ArgumentCaptor.forClass(UserPreference.class);
|
||||
verify(mFragment.mUserListCategory, times(2))
|
||||
verify(mFragment.mGuestUserCategory, times(1))
|
||||
.addPreference(captor.capture());
|
||||
UserPreference guestPref = captor.getAllValues().get(1);
|
||||
UserPreference guestPref = captor.getAllValues().get(0);
|
||||
assertThat(guestPref.getUserId()).isEqualTo(INACTIVE_GUEST_USER_ID);
|
||||
assertThat(guestPref.getTitle()).isEqualTo("Guest");
|
||||
assertThat(guestPref.getIcon()).isNotNull();
|
||||
@@ -595,9 +601,9 @@ public class UserSettingsTest {
|
||||
mFragment.updateUserList();
|
||||
|
||||
ArgumentCaptor<UserPreference> captor = ArgumentCaptor.forClass(UserPreference.class);
|
||||
verify(mFragment.mUserListCategory, times(2))
|
||||
verify(mFragment.mGuestUserCategory, times(1))
|
||||
.addPreference(captor.capture());
|
||||
UserPreference userPref = captor.getAllValues().get(1);
|
||||
UserPreference userPref = captor.getAllValues().get(0);
|
||||
assertThat(userPref.getUserId()).isEqualTo(INACTIVE_GUEST_USER_ID);
|
||||
assertThat(userPref.getSummary()).isNull();
|
||||
}
|
||||
|
Reference in New Issue
Block a user