Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f3dcc77d authored by Andreas Miko's avatar Andreas Miko
Browse files

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
parent ff360676
Loading
Loading
Loading
Loading
+5 −5
Original line number Original line Diff line number Diff line
@@ -91,7 +91,7 @@ import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.UserSwitcherController;
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.ViewController;
import com.android.systemui.util.kotlin.JavaAdapter;
import com.android.systemui.util.kotlin.JavaAdapter;
import com.android.systemui.util.settings.GlobalSettings;
import com.android.systemui.util.settings.GlobalSettings;
@@ -420,7 +420,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
                    showPrimarySecurityScreen(false);
                    showPrimarySecurityScreen(false);
                }
                }
            };
            };
    private final UserInteractor mUserInteractor;
    private final SelectedUserInteractor mSelectedUserInteractor;
    private final Provider<DeviceEntryInteractor> mDeviceEntryInteractor;
    private final Provider<DeviceEntryInteractor> mDeviceEntryInteractor;
    private final Provider<JavaAdapter> mJavaAdapter;
    private final Provider<JavaAdapter> mJavaAdapter;
    private final DeviceProvisionedController mDeviceProvisionedController;
    private final DeviceProvisionedController mDeviceProvisionedController;
@@ -453,7 +453,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
            KeyguardFaceAuthInteractor keyguardFaceAuthInteractor,
            KeyguardFaceAuthInteractor keyguardFaceAuthInteractor,
            BouncerMessageInteractor bouncerMessageInteractor,
            BouncerMessageInteractor bouncerMessageInteractor,
            Provider<JavaAdapter> javaAdapter,
            Provider<JavaAdapter> javaAdapter,
            UserInteractor userInteractor,
            SelectedUserInteractor selectedUserInteractor,
            DeviceProvisionedController deviceProvisionedController,
            DeviceProvisionedController deviceProvisionedController,
            FaceAuthAccessibilityDelegate faceAuthAccessibilityDelegate,
            FaceAuthAccessibilityDelegate faceAuthAccessibilityDelegate,
            KeyguardTransitionInteractor keyguardTransitionInteractor,
            KeyguardTransitionInteractor keyguardTransitionInteractor,
@@ -487,7 +487,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
        mAudioManager = audioManager;
        mAudioManager = audioManager;
        mKeyguardFaceAuthInteractor = keyguardFaceAuthInteractor;
        mKeyguardFaceAuthInteractor = keyguardFaceAuthInteractor;
        mBouncerMessageInteractor = bouncerMessageInteractor;
        mBouncerMessageInteractor = bouncerMessageInteractor;
        mUserInteractor = userInteractor;
        mSelectedUserInteractor = selectedUserInteractor;
        mDeviceEntryInteractor = deviceEntryInteractor;
        mDeviceEntryInteractor = deviceEntryInteractor;
        mJavaAdapter = javaAdapter;
        mJavaAdapter = javaAdapter;
        mKeyguardTransitionInteractor = keyguardTransitionInteractor;
        mKeyguardTransitionInteractor = keyguardTransitionInteractor;
