From 963f710d4c04febb860ae9daf06a4cea44b4720f Mon Sep 17 00:00:00 2001 From: Alejandro Nijamkin Date: Mon, 19 Sep 2022 09:55:51 -0700 Subject: [PATCH] Moves enforcedAdmin into UserRecord. In an effort to move logic out of the old UserSwitcherController implementation, we are moving the concept of an enforced admin for user actions that are disabled by an administrator into the actual UserRecord itself. This CL has no logical changes beyond moving where the state is being held to a more common one. Bug: 246631653 Test: Manually verified the old implementation of the full-screen user switcher, the quick settings button, and the lock-screen user dropdown all still work properly. Change-Id: I8b6bd8f3424fe531aa4889f530968f6f48fec536 --- .../systemui/qs/tiles/UserDetailView.java | 8 +- .../KeyguardUserSwitcherController.java | 2 +- .../policy/UserSwitcherController.kt | 7 -- .../policy/UserSwitcherControllerImpl.kt | 17 ---- .../policy/UserSwitcherControllerOldImpl.java | 99 ++++++++++--------- .../systemui/user/data/source/UserRecord.kt | 14 +++ .../KeyguardSecurityContainerTest.java | 2 +- 7 files changed, 74 insertions(+), 75 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java index 97476b2d1cdee..d2d5063c7ae08 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java @@ -134,7 +134,7 @@ public class UserDetailView extends PseudoGridView { v.bind(name, drawable, item.info.id); } v.setActivated(item.isCurrent); - v.setDisabledByAdmin(mController.isDisabledByAdmin(item)); + v.setDisabledByAdmin(item.isDisabledByAdmin()); v.setEnabled(item.isSwitchToEnabled); UserSwitcherController.setSelectableAlpha(v); @@ -173,16 +173,16 @@ public class UserDetailView extends PseudoGridView { Trace.beginSection("UserDetailView.Adapter#onClick"); UserRecord userRecord = (UserRecord) view.getTag(); - if (mController.isDisabledByAdmin(userRecord)) { + if (userRecord.isDisabledByAdmin()) { final Intent intent = RestrictedLockUtils.getShowAdminSupportDetailsIntent( - mContext, mController.getEnforcedAdmin(userRecord)); + mContext, userRecord.enforcedAdmin); mController.startActivity(intent); } else if (userRecord.isSwitchToEnabled) { MetricsLogger.action(mContext, MetricsEvent.QS_SWITCH_USER); mUiEventLogger.log(QSUserSwitcherEvent.QS_USER_SWITCH); if (!userRecord.isAddUser && !userRecord.isRestricted - && !mController.isDisabledByAdmin(userRecord)) { + && !userRecord.isDisabledByAdmin()) { if (mCurrentUserView != null) { mCurrentUserView.setActivated(false); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherController.java index 0995a00533a8c..712953e14d609 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherController.java @@ -505,7 +505,7 @@ public class KeyguardUserSwitcherController extends ViewController mEnforcedAdminByUserRecord = - new SimpleArrayMap<>(); - private final ArraySet mDisabledByAdmin = new ArraySet<>(); private ArrayList mUsers = new ArrayList<>(); @VisibleForTesting @@ -346,7 +341,7 @@ public class UserSwitcherControllerOldImpl implements UserSwitcherController { guestRecord = new UserRecord(info, null /* picture */, true /* isGuest */, isCurrent, false /* isAddUser */, false /* isRestricted */, canSwitchUsers, - false /* isAddSupervisedUser */); + false /* isAddSupervisedUser */, null /* enforcedAdmin */); } else if (info.supportsSwitchToByUser()) { Bitmap picture = bitmaps.get(info.id); if (picture == null) { @@ -361,7 +356,8 @@ public class UserSwitcherControllerOldImpl implements UserSwitcherController { } records.add(new UserRecord(info, picture, false /* isGuest */, isCurrent, false /* isAddUser */, false /* isRestricted */, - switchToEnabled, false /* isAddSupervisedUser */)); + switchToEnabled, false /* isAddSupervisedUser */, + null /* enforcedAdmin */)); } } } @@ -372,18 +368,28 @@ public class UserSwitcherControllerOldImpl implements UserSwitcherController { // we will just use it as an indicator for "Resetting guest...". // Otherwise, default to canSwitchUsers. boolean isSwitchToGuestEnabled = !mGuestIsResetting.get() && canSwitchUsers; - guestRecord = new UserRecord(null /* info */, null /* picture */, - true /* isGuest */, false /* isCurrent */, - false /* isAddUser */, false /* isRestricted */, - isSwitchToGuestEnabled, false /* isAddSupervisedUser */); - checkIfAddUserDisallowedByAdminOnly(guestRecord); + guestRecord = new UserRecord( + null /* info */, + null /* picture */, + true /* isGuest */, + false /* isCurrent */, + false /* isAddUser */, + false /* isRestricted */, + isSwitchToGuestEnabled, + false /* isAddSupervisedUser */, + getEnforcedAdmin()); records.add(guestRecord); } else if (canCreateGuest(guestRecord != null)) { - guestRecord = new UserRecord(null /* info */, null /* picture */, - true /* isGuest */, false /* isCurrent */, - false /* isAddUser */, createIsRestricted(), canSwitchUsers, - false /* isAddSupervisedUser */); - checkIfAddUserDisallowedByAdminOnly(guestRecord); + guestRecord = new UserRecord( + null /* info */, + null /* picture */, + true /* isGuest */, + false /* isCurrent */, + false /* isAddUser */, + createIsRestricted(), + canSwitchUsers, + false /* isAddSupervisedUser */, + getEnforcedAdmin()); records.add(guestRecord); } } else { @@ -391,19 +397,30 @@ public class UserSwitcherControllerOldImpl implements UserSwitcherController { } if (canCreateUser()) { - UserRecord addUserRecord = new UserRecord(null /* info */, null /* picture */, - false /* isGuest */, false /* isCurrent */, true /* isAddUser */, - createIsRestricted(), canSwitchUsers, - false /* isAddSupervisedUser */); - checkIfAddUserDisallowedByAdminOnly(addUserRecord); + UserRecord addUserRecord = new UserRecord( + null /* info */, + null /* picture */, + false /* isGuest */, + false /* isCurrent */, + true /* isAddUser */, + createIsRestricted(), + canSwitchUsers, + false /* isAddSupervisedUser */, + getEnforcedAdmin()); records.add(addUserRecord); } if (canCreateSupervisedUser()) { - UserRecord addUserRecord = new UserRecord(null /* info */, null /* picture */, - false /* isGuest */, false /* isCurrent */, false /* isAddUser */, - createIsRestricted(), canSwitchUsers, true /* isAddSupervisedUser */); - checkIfAddUserDisallowedByAdminOnly(addUserRecord); + UserRecord addUserRecord = new UserRecord( + null /* info */, + null /* picture */, + false /* isGuest */, + false /* isCurrent */, + false /* isAddUser */, + createIsRestricted(), + canSwitchUsers, + true /* isAddSupervisedUser */, + getEnforcedAdmin()); records.add(addUserRecord); } @@ -964,27 +981,19 @@ public class UserSwitcherControllerOldImpl implements UserSwitcherController { return mKeyguardStateController.isShowing(); } - @Override @Nullable - public EnforcedAdmin getEnforcedAdmin(UserRecord record) { - return mEnforcedAdminByUserRecord.get(record); - } - - @Override - public boolean isDisabledByAdmin(UserRecord record) { - return mDisabledByAdmin.contains(record); - } - - private void checkIfAddUserDisallowedByAdminOnly(UserRecord record) { - EnforcedAdmin admin = RestrictedLockUtilsInternal.checkIfRestrictionEnforced(mContext, - UserManager.DISALLOW_ADD_USER, mUserTracker.getUserId()); - if (admin != null && !RestrictedLockUtilsInternal.hasBaseUserRestriction(mContext, - UserManager.DISALLOW_ADD_USER, mUserTracker.getUserId())) { - mDisabledByAdmin.add(record); - mEnforcedAdminByUserRecord.put(record, admin); + private EnforcedAdmin getEnforcedAdmin() { + final EnforcedAdmin admin = RestrictedLockUtilsInternal.checkIfRestrictionEnforced( + mContext, + UserManager.DISALLOW_ADD_USER, + mUserTracker.getUserId()); + if (admin != null && !RestrictedLockUtilsInternal.hasBaseUserRestriction( + mContext, + UserManager.DISALLOW_ADD_USER, + mUserTracker.getUserId())) { + return admin; } else { - mDisabledByAdmin.remove(record); - mEnforcedAdminByUserRecord.put(record, null); + return null; } } diff --git a/packages/SystemUI/src/com/android/systemui/user/data/source/UserRecord.kt b/packages/SystemUI/src/com/android/systemui/user/data/source/UserRecord.kt index cf6da9a60d78d..9370286d7ee7b 100644 --- a/packages/SystemUI/src/com/android/systemui/user/data/source/UserRecord.kt +++ b/packages/SystemUI/src/com/android/systemui/user/data/source/UserRecord.kt @@ -19,6 +19,7 @@ package com.android.systemui.user.data.source import android.content.pm.UserInfo import android.graphics.Bitmap import android.os.UserHandle +import com.android.settingslib.RestrictedLockUtils /** Encapsulates raw data for a user or an option item related to managing users on the device. */ data class UserRecord( @@ -41,6 +42,11 @@ data class UserRecord( @JvmField val isSwitchToEnabled: Boolean = false, /** Whether this record represents an option to add another supervised user to the device. */ @JvmField val isAddSupervisedUser: Boolean = false, + /** + * An enforcing admin, if the user action represented by this record is disabled by the admin. + * If not disabled, this is `null`. + */ + @JvmField val enforcedAdmin: RestrictedLockUtils.EnforcedAdmin? = null, ) { /** Returns a new instance of [UserRecord] with its [isCurrent] set to the given value. */ fun copyWithIsCurrent(isCurrent: Boolean): UserRecord { @@ -59,6 +65,14 @@ data class UserRecord( } } + /** + * Returns `true` if the user action represented by this record has been disabled by an admin; + * `false` otherwise. + */ + fun isDisabledByAdmin(): Boolean { + return enforcedAdmin != null + } + companion object { @JvmStatic fun createForGuest(): UserRecord { diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java index 43f6f1aac0974..c1036e356cfa6 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java @@ -411,7 +411,7 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase { 0 /* flags */); users.add(new UserRecord(info, null, false /* isGuest */, false /* isCurrent */, false /* isAddUser */, false /* isRestricted */, true /* isSwitchToEnabled */, - false /* isAddSupervisedUser */)); + false /* isAddSupervisedUser */, null /* enforcedAdmin */)); } return users; }