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

Commit b6b20fb0 authored by andrewxu's avatar andrewxu Committed by Andrew Xu
Browse files

[Flexiglass] Fix PhoneStatusBarViewControllerTest broken with Flexiglass

This CL fixes two issues in the broken tests:

1. windowRootView is null in the original test code. To fix this issue,
   mock WindowRootView class instead of the provider.

2. As PhoneStatusBarViewController indicates, with Flexiglass on,
   windowRootView.dispatchTouchEvent() is called instead of
   shadeViewController.handleExternalTouch. This CL changes the test
   expectations when the flag is on.

Given that PhoneStatusBarViewControllerTest has many test cases failing
with Flexiglass on, this CL turns original tests into parameterized
tests to verify with the feature flag on/off.

Bug: 416716452
Flag: EXEMPT bugfix
Change-Id: I24ab1a83e3b9f0c5419a9f882ae642551ff2d041
parent c0b13b32
Loading
Loading
Loading
Loading
+42 −12
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.graphics.Insets
import android.hardware.display.DisplayManagerGlobal
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.platform.test.flag.junit.FlagsParameterization
import android.view.Display
import android.view.DisplayAdjustments.DEFAULT_DISPLAY_ADJUSTMENTS
import android.view.DisplayInfo
@@ -33,17 +34,20 @@ import android.view.MotionEvent
import android.view.View
import android.view.ViewTreeObserver
import android.widget.FrameLayout
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import com.android.systemui.SysuiTestCase
import com.android.systemui.SysuiTestableContext
import com.android.systemui.battery.BatteryMeterView
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags
import com.android.systemui.flags.andSceneContainer
import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.runTest
import com.android.systemui.plugins.fakeDarkIconDispatcher
import com.android.systemui.res.R
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.ui.view.WindowRootView
import com.android.systemui.shade.ShadeControllerImpl
import com.android.systemui.shade.ShadeLogger
@@ -51,7 +55,6 @@ import com.android.systemui.shade.ShadeViewController
import com.android.systemui.shade.StatusBarLongPressGestureDetector
import com.android.systemui.shade.data.repository.ShadeDisplaysRepository
import com.android.systemui.shade.data.repository.defaultShadeDisplayPolicy
import com.android.systemui.shade.display.DefaultDisplayShadePolicy
import com.android.systemui.shade.display.StatusBarTouchShadeDisplayPolicy
import com.android.systemui.shade.domain.interactor.PanelExpansionInteractor
import com.android.systemui.shade.domain.interactor.enableDualShade
@@ -73,7 +76,6 @@ import com.android.systemui.util.mockito.argumentCaptor
import com.android.systemui.util.view.ViewUtil
import com.google.common.truth.Truth.assertThat
import java.util.Optional
import javax.inject.Provider
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -86,16 +88,24 @@ import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
import org.mockito.kotlin.any
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
import org.mockito.kotlin.whenever
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
import platform.test.runner.parameterized.Parameters

@SmallTest
@RunWith(AndroidJUnit4::class)
class PhoneStatusBarViewControllerTest : SysuiTestCase() {
@RunWith(ParameterizedAndroidJunit4::class)
class PhoneStatusBarViewControllerTest(flags: FlagsParameterization) : SysuiTestCase() {
    init {
        mSetFlagsRule.setFlagsParameterization(flags)
    }

    private val kosmos = testKosmos()
    private val statusBarContentInsetsProviderStore = kosmos.fakeStatusBarContentInsetsProviderStore
    private val statusBarContentInsetsProvider = statusBarContentInsetsProviderStore.defaultDisplay
    private val statusBarContentInsetsProviderForSecondaryDisplay =
        statusBarContentInsetsProviderStore.forDisplay(SECONDARY_DISPLAY_ID)
    private val windowRootView = mock<WindowRootView>()

