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

Commit 564a41fd authored by Nicolò Mazzucato's avatar Nicolò Mazzucato
Browse files

Allow User switcher dialog to open on external displays

This uses the context from  ShadeDialogContextRepository when opening a user switcher dialog from QS footer.

The context is not passed from KeyguardQsUserSwitchController anymore, as that one would be wrong (as it's a WindowContext for TYPE_NOTIFICATION_SHADE, that doesn't accept

Bug: 362719719
Bug: 383294128
Test: UserSwitchDialogControllerTest, UserSwitchDialogControllerTest
Flag: com.android.systemui.shade_window_goes_around
Change-Id: Ic0a028b216f3fbf41e6b9a762c335c0574c054f9
parent c89f5265
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import com.android.systemui.plugins.FalsingManager
import com.android.systemui.qs.PseudoGridView
import com.android.systemui.qs.QSUserSwitcherEvent
import com.android.systemui.qs.tiles.UserDetailView
import com.android.systemui.shade.domain.interactor.FakeShadeDialogContextInteractor
import com.android.systemui.statusbar.phone.SystemUIDialog
import com.android.systemui.util.mockito.capture
import com.android.systemui.util.mockito.eq
@@ -84,6 +85,7 @@ class UserSwitchDialogControllerTest : SysuiTestCase() {
                mDialogTransitionAnimator,
                uiEventLogger,
                dialogFactory,
                FakeShadeDialogContextInteractor(mContext),
            )
    }

