From 0ecc106495b4f3b53da3d3b5df2a4d974e7a9ea1 Mon Sep 17 00:00:00 2001
From: Mark Renouf <mrenouf@google.com>
Date: Fri, 4 Aug 2023 11:14:37 -0400
Subject: [PATCH] Revert "Partial Screen Sharing - Use new app chooser base
 class"

Revert submission 23792411-pss-new-chooser-qpr

Reason for revert: Additional dependency collided with ongoing
development. Most of the a11y bugs motivating this seem to be specific
to partial screenshare, so this ended up adding cost to Chooser
development without clearly solving the underlying issue.. Need to
regroup on a more sustainable solution to this.

Bug: 294040231
Test: Presubmits

Reverted changes: /q/submissionid:23792411-pss-new-chooser-qpr

Change-Id: I3a8be177fdd93fc7414e610019476ceeb40c9e7d
---
 data/etc/com.android.systemui.xml             |  1 -
 packages/SystemUI/Android.bp                  |  2 -
 .../layout/media_projection_app_selector.xml  |  6 +--
 .../MediaProjectionAppSelectorActivity.kt     | 49 ++++++++++++++++---
 ...ediaProjectionBlockerEmptyStateProvider.kt |  6 +--
 5 files changed, 47 insertions(+), 17 deletions(-)

diff --git a/data/etc/com.android.systemui.xml b/data/etc/com.android.systemui.xml
index c6a9033210e3..43683ffad432 100644
--- a/data/etc/com.android.systemui.xml
+++ b/data/etc/com.android.systemui.xml
@@ -87,6 +87,5 @@
         <permission name="android.permission.SET_UNRESTRICTED_KEEP_CLEAR_AREAS" />
         <permission name="android.permission.READ_SEARCH_INDEXABLES" />
         <permission name="android.permission.ACCESS_AMBIENT_CONTEXT_EVENT"/>
-        <permission name="android.permission.QUERY_CLONED_APPS"/>
     </privapp-permissions>
 </permissions>
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index 01b47ead659d..851f976d5246 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -200,7 +200,6 @@ android_library {
         "lottie",
         "LowLightDreamLib",
         "motion_tool_lib",
-        "IntentResolver-core",
     ],
     manifest: "AndroidManifest.xml",
 
@@ -384,7 +383,6 @@ android_library {
         "motion_tool_lib",
         "androidx.core_core-animation-testing-nodeps",
         "androidx.compose.ui_ui",
-        "IntentResolver-core",
     ],
 }
 
diff --git a/packages/SystemUI/res/layout/media_projection_app_selector.xml b/packages/SystemUI/res/layout/media_projection_app_selector.xml
index 5404cfad25c5..e4749381243a 100644
--- a/packages/SystemUI/res/layout/media_projection_app_selector.xml
+++ b/packages/SystemUI/res/layout/media_projection_app_selector.xml
@@ -14,7 +14,7 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<com.android.intentresolver.widget.ResolverDrawerLayout
+<com.android.internal.widget.ResolverDrawerLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
     android:layout_width="match_parent"
@@ -84,7 +84,7 @@
                 android:id="@*android:id/tabcontent"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content">
-                <com.android.intentresolver.ResolverViewPager
+                <com.android.internal.app.ResolverViewPager
                     android:id="@*android:id/profile_pager"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"/>
@@ -92,4 +92,4 @@
         </LinearLayout>
     </TabHost>
 
-</com.android.intentresolver.widget.ResolverDrawerLayout>
+</com.android.internal.widget.ResolverDrawerLayout>
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionAppSelectorActivity.kt b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionAppSelectorActivity.kt
index 20a75f96464d..8f884d24ad21 100644
--- a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionAppSelectorActivity.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionAppSelectorActivity.kt
@@ -30,11 +30,16 @@ import android.os.IBinder
 import android.os.ResultReceiver
 import android.os.UserHandle
 import android.view.ViewGroup
-import com.android.intentresolver.AbstractMultiProfilePagerAdapter.EmptyStateProvider
-import com.android.intentresolver.AbstractMultiProfilePagerAdapter.MyUserIdProvider
-import com.android.intentresolver.ChooserActivity
-import com.android.intentresolver.chooser.TargetInfo
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.LifecycleRegistry
 import com.android.internal.annotations.VisibleForTesting
+import com.android.internal.app.AbstractMultiProfilePagerAdapter.EmptyStateProvider
+import com.android.internal.app.AbstractMultiProfilePagerAdapter.MyUserIdProvider
+import com.android.internal.app.ChooserActivity
+import com.android.internal.app.ResolverListController
+import com.android.internal.app.chooser.NotSelectableTargetInfo
+import com.android.internal.app.chooser.TargetInfo
 import com.android.systemui.R
 import com.android.systemui.mediaprojection.appselector.MediaProjectionAppSelectorComponent
 import com.android.systemui.mediaprojection.appselector.MediaProjectionAppSelectorController