    private val fakeDarkIconDispatcher = kosmos.fakeDarkIconDispatcher
    @Mock private lateinit var shadeViewController: ShadeViewController
@@ -107,12 +117,10 @@ class PhoneStatusBarViewControllerTest : SysuiTestCase() {
    @Mock private lateinit var centralSurfacesImpl: CentralSurfacesImpl
    @Mock private lateinit var commandQueue: CommandQueue
    @Mock private lateinit var shadeControllerImpl: ShadeControllerImpl
    @Mock private lateinit var windowRootView: Provider<WindowRootView>
    @Mock private lateinit var shadeLogger: ShadeLogger
    @Mock private lateinit var viewUtil: ViewUtil
    @Mock private lateinit var mStatusBarLongPressGestureDetector: StatusBarLongPressGestureDetector
    @Mock private lateinit var statusBarTouchShadeDisplayPolicy: StatusBarTouchShadeDisplayPolicy
    @Mock private lateinit var defaultDisplayShadePolicy: DefaultDisplayShadePolicy
    @Mock private lateinit var shadeDisplayRepository: ShadeDisplaysRepository
    private lateinit var statusBarWindowStateController: StatusBarWindowStateController
    private val fakeConfigurationControllerStore = FakeStatusBarConfigurationControllerStore()
@@ -297,8 +305,12 @@ class PhoneStatusBarViewControllerTest : SysuiTestCase() {

        view.onTouchEvent(event)

        if (SceneContainerFlag.isEnabled) {
            verify(windowRootView).dispatchTouchEvent(event)
        } else {
            verify(shadeViewController).handleExternalTouch(event)
        }
    }

    @Test
    fun handleTouchEventFromStatusBar_panelAndViewEnabled_viewReceivesEvent() {
@@ -308,8 +320,12 @@ class PhoneStatusBarViewControllerTest : SysuiTestCase() {

        view.onTouchEvent(event)

        if (SceneContainerFlag.isEnabled) {
            verify(windowRootView).dispatchTouchEvent(event)
        } else {
            verify(shadeViewController).handleExternalTouch(event)
        }
    }

    @Test
    fun handleTouchEventFromStatusBar_topEdgeTouch_viewNeverReceivesEvent() {
@@ -330,8 +346,12 @@ class PhoneStatusBarViewControllerTest : SysuiTestCase() {

        view.dispatchTouchEvent(event)

        if (SceneContainerFlag.isEnabled) {
            verify(windowRootView).dispatchTouchEvent(event)
        } else {
            verify(shadeViewController).handleExternalTouch(event)
        }
    }

    @Test
    @EnableFlags(StatusBarConnectedDisplays.FLAG_NAME, ShadeWindowGoesAround.FLAG_NAME)
@@ -351,8 +371,12 @@ class PhoneStatusBarViewControllerTest : SysuiTestCase() {

        viewForSecondaryDisplay.dispatchTouchEvent(event)

        if (SceneContainerFlag.isEnabled) {
            verify(windowRootView).dispatchTouchEvent(event)
        } else {
            verify(shadeViewController).handleExternalTouch(event)
        }
    }

    @Test
    @EnableFlags(StatusBarConnectedDisplays.FLAG_NAME, ShadeWindowGoesAround.FLAG_NAME)
@@ -689,7 +713,7 @@ class PhoneStatusBarViewControllerTest : SysuiTestCase() {
                kosmos.shadeModeInteractor,
                panelExpansionInteractor,
                { mStatusBarLongPressGestureDetector },
                windowRootView,
                { windowRootView },
                shadeLogger,
                viewUtil,
                fakeConfigurationControllerStore,
@@ -705,6 +729,12 @@ class PhoneStatusBarViewControllerTest : SysuiTestCase() {
    }

    private companion object {
        @JvmStatic
        @Parameters(name = "{0}")
        fun getParams(): List<FlagsParameterization> {
            return FlagsParameterization.allCombinationsOf().andSceneContainer()
        }

        const val DISPLAY_ID = 0
        const val SECONDARY_DISPLAY_ID = 2
    }