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