Loading packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java +1 −1 Original line number Diff line number Diff line Loading @@ -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; Loading packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java +14 −11 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading @@ -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) { Loading @@ -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); Loading @@ -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) { Loading @@ -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(); } Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchController.java +4 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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); Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherController.java +13 −12 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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"); Loading Loading @@ -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, Loading @@ -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 { Loading @@ -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); } Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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; Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java +25 −72 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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; Loading Loading @@ -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); } } Loading Loading @@ -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 Loading Loading
packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java +1 −1 Original line number Diff line number Diff line Loading @@ -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; Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java +14 −11 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading @@ -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) { Loading @@ -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); Loading @@ -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) { Loading @@ -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(); } Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchController.java +4 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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); Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherController.java +13 −12 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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"); Loading Loading @@ -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, Loading @@ -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 { Loading @@ -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); } Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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; Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java +25 −72 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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; Loading Loading @@ -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); } } Loading Loading @@ -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 Loading