Loading packages/SystemUI/src/com/android/systemui/controls/ControlsServiceInfo.kt +6 −1 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.os.UserHandle import android.service.controls.ControlsProviderService import androidx.annotation.WorkerThread import com.android.settingslib.applications.DefaultAppInfo import com.android.systemui.R import java.util.Objects class ControlsServiceInfo( Loading Loading @@ -59,7 +60,8 @@ class ControlsServiceInfo( * instead of using the controls rendered by SystemUI. * * The activity must be in the same package, exported, enabled and protected by the * [Manifest.permission.BIND_CONTROLS] permission. * [Manifest.permission.BIND_CONTROLS] permission. Additionally, only packages declared in * [R.array.config_controlsPreferredPackages] can declare activities for use as a panel. */ var panelActivity: ComponentName? = null private set Loading @@ -70,6 +72,9 @@ class ControlsServiceInfo( fun resolvePanelActivity() { if (resolved) return resolved = true val validPackages = context.resources .getStringArray(R.array.config_controlsPreferredPackages) if (componentName.packageName !in validPackages) return panelActivity = _panelActivity?.let { val resolveInfos = mPm.queryIntentActivitiesAsUser( Intent().setComponent(it), Loading packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsListingControllerImplTest.kt +36 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.service.controls.ControlsProviderService import android.testing.AndroidTestingRunner import androidx.test.filters.SmallTest import com.android.settingslib.applications.ServiceListing import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.controls.ControlsServiceInfo import com.android.systemui.dump.DumpManager Loading Loading @@ -110,6 +111,12 @@ class ControlsListingControllerImplTest : SysuiTestCase() { .thenReturn(PackageManager.COMPONENT_ENABLED_STATE_DISABLED) mContext.setMockPackageManager(packageManager) mContext.orCreateTestableResources .addOverride( R.array.config_controlsPreferredPackages, arrayOf(componentName.packageName) ) // Return true by default, we'll test the false path `when`(featureFlags.isEnabled(USE_APP_PANELS)).thenReturn(true) Loading Loading @@ -481,6 +488,35 @@ class ControlsListingControllerImplTest : SysuiTestCase() { assertNull(controller.getCurrentServices()[0].panelActivity) } @Test fun testPackageNotPreferred_nullPanel() { mContext.orCreateTestableResources .addOverride(R.array.config_controlsPreferredPackages, arrayOf<String>()) val serviceInfo = ServiceInfo( componentName, activityName ) `when`(packageManager.getComponentEnabledSetting(eq(activityName))) .thenReturn(PackageManager.COMPONENT_ENABLED_STATE_ENABLED) setUpQueryResult(listOf( ActivityInfo( activityName, exported = true, permission = Manifest.permission.BIND_CONTROLS ) )) val list = listOf(serviceInfo) serviceListingCallbackCaptor.value.onServicesReloaded(list) executor.runAllReady() assertNull(controller.getCurrentServices()[0].panelActivity) } @Test fun testListingsNotModifiedByCallback() { // This test checks that if the list passed to the callback is modified, it has no effect Loading Loading
packages/SystemUI/src/com/android/systemui/controls/ControlsServiceInfo.kt +6 −1 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.os.UserHandle import android.service.controls.ControlsProviderService import androidx.annotation.WorkerThread import com.android.settingslib.applications.DefaultAppInfo import com.android.systemui.R import java.util.Objects class ControlsServiceInfo( Loading Loading @@ -59,7 +60,8 @@ class ControlsServiceInfo( * instead of using the controls rendered by SystemUI. * * The activity must be in the same package, exported, enabled and protected by the * [Manifest.permission.BIND_CONTROLS] permission. * [Manifest.permission.BIND_CONTROLS] permission. Additionally, only packages declared in * [R.array.config_controlsPreferredPackages] can declare activities for use as a panel. */ var panelActivity: ComponentName? = null private set Loading @@ -70,6 +72,9 @@ class ControlsServiceInfo( fun resolvePanelActivity() { if (resolved) return resolved = true val validPackages = context.resources .getStringArray(R.array.config_controlsPreferredPackages) if (componentName.packageName !in validPackages) return panelActivity = _panelActivity?.let { val resolveInfos = mPm.queryIntentActivitiesAsUser( Intent().setComponent(it), Loading
packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsListingControllerImplTest.kt +36 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.service.controls.ControlsProviderService import android.testing.AndroidTestingRunner import androidx.test.filters.SmallTest import com.android.settingslib.applications.ServiceListing import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.controls.ControlsServiceInfo import com.android.systemui.dump.DumpManager Loading Loading @@ -110,6 +111,12 @@ class ControlsListingControllerImplTest : SysuiTestCase() { .thenReturn(PackageManager.COMPONENT_ENABLED_STATE_DISABLED) mContext.setMockPackageManager(packageManager) mContext.orCreateTestableResources .addOverride( R.array.config_controlsPreferredPackages, arrayOf(componentName.packageName) ) // Return true by default, we'll test the false path `when`(featureFlags.isEnabled(USE_APP_PANELS)).thenReturn(true) Loading Loading @@ -481,6 +488,35 @@ class ControlsListingControllerImplTest : SysuiTestCase() { assertNull(controller.getCurrentServices()[0].panelActivity) } @Test fun testPackageNotPreferred_nullPanel() { mContext.orCreateTestableResources .addOverride(R.array.config_controlsPreferredPackages, arrayOf<String>()) val serviceInfo = ServiceInfo( componentName, activityName ) `when`(packageManager.getComponentEnabledSetting(eq(activityName))) .thenReturn(PackageManager.COMPONENT_ENABLED_STATE_ENABLED) setUpQueryResult(listOf( ActivityInfo( activityName, exported = true, permission = Manifest.permission.BIND_CONTROLS ) )) val list = listOf(serviceInfo) serviceListingCallbackCaptor.value.onServicesReloaded(list) executor.runAllReady() assertNull(controller.getCurrentServices()[0].panelActivity) } @Test fun testListingsNotModifiedByCallback() { // This test checks that if the list passed to the callback is modified, it has no effect Loading