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

Commit e9c8de53 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Prevent case of unreleased TaskView surface" into main

parents 1d276351 94ee2fcd
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ import com.android.systemui.qs.QSHost
import com.android.systemui.qs.QsEventLogger
import com.android.systemui.qs.flags.QSComposeFragment
import com.android.systemui.qs.logging.QSLogger
import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor
import com.android.systemui.qs.tileimpl.QSTileImpl
import com.android.systemui.res.R
import com.android.systemui.util.mockito.any
@@ -75,6 +76,7 @@ import org.mockito.Mockito.verify
import org.mockito.Mockito.verifyNoMoreInteractions
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations
import org.mockito.kotlin.never
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
import platform.test.runner.parameterized.Parameters

@@ -98,6 +100,7 @@ class DeviceControlsTileTest(flags: FlagsParameterization) : SysuiTestCase() {
    @Mock private lateinit var controlsController: ControlsController
    @Mock private lateinit var serviceInfo: ControlsServiceInfo
    @Mock private lateinit var uiEventLogger: QsEventLogger
    @Mock private lateinit var panelInteractor: PanelInteractor
    @Captor
    private lateinit var listingCallbackCaptor:
        ArgumentCaptor<ControlsListingController.ControlsListingCallback>
@@ -320,6 +323,41 @@ class DeviceControlsTileTest(flags: FlagsParameterization) : SysuiTestCase() {
        verifyNoMoreInteractions(activityStarter)
    }

    @Test
    fun handleClick_alreadyVisible_noActivityStarted_panelCollapsed() {
        verify(controlsListingController)
            .observe(any(LifecycleOwner::class.java), capture(listingCallbackCaptor))
        `when`(controlsComponent.getVisibility()).thenReturn(ControlsComponent.Visibility.AVAILABLE)
        `when`(controlsUiController.resolveActivity()).thenReturn(ControlsActivity::class.java)
        `when`(controlsController.getPreferredSelection())
            .thenReturn(
                SelectedItem.StructureItem(
                    StructureInfo(
                        ComponentName("pkg", "cls"),
                        "structure",
                        listOf(ControlInfo("id", "title", "subtitle", 1)),
                    )
                )
            )

        listingCallbackCaptor.value.onServicesUpdated(listOf(serviceInfo))
        testableLooper.processAllMessages()

        `when`(controlsUiController.isShowing).thenReturn(true)

        tile.click(null)
        testableLooper.processAllMessages()

        verify(activityStarter, never())
            .startActivity(
                any(),
                anyBoolean(),
                nullable(ActivityTransitionAnimator.Controller::class.java),
                anyBoolean(),
            )
        verify(panelInteractor).collapsePanels()
    }

    @Test
    fun handleClick_available_shownOverLockscreenWhenLocked() {
        verify(controlsListingController)
@@ -441,6 +479,7 @@ class DeviceControlsTileTest(flags: FlagsParameterization) : SysuiTestCase() {
                activityStarter,
                qsLogger,
                controlsComponent,
                panelInteractor,
            )
            .also {
                it.initialize()
+12 −6
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.qs.QSHost
import com.android.systemui.qs.QsEventLogger
import com.android.systemui.qs.logging.QSLogger
import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor
import com.android.systemui.qs.tileimpl.QSTileImpl
import com.android.systemui.res.R
import java.util.concurrent.atomic.AtomicBoolean
@@ -58,6 +59,7 @@ constructor(
    activityStarter: ActivityStarter,
    qsLogger: QSLogger,
    private val controlsComponent: ControlsComponent,
    private val panelInteractor: PanelInteractor,
) :
    QSTileImpl<QSTile.State>(
        host,
@@ -125,6 +127,9 @@ constructor(

        mUiHandler.post {
            val showOverLockscreenWhenLocked = state.state == Tile.STATE_ACTIVE
            if (controlsComponent.getControlsUiController().get().isShowing) {
                panelInteractor.collapsePanels()
            } else {
                mActivityStarter.startActivity(
                    intent,
                    true /* dismissShade */,
@@ -133,6 +138,7 @@ constructor(
                )
            }
        }
    }

    override fun handleUpdateState(state: QSTile.State, arg: Any?) {
        state.label = tileLabel