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

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

[SB] Ensure StatusBarBoundsProvider gets started even with root_mod on.

Previously, CollapsedStatusBarFragment was responsible for starting all
the HomeStatusBarComponent.Startable classes, of which there was only 1:
StatusBarBoundsProvider. But that fragment is deprecated when
status_bar_root_modernization is on, so we need to start and stop that
class another way.

Fixes: 417965212
Flag: com.android.systemui.status_bar_root_modernization
Test: atest StatusBarModeRepositoryImplTest
Test: manual: In a letterboxed app, add & remove icons in the status bar
in order to make the icons overlap or not overlap the app. Verify the
status bar adds a scrim when the icons overlap the app and removes the
scrim otherwise (see video in bug). Verify not letterboxed apps aren't
affected

Change-Id: I2fe234ef01dd815bb19f4dc8232b59b5d2e53af3
parent 1eb6674d
Loading
Loading
Loading
Loading
+40 −12
Original line number Original line Diff line number Diff line
@@ -17,6 +17,8 @@
package com.android.systemui.statusbar.data.repository
package com.android.systemui.statusbar.data.repository


import android.graphics.Rect
import android.graphics.Rect
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.view.WindowInsets
import android.view.WindowInsets
import android.view.WindowInsetsController
import android.view.WindowInsetsController
import android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
import android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
@@ -30,6 +32,7 @@ import com.android.internal.view.AppearanceRegion
import com.android.systemui.SysuiTestCase
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.statusbar.core.StatusBarRootModernization
import com.android.systemui.statusbar.data.model.StatusBarMode
import com.android.systemui.statusbar.data.model.StatusBarMode
import com.android.systemui.statusbar.layout.BoundsPair
import com.android.systemui.statusbar.layout.BoundsPair
import com.android.systemui.statusbar.layout.LetterboxAppearance
import com.android.systemui.statusbar.layout.LetterboxAppearance
@@ -54,6 +57,7 @@ import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Before
import org.junit.Test
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runner.RunWith
import org.mockito.Mockito.never
import org.mockito.Mockito.verify
import org.mockito.Mockito.verify


@SmallTest
@SmallTest
@@ -70,7 +74,7 @@ class StatusBarModeRepositoryImplTest : SysuiTestCase() {
        }
        }
    private val ongoingCallRepository = kosmos.ongoingCallRepository
    private val ongoingCallRepository = kosmos.ongoingCallRepository


    private val underTest =
    private val underTest by lazy {
        StatusBarModePerDisplayRepositoryImpl(
        StatusBarModePerDisplayRepositoryImpl(
            testScope.backgroundScope,
            testScope.backgroundScope,
            DISPLAY_ID,
            DISPLAY_ID,
@@ -78,9 +82,6 @@ class StatusBarModeRepositoryImplTest : SysuiTestCase() {
            letterboxAppearanceCalculator,
            letterboxAppearanceCalculator,
            ongoingCallRepository,
            ongoingCallRepository,
        )
        )
            .apply {
                this.start()
                this.onStatusBarViewInitialized(homeStatusBarComponent)
    }
    }


    private val commandQueueCallback: CommandQueue.Callbacks
    private val commandQueueCallback: CommandQueue.Callbacks
@@ -97,7 +98,34 @@ class StatusBarModeRepositoryImplTest : SysuiTestCase() {
            return callbackCaptor.value
            return callbackCaptor.value
        }
        }


    @Before fun setUp() {}
    @Before
    fun setUp() {
        underTest.apply {
            this.start()
            this.onStatusBarViewInitialized(homeStatusBarComponent)
        }
    }

    @Test
    fun start_boundsProviderStarted() {
        verify(statusBarBoundsProvider).start()
    }

    @Test
    @EnableFlags(StatusBarRootModernization.FLAG_NAME)
    fun stop_flagOn_boundsProviderStopped() {
        underTest.stop()

        verify(statusBarBoundsProvider).stop()
    }

    @Test
    @DisableFlags(StatusBarRootModernization.FLAG_NAME)
    fun stop_flagOff_boundsProviderNotStopped() {
        underTest.stop()

        verify(statusBarBoundsProvider, never()).stop()
    }


    @Test
    @Test
    fun isTransientShown_commandQueueShow_wrongDisplayId_notUpdated() {
    fun isTransientShown_commandQueueShow_wrongDisplayId_notUpdated() {
+17 −2
Original line number Original line Diff line number Diff line
@@ -31,6 +31,7 @@ import com.android.systemui.CoreStartable
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.statusbar.core.StatusBarInitializer.OnStatusBarViewInitializedListener
import com.android.systemui.statusbar.core.StatusBarInitializer.OnStatusBarViewInitializedListener
import com.android.systemui.statusbar.core.StatusBarRootModernization
import com.android.systemui.statusbar.data.model.StatusBarAppearance
import com.android.systemui.statusbar.data.model.StatusBarAppearance
import com.android.systemui.statusbar.data.model.StatusBarMode
import com.android.systemui.statusbar.data.model.StatusBarMode
import com.android.systemui.statusbar.layout.BoundsPair
import com.android.systemui.statusbar.layout.BoundsPair
@@ -171,11 +172,22 @@ constructor(
            }
            }
        }
        }


    private var statusBarBoundsProvider: StatusBarBoundsProvider? = null
    private var isStarted = false

    override fun start() {
    override fun start() {
        isStarted = true
        if (StatusBarRootModernization.isEnabled) {
            statusBarBoundsProvider?.start()
        }
        commandQueue.addCallback(commandQueueCallback)
        commandQueue.addCallback(commandQueueCallback)
    }
    }


    override fun stop() {
    override fun stop() {
        isStarted = false
        if (StatusBarRootModernization.isEnabled) {
            statusBarBoundsProvider?.stop()
        }
        commandQueue.removeCallback(commandQueueCallback)
        commandQueue.removeCallback(commandQueueCallback)
    }
    }


