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

Commit 8bada38d authored by Chris Göllner's avatar Chris Göllner
Browse files

Show stop screen recording dialog on correct display

Before, when tapping the screen recording chip, a dialog was being
opened on the default/internal display.

Now, the dialog is always created using the context of the view that
was clicked. This context will be associated with the correct display.

This should be a no-op when the flag is disabled.

Test: atest SystemUITests
Fixes: 417442466
Flag: com.android.systemui.shared.status_bar_connected_displays
Change-Id: Ia6eb291d7d7ee9a6028e8116234f1d071fb25b35
parent 40ffdccd
Loading
Loading
Loading
Loading
+23 −11
Original line number Diff line number Diff line
@@ -16,13 +16,17 @@

package com.android.systemui.statusbar.chips.casttootherdevice.ui.viewmodel

import android.content.Context
import android.content.DialogInterface
import android.testing.TestableLooper.RunWithLooper
import android.view.View
import android.view.ViewRootImpl
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.internal.jank.Cuj
import com.android.systemui.SysuiTestCase
import com.android.systemui.animation.DialogCuj
import com.android.systemui.animation.DialogTransitionAnimator
import com.android.systemui.animation.Expandable
import com.android.systemui.animation.mockDialogTransitionAnimator
import com.android.systemui.common.shared.model.ContentDescription
@@ -59,6 +63,7 @@ import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.kotlin.any
import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
import org.mockito.kotlin.verify
@@ -66,6 +71,7 @@ import org.mockito.kotlin.whenever

