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

Commit f543f651 authored by Caitlin Shkuratov's avatar Caitlin Shkuratov
Browse files

[CS][SB] Have PhoneSBVC fetch status bar window state directly.

Bug: 277764509
Test: verified via logging that PhoneSBVC gets window state updates
Test: atest PhoneStatusBarViewControllerTest
Change-Id: I1e5a8f8a5822bf507a9a6b8ce95e17bdbc01e86f
parent 3697f77a
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -228,9 +228,6 @@ public interface CentralSurfaces extends Dumpable, LifecycleOwner {
    /** */
    boolean getCommandQueuePanelsEnabled();

    /** */
    int getStatusBarWindowState();

    BiometricUnlockController getBiometricUnlockController();

    void showWirelessChargingAnimation(int batteryLevel);
+0 −5
Original line number Diff line number Diff line
@@ -1817,11 +1817,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
        return mCommandQueue.panelsEnabled();
    }

    @Override
    public int getStatusBarWindowState() {
        return mStatusBarWindowState;
    }

    @Override
    public BiometricUnlockController getBiometricUnlockController() {
        return mBiometricUnlockController;
+5 −2
Original line number Diff line number Diff line
@@ -15,7 +15,6 @@
 */
package com.android.systemui.statusbar.phone

import android.app.StatusBarManager.WINDOW_STATE_SHOWING
import android.app.StatusBarManager.WINDOW_STATUS_BAR
import android.content.res.Configuration
import android.graphics.Point
@@ -34,6 +33,7 @@ import com.android.systemui.shade.ShadeLogger
import com.android.systemui.shade.ShadeViewController
import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.statusbar.window.StatusBarWindowStateController
import com.android.systemui.unfold.SysUIUnfoldComponent
import com.android.systemui.unfold.UNFOLD_STATUS_BAR
import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider
@@ -53,6 +53,7 @@ class PhoneStatusBarViewController private constructor(
    view: PhoneStatusBarView,
    @Named(UNFOLD_STATUS_BAR) private val progressProvider: ScopedUnfoldTransitionProgressProvider?,
    private val centralSurfaces: CentralSurfaces,
    private val statusBarWindowStateController: StatusBarWindowStateController,
    private val shadeController: ShadeController,
    private val shadeViewController: ShadeViewController,
    private val windowRootView: Provider<WindowRootView>,
@@ -148,7 +149,7 @@ class PhoneStatusBarViewController private constructor(

    /** Called when a touch event occurred on {@link PhoneStatusBarView}. */
    fun onTouch(event: MotionEvent) {
        if (centralSurfaces.statusBarWindowState == WINDOW_STATE_SHOWING) {
        if (statusBarWindowStateController.windowIsShowing()) {
            val upOrCancel =
                event.action == MotionEvent.ACTION_UP ||
                    event.action == MotionEvent.ACTION_CANCEL
@@ -242,6 +243,7 @@ class PhoneStatusBarViewController private constructor(
        private val featureFlags: FeatureFlags,
        private val userChipViewModel: StatusBarUserChipViewModel,
        private val centralSurfaces: CentralSurfaces,
        private val statusBarWindowStateController: StatusBarWindowStateController,
        private val shadeController: ShadeController,
        private val shadeViewController: ShadeViewController,
        private val windowRootView: Provider<WindowRootView>,
@@ -264,6 +266,7 @@ class PhoneStatusBarViewController private constructor(
                view,
                progressProvider.getOrNull(),
                centralSurfaces,
                statusBarWindowStateController,
                shadeController,
                shadeViewController,
                windowRootView,
+54 −0
Original line number Diff line number Diff line
@@ -16,6 +16,10 @@

package com.android.systemui.statusbar.phone

import android.app.StatusBarManager.WINDOW_STATE_HIDDEN
import android.app.StatusBarManager.WINDOW_STATE_HIDING
import android.app.StatusBarManager.WINDOW_STATE_SHOWING
import android.app.StatusBarManager.WINDOW_STATUS_BAR
import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.ViewTreeObserver
@@ -31,12 +35,15 @@ import com.android.systemui.scene.ui.view.WindowRootView
import com.android.systemui.shade.ShadeControllerImpl
import com.android.systemui.shade.ShadeLogger
import com.android.systemui.shade.ShadeViewController
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.statusbar.window.StatusBarWindowStateController
import com.android.systemui.unfold.SysUIUnfoldComponent
import com.android.systemui.unfold.config.UnfoldTransitionConfig
import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider
import com.android.systemui.user.ui.viewmodel.StatusBarUserChipViewModel
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.argumentCaptor
import com.android.systemui.util.mockito.whenever
import com.android.systemui.util.view.ViewUtil
import com.google.common.truth.Truth.assertThat
@@ -75,6 +82,8 @@ 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>
@@ -82,6 +91,7 @@ class PhoneStatusBarViewControllerTest : SysuiTestCase() {
    private lateinit var shadeLogger: ShadeLogger
    @Mock
    private lateinit var viewUtil: ViewUtil
    private lateinit var statusBarWindowStateController: StatusBarWindowStateController

    private lateinit var view: PhoneStatusBarView
    private lateinit var controller: PhoneStatusBarViewController
@@ -91,6 +101,9 @@ class PhoneStatusBarViewControllerTest : SysuiTestCase() {
    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)

        statusBarWindowStateController = StatusBarWindowStateController(DISPLAY_ID, commandQueue)

        `when`(sysuiUnfoldComponent.getStatusBarMoveFromCenterAnimationController())
            .thenReturn(moveFromCenterAnimation)
        // create the view and controller on main thread as it requires main looper
@@ -186,6 +199,42 @@ class PhoneStatusBarViewControllerTest : SysuiTestCase() {
        verify(shadeViewController, never()).handleExternalTouch(any())
    }

    @Test
    fun onTouch_windowHidden_centralSurfacesNotNotified() {
        val callback = getCommandQueueCallback()
        callback.setWindowState(DISPLAY_ID, WINDOW_STATUS_BAR, WINDOW_STATE_HIDDEN)

        controller.onTouch(MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0))

        verify(centralSurfacesImpl, never()).setInteracting(any(), any())
    }

    @Test
    fun onTouch_windowHiding_centralSurfacesNotNotified() {
        val callback = getCommandQueueCallback()
        callback.setWindowState(DISPLAY_ID, WINDOW_STATUS_BAR, WINDOW_STATE_HIDING)

        controller.onTouch(MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0))

        verify(centralSurfacesImpl, never()).setInteracting(any(), any())
    }

    @Test
    fun onTouch_windowShowing_centralSurfacesNotified() {
        val callback = getCommandQueueCallback()
        callback.setWindowState(DISPLAY_ID, WINDOW_STATUS_BAR, WINDOW_STATE_SHOWING)

        controller.onTouch(MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0))

        verify(centralSurfacesImpl).setInteracting(any(), any())
    }

    private fun getCommandQueueCallback(): CommandQueue.Callbacks {
        val captor = argumentCaptor<CommandQueue.Callbacks>()
        verify(commandQueue).addCallback(captor.capture())
        return captor.value!!
    }

    private fun createViewMock(): PhoneStatusBarView {
        val view = spy(view)
        val viewTreeObserver = mock(ViewTreeObserver::class.java)
@@ -201,6 +250,7 @@ class PhoneStatusBarViewControllerTest : SysuiTestCase() {
            featureFlags,
            userChipViewModel,
            centralSurfacesImpl,
            statusBarWindowStateController,
            shadeControllerImpl,
            shadeViewController,
            windowRootView,
@@ -218,4 +268,8 @@ class PhoneStatusBarViewControllerTest : SysuiTestCase() {
        override var isHingeAngleEnabled: Boolean = false
        override val halfFoldedTimeoutMillis: Int = 0
    }

    private companion object {
        const val DISPLAY_ID = 1
    }
}