@@ -187,14 +199,17 @@ constructor(
    private val _statusBarBounds = MutableStateFlow(BoundsPair(Rect(), Rect()))
    private val _statusBarBounds = MutableStateFlow(BoundsPair(Rect(), Rect()))


    override fun onStatusBarViewInitialized(component: HomeStatusBarComponent) {
    override fun onStatusBarViewInitialized(component: HomeStatusBarComponent) {
        val statusBarBoundsProvider = component.boundsProvider
        statusBarBoundsProvider = component.boundsProvider
        val listener =
        val listener =
            object : StatusBarBoundsProvider.BoundsChangeListener {
            object : StatusBarBoundsProvider.BoundsChangeListener {
                override fun onStatusBarBoundsChanged(bounds: BoundsPair) {
                override fun onStatusBarBoundsChanged(bounds: BoundsPair) {
                    _statusBarBounds.value = bounds
                    _statusBarBounds.value = bounds
                }
                }
            }
            }
        statusBarBoundsProvider.addChangeListener(listener)
        statusBarBoundsProvider?.addChangeListener(listener)
        if (StatusBarRootModernization.isEnabled && isStarted) {
            statusBarBoundsProvider?.start()
        }
    }
    }


    private val _ongoingProcessRequiresStatusBarVisible = MutableStateFlow(false)
    private val _ongoingProcessRequiresStatusBarVisible = MutableStateFlow(false)
+7 −0
Original line number Original line Diff line number Diff line
@@ -64,12 +64,19 @@ constructor(
            }
            }
        }
        }


    private var isStarted = false

    override fun start() {
    override fun start() {
        if (isStarted) {
            return
        }
        isStarted = true
        startSideContent.addOnLayoutChangeListener(layoutListener)
        startSideContent.addOnLayoutChangeListener(layoutListener)
        endSideContent.addOnLayoutChangeListener(layoutListener)
        endSideContent.addOnLayoutChangeListener(layoutListener)
    }
    }


    override fun stop() {
    override fun stop() {
        isStarted = false
        startSideContent.removeOnLayoutChangeListener(layoutListener)
        startSideContent.removeOnLayoutChangeListener(layoutListener)
        endSideContent.removeOnLayoutChangeListener(layoutListener)
        endSideContent.removeOnLayoutChangeListener(layoutListener)
    }
    }
+4 −0
Original line number Original line Diff line number Diff line
@@ -68,7 +68,11 @@ public interface HomeStatusBarComponent {


    /**
    /**
     * Performs initialization logic after {@link HomeStatusBarComponent} has been constructed.
     * Performs initialization logic after {@link HomeStatusBarComponent} has been constructed.
     *
     * @deprecated Startables are not started (or stopped) when [StatusBarRootModernization] is
     * enabled.
     */
     */
    @Deprecated
    interface Startable {
    interface Startable {
        /** */
        /** */
        void start();
        void start();