@@ -523,7 +523,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
                mDeviceEntryInteractor.get().isDeviceEntered(),
                mDeviceEntryInteractor.get().isDeviceEntered(),
                    isDeviceEntered -> {
                    isDeviceEntered -> {
                    if (isDeviceEntered) {
                    if (isDeviceEntered) {
                        final int selectedUserId = mUserInteractor.getSelectedUserId();
                        final int selectedUserId = mSelectedUserInteractor.getSelectedUserId();
                        showNextSecurityScreenOrFinish(
                        showNextSecurityScreenOrFinish(
                            /* authenticated= */ true,
                            /* authenticated= */ true,
                            selectedUserId,
                            selectedUserId,
+9 −9
Original line number Original line Diff line number Diff line
@@ -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.DismissAction
import com.android.systemui.keyguard.shared.model.KeyguardDone
import com.android.systemui.keyguard.shared.model.KeyguardDone
import com.android.systemui.power.domain.interactor.PowerInteractor
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.Utils.Companion.toQuad
import com.android.systemui.util.kotlin.sample
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.flow.merge
import javax.inject.Inject


/** Encapsulates business logic for requesting the keyguard to dismiss/finish/done. */
/** Encapsulates business logic for requesting the keyguard to dismiss/finish/done. */
@SysUISingleton
@SysUISingleton
@@ -40,11 +40,11 @@ class KeyguardDismissInteractor
@Inject
@Inject
constructor(
constructor(
    trustRepository: TrustRepository,
    trustRepository: TrustRepository,
    val keyguardRepository: KeyguardRepository,
    private val keyguardRepository: KeyguardRepository,
    val primaryBouncerInteractor: PrimaryBouncerInteractor,
    primaryBouncerInteractor: PrimaryBouncerInteractor,
    val alternateBouncerInteractor: AlternateBouncerInteractor,
    alternateBouncerInteractor: AlternateBouncerInteractor,
    val powerInteractor: PowerInteractor,
    powerInteractor: PowerInteractor,
    val userInteractor: UserInteractor,
    private val selectedUserInteractor: SelectedUserInteractor,
) {
) {
    /*
    /*
     * Updates when a biometric has authenticated the device and is requesting to dismiss
     * Updates when a biometric has authenticated the device and is requesting to dismiss
@@ -82,7 +82,7 @@ constructor(
     */
     */
    private val primaryAuthenticated: Flow<Unit> =
    private val primaryAuthenticated: Flow<Unit> =
        primaryBouncerInteractor.keyguardAuthenticatedPrimaryAuth
        primaryBouncerInteractor.keyguardAuthenticatedPrimaryAuth
            .filter { authedUserId -> authedUserId == userInteractor.getSelectedUserId() }
            .filter { authedUserId -> authedUserId == selectedUserInteractor.getSelectedUserId() }
            .map {} // map to Unit
            .map {} // map to Unit


    /*
    /*
@@ -92,7 +92,7 @@ constructor(
     */
     */
    private val userRequestedBouncerWhenAlreadyAuthenticated: Flow<Unit> =
    private val userRequestedBouncerWhenAlreadyAuthenticated: Flow<Unit> =
        primaryBouncerInteractor.userRequestedBouncerWhenAlreadyAuthenticated
        primaryBouncerInteractor.userRequestedBouncerWhenAlreadyAuthenticated
            .filter { authedUserId -> authedUserId == userInteractor.getSelectedUserId() }
            .filter { authedUserId -> authedUserId == selectedUserInteractor.getSelectedUserId() }
            .map {} // map to Unit
            .map {} // map to Unit


    /** Updates when keyguardDone should be requested. */
    /** Updates when keyguardDone should be requested. */
+9 −7
Original line number Original line Diff line number Diff line
@@ -25,20 +25,18 @@ import com.android.systemui.flags.Flags
import com.android.systemui.keyguard.domain.interactor.KeyguardDismissInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardDismissInteractor
import com.android.systemui.keyguard.shared.model.KeyguardDone
import com.android.systemui.keyguard.shared.model.KeyguardDone
import com.android.systemui.log.core.LogLevel
import com.android.systemui.log.core.LogLevel
import com.android.systemui.user.domain.interactor.UserInteractor
import com.android.systemui.user.domain.interactor.SelectedUserInteractor
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.launch
import kotlinx.coroutines.launch
import javax.inject.Inject


/** Handles keyguard dismissal requests. */
/** Handles keyguard dismissal requests. */
@OptIn(ExperimentalCoroutinesApi::class)
@SysUISingleton
@SysUISingleton
class KeyguardDismissBinder
class KeyguardDismissBinder
@Inject
@Inject
constructor(
constructor(
    private val interactor: KeyguardDismissInteractor,
    private val interactor: KeyguardDismissInteractor,
    private val userInteractor: UserInteractor,
    private val selectedUserInteractor: SelectedUserInteractor,
    private val viewMediatorCallback: ViewMediatorCallback,
    private val viewMediatorCallback: ViewMediatorCallback,
    @Application private val scope: CoroutineScope,
    @Application private val scope: CoroutineScope,
    private val keyguardLogger: KeyguardLogger,
    private val keyguardLogger: KeyguardLogger,
@@ -55,11 +53,15 @@ constructor(
                when (keyguardDoneTiming) {
                when (keyguardDoneTiming) {
                    KeyguardDone.LATER -> {
                    KeyguardDone.LATER -> {
                        log("keyguardDonePending")
                        log("keyguardDonePending")
                        viewMediatorCallback.keyguardDonePending(userInteractor.getSelectedUserId())
                        viewMediatorCallback.keyguardDonePending(
                            selectedUserInteractor.getSelectedUserId()
                        )
                    }
                    }
                    else -> {
                    else -> {
                        log("keyguardDone")
                        log("keyguardDone")
                        viewMediatorCallback.keyguardDone(userInteractor.getSelectedUserId())
                        viewMediatorCallback.keyguardDone(
                            selectedUserInteractor.getSelectedUserId()
                        )
                    }
                    }
                }
                }
            }
            }
+3 −3
Original line number Original line Diff line number Diff line
@@ -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.security.data.repository.SecurityRepository
import com.android.systemui.statusbar.policy.DeviceProvisionedController
import com.android.systemui.statusbar.policy.DeviceProvisionedController
import com.android.systemui.user.data.repository.UserSwitcherRepository
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 javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.Flow
@@ -102,7 +102,7 @@ constructor(
    private val deviceProvisionedController: DeviceProvisionedController,
    private val deviceProvisionedController: DeviceProvisionedController,
    private val qsSecurityFooterUtils: QSSecurityFooterUtils,
    private val qsSecurityFooterUtils: QSSecurityFooterUtils,
    private val fgsManagerController: FgsManagerController,
    private val fgsManagerController: FgsManagerController,
    private val userInteractor: UserInteractor,
    private val userSwitcherInteractor: UserSwitcherInteractor,
    securityRepository: SecurityRepository,
    securityRepository: SecurityRepository,
    foregroundServicesRepository: ForegroundServicesRepository,
    foregroundServicesRepository: ForegroundServicesRepository,
    userSwitcherRepository: UserSwitcherRepository,
    userSwitcherRepository: UserSwitcherRepository,
@@ -178,6 +178,6 @@ constructor(
    }
    }


    override fun showUserSwitcher(expandable: Expandable) {
    override fun showUserSwitcher(expandable: Expandable) {
        userInteractor.showUserSwitcher(expandable)
        userSwitcherInteractor.showUserSwitcher(expandable)
    }
    }
}
}
+1 −0
Original line number Original line Diff line number Diff line
@@ -90,6 +90,7 @@ open class UserTrackerImpl internal constructor(
    private val isBackgroundUserSwitchEnabled: Boolean get() =
    private val isBackgroundUserSwitchEnabled: Boolean get() =
        featureFlagsProvider.get().isEnabled(Flags.USER_TRACKER_BACKGROUND_CALLBACKS)
        featureFlagsProvider.get().isEnabled(Flags.USER_TRACKER_BACKGROUND_CALLBACKS)


    @Deprecated("Use UserInteractor.getSelectedUserId()")
    override var userId: Int by SynchronizedDelegate(context.userId)
    override var userId: Int by SynchronizedDelegate(context.userId)
        protected set
        protected set


Loading