@@ -51,8 +56,12 @@ class MediaProjectionAppSelectorActivity(
     private val activityLauncher: AsyncActivityLauncher,
     /** This is used to override the dependency in a screenshot test */
     @VisibleForTesting
-    private val listControllerFactory: ((userHandle: UserHandle) -> ChooserListController)?
-) : ChooserActivity(), MediaProjectionAppSelectorView, MediaProjectionAppSelectorResultHandler {
+    private val listControllerFactory: ((userHandle: UserHandle) -> ResolverListController)?
+) :
+    ChooserActivity(),
+    MediaProjectionAppSelectorView,
+    MediaProjectionAppSelectorResultHandler,
+    LifecycleOwner {
 
     @Inject
     constructor(
@@ -60,6 +69,8 @@ class MediaProjectionAppSelectorActivity(
         activityLauncher: AsyncActivityLauncher
     ) : this(componentFactory, activityLauncher, listControllerFactory = null)
 
+    private val lifecycleRegistry = LifecycleRegistry(this)
+    override val lifecycle = lifecycleRegistry
     private lateinit var configurationController: ConfigurationController
     private lateinit var controller: MediaProjectionAppSelectorController
     private lateinit var recentsViewController: MediaProjectionRecentsViewController
@@ -73,6 +84,7 @@ class MediaProjectionAppSelectorActivity(
     override fun getLayoutResource() = R.layout.media_projection_app_selector
 
     public override fun onCreate(bundle: Bundle?) {
+        lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE)
         component = componentFactory.create(activity = this, view = this, resultHandler = this)
         component.lifecycleObservers.forEach { lifecycle.addObserver(it) }
 
@@ -95,6 +107,26 @@ class MediaProjectionAppSelectorActivity(
         controller.init()
     }
 
+    override fun onStart() {
+        super.onStart()
+        lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START)
+    }
+
+    override fun onResume() {
+        super.onResume()
+        lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME)
+    }
+
+    override fun onPause() {
+        lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE)
+        super.onPause()
+    }
+
+    override fun onStop() {
+        lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_STOP)
+        super.onStop()
+    }
+
     override fun onConfigurationChanged(newConfig: Configuration) {
         super.onConfigurationChanged(newConfig)
         configurationController.onConfigurationChanged(newConfig)
@@ -105,13 +137,13 @@ class MediaProjectionAppSelectorActivity(
     override fun createBlockerEmptyStateProvider(): EmptyStateProvider =
         component.emptyStateProvider
 
-    override fun createListController(userHandle: UserHandle): ChooserListController =
+    override fun createListController(userHandle: UserHandle): ResolverListController =
         listControllerFactory?.invoke(userHandle) ?: super.createListController(userHandle)
 
     override fun startSelected(which: Int, always: Boolean, filtered: Boolean) {
         val currentListAdapter = mChooserMultiProfilePagerAdapter.activeListAdapter
         val targetInfo = currentListAdapter.targetInfoForPosition(which, filtered) ?: return
-        if (targetInfo.isNotSelectableTargetInfo) return
+        if (targetInfo is NotSelectableTargetInfo) return
 
         val intent = createIntent(targetInfo)
 
@@ -151,6 +183,7 @@ class MediaProjectionAppSelectorActivity(
     }
 
     override fun onDestroy() {
+        lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY)
         component.lifecycleObservers.forEach { lifecycle.removeObserver(it) }
         // onDestroy is also called when an app is selected, in that case we only want to send
         // RECORD_CONTENT_TASK but not RECORD_CANCEL
diff --git a/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/MediaProjectionBlockerEmptyStateProvider.kt b/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/MediaProjectionBlockerEmptyStateProvider.kt
index fd14e2b9a96b..829b0ddbe3a8 100644
--- a/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/MediaProjectionBlockerEmptyStateProvider.kt
+++ b/packages/SystemUI/src/com/android/systemui/mediaprojection/appselector/MediaProjectionBlockerEmptyStateProvider.kt
@@ -17,10 +17,10 @@ package com.android.systemui.mediaprojection.appselector
 
 import android.content.Context
 import android.os.UserHandle
-import com.android.intentresolver.AbstractMultiProfilePagerAdapter.EmptyState
-import com.android.intentresolver.AbstractMultiProfilePagerAdapter.EmptyStateProvider
-import com.android.intentresolver.ResolverListAdapter
 import com.android.internal.R as AndroidR
+import com.android.internal.app.AbstractMultiProfilePagerAdapter.EmptyState
+import com.android.internal.app.AbstractMultiProfilePagerAdapter.EmptyStateProvider
+import com.android.internal.app.ResolverListAdapter
 import com.android.systemui.R
 import com.android.systemui.mediaprojection.devicepolicy.PersonalProfile
 import com.android.systemui.mediaprojection.devicepolicy.ScreenCaptureDevicePolicyResolver
-- 
GitLab