diff --git a/packages/SystemUI/src/com/android/systemui/flags/Flags.java b/packages/SystemUI/src/com/android/systemui/flags/Flags.java
index 48f5f9eda9092..ad2549b9d567d 100644
--- a/packages/SystemUI/src/com/android/systemui/flags/Flags.java
+++ b/packages/SystemUI/src/com/android/systemui/flags/Flags.java
@@ -104,9 +104,26 @@ public class Flags {
public static final UnreleasedFlag MODERN_USER_SWITCHER_ACTIVITY =
new UnreleasedFlag(209, true);
- /** Whether the new implementation of UserSwitcherController should be used. */
- public static final UnreleasedFlag REFACTORED_USER_SWITCHER_CONTROLLER =
- new UnreleasedFlag(210, false);
+ /**
+ * Whether the user interactor and repository should use `UserSwitcherController`.
+ *
+ *
If this is {@code false}, the interactor and repo skip the controller and directly access
+ * the framework APIs.
+ */
+ public static final UnreleasedFlag USER_INTERACTOR_AND_REPO_USE_CONTROLLER =
+ new UnreleasedFlag(210, true);
+
+ /**
+ * Whether `UserSwitcherController` should use the user interactor.
+ *
+ *
When this is {@code true}, the controller does not directly access framework APIs.
+ * Instead, it goes through the interactor.
+ *
+ *
Note: do not set this to true if {@link #USER_INTERACTOR_AND_REPO_USE_CONTROLLER} is
+ * {@code true} as it would created a cycle between controller -> interactor -> controller.
+ */
+ public static final UnreleasedFlag USER_CONTROLLER_USES_INTERACTOR =
+ new UnreleasedFlag(211, false);
/***************************************/
// 300 - power menu
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherControllerImpl.kt
index e283413d566c4..4932a6544d05f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherControllerImpl.kt
@@ -37,8 +37,9 @@ constructor(
@Suppress("DEPRECATION") private val oldImpl: Lazy,
) : UserSwitcherController {
- private val isNewImpl: Boolean
- get() = flags.isEnabled(Flags.REFACTORED_USER_SWITCHER_CONTROLLER)
+ private val useInteractor: Boolean =
+ flags.isEnabled(Flags.USER_CONTROLLER_USES_INTERACTOR) &&
+ !flags.isEnabled(Flags.USER_INTERACTOR_AND_REPO_USE_CONTROLLER)
private val _oldImpl: UserSwitcherControllerOldImpl
get() = oldImpl.get()
@@ -48,7 +49,7 @@ constructor(
override val users: ArrayList
get() =
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.users
@@ -56,14 +57,14 @@ constructor(
override val isSimpleUserSwitcher: Boolean
get() =
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.isSimpleUserSwitcher
}
override fun init(view: View) {
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.init(view)
@@ -72,7 +73,7 @@ constructor(
override val currentUserRecord: UserRecord?
get() =
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.currentUserRecord
@@ -80,7 +81,7 @@ constructor(
override val currentUserName: String?
get() =
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.currentUserName
@@ -90,7 +91,7 @@ constructor(
userId: Int,
dialogShower: UserSwitchDialogController.DialogShower?
) {
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.onUserSelected(userId, dialogShower)
@@ -99,7 +100,7 @@ constructor(
override val isAddUsersFromLockScreenEnabled: Flow
get() =
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.isAddUsersFromLockScreenEnabled
@@ -107,7 +108,7 @@ constructor(
override val isGuestUserAutoCreated: Boolean
get() =
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.isGuestUserAutoCreated
@@ -115,7 +116,7 @@ constructor(
override val isGuestUserResetting: Boolean
get() =
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.isGuestUserResetting
@@ -124,7 +125,7 @@ constructor(
override fun createAndSwitchToGuestUser(
dialogShower: UserSwitchDialogController.DialogShower?,
) {
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.createAndSwitchToGuestUser(dialogShower)
@@ -132,7 +133,7 @@ constructor(
}
override fun showAddUserDialog(dialogShower: UserSwitchDialogController.DialogShower?) {
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.showAddUserDialog(dialogShower)
@@ -140,7 +141,7 @@ constructor(
}
override fun startSupervisedUserActivity() {
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.startSupervisedUserActivity()
@@ -148,7 +149,7 @@ constructor(
}
override fun onDensityOrFontScaleChanged() {
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.onDensityOrFontScaleChanged()
@@ -156,7 +157,7 @@ constructor(
}
override fun addAdapter(adapter: WeakReference) {
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.addAdapter(adapter)
@@ -167,7 +168,7 @@ constructor(
record: UserRecord,
dialogShower: UserSwitchDialogController.DialogShower?,
) {
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.onUserListItemClicked(record, dialogShower)
@@ -175,7 +176,7 @@ constructor(
}
override fun removeGuestUser(guestUserId: Int, targetUserId: Int) {
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.removeGuestUser(guestUserId, targetUserId)
@@ -187,7 +188,7 @@ constructor(
targetUserId: Int,
forceRemoveGuestOnExit: Boolean
) {
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.exitGuestUser(guestUserId, targetUserId, forceRemoveGuestOnExit)
@@ -195,7 +196,7 @@ constructor(
}
override fun schedulePostBootGuestCreation() {
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.schedulePostBootGuestCreation()
@@ -204,14 +205,14 @@ constructor(
override val isKeyguardShowing: Boolean
get() =
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.isKeyguardShowing
}
override fun startActivity(intent: Intent) {
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.startActivity(intent)
@@ -219,7 +220,7 @@ constructor(
}
override fun refreshUsers(forcePictureLoadForId: Int) {
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.refreshUsers(forcePictureLoadForId)
@@ -227,7 +228,7 @@ constructor(
}
override fun addUserSwitchCallback(callback: UserSwitcherController.UserSwitchCallback) {
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.addUserSwitchCallback(callback)
@@ -235,7 +236,7 @@ constructor(
}
override fun removeUserSwitchCallback(callback: UserSwitcherController.UserSwitchCallback) {
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.removeUserSwitchCallback(callback)
@@ -243,7 +244,7 @@ constructor(
}
override fun dump(pw: PrintWriter, args: Array) {
- if (isNewImpl) {
+ if (useInteractor) {
notYetImplemented()
} else {
_oldImpl.dump(pw, args)
diff --git a/packages/SystemUI/src/com/android/systemui/user/data/repository/UserRepository.kt b/packages/SystemUI/src/com/android/systemui/user/data/repository/UserRepository.kt
index b85e85d01b692..3014f39c17f83 100644
--- a/packages/SystemUI/src/com/android/systemui/user/data/repository/UserRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/user/data/repository/UserRepository.kt
@@ -134,7 +134,7 @@ constructor(
) : UserRepository {
private val isNewImpl: Boolean
- get() = featureFlags.isEnabled(Flags.REFACTORED_USER_SWITCHER_CONTROLLER)
+ get() = !featureFlags.isEnabled(Flags.USER_INTERACTOR_AND_REPO_USE_CONTROLLER)
private val _userSwitcherSettings = MutableStateFlow(null)
override val userSwitcherSettings: Flow =
diff --git a/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserInteractor.kt b/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserInteractor.kt
index 7d2d1224fc370..e6bb9bcbc2645 100644
--- a/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserInteractor.kt
@@ -102,7 +102,7 @@ constructor(
}
private val isNewImpl: Boolean
- get() = featureFlags.isEnabled(Flags.REFACTORED_USER_SWITCHER_CONTROLLER)
+ get() = !featureFlags.isEnabled(Flags.USER_INTERACTOR_AND_REPO_USE_CONTROLLER)
private val supervisedUserPackageName: String?
get() =
diff --git a/packages/SystemUI/src/com/android/systemui/user/ui/dialog/UserSwitcherDialogCoordinator.kt b/packages/SystemUI/src/com/android/systemui/user/ui/dialog/UserSwitcherDialogCoordinator.kt
index 690e987bd9ab2..6e7b5232d818b 100644
--- a/packages/SystemUI/src/com/android/systemui/user/ui/dialog/UserSwitcherDialogCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/user/ui/dialog/UserSwitcherDialogCoordinator.kt
@@ -53,7 +53,7 @@ constructor(
private var currentDialog: Dialog? = null
override fun start() {
- if (!featureFlags.isEnabled(Flags.REFACTORED_USER_SWITCHER_CONTROLLER)) {
+ if (featureFlags.isEnabled(Flags.USER_INTERACTOR_AND_REPO_USE_CONTROLLER)) {
return
}
diff --git a/packages/SystemUI/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModel.kt b/packages/SystemUI/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModel.kt
index dbb8200d57d8d..5b83df7b4a368 100644
--- a/packages/SystemUI/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModel.kt
@@ -45,7 +45,7 @@ private constructor(
) : ViewModel() {
private val isNewImpl: Boolean
- get() = featureFlags.isEnabled(Flags.REFACTORED_USER_SWITCHER_CONTROLLER)
+ get() = !featureFlags.isEnabled(Flags.USER_INTERACTOR_AND_REPO_USE_CONTROLLER)
/** On-device users. */
val users: Flow> =
diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/data/repository/UserRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/data/repository/UserRepositoryImplTest.kt
index 6568f5f680e77..dcea83a55a747 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/user/data/repository/UserRepositoryImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/user/data/repository/UserRepositoryImplTest.kt
@@ -47,7 +47,7 @@ abstract class UserRepositoryImplTest : SysuiTestCase() {
globalSettings = FakeSettings()
tracker = FakeUserTracker()
featureFlags = FakeFeatureFlags()
- featureFlags.set(Flags.REFACTORED_USER_SWITCHER_CONTROLLER, isRefactored)
+ featureFlags.set(Flags.USER_INTERACTOR_AND_REPO_USE_CONTROLLER, !isRefactored)
}
protected fun create(scope: CoroutineScope = TestCoroutineScope()): UserRepositoryImpl {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserInteractorTest.kt
index d57f84b5704a6..8465f4f46d62b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserInteractorTest.kt
@@ -81,7 +81,7 @@ abstract class UserInteractorTest : SysuiTestCase() {
),
featureFlags =
FakeFeatureFlags().apply {
- set(Flags.REFACTORED_USER_SWITCHER_CONTROLLER, isRefactored())
+ set(Flags.USER_INTERACTOR_AND_REPO_USE_CONTROLLER, !isRefactored())
},
manager = manager,
applicationScope = testCoroutineScope,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModelTest.kt
index 7fd29af2a80a1..0344e3f991e2d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModelTest.kt
@@ -84,7 +84,7 @@ class UserSwitcherViewModelTest : SysuiTestCase() {
keyguardRepository = FakeKeyguardRepository()
powerRepository = FakePowerRepository()
val featureFlags = FakeFeatureFlags()
- featureFlags.set(Flags.REFACTORED_USER_SWITCHER_CONTROLLER, false)
+ featureFlags.set(Flags.USER_INTERACTOR_AND_REPO_USE_CONTROLLER, true)
val scope = TestCoroutineScope()
val refreshUsersScheduler =
RefreshUsersScheduler(