diff options
| author | 2023-10-10 13:32:07 +0200 | |
|---|---|---|
| committer | 2023-10-17 21:12:33 +0200 | |
| commit | f3dcc77dbee4b793fa83ff8b60f7730313d3323f (patch) | |
| tree | b36394d211d65c67072c0c68a6a0011d9629aa46 | |
| parent | ff3606764c31aa2b72aee18273a22ad719399e5f (diff) | |
Refactor UserInteractor to UserSwitcherInteractor
This change aims at splitting up access to selected user data into a
smaller interactor such that there are fewer dependencies as there are
many classes that depend on just getting the current user info
Test: ran all sysui tests
Bug: b/303808405
Change-Id: I197fdf33a04419eb819c4b46fcf470080d01aa26
24 files changed, 173 insertions, 163 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java index 51dafac7b421..15bb2f85307a 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java @@ -91,7 +91,7 @@ import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.UserSwitcherController; -import com.android.systemui.user.domain.interactor.UserInteractor; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.ViewController; import com.android.systemui.util.kotlin.JavaAdapter; import com.android.systemui.util.settings.GlobalSettings; @@ -420,7 +420,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard showPrimarySecurityScreen(false); } }; - private final UserInteractor mUserInteractor; + private final SelectedUserInteractor mSelectedUserInteractor; private final Provider<DeviceEntryInteractor> mDeviceEntryInteractor; private final Provider<JavaAdapter> mJavaAdapter; private final DeviceProvisionedController mDeviceProvisionedController; @@ -453,7 +453,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard KeyguardFaceAuthInteractor keyguardFaceAuthInteractor, BouncerMessageInteractor bouncerMessageInteractor, Provider<JavaAdapter> javaAdapter, - UserInteractor userInteractor, + SelectedUserInteractor selectedUserInteractor, DeviceProvisionedController deviceProvisionedController, FaceAuthAccessibilityDelegate faceAuthAccessibilityDelegate, KeyguardTransitionInteractor keyguardTransitionInteractor, @@ -487,7 +487,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mAudioManager = audioManager; mKeyguardFaceAuthInteractor = keyguardFaceAuthInteractor; mBouncerMessageInteractor = bouncerMessageInteractor; - mUserInteractor = userInteractor; + mSelectedUserInteractor = selectedUserInteractor; mDeviceEntryInteractor = deviceEntryInteractor; mJavaAdapter = javaAdapter; mKeyguardTransitionInteractor = keyguardTransitionInteractor; @@ -523,7 +523,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mDeviceEntryInteractor.get().isDeviceEntered(), isDeviceEntered -> { if (isDeviceEntered) { - final int selectedUserId = mUserInteractor.getSelectedUserId(); + final int selectedUserId = mSelectedUserInteractor.getSelectedUserId(); showNextSecurityScreenOrFinish( /* authenticated= */ true, selectedUserId, diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractor.kt index cab69285cc94..17e8bb320912 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractor.kt @@ -24,15 +24,15 @@ import com.android.systemui.keyguard.data.repository.TrustRepository import com.android.systemui.keyguard.shared.model.DismissAction import com.android.systemui.keyguard.shared.model.KeyguardDone import com.android.systemui.power.domain.interactor.PowerInteractor -import com.android.systemui.user.domain.interactor.UserInteractor +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.kotlin.Utils.Companion.toQuad import com.android.systemui.util.kotlin.sample -import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.merge +import javax.inject.Inject /** Encapsulates business logic for requesting the keyguard to dismiss/finish/done. */ @SysUISingleton @@ -40,11 +40,11 @@ class KeyguardDismissInteractor @Inject constructor( trustRepository: TrustRepository, - val keyguardRepository: KeyguardRepository, - val primaryBouncerInteractor: PrimaryBouncerInteractor, - val alternateBouncerInteractor: AlternateBouncerInteractor, - val powerInteractor: PowerInteractor, - val userInteractor: UserInteractor, + private val keyguardRepository: KeyguardRepository, + primaryBouncerInteractor: PrimaryBouncerInteractor, + alternateBouncerInteractor: AlternateBouncerInteractor, + powerInteractor: PowerInteractor, + private val selectedUserInteractor: SelectedUserInteractor, ) { /* * Updates when a biometric has authenticated the device and is requesting to dismiss @@ -82,7 +82,7 @@ constructor( */ private val primaryAuthenticated: Flow<Unit> = primaryBouncerInteractor.keyguardAuthenticatedPrimaryAuth - .filter { authedUserId -> authedUserId == userInteractor.getSelectedUserId() } + .filter { authedUserId -> authedUserId == selectedUserInteractor.getSelectedUserId() } .map {} // map to Unit /* @@ -92,7 +92,7 @@ constructor( */ private val userRequestedBouncerWhenAlreadyAuthenticated: Flow<Unit> = primaryBouncerInteractor.userRequestedBouncerWhenAlreadyAuthenticated - .filter { authedUserId -> authedUserId == userInteractor.getSelectedUserId() } + .filter { authedUserId -> authedUserId == selectedUserInteractor.getSelectedUserId() } .map {} // map to Unit /** Updates when keyguardDone should be requested. */ diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardDismissBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardDismissBinder.kt index f14552ba0685..5075a0766c2c 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardDismissBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardDismissBinder.kt @@ -25,20 +25,18 @@ import com.android.systemui.flags.Flags import com.android.systemui.keyguard.domain.interactor.KeyguardDismissInteractor import com.android.systemui.keyguard.shared.model.KeyguardDone import com.android.systemui.log.core.LogLevel -import com.android.systemui.user.domain.interactor.UserInteractor -import javax.inject.Inject +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.launch +import javax.inject.Inject /** Handles keyguard dismissal requests. */ -@OptIn(ExperimentalCoroutinesApi::class) @SysUISingleton class KeyguardDismissBinder @Inject constructor( private val interactor: KeyguardDismissInteractor, - private val userInteractor: UserInteractor, + private val selectedUserInteractor: SelectedUserInteractor, private val viewMediatorCallback: ViewMediatorCallback, @Application private val scope: CoroutineScope, private val keyguardLogger: KeyguardLogger, @@ -55,11 +53,15 @@ constructor( when (keyguardDoneTiming) { KeyguardDone.LATER -> { log("keyguardDonePending") - viewMediatorCallback.keyguardDonePending(userInteractor.getSelectedUserId()) + viewMediatorCallback.keyguardDonePending( + selectedUserInteractor.getSelectedUserId() + ) } else -> { log("keyguardDone") - viewMediatorCallback.keyguardDone(userInteractor.getSelectedUserId()) + viewMediatorCallback.keyguardDone( + selectedUserInteractor.getSelectedUserId() + ) } } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/footer/domain/interactor/FooterActionsInteractor.kt b/packages/SystemUI/src/com/android/systemui/qs/footer/domain/interactor/FooterActionsInteractor.kt index c91ed133a11e..8e307408ba86 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/footer/domain/interactor/FooterActionsInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/footer/domain/interactor/FooterActionsInteractor.kt @@ -42,7 +42,7 @@ import com.android.systemui.qs.footer.domain.model.SecurityButtonConfig import com.android.systemui.security.data.repository.SecurityRepository import com.android.systemui.statusbar.policy.DeviceProvisionedController import com.android.systemui.user.data.repository.UserSwitcherRepository -import com.android.systemui.user.domain.interactor.UserInteractor +import com.android.systemui.user.domain.interactor.UserSwitcherInteractor import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow @@ -102,7 +102,7 @@ constructor( private val deviceProvisionedController: DeviceProvisionedController, private val qsSecurityFooterUtils: QSSecurityFooterUtils, private val fgsManagerController: FgsManagerController, - private val userInteractor: UserInteractor, + private val userSwitcherInteractor: UserSwitcherInteractor, securityRepository: SecurityRepository, foregroundServicesRepository: ForegroundServicesRepository, userSwitcherRepository: UserSwitcherRepository, @@ -178,6 +178,6 @@ constructor( } override fun showUserSwitcher(expandable: Expandable) { - userInteractor.showUserSwitcher(expandable) + userSwitcherInteractor.showUserSwitcher(expandable) } } diff --git a/packages/SystemUI/src/com/android/systemui/settings/UserTrackerImpl.kt b/packages/SystemUI/src/com/android/systemui/settings/UserTrackerImpl.kt index 393a698bcdb7..99127ea928bf 100644 --- a/packages/SystemUI/src/com/android/systemui/settings/UserTrackerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/settings/UserTrackerImpl.kt @@ -90,6 +90,7 @@ open class UserTrackerImpl internal constructor( private val isBackgroundUserSwitchEnabled: Boolean get() = featureFlagsProvider.get().isEnabled(Flags.USER_TRACKER_BACKGROUND_CALLBACKS) + @Deprecated("Use UserInteractor.getSelectedUserId()") override var userId: Int by SynchronizedDelegate(context.userId) protected set diff --git a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt index e487a6fb9617..205a80a04089 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt @@ -34,10 +34,8 @@ import com.android.systemui.statusbar.notification.stack.domain.interactor.Share import com.android.systemui.statusbar.phone.DozeParameters import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepository import com.android.systemui.statusbar.policy.data.repository.DeviceProvisioningRepository -import com.android.systemui.user.domain.interactor.UserInteractor +import com.android.systemui.user.domain.interactor.UserSwitcherInteractor import com.android.systemui.util.kotlin.pairwise -import javax.inject.Inject -import javax.inject.Provider import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.currentCoroutineContext @@ -53,6 +51,8 @@ import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.isActive +import javax.inject.Inject +import javax.inject.Provider /** Business logic for shade interactions. */ @OptIn(ExperimentalCoroutinesApi::class) @@ -71,7 +71,7 @@ constructor( keyguardTransitionInteractor: KeyguardTransitionInteractor, powerInteractor: PowerInteractor, userSetupRepository: UserSetupRepository, - userInteractor: UserInteractor, + userSwitcherInteractor: UserSwitcherInteractor, sharedNotificationContainerInteractor: SharedNotificationContainerInteractor, repository: ShadeRepository, ) { @@ -227,7 +227,7 @@ constructor( isDeviceProvisioned && // Disallow QS during setup if it's a simple user switcher. (The user intends to // use the lock screen user switcher, QS is not needed.) - (isUserSetup || !userInteractor.isSimpleUserSwitcher) && + (isUserSetup || !userSwitcherInteractor.isSimpleUserSwitcher) && isShadeEnabled && disableFlags.isQuickSettingsEnabled() && !isDozing diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.kt index f88339a4d077..7829d6e7760a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.kt @@ -27,7 +27,7 @@ import com.android.systemui.plugins.ActivityStarter import com.android.systemui.qs.user.UserSwitchDialogController.DialogShower import com.android.systemui.user.data.source.UserRecord import com.android.systemui.user.domain.interactor.GuestUserInteractor -import com.android.systemui.user.domain.interactor.UserInteractor +import com.android.systemui.user.domain.interactor.UserSwitcherInteractor import com.android.systemui.user.legacyhelper.ui.LegacyUserUiHelper import dagger.Lazy import java.io.PrintWriter @@ -41,7 +41,7 @@ class UserSwitcherController @Inject constructor( @Application private val applicationContext: Context, - private val userInteractorLazy: Lazy<UserInteractor>, + private val userSwitcherInteractorLazy: Lazy<UserSwitcherInteractor>, private val guestUserInteractorLazy: Lazy<GuestUserInteractor>, private val keyguardInteractorLazy: Lazy<KeyguardInteractor>, private val activityStarter: ActivityStarter, @@ -53,26 +53,29 @@ constructor( fun onUserSwitched() } - private val userInteractor: UserInteractor by lazy { userInteractorLazy.get() } + private val mUserSwitcherInteractor: UserSwitcherInteractor by lazy { + userSwitcherInteractorLazy.get() + } private val guestUserInteractor: GuestUserInteractor by lazy { guestUserInteractorLazy.get() } private val keyguardInteractor: KeyguardInteractor by lazy { keyguardInteractorLazy.get() } - private val callbackCompatMap = mutableMapOf<UserSwitchCallback, UserInteractor.UserCallback>() + private val callbackCompatMap = + mutableMapOf<UserSwitchCallback, UserSwitcherInteractor.UserCallback>() /** The current list of [UserRecord]. */ val users: ArrayList<UserRecord> - get() = userInteractor.userRecords.value + get() = mUserSwitcherInteractor.userRecords.value /** Whether the user switcher experience should use the simple experience. */ val isSimpleUserSwitcher: Boolean - get() = userInteractor.isSimpleUserSwitcher + get() = mUserSwitcherInteractor.isSimpleUserSwitcher val isUserSwitcherEnabled: Boolean - get() = userInteractor.isUserSwitcherEnabled + get() = mUserSwitcherInteractor.isUserSwitcherEnabled /** The [UserRecord] of the current user or `null` when none. */ val currentUserRecord: UserRecord? - get() = userInteractor.selectedUserRecord.value + get() = mUserSwitcherInteractor.selectedUserRecord.value /** The name of the current user of the device or `null`, when none is selected. */ val currentUserName: String? @@ -81,8 +84,8 @@ constructor( LegacyUserUiHelper.getUserRecordName( context = applicationContext, record = it, - isGuestUserAutoCreated = userInteractor.isGuestUserAutoCreated, - isGuestUserResetting = userInteractor.isGuestUserResetting, + isGuestUserAutoCreated = mUserSwitcherInteractor.isGuestUserAutoCreated, + isGuestUserResetting = mUserSwitcherInteractor.isGuestUserResetting, ) } @@ -98,21 +101,21 @@ constructor( * @param dialogShower An optional [DialogShower] in case we need to show dialogs. */ fun onUserSelected(userId: Int, dialogShower: DialogShower?) { - userInteractor.selectUser(userId, dialogShower) + mUserSwitcherInteractor.selectUser(userId, dialogShower) } /** Whether the guest user is configured to always be present on the device. */ val isGuestUserAutoCreated: Boolean - get() = userInteractor.isGuestUserAutoCreated + get() = mUserSwitcherInteractor.isGuestUserAutoCreated /** Whether the guest user is currently being reset. */ val isGuestUserResetting: Boolean - get() = userInteractor.isGuestUserResetting + get() = mUserSwitcherInteractor.isGuestUserResetting /** Registers an adapter to notify when the users change. */ fun addAdapter(adapter: WeakReference<BaseUserSwitcherAdapter>) { - userInteractor.addCallback( - object : UserInteractor.UserCallback { + mUserSwitcherInteractor.addCallback( + object : UserSwitcherInteractor.UserCallback { override fun isEvictable(): Boolean { return adapter.get() == null } @@ -129,7 +132,7 @@ constructor( record: UserRecord, dialogShower: DialogShower?, ) { - userInteractor.onRecordSelected(record, dialogShower) + mUserSwitcherInteractor.onRecordSelected(record, dialogShower) } /** @@ -152,7 +155,7 @@ constructor( * `UserHandle.USER_NULL`, then switch immediately to the newly created guest user. */ fun removeGuestUser(guestUserId: Int, targetUserId: Int) { - userInteractor.removeGuestUser( + mUserSwitcherInteractor.removeGuestUser( guestUserId = guestUserId, targetUserId = targetUserId, ) @@ -168,7 +171,7 @@ constructor( * only if its ephemeral, else keep guest */ fun exitGuestUser(guestUserId: Int, targetUserId: Int, forceRemoveGuestOnExit: Boolean) { - userInteractor.exitGuestUser(guestUserId, targetUserId, forceRemoveGuestOnExit) + mUserSwitcherInteractor.exitGuestUser(guestUserId, targetUserId, forceRemoveGuestOnExit) } /** @@ -194,31 +197,31 @@ constructor( * The pictures are only loaded if they have not been loaded yet. */ fun refreshUsers() { - userInteractor.refreshUsers() + mUserSwitcherInteractor.refreshUsers() } /** Adds a subscriber to when user switches. */ fun addUserSwitchCallback(callback: UserSwitchCallback) { val interactorCallback = - object : UserInteractor.UserCallback { + object : UserSwitcherInteractor.UserCallback { override fun onUserStateChanged() { callback.onUserSwitched() } } callbackCompatMap[callback] = interactorCallback - userInteractor.addCallback(interactorCallback) + mUserSwitcherInteractor.addCallback(interactorCallback) } /** Removes a previously-added subscriber. */ fun removeUserSwitchCallback(callback: UserSwitchCallback) { val interactorCallback = callbackCompatMap.remove(callback) if (interactorCallback != null) { - userInteractor.removeCallback(interactorCallback) + mUserSwitcherInteractor.removeCallback(interactorCallback) } } fun dump(pw: PrintWriter, args: Array<out String>) { - userInteractor.dump(pw) + mUserSwitcherInteractor.dump(pw) } companion object { diff --git a/packages/SystemUI/src/com/android/systemui/user/domain/interactor/SelectedUserInteractor.kt b/packages/SystemUI/src/com/android/systemui/user/domain/interactor/SelectedUserInteractor.kt new file mode 100644 index 000000000000..fedd58bb53a6 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/user/domain/interactor/SelectedUserInteractor.kt @@ -0,0 +1,17 @@ +package com.android.systemui.user.domain.interactor + +import android.annotation.UserIdInt +import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.user.data.repository.UserRepository +import javax.inject.Inject + +/** Encapsulates business logic to interact the selected user */ +@SysUISingleton +class SelectedUserInteractor @Inject constructor(private val repository: UserRepository) { + + /** Returns the ID of the currently-selected user. */ + @UserIdInt + fun getSelectedUserId(): Int { + return repository.getSelectedUserInfo().id + } +} diff --git a/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserInteractor.kt b/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserSwitcherInteractor.kt index dbc3bf3a75a2..e0d205fc4b6a 100644 --- a/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserSwitcherInteractor.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 The Android Open Source Project + * Copyright (C) 2023 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. @@ -83,9 +83,9 @@ import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext -/** Encapsulates business logic to interact with user data and systems. */ +/** Encapsulates business logic to for the user switcher. */ @SysUISingleton -class UserInteractor +class UserSwitcherInteractor @Inject constructor( @Application private val applicationContext: Context, @@ -383,10 +383,6 @@ constructor( pw.println("isGuestUserAutoCreated=$isGuestUserAutoCreated") } - fun onDeviceBootCompleted() { - guestUserInteractor.onDeviceBootCompleted() - } - /** Switches to the user or executes the action represented by the given record. */ fun onRecordSelected( record: UserRecord, @@ -535,12 +531,6 @@ constructor( } } - /** Returns the ID of the currently-selected user. */ - @UserIdInt - fun getSelectedUserId(): Int { - return repository.getSelectedUserInfo().id - } - private fun showDialog(request: ShowDialogRequestModel) { _dialogShowRequests.value = request } @@ -664,7 +654,6 @@ constructor( // Connect to the new secondary user's service (purely to ensure that a persistent // SystemUI application is created for that user) - if (userId != Process.myUserHandle().identifier) { applicationContext.startServiceAsUser( intent, @@ -826,6 +815,6 @@ constructor( } companion object { - private const val TAG = "UserInteractor" + private const val TAG = "UserSwitcherInteractor" } } 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 0930cb8a3d7a..cced98376197 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 @@ -33,15 +33,15 @@ import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.FalsingManager import com.android.systemui.qs.tiles.UserDetailView import com.android.systemui.user.UserSwitchFullscreenDialog -import com.android.systemui.user.domain.interactor.UserInteractor +import com.android.systemui.user.domain.interactor.UserSwitcherInteractor import com.android.systemui.user.domain.model.ShowDialogRequestModel import com.android.systemui.user.ui.viewmodel.UserSwitcherViewModel import dagger.Lazy -import javax.inject.Inject -import javax.inject.Provider import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.launch +import javax.inject.Inject +import javax.inject.Provider /** Coordinates dialogs for user switcher logic. */ @SysUISingleton @@ -53,7 +53,7 @@ constructor( private val falsingManager: Lazy<FalsingManager>, private val broadcastSender: Lazy<BroadcastSender>, private val dialogLaunchAnimator: Lazy<DialogLaunchAnimator>, - private val interactor: Lazy<UserInteractor>, + private val interactor: Lazy<UserSwitcherInteractor>, private val userDetailAdapterProvider: Provider<UserDetailView.Adapter>, private val eventLogger: Lazy<UiEventLogger>, private val activityStarter: Lazy<ActivityStarter>, diff --git a/packages/SystemUI/src/com/android/systemui/user/ui/viewmodel/StatusBarUserChipViewModel.kt b/packages/SystemUI/src/com/android/systemui/user/ui/viewmodel/StatusBarUserChipViewModel.kt index 78edad7c3af2..2c425b199b4e 100644 --- a/packages/SystemUI/src/com/android/systemui/user/ui/viewmodel/StatusBarUserChipViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/user/ui/viewmodel/StatusBarUserChipViewModel.kt @@ -17,12 +17,10 @@ package com.android.systemui.user.ui.viewmodel -import android.content.Context import android.graphics.drawable.Drawable import com.android.systemui.animation.Expandable import com.android.systemui.common.shared.model.Text -import com.android.systemui.dagger.qualifiers.Application -import com.android.systemui.user.domain.interactor.UserInteractor +import com.android.systemui.user.domain.interactor.UserSwitcherInteractor import javax.inject.Inject import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow @@ -33,8 +31,7 @@ import kotlinx.coroutines.flow.mapLatest class StatusBarUserChipViewModel @Inject constructor( - @Application private val context: Context, - interactor: UserInteractor, + interactor: UserSwitcherInteractor, ) { /** Whether the status bar chip ui should be available */ val chipEnabled: Boolean = interactor.isStatusBarUserChipEnabled 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 20f0fa8cf46b..1c31e8aef1ec 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 @@ -20,35 +20,34 @@ package com.android.systemui.user.ui.viewmodel import com.android.systemui.common.shared.model.Text import com.android.systemui.common.ui.drawable.CircularDrawable import com.android.systemui.dagger.SysUISingleton -import com.android.systemui.res.R import com.android.systemui.user.domain.interactor.GuestUserInteractor -import com.android.systemui.user.domain.interactor.UserInteractor +import com.android.systemui.user.domain.interactor.UserSwitcherInteractor import com.android.systemui.user.legacyhelper.ui.LegacyUserUiHelper import com.android.systemui.user.shared.model.UserActionModel import com.android.systemui.user.shared.model.UserModel -import javax.inject.Inject -import kotlin.math.ceil import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.map +import javax.inject.Inject +import kotlin.math.ceil /** Models UI state for the user switcher feature. */ @SysUISingleton class UserSwitcherViewModel @Inject constructor( - private val userInteractor: UserInteractor, + private val userSwitcherInteractor: UserSwitcherInteractor, private val guestUserInteractor: GuestUserInteractor, ) { /** The currently selected user. */ val selectedUser: Flow<UserViewModel> = - userInteractor.selectedUser.map { user -> toViewModel(user) } + userSwitcherInteractor.selectedUser.map { user -> toViewModel(user) } /** On-device users. */ val users: Flow<List<UserViewModel>> = - userInteractor.users.map { models -> models.map { user -> toViewModel(user) } } + userSwitcherInteractor.users.map { models -> models.map { user -> toViewModel(user) } } /** The maximum number of columns that the user selection grid should use. */ val maximumUserColumns: Flow<Int> = users.map { getMaxUserSwitcherItemColumns(it.size) } @@ -61,7 +60,9 @@ constructor( val isMenuVisible: Flow<Boolean> = _isMenuVisible /** The user action menu. */ val menu: Flow<List<UserActionViewModel>> = - userInteractor.actions.map { actions -> actions.map { action -> toViewModel(action) } } + userSwitcherInteractor.actions.map { actions -> + actions.map { action -> toViewModel(action) } + } /** Whether the button to open the user action menu is visible. */ val isOpenMenuButtonVisible: Flow<Boolean> = menu.map { it.isNotEmpty() } @@ -175,7 +176,7 @@ constructor( isTablet = true, ), onClicked = { - userInteractor.executeAction(action = model) + userSwitcherInteractor.executeAction(action = model) // We don't finish because we want to show a dialog over the full-screen UI and // that dialog can be dismissed in case the user changes their mind and decides not // to add a user. @@ -195,7 +196,7 @@ constructor( null } else { { - userInteractor.selectUser(model.id) + userSwitcherInteractor.selectUser(model.id) userSwitched.value = true } } diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt index 20d4eb907944..581739030aad 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt @@ -63,7 +63,7 @@ import com.android.systemui.statusbar.policy.DevicePostureController import com.android.systemui.statusbar.policy.DeviceProvisionedController import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.statusbar.policy.UserSwitcherController -import com.android.systemui.user.domain.interactor.UserInteractor +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.kotlin.JavaAdapter import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.argThat @@ -74,7 +74,6 @@ import com.android.systemui.util.mockito.whenever import com.android.systemui.util.settings.GlobalSettings import com.google.common.truth.Truth import dagger.Lazy -import java.util.Optional import junit.framework.Assert import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableStateFlow @@ -97,6 +96,7 @@ import org.mockito.Mockito.never import org.mockito.Mockito.spy import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations +import java.util.Optional @SmallTest @RunWith(AndroidJUnit4::class) @@ -136,7 +136,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { @Mock private lateinit var telephonyManager: TelephonyManager @Mock private lateinit var viewMediatorCallback: ViewMediatorCallback @Mock private lateinit var audioManager: AudioManager - @Mock private lateinit var userInteractor: UserInteractor + @Mock private lateinit var mSelectedUserInteractor: SelectedUserInteractor @Mock private lateinit var faceAuthAccessibilityDelegate: FaceAuthAccessibilityDelegate @Mock private lateinit var deviceProvisionedController: DeviceProvisionedController @Mock private lateinit var postureController: DevicePostureController @@ -218,7 +218,6 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { featureFlags ) - whenever(userInteractor.getSelectedUserId()).thenReturn(TARGET_USER_ID) sceneTestUtils = SceneTestUtils(this) sceneInteractor = sceneTestUtils.sceneInteractor() keyguardTransitionInteractor = @@ -260,7 +259,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { mock(), mock(), { JavaAdapter(sceneTestUtils.testScope.backgroundScope) }, - userInteractor, + mSelectedUserInteractor, deviceProvisionedController, faceAuthAccessibilityDelegate, keyguardTransitionInteractor, diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorTest.kt index d6e19cbcb826..e87adf5e424b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorTest.kt @@ -64,8 +64,6 @@ class KeyguardDismissActionInteractorTest : SysuiTestCase() { KeyguardDismissInteractorFactory.create( context = context, testScope = testScope, - broadcastDispatcher = fakeBroadcastDispatcher, - dispatcher = dispatcher, ) keyguardRepository = dismissInteractorWithDependencies.keyguardRepository transitionRepository = FakeKeyguardTransitionRepository() diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractorTest.kt index a5cfbbfda196..ecb46bdd06c4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractorTest.kt @@ -58,8 +58,6 @@ class KeyguardDismissInteractorTest : SysuiTestCase() { KeyguardDismissInteractorFactory.create( context = context, testScope = testScope, - broadcastDispatcher = fakeBroadcastDispatcher, - dispatcher = dispatcher, ) underTest = underTestDependencies.interactor underTestDependencies.userRepository.setUserInfos(listOf(userInfo)) diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java index eb006100d535..05da80032059 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java @@ -90,7 +90,7 @@ import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController; import com.android.systemui.statusbar.policy.data.repository.FakeDeviceProvisioningRepository; -import com.android.systemui.user.domain.interactor.UserInteractor; +import com.android.systemui.user.domain.interactor.UserSwitcherInteractor; import com.google.common.util.concurrent.MoreExecutors; @@ -230,7 +230,7 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase { keyguardTransitionInteractor, powerInteractor, new FakeUserSetupRepository(), - mock(UserInteractor.class), + mock(UserSwitcherInteractor.class), new SharedNotificationContainerInteractor( configurationRepository, mContext, diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java index 65174bab7f63..dd81807faf75 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java @@ -95,15 +95,16 @@ import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController; import com.android.systemui.statusbar.policy.data.repository.FakeDeviceProvisioningRepository; -import com.android.systemui.user.domain.interactor.UserInteractor; +import com.android.systemui.user.domain.interactor.UserSwitcherInteractor; import com.android.systemui.util.kotlin.JavaAdapter; +import dagger.Lazy; + import org.junit.After; import org.junit.Before; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import dagger.Lazy; import kotlinx.coroutines.test.TestScope; public class QuickSettingsControllerBaseTest extends SysuiTestCase { @@ -162,7 +163,7 @@ public class QuickSettingsControllerBaseTest extends SysuiTestCase { @Mock protected DumpManager mDumpManager; @Mock protected UiEventLogger mUiEventLogger; @Mock protected CastController mCastController; - @Mock protected UserInteractor mUserInteractor; + @Mock protected UserSwitcherInteractor mUserSwitcherInteractor; protected FakeDisableFlagsRepository mDisableFlagsRepository = new FakeDisableFlagsRepository(); protected FakeKeyguardRepository mKeyguardRepository = new FakeKeyguardRepository(); @@ -266,7 +267,7 @@ public class QuickSettingsControllerBaseTest extends SysuiTestCase { keyguardTransitionInteractor, powerInteractor, new FakeUserSetupRepository(), - mUserInteractor, + mUserSwitcherInteractor, new SharedNotificationContainerInteractor( configurationRepository, mContext, diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/SelectedUserInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/SelectedUserInteractorTest.kt new file mode 100644 index 000000000000..8b1c69734528 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/SelectedUserInteractorTest.kt @@ -0,0 +1,44 @@ +package com.android.systemui.user.domain.interactor + +import android.content.pm.UserInfo +import androidx.test.filters.SmallTest +import com.android.systemui.SysuiTestCase +import com.android.systemui.user.data.repository.FakeUserRepository +import com.google.common.truth.Truth.assertThat +import kotlinx.coroutines.runBlocking +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 + +@SmallTest +@RunWith(JUnit4::class) +class SelectedUserInteractorTest : SysuiTestCase() { + + private lateinit var underTest: SelectedUserInteractor + + private val userRepository = FakeUserRepository() + + @Before + fun setUp() { + userRepository.setUserInfos(USER_INFOS) + underTest = SelectedUserInteractor(userRepository) + } + + @Test + fun getSelectedUserIdReturnsId() { + runBlocking { userRepository.setSelectedUserInfo(USER_INFOS[0]) } + + val actualId = underTest.getSelectedUserId() + + assertThat(actualId).isEqualTo(USER_INFOS[0].id) + } + + companion object { + private val USER_INFOS = + listOf( + UserInfo(100, "First user", 0), + UserInfo(101, "Second user", 0), + ) + } +} 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/UserSwitcherInteractorTest.kt index c56266dde752..1968d75a7964 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/UserSwitcherInteractorTest.kt @@ -88,7 +88,7 @@ import org.mockito.MockitoAnnotations @OptIn(ExperimentalCoroutinesApi::class) @SmallTest @RunWith(JUnit4::class) -class UserInteractorTest : SysuiTestCase() { +class UserSwitcherInteractorTest : SysuiTestCase() { @Mock private lateinit var activityStarter: ActivityStarter @Mock private lateinit var manager: UserManager @@ -102,7 +102,7 @@ class UserInteractorTest : SysuiTestCase() { @Mock private lateinit var resetOrExitSessionReceiver: GuestResetOrExitSessionReceiver @Mock private lateinit var keyguardUpdateMonitor: KeyguardUpdateMonitor - private lateinit var underTest: UserInteractor + private lateinit var underTest: UserSwitcherInteractor private lateinit var spyContext: Context private lateinit var testScope: TestScope @@ -665,8 +665,8 @@ class UserInteractorTest : SysuiTestCase() { userRepository.setUserInfos(userInfos) userRepository.setSelectedUserInfo(userInfos[0]) userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true)) - val callback1: UserInteractor.UserCallback = mock() - val callback2: UserInteractor.UserCallback = mock() + val callback1: UserSwitcherInteractor.UserCallback = mock() + val callback2: UserSwitcherInteractor.UserCallback = mock() underTest.addCallback(callback1) underTest.addCallback(callback2) runCurrent() @@ -1117,7 +1117,7 @@ class UserInteractorTest : SysuiTestCase() { userRepository.setSelectedUserInfo(userInfo) } underTest = - UserInteractor( + UserSwitcherInteractor( applicationContext = spyContext, repository = userRepository, activityStarter = activityStarter, diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/ui/viewmodel/StatusBarUserChipViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/ui/viewmodel/StatusBarUserChipViewModelTest.kt index a8db368d4150..7041eab9d247 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/user/ui/viewmodel/StatusBarUserChipViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/user/ui/viewmodel/StatusBarUserChipViewModelTest.kt @@ -42,7 +42,7 @@ import com.android.systemui.user.data.repository.FakeUserRepository import com.android.systemui.user.domain.interactor.GuestUserInteractor import com.android.systemui.user.domain.interactor.HeadlessSystemUserMode import com.android.systemui.user.domain.interactor.RefreshUsersScheduler -import com.android.systemui.user.domain.interactor.UserInteractor +import com.android.systemui.user.domain.interactor.UserSwitcherInteractor import com.android.systemui.util.mockito.mock import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -243,9 +243,8 @@ class StatusBarUserChipViewModelTest : SysuiTestCase() { userRepository.setSelectedUserInfo(USER_0) } return StatusBarUserChipViewModel( - context = context, interactor = - UserInteractor( + UserSwitcherInteractor( applicationContext = context, repository = userRepository, activityStarter = activityStarter, 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 c236b12d723f..686f492fde50 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 @@ -42,7 +42,7 @@ import com.android.systemui.user.data.repository.FakeUserRepository import com.android.systemui.user.domain.interactor.GuestUserInteractor import com.android.systemui.user.domain.interactor.HeadlessSystemUserMode import com.android.systemui.user.domain.interactor.RefreshUsersScheduler -import com.android.systemui.user.domain.interactor.UserInteractor +import com.android.systemui.user.domain.interactor.UserSwitcherInteractor import com.android.systemui.user.legacyhelper.ui.LegacyUserUiHelper import com.android.systemui.user.shared.model.UserActionModel import com.android.systemui.util.mockito.any @@ -157,8 +157,8 @@ class UserSwitcherViewModelTest : SysuiTestCase() { underTest = UserSwitcherViewModel( - userInteractor = - UserInteractor( + userSwitcherInteractor = + UserSwitcherInteractor( applicationContext = context, repository = userRepository, activityStarter = activityStarter, diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java index c8327029026d..c8d1334b2be8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java @@ -156,7 +156,7 @@ import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.statusbar.policy.data.repository.FakeDeviceProvisioningRepository; -import com.android.systemui.user.domain.interactor.UserInteractor; +import com.android.systemui.user.domain.interactor.UserSwitcherInteractor; import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.WindowManagerShellWrapper; import com.android.wm.shell.bubbles.Bubble; @@ -450,7 +450,7 @@ public class BubblesTest extends SysuiTestCase { keyguardTransitionInteractor, powerInteractor, new FakeUserSetupRepository(), - mock(UserInteractor.class), + mock(UserSwitcherInteractor.class), new SharedNotificationContainerInteractor( configurationRepository, mContext, diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractorFactory.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractorFactory.kt index 8e96b522e997..7cac01925b12 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractorFactory.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractorFactory.kt @@ -16,11 +16,8 @@ package com.android.systemui.keyguard.domain.interactor -import android.app.ActivityManager import android.content.Context import android.os.Handler -import android.os.UserManager -import com.android.internal.logging.UiEventLogger import com.android.keyguard.KeyguardSecurityModel import com.android.keyguard.KeyguardUpdateMonitor import com.android.systemui.bouncer.data.repository.FakeKeyguardBouncerRepository @@ -28,7 +25,6 @@ import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerCallbackInteractor import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor import com.android.systemui.bouncer.ui.BouncerView -import com.android.systemui.broadcast.FakeBroadcastDispatcher import com.android.systemui.classifier.FalsingCollector import com.android.systemui.flags.FakeFeatureFlagsClassic import com.android.systemui.flags.Flags @@ -36,21 +32,13 @@ import com.android.systemui.keyguard.DismissCallbackRegistry import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.keyguard.data.repository.FakeTrustRepository -import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.power.data.repository.FakePowerRepository import com.android.systemui.power.domain.interactor.PowerInteractorFactory import com.android.systemui.statusbar.policy.KeyguardStateController -import com.android.systemui.telephony.data.repository.FakeTelephonyRepository -import com.android.systemui.telephony.domain.interactor.TelephonyInteractor import com.android.systemui.user.data.repository.FakeUserRepository -import com.android.systemui.user.domain.interactor.GuestUserInteractor -import com.android.systemui.user.domain.interactor.HeadlessSystemUserMode -import com.android.systemui.user.domain.interactor.RefreshUsersScheduler -import com.android.systemui.user.domain.interactor.UserInteractor +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.time.FakeSystemClock -import com.android.systemui.utils.UserRestrictionChecker -import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.test.TestScope import org.mockito.Mockito.mock @@ -64,8 +52,6 @@ object KeyguardDismissInteractorFactory { fun create( context: Context, testScope: TestScope, - broadcastDispatcher: FakeBroadcastDispatcher, - dispatcher: CoroutineDispatcher, trustRepository: FakeTrustRepository = FakeTrustRepository(), keyguardRepository: FakeKeyguardRepository = FakeKeyguardRepository(), bouncerRepository: FakeKeyguardBouncerRepository = FakeKeyguardBouncerRepository(), @@ -103,37 +89,12 @@ object KeyguardDismissInteractorFactory { keyguardUpdateMonitor, ) val powerInteractorWithDeps = - PowerInteractorFactory.create( - repository = powerRepository, - ) - val userInteractor = - UserInteractor( - applicationContext = context, + PowerInteractorFactory.create( + repository = powerRepository, + ) + val selectedUserInteractor = + SelectedUserInteractor( repository = userRepository, - mock(ActivityStarter::class.java), - keyguardInteractor = - KeyguardInteractorFactory.create( - repository = keyguardRepository, - bouncerRepository = bouncerRepository, - featureFlags = featureFlags, - ) - .keyguardInteractor, - featureFlags = featureFlags, - manager = mock(UserManager::class.java), - headlessSystemUserMode = mock(HeadlessSystemUserMode::class.java), - applicationScope = testScope.backgroundScope, - telephonyInteractor = - TelephonyInteractor( - repository = FakeTelephonyRepository(), - ), - broadcastDispatcher = broadcastDispatcher, - keyguardUpdateMonitor = keyguardUpdateMonitor, - backgroundDispatcher = dispatcher, - activityManager = mock(ActivityManager::class.java), - refreshUsersScheduler = mock(RefreshUsersScheduler::class.java), - guestUserInteractor = mock(GuestUserInteractor::class.java), - uiEventLogger = mock(UiEventLogger::class.java), - userRestrictionChecker = mock(UserRestrictionChecker::class.java), ) return WithDependencies( trustRepository = trustRepository, @@ -149,7 +110,7 @@ object KeyguardDismissInteractorFactory { primaryBouncerInteractor, alternateBouncerInteractor, powerInteractorWithDeps.powerInteractor, - userInteractor, + selectedUserInteractor, ), ) } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/footer/FooterActionsTestUtils.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/footer/FooterActionsTestUtils.kt index 911eafae5c27..7a99bd0d54cf 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/footer/FooterActionsTestUtils.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/footer/FooterActionsTestUtils.kt @@ -51,7 +51,7 @@ import com.android.systemui.statusbar.policy.UserInfoController import com.android.systemui.statusbar.policy.UserSwitcherController import com.android.systemui.user.data.repository.UserSwitcherRepository import com.android.systemui.user.data.repository.UserSwitcherRepositoryImpl -import com.android.systemui.user.domain.interactor.UserInteractor +import com.android.systemui.user.domain.interactor.UserSwitcherInteractor import com.android.systemui.util.mockito.mock import com.android.systemui.util.settings.FakeGlobalSettings import com.android.systemui.util.settings.GlobalSettings @@ -102,7 +102,7 @@ class FooterActionsTestUtils( deviceProvisionedController: DeviceProvisionedController = mock(), qsSecurityFooterUtils: QSSecurityFooterUtils = mock(), fgsManagerController: FgsManagerController = mock(), - userInteractor: UserInteractor = mock(), + userSwitcherInteractor: UserSwitcherInteractor = mock(), securityRepository: SecurityRepository = securityRepository(), foregroundServicesRepository: ForegroundServicesRepository = foregroundServicesRepository(), userSwitcherRepository: UserSwitcherRepository = userSwitcherRepository(), @@ -116,7 +116,7 @@ class FooterActionsTestUtils( deviceProvisionedController, qsSecurityFooterUtils, fgsManagerController, - userInteractor, + userSwitcherInteractor, securityRepository, foregroundServicesRepository, userSwitcherRepository, |