@SmallTest
@RunWith(AndroidJUnit4::class)
@RunWithLooper(setAsMainLooper = true)
class CastToOtherDeviceChipViewModelTest : SysuiTestCase() {
    private val kosmos = testKosmos().also { it.testCase = this }
    private val testScope = kosmos.testScope
@@ -75,18 +81,22 @@ class CastToOtherDeviceChipViewModelTest : SysuiTestCase() {

    private val mockScreenCastDialog = mock<SystemUIDialog>()
    private val mockGenericCastDialog = mock<SystemUIDialog>()
    private val chipBackgroundView = mock<ChipBackgroundContainer>()
    private val chipBackgroundView =
        mock<ChipBackgroundContainer> { on { context } doReturn context }
    private val chipView =
        mock<View>().apply {
            whenever(
                    this.requireViewById<ChipBackgroundContainer>(
                        R.id.ongoing_activity_chip_background
                    )
                )
                .thenReturn(chipBackgroundView)
        mock<View> {
            on {
                requireViewById<ChipBackgroundContainer>(R.id.ongoing_activity_chip_background)
            } doReturn chipBackgroundView
            on { context } doReturn context
        }
    private val viewRootImpl = mock<ViewRootImpl> { on { view } doReturn chipView }
    private val dialogTransitionController =
        mock<DialogTransitionAnimator.Controller> { on { viewRoot } doReturn viewRootImpl }
    private val mockExpandable: Expandable =
        mock<Expandable>().apply { whenever(dialogTransitionController(any())).thenReturn(mock()) }
        mock<Expandable> {
            on { dialogTransitionController(any()) } doReturn dialogTransitionController
        }

    private val underTest = kosmos.castToOtherDeviceChipViewModel

@@ -96,13 +106,15 @@ class CastToOtherDeviceChipViewModelTest : SysuiTestCase() {

        whenever(
                kosmos.mockSystemUIDialogFactory.create(
                    any<EndCastScreenToOtherDeviceDialogDelegate>()
                    any<EndCastScreenToOtherDeviceDialogDelegate>(),
                    any<Context>(),
                )
            )
            .thenReturn(mockScreenCastDialog)
        whenever(
                kosmos.mockSystemUIDialogFactory.create(
                    any<EndGenericCastToOtherDeviceDialogDelegate>()
                    any<EndGenericCastToOtherDeviceDialogDelegate>(),
                    any<Context>(),
                )
            )
            .thenReturn(mockGenericCastDialog)
+3 −3
Original line number Diff line number Diff line
@@ -50,11 +50,11 @@ class EndMediaProjectionDialogHelperTest : SysuiTestCase() {
    fun createDialog_usesDelegateAndFactory() {
        val dialog = mock<SystemUIDialog>()
        val delegate = SystemUIDialog.Delegate { dialog }
        whenever(kosmos.mockSystemUIDialogFactory.create(eq(delegate))).thenReturn(dialog)
        whenever(kosmos.mockSystemUIDialogFactory.create(eq(delegate), any())).thenReturn(dialog)

        underTest.createDialog(delegate)
        underTest.createDialog(context, delegate)

        verify(kosmos.mockSystemUIDialogFactory).create(delegate)
        verify(kosmos.mockSystemUIDialogFactory).create(delegate, context)
    }

    @Test
+23 −10
Original line number Diff line number Diff line
@@ -16,13 +16,16 @@

package com.android.systemui.statusbar.chips.screenrecord.ui.viewmodel

import android.content.Context
import android.content.DialogInterface
import android.view.View
import android.view.ViewRootImpl
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.internal.jank.Cuj
import com.android.systemui.SysuiTestCase
import com.android.systemui.animation.DialogCuj
import com.android.systemui.animation.DialogTransitionAnimator
import com.android.systemui.animation.Expandable
import com.android.systemui.animation.mockDialogTransitionAnimator
import com.android.systemui.common.shared.model.Icon
@@ -56,6 +59,7 @@ import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.kotlin.any
import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
import org.mockito.kotlin.verify
@@ -70,25 +74,34 @@ class ScreenRecordChipViewModelTest : SysuiTestCase() {
    private val mediaProjectionRepo = kosmos.fakeMediaProjectionRepository
    private val systemClock = kosmos.fakeSystemClock
    private val mockSystemUIDialog = mock<SystemUIDialog>()
    private val chipBackgroundView = mock<ChipBackgroundContainer>()
    private val chipBackgroundView =
        mock<ChipBackgroundContainer> { on { context } doReturn context }
    private val chipView =
        mock<View>().apply {
            whenever(
                    this.requireViewById<ChipBackgroundContainer>(
                        R.id.ongoing_activity_chip_background
                    )
                )
                .thenReturn(chipBackgroundView)
        mock<View> {
            on {
                requireViewById<ChipBackgroundContainer>(R.id.ongoing_activity_chip_background)
            } doReturn chipBackgroundView
            on { context } doReturn context
        }
    private val viewRootImpl = mock<ViewRootImpl> { on { view } doReturn chipView }
    private val dialogTransitionController =
        mock<DialogTransitionAnimator.Controller> { on { viewRoot } doReturn viewRootImpl }
    private val mockExpandable: Expandable =
        mock<Expandable>().apply { whenever(dialogTransitionController(any())).thenReturn(mock()) }
        mock<Expandable> {
            on { dialogTransitionController(any()) } doReturn dialogTransitionController
        }

    private val underTest = kosmos.screenRecordChipViewModel

    @Before
    fun setUp() {
        setUpPackageManagerForMediaProjection(kosmos)
        whenever(kosmos.mockSystemUIDialogFactory.create(any<EndScreenRecordingDialogDelegate>()))
        whenever(
                kosmos.mockSystemUIDialogFactory.create(
                    any<EndScreenRecordingDialogDelegate>(),
                    any<Context>(),
                )
            )
            .thenReturn(mockSystemUIDialog)
    }

+30 −12
Original line number Diff line number Diff line
@@ -16,15 +16,18 @@

package com.android.systemui.statusbar.chips.sharetoapp.ui.viewmodel

import android.content.Context
import android.content.DialogInterface
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.view.View
import android.view.ViewRootImpl
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.internal.jank.Cuj
import com.android.systemui.SysuiTestCase
import com.android.systemui.animation.DialogCuj
import com.android.systemui.animation.DialogTransitionAnimator
import com.android.systemui.animation.Expandable
import com.android.systemui.animation.mockDialogTransitionAnimator
import com.android.systemui.common.shared.model.ContentDescription
@@ -63,6 +66,7 @@ import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.Mockito.times
import org.mockito.kotlin.any
import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
import org.mockito.kotlin.verify
@@ -78,18 +82,22 @@ class ShareToAppChipViewModelTest : SysuiTestCase() {

    private val mockScreenShareDialog = mock<SystemUIDialog>()
    private val mockGenericShareDialog = mock<SystemUIDialog>()
    private val chipBackgroundView = mock<ChipBackgroundContainer>()
    private val chipBackgroundView =
        mock<ChipBackgroundContainer> { on { context } doReturn context }
    private val chipView =
        mock<View>().apply {
            whenever(
                    this.requireViewById<ChipBackgroundContainer>(
                        R.id.ongoing_activity_chip_background
                    )
                )
                .thenReturn(chipBackgroundView)
        }
        mock<View> {
            on {
                requireViewById<ChipBackgroundContainer>(R.id.ongoing_activity_chip_background)
            } doReturn chipBackgroundView
            on { context } doReturn context
        }
    private val viewRootImpl = mock<ViewRootImpl> { on { view } doReturn chipView }
    private val dialogTransitionController =
        mock<DialogTransitionAnimator.Controller> { on { viewRoot } doReturn viewRootImpl }
    private val mockExpandable: Expandable =
        mock<Expandable>().apply { whenever(dialogTransitionController(any())).thenReturn(mock()) }
        mock<Expandable> {
            on { dialogTransitionController(any()) } doReturn dialogTransitionController
        }

    private val underTest = kosmos.shareToAppChipViewModel
    private val mockDialog = mock<SystemUIDialog>()
@@ -99,9 +107,19 @@ class ShareToAppChipViewModelTest : SysuiTestCase() {
        underTest.start()
        setUpPackageManagerForMediaProjection(kosmos)

        whenever(kosmos.mockSystemUIDialogFactory.create(any<EndShareScreenToAppDialogDelegate>()))
        whenever(
                kosmos.mockSystemUIDialogFactory.create(
                    any<EndShareScreenToAppDialogDelegate>(),
                    any<Context>(),
                )
            )
            .thenReturn(mockScreenShareDialog)
        whenever(kosmos.mockSystemUIDialogFactory.create(any<EndGenericShareToAppDialogDelegate>()))
        whenever(
                kosmos.mockSystemUIDialogFactory.create(
                    any<EndGenericShareToAppDialogDelegate>(),
                    any<Context>(),
                )
            )
            .thenReturn(mockGenericShareDialog)
    }

+17 −12
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.chips.ui.viewmodel

import android.view.View
import android.view.ViewRootImpl
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.internal.jank.Cuj
@@ -39,10 +40,10 @@ import kotlin.test.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.kotlin.any
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever

@SmallTest
@RunWith(AndroidJUnit4::class)
@@ -52,18 +53,22 @@ class OngoingActivityChipViewModelTest : SysuiTestCase() {
    private val dialogDelegate = SystemUIDialog.Delegate { mockSystemUIDialog }
    private val dialogTransitionAnimator = mock<DialogTransitionAnimator>()

    private val chipBackgroundView = mock<ChipBackgroundContainer>()
    private val chipBackgroundView =
        mock<ChipBackgroundContainer> { on { context } doReturn context }
    private val chipView =
        mock<View>().apply {
            whenever(
                    this.requireViewById<ChipBackgroundContainer>(
                        R.id.ongoing_activity_chip_background
                    )
                )
                .thenReturn(chipBackgroundView)
        mock<View> {
            on {
                requireViewById<ChipBackgroundContainer>(R.id.ongoing_activity_chip_background)
            } doReturn chipBackgroundView
            on { context } doReturn context
        }
    private val viewRootImpl = mock<ViewRootImpl> { on { view } doReturn chipView }
    private val dialogTransitionController =
        mock<DialogTransitionAnimator.Controller> { on { viewRoot } doReturn viewRootImpl }
    private val mockExpandable: Expandable =
        mock<Expandable>().apply { whenever(dialogTransitionController(any())).thenReturn(mock()) }
        mock<Expandable> {
            on { dialogTransitionController(any()) } doReturn dialogTransitionController
        }

    @Test
    @DisableChipsModernization
@@ -71,7 +76,7 @@ class OngoingActivityChipViewModelTest : SysuiTestCase() {
        val cuj = DialogCuj(Cuj.CUJ_STATUS_BAR_LAUNCH_DIALOG_FROM_CHIP, tag = "Test")
        val clickListener =
            createDialogLaunchOnClickListener(
                dialogDelegate,
                { _ -> dialogDelegate },
                dialogTransitionAnimator,
                cuj,
                key = "key",
@@ -92,7 +97,7 @@ class OngoingActivityChipViewModelTest : SysuiTestCase() {
        val cuj = DialogCuj(Cuj.CUJ_STATUS_BAR_LAUNCH_DIALOG_FROM_CHIP, tag = "Test")
        val clickCallback =
            createDialogLaunchOnClickCallback(
                dialogDelegate,
                { _ -> dialogDelegate },
                dialogTransitionAnimator,
                cuj,
                key = "key",
Loading