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

Commit f839baa1 authored by Lucas Silva's avatar Lucas Silva
Browse files

Specify surface to existing control panel activity

Add intent extra to the existing panel activity to specify the surface
it is being shown on. Ensure this is only sent if the proper flag is
enabled.

Bug: 311743064
Flag: ACONFIG FLAG_HOME_PANEL_DREAM DEVELOPMENT
Test: atest ControlsUiControllerImplTest
Change-Id: Iba50a070ea2d2db24b03087d5bcdc0cd9c925e59
parent 997be753
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.graphics.drawable.LayerDrawable
import android.os.Trace
import android.service.controls.Control
import android.service.controls.ControlsProviderService
import android.service.controls.flags.Flags.homePanelDream
import android.util.Log
import android.view.ContextThemeWrapper
import android.view.Gravity
@@ -471,12 +472,17 @@ class ControlsUiControllerImpl @Inject constructor (
        val pendingIntent = PendingIntent.getActivityAsUser(
                context,
                0,
                Intent()
                        .setComponent(componentName)
                        .putExtra(
                Intent().apply {
                    component = componentName
                    putExtra(
                        ControlsProviderService.EXTRA_LOCKSCREEN_ALLOW_TRIVIAL_CONTROLS,
                        setting
                        ),
                    )
                    if (homePanelDream()) {
                        putExtra(ControlsProviderService.EXTRA_CONTROLS_SURFACE,
                            ControlsProviderService.CONTROLS_SURFACE_ACTIVITY_PANEL)
                    }
                },
                PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT,
                null,
                userTracker.userHandle
+49 −3
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.content.pm.ServiceInfo
import android.graphics.drawable.Drawable
import android.os.UserHandle
import android.service.controls.ControlsProviderService
import android.service.controls.flags.Flags.FLAG_HOME_PANEL_DREAM
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
import android.util.AttributeSet
@@ -33,7 +34,6 @@ import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.test.filters.SmallTest
import com.android.systemui.res.R
import com.android.systemui.SysuiTestCase
import com.android.systemui.controls.ControlsMetricsLogger
import com.android.systemui.controls.ControlsServiceInfo
@@ -49,6 +49,7 @@ import com.android.systemui.controls.settings.FakeControlsSettingsRepository
import com.android.systemui.dump.DumpManager
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.res.R
import com.android.systemui.settings.UserTracker
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.util.FakeSystemUIDialogController
@@ -271,6 +272,45 @@ class ControlsUiControllerImplTest : SysuiTestCase() {

    @Test
    fun testPanelControllerStartActivityWithCorrectArguments() {
        mSetFlagsRule.disableFlags(FLAG_HOME_PANEL_DREAM)
        mockLayoutInflater()
        val packageName = "pkg"
        `when`(authorizedPanelsRepository.getAuthorizedPanels()).thenReturn(setOf(packageName))
        controlsSettingsRepository.setAllowActionOnTrivialControlsInLockscreen(true)

        val panel = SelectedItem.PanelItem("App name", ComponentName(packageName, "cls"))
        val serviceInfo = setUpPanel(panel)

        underTest.show(parent, {}, context)

        val captor = argumentCaptor<ControlsListingController.ControlsListingCallback>()

        verify(controlsListingController).addCallback(capture(captor))

        captor.value.onServicesUpdated(listOf(serviceInfo))
        FakeExecutor.exhaustExecutors(uiExecutor, bgExecutor)

        val pendingIntent = verifyPanelCreatedAndStartTaskView()

        with(pendingIntent) {
            assertThat(isActivity).isTrue()
            assertThat(intent.component).isEqualTo(serviceInfo.panelActivity)
            assertThat(
                    intent.getBooleanExtra(
                        ControlsProviderService.EXTRA_LOCKSCREEN_ALLOW_TRIVIAL_CONTROLS,
                        false
                    )
                )
                .isTrue()
            // We should not include controls surface extra if the home panel dream flag is off.
            assertThat(intent.getIntExtra(ControlsProviderService.EXTRA_CONTROLS_SURFACE, -10))
                .isEqualTo(-10)
        }
    }

    @Test
    fun testPanelControllerStartActivityWithHomePanelDreamEnabled() {
        mSetFlagsRule.enableFlags(FLAG_HOME_PANEL_DREAM)
        mockLayoutInflater()
        val packageName = "pkg"
        `when`(authorizedPanelsRepository.getAuthorizedPanels()).thenReturn(setOf(packageName))
@@ -300,6 +340,9 @@ class ControlsUiControllerImplTest : SysuiTestCase() {
                    )
                )
                .isTrue()
            // We should not include controls surface extra if the home panel dream flag is off.
            assertThat(intent.getIntExtra(ControlsProviderService.EXTRA_CONTROLS_SURFACE, -10))
                .isEqualTo(ControlsProviderService.CONTROLS_SURFACE_ACTIVITY_PANEL)
        }
    }

@@ -365,8 +408,11 @@ class ControlsUiControllerImplTest : SysuiTestCase() {
        val selectedItems =
            listOf(
                SelectedItem.StructureItem(
                    StructureInfo(checkNotNull(ComponentName.unflattenFromString("pkg/.cls1")),
                        "a", ArrayList())
                    StructureInfo(
                        checkNotNull(ComponentName.unflattenFromString("pkg/.cls1")),
                        "a",
                        ArrayList()
                    )
                ),
            )
        preferredPanelRepository.setSelectedComponent(