Extracts UserRecord out of UserSwitcherController.

1. Moves UserRecord to its own class
2. Makes UserRecord a data class and makes it completely immutable

Point (2) required the addition of some state in UserSwitcherController.

Bug: 243844359
Test: manually verified that the user switcher still works
Change-Id: Ic92c7ded00e250212bc40b83b03aaa1db314aecc
This commit is contained in:
Alejandro Nijamkin
2022-08-29 11:59:39 -07:00
parent c9e49d8ed2
commit 9e9117412d
11 changed files with 214 additions and 160 deletions

View File

@@ -89,7 +89,7 @@ import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.shared.system.SysUiStatsLog;
import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.statusbar.policy.UserSwitcherController.BaseUserAdapter;
import com.android.systemui.statusbar.policy.UserSwitcherController.UserRecord;
import com.android.systemui.user.data.source.UserRecord;
import com.android.systemui.util.settings.GlobalSettings;
import java.util.ArrayList;

View File

@@ -43,6 +43,7 @@ import com.android.systemui.qs.QSUserSwitcherEvent;
import com.android.systemui.qs.user.UserSwitchDialogController;
import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.user.data.source.UserRecord;
import javax.inject.Inject;
@@ -95,7 +96,7 @@ public class UserDetailView extends PseudoGridView {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
UserSwitcherController.UserRecord item = getItem(position);
UserRecord item = getItem(position);
return createUserDetailItemView(convertView, parent, item);
}
@@ -113,7 +114,7 @@ public class UserDetailView extends PseudoGridView {
}
public UserDetailItemView createUserDetailItemView(View convertView, ViewGroup parent,
UserSwitcherController.UserRecord item) {
UserRecord item) {
UserDetailItemView v = UserDetailItemView.convertOrInflate(
parent.getContext(), convertView, parent);
if (!item.isCurrent || item.isGuest) {
@@ -134,7 +135,7 @@ public class UserDetailView extends PseudoGridView {
v.bind(name, drawable, item.info.id);
}
v.setActivated(item.isCurrent);
v.setDisabledByAdmin(item.isDisabledByAdmin);
v.setDisabledByAdmin(mController.isDisabledByAdmin(item));
v.setEnabled(item.isSwitchToEnabled);
v.setAlpha(v.isEnabled() ? USER_SWITCH_ENABLED_ALPHA : USER_SWITCH_DISABLED_ALPHA);
@@ -146,7 +147,7 @@ public class UserDetailView extends PseudoGridView {
}
private static Drawable getDrawable(Context context,
UserSwitcherController.UserRecord item) {
UserRecord item) {
Drawable icon = getIconDrawable(context, item);
int iconColorRes;
if (item.isCurrent) {
@@ -171,22 +172,24 @@ public class UserDetailView extends PseudoGridView {
}
Trace.beginSection("UserDetailView.Adapter#onClick");
UserSwitcherController.UserRecord tag =
(UserSwitcherController.UserRecord) view.getTag();
if (tag.isDisabledByAdmin) {
UserRecord userRecord =
(UserRecord) view.getTag();
if (mController.isDisabledByAdmin(userRecord)) {
final Intent intent = RestrictedLockUtils.getShowAdminSupportDetailsIntent(
mContext, tag.enforcedAdmin);
mContext, mController.getEnforcedAdmin(userRecord));
mController.startActivity(intent);
} else if (tag.isSwitchToEnabled) {
} else if (userRecord.isSwitchToEnabled) {
MetricsLogger.action(mContext, MetricsEvent.QS_SWITCH_USER);
mUiEventLogger.log(QSUserSwitcherEvent.QS_USER_SWITCH);
if (!tag.isAddUser && !tag.isRestricted && !tag.isDisabledByAdmin) {
if (!userRecord.isAddUser
&& !userRecord.isRestricted
&& !mController.isDisabledByAdmin(userRecord)) {
if (mCurrentUserView != null) {
mCurrentUserView.setActivated(false);
}
view.setActivated(true);
}
onUserListItemClicked(tag, mDialogShower);
onUserListItemClicked(userRecord, mDialogShower);
}
Trace.endSection();
}

View File

@@ -49,6 +49,7 @@ import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.phone.LockscreenGestureLogger;
import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
import com.android.systemui.statusbar.phone.UserAvatarView;
import com.android.systemui.user.data.source.UserRecord;
import com.android.systemui.util.ViewController;
import javax.inject.Inject;
@@ -79,7 +80,7 @@ public class KeyguardQsUserSwitchController extends ViewController<FrameLayout>
@VisibleForTesting
UserAvatarView mUserAvatarView;
private View mUserAvatarViewWithBackground;
UserSwitcherController.UserRecord mCurrentUser;
UserRecord mCurrentUser;
private boolean mIsKeyguardShowing;
// State info for the user switch and keyguard
@@ -269,10 +270,10 @@ public class KeyguardQsUserSwitchController extends ViewController<FrameLayout>
* @return true if the current user has changed
*/
private boolean updateCurrentUser() {
UserSwitcherController.UserRecord previousUser = mCurrentUser;
UserRecord previousUser = mCurrentUser;
mCurrentUser = null;
for (int i = 0; i < mAdapter.getCount(); i++) {
UserSwitcherController.UserRecord r = mAdapter.getItem(i);
UserRecord r = mAdapter.getItem(i);
if (r.isCurrent) {
mCurrentUser = r;
return !mCurrentUser.equals(previousUser);

View File

@@ -52,6 +52,7 @@ import com.android.systemui.statusbar.notification.stack.AnimationProperties;
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
import com.android.systemui.user.data.source.UserRecord;
import com.android.systemui.util.ViewController;
import java.util.ArrayList;
@@ -287,8 +288,8 @@ public class KeyguardUserSwitcherController extends ViewController<KeyguardUserS
}
KeyguardUserDetailItemView newView = (KeyguardUserDetailItemView)
mAdapter.getView(i, oldView, mListView);
UserSwitcherController.UserRecord userTag =
(UserSwitcherController.UserRecord) newView.getTag();
UserRecord userTag =
(UserRecord) newView.getTag();
if (userTag.isCurrent) {
if (i != 0) {
Log.w(TAG, "Current user is not the first view in the list");
@@ -443,7 +444,7 @@ public class KeyguardUserSwitcherController extends ViewController<KeyguardUserS
private KeyguardUserSwitcherController mKeyguardUserSwitcherController;
private View mCurrentUserView;
// List of users where the first entry is always the current user
private ArrayList<UserSwitcherController.UserRecord> mUsersOrdered = new ArrayList<>();
private ArrayList<UserRecord> mUsersOrdered = new ArrayList<>();
KeyguardUserAdapter(Context context, Resources resources, LayoutInflater layoutInflater,
UserSwitcherController controller,
@@ -464,10 +465,10 @@ public class KeyguardUserSwitcherController extends ViewController<KeyguardUserS
}
void refreshUserOrder() {
ArrayList<UserSwitcherController.UserRecord> users = super.getUsers();
ArrayList<UserRecord> users = super.getUsers();
mUsersOrdered = new ArrayList<>(users.size());
for (int i = 0; i < users.size(); i++) {
UserSwitcherController.UserRecord record = users.get(i);
UserRecord record = users.get(i);
if (record.isCurrent) {
mUsersOrdered.add(0, record);
} else {
@@ -477,19 +478,19 @@ public class KeyguardUserSwitcherController extends ViewController<KeyguardUserS
}
@Override
protected ArrayList<UserSwitcherController.UserRecord> getUsers() {
protected ArrayList<UserRecord> getUsers() {
return mUsersOrdered;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
UserSwitcherController.UserRecord item = getItem(position);
UserRecord item = getItem(position);
return createUserDetailItemView(convertView, parent, item);
}
KeyguardUserDetailItemView convertOrInflate(View convertView, ViewGroup parent) {
if (!(convertView instanceof KeyguardUserDetailItemView)
|| !(convertView.getTag() instanceof UserSwitcherController.UserRecord)) {
|| !(convertView.getTag() instanceof UserRecord)) {
convertView = mLayoutInflater.inflate(
R.layout.keyguard_user_switcher_item, parent, false);
}
@@ -497,7 +498,7 @@ public class KeyguardUserSwitcherController extends ViewController<KeyguardUserS
}
KeyguardUserDetailItemView createUserDetailItemView(View convertView, ViewGroup parent,
UserSwitcherController.UserRecord item) {
UserRecord item) {
KeyguardUserDetailItemView v = convertOrInflate(convertView, parent);
v.setOnClickListener(this);
@@ -513,7 +514,7 @@ public class KeyguardUserSwitcherController extends ViewController<KeyguardUserS
v.bind(name, drawable, item.info.id);
}
v.setActivated(item.isCurrent);
v.setDisabledByAdmin(item.isDisabledByAdmin);
v.setDisabledByAdmin(mController.isDisabledByAdmin(item));
v.setEnabled(item.isSwitchToEnabled);
v.setAlpha(v.isEnabled() ? USER_SWITCH_ENABLED_ALPHA : USER_SWITCH_DISABLED_ALPHA);
@@ -524,7 +525,7 @@ public class KeyguardUserSwitcherController extends ViewController<KeyguardUserS
return v;
}
private Drawable getDrawable(UserSwitcherController.UserRecord item) {
private Drawable getDrawable(UserRecord item) {
Drawable drawable;
if (item.isCurrent && item.isGuest) {
drawable = mContext.getDrawable(R.drawable.ic_avatar_guest_user);
@@ -547,7 +548,7 @@ public class KeyguardUserSwitcherController extends ViewController<KeyguardUserS
@Override
public void onClick(View v) {
UserSwitcherController.UserRecord user = (UserSwitcherController.UserRecord) v.getTag();
UserRecord user = (UserRecord) v.getTag();
if (mKeyguardUserSwitcherController.isListAnimating()) {
return;

View File

@@ -45,6 +45,7 @@ import android.os.UserManager;
import android.provider.Settings;
import android.telephony.TelephonyCallback;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
@@ -54,6 +55,7 @@ import android.widget.BaseAdapter;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.collection.SimpleArrayMap;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.jank.InteractionJankMonitor;
@@ -83,6 +85,7 @@ import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.telephony.TelephonyListenerManager;
import com.android.systemui.user.CreateUserActivity;
import com.android.systemui.user.data.source.UserRecord;
import com.android.systemui.util.settings.GlobalSettings;
import com.android.systemui.util.settings.SecureSettings;
@@ -138,6 +141,9 @@ public class UserSwitcherController implements Dumpable {
private final InteractionJankMonitor mInteractionJankMonitor;
private final LatencyTracker mLatencyTracker;
private final DialogLaunchAnimator mDialogLaunchAnimator;
private final SimpleArrayMap<UserRecord, EnforcedAdmin> mEnforcedAdminByUserRecord =
new SimpleArrayMap<>();
private final ArraySet<UserRecord> mDisabledByAdmin = new ArraySet<>();
private ArrayList<UserRecord> mUsers = new ArrayList<>();
@VisibleForTesting
@@ -975,6 +981,21 @@ public class UserSwitcherController implements Dumpable {
return mKeyguardStateController;
}
/**
* Returns the {@link EnforcedAdmin} for the given record, or {@code null} if there isn't one.
*/
@Nullable
public EnforcedAdmin getEnforcedAdmin(UserRecord record) {
return mEnforcedAdminByUserRecord.get(record);
}
/**
* Returns {@code true} if the given record is disabled by the admin; {@code false} otherwise.
*/
public boolean isDisabledByAdmin(UserRecord record) {
return mDisabledByAdmin.contains(record);
}
public static abstract class BaseUserAdapter extends BaseAdapter {
final UserSwitcherController mController;
@@ -1106,11 +1127,11 @@ public class UserSwitcherController implements Dumpable {
UserManager.DISALLOW_ADD_USER, mUserTracker.getUserId());
if (admin != null && !RestrictedLockUtilsInternal.hasBaseUserRestriction(mContext,
UserManager.DISALLOW_ADD_USER, mUserTracker.getUserId())) {
record.isDisabledByAdmin = true;
record.enforcedAdmin = admin;
mDisabledByAdmin.add(record);
mEnforcedAdminByUserRecord.put(record, admin);
} else {
record.isDisabledByAdmin = false;
record.enforcedAdmin = null;
mDisabledByAdmin.remove(record);
mEnforcedAdminByUserRecord.put(record, null);
}
}
@@ -1152,74 +1173,6 @@ public class UserSwitcherController implements Dumpable {
}
}
public static final class UserRecord {
public final UserInfo info;
public final Bitmap picture;
public final boolean isGuest;
public final boolean isCurrent;
public final boolean isAddUser;
public final boolean isAddSupervisedUser;
/** If true, the record is only visible to the owner and only when unlocked. */
public final boolean isRestricted;
public boolean isDisabledByAdmin;
public EnforcedAdmin enforcedAdmin;
public boolean isSwitchToEnabled;
public UserRecord(UserInfo info, Bitmap picture, boolean isGuest, boolean isCurrent,
boolean isAddUser, boolean isRestricted, boolean isSwitchToEnabled,
boolean isAddSupervisedUser) {
this.info = info;
this.picture = picture;
this.isGuest = isGuest;
this.isCurrent = isCurrent;
this.isAddUser = isAddUser;
this.isRestricted = isRestricted;
this.isSwitchToEnabled = isSwitchToEnabled;
this.isAddSupervisedUser = isAddSupervisedUser;
}
public UserRecord copyWithIsCurrent(boolean _isCurrent) {
return new UserRecord(info, picture, isGuest, _isCurrent, isAddUser, isRestricted,
isSwitchToEnabled, isAddSupervisedUser);
}
public int resolveId() {
if (isGuest || info == null) {
return UserHandle.USER_NULL;
}
return info.id;
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("UserRecord(");
if (info != null) {
sb.append("name=\"").append(info.name).append("\" id=").append(info.id);
} else {
if (isGuest) {
sb.append("<add guest placeholder>");
} else if (isAddUser) {
sb.append("<add user placeholder>");
}
}
if (isGuest) sb.append(" <isGuest>");
if (isAddUser) sb.append(" <isAddUser>");
if (isAddSupervisedUser) sb.append(" <isAddSupervisedUser>");
if (isCurrent) sb.append(" <isCurrent>");
if (picture != null) sb.append(" <hasPicture>");
if (isRestricted) sb.append(" <isRestricted>");
if (isDisabledByAdmin) {
sb.append(" <isDisabledByAdmin>");
sb.append(" enforcedAdmin=").append(enforcedAdmin);
}
if (isSwitchToEnabled) {
sb.append(" <isSwitchToEnabled>");
}
sb.append(')');
return sb.toString();
}
}
private final KeyguardStateController.Callback mCallback =
new KeyguardStateController.Callback() {
@Override

View File

@@ -51,7 +51,7 @@ import com.android.systemui.statusbar.policy.UserSwitcherController
import com.android.systemui.statusbar.policy.UserSwitcherController.BaseUserAdapter
import com.android.systemui.statusbar.policy.UserSwitcherController.USER_SWITCH_DISABLED_ALPHA
import com.android.systemui.statusbar.policy.UserSwitcherController.USER_SWITCH_ENABLED_ALPHA
import com.android.systemui.statusbar.policy.UserSwitcherController.UserRecord
import com.android.systemui.user.data.source.UserRecord
import javax.inject.Inject
import kotlin.math.ceil
@@ -81,16 +81,17 @@ class UserSwitcherActivity @Inject constructor(
}
}
// When the add users options become available, insert another option to manage users
private val manageUserRecord = UserRecord(
null /* info */,
null /* picture */,
false /* isGuest */,
false /* isCurrent */,
false /* isAddUser */,
false /* isRestricted */,
false /* isSwitchToEnabled */,
false /* isAddSupervisedUser */
)
private val manageUserRecord =
UserRecord(
null /* info */,
null /* picture */,
false /* isGuest */,
false /* isCurrent */,
false /* isAddUser */,
false /* isRestricted */,
false /* isSwitchToEnabled */,
false /* isAddSupervisedUser */
)
private val adapter = object : BaseUserAdapter(userSwitcherController) {
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {

View File

@@ -0,0 +1,70 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.android.systemui.user.data.source
import android.content.pm.UserInfo
import android.graphics.Bitmap
import android.os.UserHandle
/**
* Encapsulates raw data for a user or an option item related to managing users on the device.
*/
data class UserRecord(
/** Relevant user information. If `null`, this record is not a user but an option item. */
@JvmField
val info: UserInfo?,
/** An image representing the user. */
@JvmField
val picture: Bitmap?,
/** Whether this record represents an option to switch to a guest user. */
@JvmField
val isGuest: Boolean,
/** Whether this record represents the currently-selected user. */
@JvmField
val isCurrent: Boolean,
/** Whether this record represents an option to add another user to the device. */
@JvmField
val isAddUser: Boolean,
/** If true, the record is only visible to the owner and only when unlocked. */
@JvmField
val isRestricted: Boolean,
/** Whether it is possible to switch to this user. */
@JvmField
val isSwitchToEnabled: Boolean,
/** Whether this record represents an option to add another supervised user to the device. */
@JvmField
val isAddSupervisedUser: Boolean,
) {
/**
* Returns a new instance of [UserRecord] with its [isCurrent] set to the given value.
*/
fun copyWithIsCurrent(isCurrent: Boolean): UserRecord {
return copy(isCurrent = isCurrent)
}
/**
* Returns the user ID for the user represented by this instance or [UserHandle.USER_NULL] if
* this instance if a guest or does not represent a user (represents an option item).
*/
fun resolveId(): Int {
return if (isGuest || info == null) {
UserHandle.USER_NULL
} else {
info.id
}
}
}

View File

@@ -57,7 +57,7 @@ import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.statusbar.policy.UserSwitcherController.UserRecord;
import com.android.systemui.user.data.source.UserRecord;
import com.android.systemui.util.settings.GlobalSettings;
import org.junit.Before;

View File

@@ -31,6 +31,7 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.classifier.FalsingManagerFake
import com.android.systemui.qs.QSUserSwitcherEvent
import com.android.systemui.statusbar.policy.UserSwitcherController
import com.android.systemui.user.data.source.UserRecord
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
@@ -39,8 +40,8 @@ import org.mockito.ArgumentMatchers.any
import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.ArgumentMatchers.anyInt
import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations
@RunWith(AndroidTestingRunner::class)
@@ -140,13 +141,14 @@ class UserDetailViewAdapterTest : SysuiTestCase() {
}
private fun createUserRecord(current: Boolean, guest: Boolean) =
UserSwitcherController.UserRecord(
mUserInfo,
mPicture,
guest,
current,
false /* isAddUser */,
false /* isRestricted */,
true /* isSwitchToEnabled */,
false /* isAddSupervisedUser */)
UserRecord(
mUserInfo,
mPicture,
guest,
current,
false /* isAddUser */,
false /* isRestricted */,
true /* isSwitchToEnabled */,
false /* isAddSupervisedUser */
)
}

View File

@@ -28,6 +28,7 @@ import com.android.internal.util.UserIcons
import com.android.systemui.R
import com.android.systemui.SysuiTestCase
import com.android.systemui.qs.tiles.UserDetailItemView
import com.android.systemui.user.data.source.UserRecord
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertTrue
@@ -38,8 +39,8 @@ import org.mockito.ArgumentMatchers.any
import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.ArgumentMatchers.anyInt
import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations
@RunWith(AndroidTestingRunner::class)
@@ -186,13 +187,14 @@ class KeyguardUserSwitcherAdapterTest : SysuiTestCase() {
}
private fun createUserRecord(isCurrentUser: Boolean, isGuestUser: Boolean) =
UserSwitcherController.UserRecord(
userInfo,
picture,
isGuestUser,
isCurrentUser,
false /* isAddUser */,
false /* isRestricted */,
true /* isSwitchToEnabled */,
false /* isAddSupervisedUser */)
UserRecord(
userInfo,
picture,
isGuestUser,
isCurrentUser,
false /* isAddUser */,
false /* isRestricted */,
true /* isSwitchToEnabled */,
false /* isAddSupervisedUser */
)
}

View File

@@ -56,6 +56,7 @@ import com.android.systemui.qs.user.UserSwitchDialogController
import com.android.systemui.settings.UserTracker
import com.android.systemui.shade.NotificationShadeWindowView
import com.android.systemui.telephony.TelephonyListenerManager
import com.android.systemui.user.data.source.UserRecord
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.argumentCaptor
@@ -235,15 +236,16 @@ class UserSwitcherControllerTest : SysuiTestCase() {
@Test
fun testSwitchUser_parentDialogDismissed() {
val otherUserRecord = UserSwitcherController.UserRecord(
secondaryUser,
picture,
false /* guest */,
false /* current */,
false /* isAddUser */,
false /* isRestricted */,
true /* isSwitchToEnabled */,
false /* isAddSupervisedUser */)
val otherUserRecord = UserRecord(
secondaryUser,
picture,
false /* guest */,
false /* current */,
false /* isAddUser */,
false /* isRestricted */,
true /* isSwitchToEnabled */,
false /* isAddSupervisedUser */
)
`when`(userTracker.userId).thenReturn(ownerId)
`when`(userTracker.userInfo).thenReturn(ownerInfo)
@@ -255,7 +257,8 @@ class UserSwitcherControllerTest : SysuiTestCase() {
@Test
fun testAddGuest_okButtonPressed() {
val emptyGuestUserRecord = UserSwitcherController.UserRecord(
val emptyGuestUserRecord =
UserRecord(
null,
null,
true /* guest */,
@@ -263,7 +266,8 @@ class UserSwitcherControllerTest : SysuiTestCase() {
false /* isAddUser */,
false /* isRestricted */,
true /* isSwitchToEnabled */,
false /* isAddSupervisedUser */)
false /* isAddSupervisedUser */
)
`when`(userTracker.userId).thenReturn(ownerId)
`when`(userTracker.userInfo).thenReturn(ownerInfo)
@@ -282,7 +286,8 @@ class UserSwitcherControllerTest : SysuiTestCase() {
@Test
fun testAddGuest_parentDialogDismissed() {
val emptyGuestUserRecord = UserSwitcherController.UserRecord(
val emptyGuestUserRecord =
UserRecord(
null,
null,
true /* guest */,
@@ -290,7 +295,8 @@ class UserSwitcherControllerTest : SysuiTestCase() {
false /* isAddUser */,
false /* isRestricted */,
true /* isSwitchToEnabled */,
false /* isAddSupervisedUser */)
false /* isAddSupervisedUser */
)
`when`(userTracker.userId).thenReturn(ownerId)
`when`(userTracker.userInfo).thenReturn(ownerInfo)
@@ -305,7 +311,8 @@ class UserSwitcherControllerTest : SysuiTestCase() {
@Test
fun testRemoveGuest_removeButtonPressed_isLogged() {
val currentGuestUserRecord = UserSwitcherController.UserRecord(
val currentGuestUserRecord =
UserRecord(
guestInfo,
picture,
true /* guest */,
@@ -313,7 +320,8 @@ class UserSwitcherControllerTest : SysuiTestCase() {
false /* isAddUser */,
false /* isRestricted */,
true /* isSwitchToEnabled */,
false /* isAddSupervisedUser */)
false /* isAddSupervisedUser */
)
`when`(userTracker.userId).thenReturn(guestInfo.id)
`when`(userTracker.userInfo).thenReturn(guestInfo)
@@ -331,7 +339,8 @@ class UserSwitcherControllerTest : SysuiTestCase() {
@Test
fun testRemoveGuest_removeButtonPressed_dialogDismissed() {
val currentGuestUserRecord = UserSwitcherController.UserRecord(
val currentGuestUserRecord =
UserRecord(
guestInfo,
picture,
true /* guest */,
@@ -339,7 +348,8 @@ class UserSwitcherControllerTest : SysuiTestCase() {
false /* isAddUser */,
false /* isRestricted */,
true /* isSwitchToEnabled */,
false /* isAddSupervisedUser */)
false /* isAddSupervisedUser */
)
`when`(userTracker.userId).thenReturn(guestInfo.id)
`when`(userTracker.userInfo).thenReturn(guestInfo)
@@ -353,7 +363,8 @@ class UserSwitcherControllerTest : SysuiTestCase() {
@Test
fun testRemoveGuest_dialogShowerUsed() {
val currentGuestUserRecord = UserSwitcherController.UserRecord(
val currentGuestUserRecord =
UserRecord(
guestInfo,
picture,
true /* guest */,
@@ -361,7 +372,8 @@ class UserSwitcherControllerTest : SysuiTestCase() {
false /* isAddUser */,
false /* isRestricted */,
true /* isSwitchToEnabled */,
false /* isAddSupervisedUser */)
false /* isAddSupervisedUser */
)
`when`(userTracker.userId).thenReturn(guestInfo.id)
`when`(userTracker.userInfo).thenReturn(guestInfo)
@@ -376,7 +388,8 @@ class UserSwitcherControllerTest : SysuiTestCase() {
@Test
fun testRemoveGuest_cancelButtonPressed_isNotLogged() {
val currentGuestUserRecord = UserSwitcherController.UserRecord(
val currentGuestUserRecord =
UserRecord(
guestInfo,
picture,
true /* guest */,
@@ -384,7 +397,8 @@ class UserSwitcherControllerTest : SysuiTestCase() {
false /* isAddUser */,
false /* isRestricted */,
true /* isSwitchToEnabled */,
false /* isAddSupervisedUser */)
false /* isAddSupervisedUser */
)
`when`(userTracker.userId).thenReturn(guestId)
`when`(userTracker.userInfo).thenReturn(guestInfo)
@@ -398,7 +412,8 @@ class UserSwitcherControllerTest : SysuiTestCase() {
@Test
fun testWipeGuest_startOverButtonPressed_isLogged() {
val currentGuestUserRecord = UserSwitcherController.UserRecord(
val currentGuestUserRecord =
UserRecord(
guestInfo,
picture,
true /* guest */,
@@ -406,7 +421,8 @@ class UserSwitcherControllerTest : SysuiTestCase() {
false /* isAddUser */,
false /* isRestricted */,
true /* isSwitchToEnabled */,
false /* isAddSupervisedUser */)
false /* isAddSupervisedUser */
)
`when`(userTracker.userId).thenReturn(guestId)
`when`(userTracker.userInfo).thenReturn(guestInfo)
@@ -433,7 +449,8 @@ class UserSwitcherControllerTest : SysuiTestCase() {
@Test
fun testWipeGuest_continueButtonPressed_isLogged() {
val currentGuestUserRecord = UserSwitcherController.UserRecord(
val currentGuestUserRecord =
UserRecord(
guestInfo,
picture,
true /* guest */,
@@ -441,7 +458,8 @@ class UserSwitcherControllerTest : SysuiTestCase() {
false /* isAddUser */,
false /* isRestricted */,
true /* isSwitchToEnabled */,
false /* isAddSupervisedUser */)
false /* isAddSupervisedUser */
)
`when`(userTracker.userId).thenReturn(guestId)
`when`(userTracker.userInfo).thenReturn(guestInfo)
@@ -470,11 +488,13 @@ class UserSwitcherControllerTest : SysuiTestCase() {
@Test
fun test_getCurrentUserName_shouldReturnNameOfTheCurrentUser() {
fun addUser(id: Int, name: String, isCurrent: Boolean) {
userSwitcherController.users.add(UserSwitcherController.UserRecord(
userSwitcherController.users.add(
UserRecord(
UserInfo(id, name, 0),
null, false, isCurrent, false,
false, false, false
))
)
)
}
val bgUserName = "background_user"
val fgUserName = "foreground_user"
@@ -593,7 +613,7 @@ class UserSwitcherControllerTest : SysuiTestCase() {
@Test
fun onUserItemClicked_guest_runsOnBgThread() {
val dialogShower = mock(UserSwitchDialogController.DialogShower::class.java)
val guestUserRecord = UserSwitcherController.UserRecord(
val guestUserRecord = UserRecord(
null,
picture,
true /* guest */,
@@ -601,7 +621,8 @@ class UserSwitcherControllerTest : SysuiTestCase() {
false /* isAddUser */,
false /* isRestricted */,
true /* isSwitchToEnabled */,
false /* isAddSupervisedUser */)
false /* isAddSupervisedUser */
)
userSwitcherController.onUserListItemClicked(guestUserRecord, dialogShower)
assertTrue(bgExecutor.numPending() > 0)