summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Fabián Kozynski <kozynski@google.com> 2023-05-22 16:14:25 -0400
committer Fabián Kozynski <kozynski@google.com> 2023-05-22 16:16:47 -0400
commitcaddfda9a7c47aaae1777304a6ff3be7ba690d72 (patch)
tree23d450e52ab650ad597cf13c6e7a9eb9743115f7
parentb8ef48898be6777280d11479e6a5bb0edad4c1fb (diff)
Restrict panel to supportMultiWindow
If a device doesn't support multi window, we cannot use taskview. In those cases, ignore panel information. Test: manual, forcing low mem Test: atest ControlsListingControllerImplTest Bug: 283410715 Change-Id: I6e20df7105f404eeedd3d053827d9cbdecbc61f1
-rw-r--r--packages/SystemUI/src/com/android/systemui/controls/management/ControlsListingControllerImpl.kt16
-rw-r--r--packages/SystemUI/src/com/android/systemui/util/ActivityTaskManagerProxy.kt30
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsListingControllerImplTest.kt33
3 files changed, 77 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsListingControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsListingControllerImpl.kt
index 8ba060e02c3d..1eba66765ce3 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsListingControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsListingControllerImpl.kt
@@ -35,6 +35,7 @@ import com.android.systemui.dump.DumpManager
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags
import com.android.systemui.settings.UserTracker
+import com.android.systemui.util.ActivityTaskManagerProxy
import com.android.systemui.util.asIndenting
import com.android.systemui.util.indentIfPossible
import java.io.PrintWriter
@@ -67,6 +68,7 @@ class ControlsListingControllerImpl @VisibleForTesting constructor(
@Background private val backgroundExecutor: Executor,
private val serviceListingBuilder: (Context) -> ServiceListing,
private val userTracker: UserTracker,
+ private val activityTaskManagerProxy: ActivityTaskManagerProxy,
dumpManager: DumpManager,
private val featureFlags: FeatureFlags
) : ControlsListingController, Dumpable {
@@ -76,9 +78,18 @@ class ControlsListingControllerImpl @VisibleForTesting constructor(
context: Context,
@Background executor: Executor,
userTracker: UserTracker,
+ activityTaskManagerProxy: ActivityTaskManagerProxy,
dumpManager: DumpManager,
featureFlags: FeatureFlags
- ) : this(context, executor, ::createServiceListing, userTracker, dumpManager, featureFlags)
+ ) : this(
+ context,
+ executor,
+ ::createServiceListing,
+ userTracker,
+ activityTaskManagerProxy,
+ dumpManager,
+ featureFlags
+ )
private var serviceListing = serviceListingBuilder(context)
// All operations in background thread
@@ -113,7 +124,8 @@ class ControlsListingControllerImpl @VisibleForTesting constructor(
}
private fun updateServices(newServices: List<ControlsServiceInfo>) {
- if (featureFlags.isEnabled(Flags.USE_APP_PANELS)) {
+ if (featureFlags.isEnabled(Flags.USE_APP_PANELS) &&
+ activityTaskManagerProxy.supportsMultiWindow(context)) {
val allowAllApps = featureFlags.isEnabled(Flags.APP_PANELS_ALL_APPS_ALLOWED)
newServices.forEach {
it.resolvePanelActivity(allowAllApps) }
diff --git a/packages/SystemUI/src/com/android/systemui/util/ActivityTaskManagerProxy.kt b/packages/SystemUI/src/com/android/systemui/util/ActivityTaskManagerProxy.kt
new file mode 100644
index 000000000000..6e82cf673307
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/util/ActivityTaskManagerProxy.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.util
+
+import android.app.ActivityTaskManager
+import android.content.Context
+import com.android.systemui.dagger.SysUISingleton
+import javax.inject.Inject
+
+/** Proxy for static calls to [ActivityTaskManager]. */
+@SysUISingleton
+class ActivityTaskManagerProxy @Inject constructor() {
+
+ /** Calls [ActivityTaskManager.supportsMultiWindow] */
+ fun supportsMultiWindow(context: Context) = ActivityTaskManager.supportsMultiWindow(context)
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsListingControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsListingControllerImplTest.kt
index 10bfc1b292d3..ee213f7c4257 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsListingControllerImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsListingControllerImplTest.kt
@@ -39,6 +39,7 @@ import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags.APP_PANELS_ALL_APPS_ALLOWED
import com.android.systemui.flags.Flags.USE_APP_PANELS
import com.android.systemui.settings.UserTracker
+import com.android.systemui.util.ActivityTaskManagerProxy
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.argThat
@@ -88,6 +89,8 @@ class ControlsListingControllerImplTest : SysuiTestCase() {
private lateinit var packageManager: PackageManager
@Mock
private lateinit var featureFlags: FeatureFlags
+ @Mock
+ private lateinit var activityTaskManagerProxy: ActivityTaskManagerProxy
private var componentName = ComponentName("pkg", "class1")
private var activityName = ComponentName("pkg", "activity")
@@ -112,6 +115,7 @@ class ControlsListingControllerImplTest : SysuiTestCase() {
// Return disabled by default
`when`(packageManager.getComponentEnabledSetting(any()))
.thenReturn(PackageManager.COMPONENT_ENABLED_STATE_DISABLED)
+ `when`(activityTaskManagerProxy.supportsMultiWindow(any())).thenReturn(true)
mContext.setMockPackageManager(packageManager)
mContext.orCreateTestableResources
@@ -136,6 +140,7 @@ class ControlsListingControllerImplTest : SysuiTestCase() {
executor,
{ mockSL },
userTracker,
+ activityTaskManagerProxy,
dumpManager,
featureFlags
)
@@ -171,6 +176,7 @@ class ControlsListingControllerImplTest : SysuiTestCase() {
exec,
{ mockServiceListing },
userTracker,
+ activityTaskManagerProxy,
dumpManager,
featureFlags
)
@@ -637,7 +643,34 @@ class ControlsListingControllerImplTest : SysuiTestCase() {
assertThat(services[0].serviceInfo.componentName).isEqualTo(componentName)
}
+ @Test
+ fun testNoPanelIfMultiWindowNotSupported() {
+ `when`(activityTaskManagerProxy.supportsMultiWindow(any())).thenReturn(false)
+
+ val serviceInfo = ServiceInfo(
+ componentName,
+ activityName
+ )
+
+ `when`(packageManager.getComponentEnabledSetting(eq(activityName)))
+ .thenReturn(PackageManager.COMPONENT_ENABLED_STATE_DEFAULT)
+
+ setUpQueryResult(listOf(
+ ActivityInfo(
+ activityName,
+ enabled = true,
+ exported = true,
+ permission = Manifest.permission.BIND_CONTROLS
+ )
+ ))
+
+ val list = listOf(serviceInfo)
+ serviceListingCallbackCaptor.value.onServicesReloaded(list)
+ executor.runAllReady()
+
+ assertNull(controller.getCurrentServices()[0].panelActivity)
+ }
private fun ServiceInfo(
componentName: ComponentName,