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

Commit 44f1b5ee authored by amehfooz's avatar amehfooz
Browse files

[SB] Click on status bar system icons should open QS

Differentiates between clicks on system icons vs notification area
in the status bar.

Test: PhoneStatusBarViewControllerTest
Test: Click on system icons should open QS panel when dual shade is
enabled.
Flag: com.android.systemui.scene_container
Bug: 408483470

Change-Id: I75bcb0156f01e6164aa8b9aa6caae8b91549d3ad
parent c7b882bc
Loading
Loading
Loading
Loading
+19 −4
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import com.android.systemui.shade.ShadeViewController
import com.android.systemui.shade.StatusBarLongPressGestureDetector
import com.android.systemui.shade.display.StatusBarTouchShadeDisplayPolicy
import com.android.systemui.shade.domain.interactor.PanelExpansionInteractor
import com.android.systemui.shade.domain.interactor.ShadeModeInteractor
import com.android.systemui.shade.shared.flag.ShadeWindowGoesAround
import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator
import com.android.systemui.statusbar.core.StatusBarConnectedDisplays
@@ -74,6 +75,7 @@ private constructor(
    private val statusBarWindowStateController: StatusBarWindowStateController,
    private val shadeController: ShadeController,
    private val shadeViewController: ShadeViewController,
    private val shadeModeInteractor: ShadeModeInteractor,
    private val panelExpansionInteractor: PanelExpansionInteractor,
    private val statusBarLongPressGestureDetector: Provider<StatusBarLongPressGestureDetector>,
    private val windowRootView: Provider<WindowRootView>,
@@ -95,7 +97,8 @@ private constructor(
    private val statusBarContentInsetsProvider
        get() = statusBarContentInsetsProviderStore.forDisplay(context.displayId)

    private val iconsOnTouchListener =
    // Creates a [View.OnTouchListener] that only handles mouse click events.
    private fun createMouseClickListener(onClick: () -> Unit): View.OnTouchListener =
        object : View.OnTouchListener {
            override fun onTouch(v: View, event: MotionEvent): Boolean {
                // We want to handle only mouse events here to avoid stealing finger touches
@@ -107,7 +110,7 @@ private constructor(
                    if (event.action == MotionEvent.ACTION_UP) {
                        dispatchEventToShadeDisplayPolicy(event)
                        v.performClick()
                        shadeController.animateExpandShade()
                        onClick()
                    }
                    return true
                }
@@ -175,7 +178,15 @@ private constructor(
        endSideContainer.setOnHoverListener(
            statusOverlayHoverListenerFactory.createDarkAwareListener(endSideContainer)
        )
        endSideContainer.setOnTouchListener(iconsOnTouchListener)
        endSideContainer.setOnTouchListener(
            createMouseClickListener {
                if (shadeModeInteractor.isDualShade) {
                    shadeController.animateExpandQs()
                } else {
                    shadeController.animateExpandShade()
                }
            }
        )

        startSideContainer = mView.requireViewById(R.id.status_bar_start_side_content)
        startSideContainer.setOnHoverListener(
@@ -185,7 +196,9 @@ private constructor(
                bottomHoverMargin = 6,
            )
        )
        startSideContainer.setOnTouchListener(iconsOnTouchListener)
        startSideContainer.setOnTouchListener(
            createMouseClickListener { shadeController.animateExpandShade() }
        )
    }

    @VisibleForTesting
@@ -367,6 +380,7 @@ private constructor(
        private val statusBarWindowStateController: StatusBarWindowStateController,
        private val shadeController: ShadeController,
        private val shadeViewController: ShadeViewController,
        private val shadeModeInteractor: ShadeModeInteractor,
        private val panelExpansionInteractor: PanelExpansionInteractor,
        private val statusBarLongPressGestureDetector: Provider<StatusBarLongPressGestureDetector>,
        private val windowRootView: Provider<WindowRootView>,
@@ -405,6 +419,7 @@ private constructor(
                statusBarWindowStateController,
                shadeController,
                shadeViewController,
                shadeModeInteractor,
                panelExpansionInteractor,
                statusBarLongPressGestureDetector,
                windowRootView,
+48 −3
Original line number Diff line number Diff line
@@ -40,8 +40,11 @@ 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.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.ui.view.WindowRootView
@@ -51,7 +54,10 @@ import com.android.systemui.shade.ShadeViewController
import com.android.systemui.shade.StatusBarLongPressGestureDetector
import com.android.systemui.shade.display.StatusBarTouchShadeDisplayPolicy
import com.android.systemui.shade.domain.interactor.PanelExpansionInteractor
import com.android.systemui.shade.domain.interactor.enableDualShade
import com.android.systemui.shade.domain.interactor.shadeModeInteractor
import com.android.systemui.shade.shared.flag.ShadeWindowGoesAround
import com.android.systemui.shade.shared.model.ShadeMode
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.statusbar.core.StatusBarConnectedDisplays
import com.android.systemui.statusbar.data.repository.FakeStatusBarConfigurationControllerStore
@@ -525,14 +531,52 @@ class PhoneStatusBarViewControllerTest : SysuiTestCase() {
    }

    @Test
    fun shadeIsExpandedOnStatusIconMouseClick() {
    @EnableSceneContainer
    fun dualShade_qsIsExpandedOnEndSideContentMouseClick() =
        kosmos.runTest {
            kosmos.enableDualShade(wideLayout = true)

            val shadeMode by collectLastValue(shadeModeInteractor.shadeMode)
            assertThat(shadeMode).isEqualTo(ShadeMode.Dual)

            val view = createViewMock()
            InstrumentationRegistry.getInstrumentation().runOnMainSync {
                controller = createAndInitController(view)
            }
        val statusContainer = view.requireViewById<View>(R.id.system_icons)
        statusContainer.dispatchTouchEvent(getActionUpEventFromSource(InputDevice.SOURCE_MOUSE))
            val endSideContainer = view.requireViewById<View>(R.id.system_icons)
            endSideContainer.dispatchTouchEvent(
                getActionUpEventFromSource(InputDevice.SOURCE_MOUSE)
            )

            verify(shadeControllerImpl).animateExpandQs()
            verify(shadeControllerImpl, never()).animateExpandShade()
        }

    @Test
    fun shadeIsExpandedOnEndSideContentMouseClick() {
        val view = createViewMock()
        InstrumentationRegistry.getInstrumentation().runOnMainSync {
            controller = createAndInitController(view)
        }
        val endSideContainer = view.requireViewById<View>(R.id.system_icons)
        endSideContainer.dispatchTouchEvent(getActionUpEventFromSource(InputDevice.SOURCE_MOUSE))

        verify(shadeControllerImpl).animateExpandShade()
        verify(shadeControllerImpl, never()).animateExpandQs()
    }

    @Test
    fun shadeIsExpandedOnStartSideContentMouseClick() {
        val view = createViewMock()
        InstrumentationRegistry.getInstrumentation().runOnMainSync {
            controller = createAndInitController(view)
        }

        val startSideContainer = view.requireViewById<View>(R.id.status_bar_start_side_content)
        startSideContainer.dispatchTouchEvent(getActionUpEventFromSource(InputDevice.SOURCE_MOUSE))

        verify(shadeControllerImpl).animateExpandShade()
        verify(shadeControllerImpl, never()).animateExpandQs()
    }

    @Test
@@ -589,6 +633,7 @@ class PhoneStatusBarViewControllerTest : SysuiTestCase() {
                statusBarWindowStateController,
                shadeControllerImpl,
                shadeViewController,
                kosmos.shadeModeInteractor,
                panelExpansionInteractor,
                { mStatusBarLongPressGestureDetector },
                windowRootView,