@@ -91,32 +93,32 @@ class UserSwitchDialogControllerTest : SysuiTestCase() {
    fun showDialog_callsDialogShow() {
        val launchController = mock<DialogTransitionAnimator.Controller>()
        `when`(launchExpandable.dialogTransitionController(any())).thenReturn(launchController)
        controller.showDialog(context, launchExpandable)
        controller.showDialog(launchExpandable)
        verify(mDialogTransitionAnimator).show(eq(dialog), eq(launchController), anyBoolean())
        verify(uiEventLogger).log(QSUserSwitcherEvent.QS_USER_DETAIL_OPEN)
    }

    @Test
    fun dialog_showForAllUsers() {
        controller.showDialog(context, launchExpandable)
        controller.showDialog(launchExpandable)
        verify(dialog).setShowForAllUsers(true)
    }

    @Test
    fun dialog_cancelOnTouchOutside() {
        controller.showDialog(context, launchExpandable)
        controller.showDialog(launchExpandable)
        verify(dialog).setCanceledOnTouchOutside(true)
    }

    @Test
    fun adapterAndGridLinked() {
        controller.showDialog(context, launchExpandable)
        controller.showDialog(launchExpandable)
        verify(userDetailViewAdapter).linkToViewGroup(any<PseudoGridView>())
    }

    @Test
    fun doneButtonLogsCorrectly() {
        controller.showDialog(context, launchExpandable)
        controller.showDialog(launchExpandable)

        verify(dialog).setPositiveButton(anyInt(), capture(clickCaptor))

@@ -129,7 +131,7 @@ class UserSwitchDialogControllerTest : SysuiTestCase() {
    fun clickSettingsButton_noFalsing_opensSettings() {
        `when`(falsingManager.isFalseTap(anyInt())).thenReturn(false)

        controller.showDialog(context, launchExpandable)
        controller.showDialog(launchExpandable)

        verify(dialog)
            .setNeutralButton(anyInt(), capture(clickCaptor), eq(false) /* dismissOnClick */)
@@ -150,7 +152,7 @@ class UserSwitchDialogControllerTest : SysuiTestCase() {
    fun clickSettingsButton_Falsing_notOpensSettings() {
        `when`(falsingManager.isFalseTap(anyInt())).thenReturn(true)

        controller.showDialog(context, launchExpandable)
        controller.showDialog(launchExpandable)

        verify(dialog)
            .setNeutralButton(anyInt(), capture(clickCaptor), eq(false) /* dismissOnClick */)
+4 −2
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package com.android.systemui.qs.user

import android.app.Dialog
import android.content.Context
import android.content.DialogInterface
import android.content.DialogInterface.BUTTON_NEUTRAL
import android.content.Intent
@@ -34,6 +33,7 @@ import com.android.systemui.plugins.FalsingManager
import com.android.systemui.qs.QSUserSwitcherEvent
import com.android.systemui.qs.tiles.UserDetailView
import com.android.systemui.res.R
import com.android.systemui.shade.domain.interactor.ShadeDialogContextInteractor
import com.android.systemui.statusbar.phone.SystemUIDialog
import com.android.systemui.user.ui.dialog.DialogShowerImpl
import javax.inject.Inject
@@ -50,6 +50,7 @@ constructor(
    private val dialogTransitionAnimator: DialogTransitionAnimator,
    private val uiEventLogger: UiEventLogger,
    private val dialogFactory: SystemUIDialog.Factory,
    private val shadeDialogContextInteractor: ShadeDialogContextInteractor,
) {

    companion object {
@@ -63,7 +64,8 @@ constructor(
     * Populate the dialog with information from and adapter obtained from
     * [userDetailViewAdapterProvider] and show it as launched from [expandable].
     */
    fun showDialog(context: Context, expandable: Expandable) {
    fun showDialog(expandable: Expandable) {
        val context = shadeDialogContextInteractor.context
        with(dialogFactory.create(context)) {
            setShowForAllUsers(true)
            setCanceledOnTouchOutside(true)
+1 −1
Original line number Diff line number Diff line
@@ -192,7 +192,7 @@ public class KeyguardQsUserSwitchController extends ViewController<FrameLayout>
            mUiEventLogger.log(
                    LockscreenGestureLogger.LockscreenUiEvent.LOCKSCREEN_SWITCH_USER_TAP);

            mUserSwitchDialogController.showDialog(mUserAvatarViewWithBackground.getContext(),
            mUserSwitchDialogController.showDialog(
                    Expandable.fromView(mUserAvatarViewWithBackground));
        });

+8 −7
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@
package com.android.systemui.user.ui.dialog

import android.app.Dialog
import android.content.Context
import com.android.internal.jank.InteractionJankMonitor
import com.android.internal.logging.UiEventLogger
import com.android.settingslib.users.UserCreatingDialog
@@ -32,6 +31,7 @@ import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.qs.tiles.UserDetailView
import com.android.systemui.shade.domain.interactor.ShadeDialogContextInteractor
import com.android.systemui.user.UserSwitchFullscreenDialog
import com.android.systemui.user.domain.interactor.UserSwitcherInteractor
import com.android.systemui.user.domain.model.ShowDialogRequestModel
@@ -48,7 +48,6 @@ import com.android.app.tracing.coroutines.launchTraced as launch
class UserSwitcherDialogCoordinator
@Inject
constructor(
    @Application private val context: Lazy<Context>,
    @Application private val applicationScope: Lazy<CoroutineScope>,
    private val falsingManager: Lazy<FalsingManager>,
    private val broadcastSender: Lazy<BroadcastSender>,
@@ -59,6 +58,7 @@ constructor(
    private val activityStarter: Lazy<ActivityStarter>,
    private val falsingCollector: Lazy<FalsingCollector>,
    private val userSwitcherViewModel: Lazy<UserSwitcherViewModel>,
    private val shadeDialogContextInteractor: Lazy<ShadeDialogContextInteractor>,
) : CoreStartable {

    private var currentDialog: Dialog? = null
@@ -71,12 +71,13 @@ constructor(
    private fun startHandlingDialogShowRequests() {
        applicationScope.get().launch {
            interactor.get().dialogShowRequests.filterNotNull().collect { request ->
                val context = shadeDialogContextInteractor.get().context
                val (dialog, dialogCuj) =
                    when (request) {
                        is ShowDialogRequestModel.ShowAddUserDialog ->
                            Pair(
                                AddUserDialog(
                                    context = context.get(),
                                    context = context,
                                    userHandle = request.userHandle,
                                    isKeyguardShowing = request.isKeyguardShowing,
                                    showEphemeralMessage = request.showEphemeralMessage,
@@ -92,7 +93,7 @@ constructor(
                        is ShowDialogRequestModel.ShowUserCreationDialog ->
                            Pair(
                                UserCreatingDialog(
                                    context.get(),
                                    context,
                                    request.isGuest,
                                ),
                                null,
@@ -100,7 +101,7 @@ constructor(
                        is ShowDialogRequestModel.ShowExitGuestDialog ->
                            Pair(
                                ExitGuestDialog(
                                    context = context.get(),
                                    context = context,
                                    guestUserId = request.guestUserId,
                                    isGuestEphemeral = request.isGuestEphemeral,
                                    targetUserId = request.targetUserId,
@@ -117,7 +118,7 @@ constructor(
                        is ShowDialogRequestModel.ShowUserSwitcherDialog ->
                            Pair(
                                UserSwitchDialog(
                                    context = context.get(),
                                    context = context,
                                    adapter = userDetailAdapterProvider.get(),
                                    uiEventLogger = eventLogger.get(),
                                    falsingManager = falsingManager.get(),
@@ -132,7 +133,7 @@ constructor(
                        is ShowDialogRequestModel.ShowUserSwitcherFullscreenDialog ->
                            Pair(
                                UserSwitchFullscreenDialog(
                                    context = context.get(),
                                    context = context,
                                    falsingCollector = falsingCollector.get(),
                                    userSwitcherViewModel = userSwitcherViewModel.get(),
                                ),