From 2d2b24f09db37da6dbe4b77b869969ac46c5dbaf Mon Sep 17 00:00:00 2001 From: Nick Chameyev Date: Fri, 5 Aug 2022 16:36:46 +0000 Subject: [PATCH] [Partial Screensharing] Update app selector (ChooserActivity) header Updates title style (increases font size), adds an icon and hides the drag handle for media projection app selector activity which is based on ChooserActivity. Bug: 235465652 Test: atest com.android.internal.app.ChooserActivityTest Test: screenshot test in a follow-up CL Change-Id: Ib717d3f7e6132d56e8344f4e06a12a64ee63457b --- .../android/internal/app/ChooserActivity.java | 2 + core/res/res/values/symbols.xml | 5 + .../res/drawable/ic_present_to_all.xml | 25 +++++ .../layout/media_projection_app_selector.xml | 92 +++++++++++++++++++ packages/SystemUI/res/values/dimens.xml | 2 + .../MediaProjectionAppSelectorActivity.kt | 30 ++++-- .../media/dagger/MediaProjectionModule.kt | 14 ++- 7 files changed, 160 insertions(+), 10 deletions(-) create mode 100644 packages/SystemUI/res/drawable/ic_present_to_all.xml create mode 100644 packages/SystemUI/res/layout/media_projection_app_selector.xml diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java index fbabf52d096ec..ccffddaad26cd 100644 --- a/core/java/com/android/internal/app/ChooserActivity.java +++ b/core/java/com/android/internal/app/ChooserActivity.java @@ -1619,6 +1619,8 @@ public class ChooserActivity extends ResolverActivity implements if (mChooserMultiProfilePagerAdapter.getInactiveListAdapter() != null) { mChooserMultiProfilePagerAdapter.getInactiveListAdapter().destroyAppPredictor(); } + mPersonalAppPredictor = null; + mWorkAppPredictor = null; } @Override // ResolverListCommunicator diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index d03550c1777c1..6c7e3867316e1 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -79,6 +79,11 @@ + + + + + diff --git a/packages/SystemUI/res/drawable/ic_present_to_all.xml b/packages/SystemUI/res/drawable/ic_present_to_all.xml new file mode 100644 index 0000000000000..d6c9bbe0960ef --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_present_to_all.xml @@ -0,0 +1,25 @@ + + + + diff --git a/packages/SystemUI/res/layout/media_projection_app_selector.xml b/packages/SystemUI/res/layout/media_projection_app_selector.xml new file mode 100644 index 0000000000000..4ad6849e9c45d --- /dev/null +++ b/packages/SystemUI/res/layout/media_projection_app_selector.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 8ea2c0cbe8f57..f3d4c1c2f3c5c 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -1446,6 +1446,8 @@ 12dp + 32dp + 60dp 40dp diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionAppSelectorActivity.kt b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionAppSelectorActivity.kt index 53abd9948d030..0f1ee31e066ec 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionAppSelectorActivity.kt +++ b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionAppSelectorActivity.kt @@ -23,35 +23,47 @@ import android.os.Binder import android.os.Bundle import android.os.IBinder import android.os.ResultReceiver -import android.view.View +import android.os.UserHandle +import android.widget.ImageView 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.internal.annotations.VisibleForTesting; import com.android.systemui.util.AsyncActivityLauncher -import com.android.systemui.R; -import javax.inject.Inject +import com.android.systemui.R +import com.android.internal.R as AndroidR -class MediaProjectionAppSelectorActivity @Inject constructor( - private val activityLauncher: AsyncActivityLauncher +class MediaProjectionAppSelectorActivity constructor( + private val activityLauncher: AsyncActivityLauncher, + /** This is used to override the dependency in a screenshot test */ + @VisibleForTesting + private val listControllerFactory: ((userHandle: UserHandle) -> ResolverListController)? = null ) : ChooserActivity() { + override fun getLayoutResource() = + R.layout.media_projection_app_selector + public override fun onCreate(bundle: Bundle?) { val queryIntent = Intent(Intent.ACTION_MAIN) .addCategory(Intent.CATEGORY_LAUNCHER) intent.putExtra(Intent.EXTRA_INTENT, queryIntent) - // TODO(b/235465652) Use resource lexeme - intent.putExtra(Intent.EXTRA_TITLE, "Record or cast an app") + // TODO(b/240939253): update copies + val title = getString(R.string.media_projection_dialog_service_title) + intent.putExtra(Intent.EXTRA_TITLE, title) super.onCreate(bundle) - // TODO(b/235465652) we should update VisD of the title and add an icon - findViewById(R.id.title)?.visibility = View.VISIBLE + requireViewById(AndroidR.id.icon).setImageResource(R.drawable.ic_present_to_all) } override fun appliedThemeResId(): Int = R.style.Theme_SystemUI_MediaProjectionAppSelector + 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 diff --git a/packages/SystemUI/src/com/android/systemui/media/dagger/MediaProjectionModule.kt b/packages/SystemUI/src/com/android/systemui/media/dagger/MediaProjectionModule.kt index e33a1b909d482..9696998340240 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dagger/MediaProjectionModule.kt +++ b/packages/SystemUI/src/com/android/systemui/media/dagger/MediaProjectionModule.kt @@ -18,8 +18,10 @@ package com.android.systemui.media.dagger import android.app.Activity import com.android.systemui.media.MediaProjectionAppSelectorActivity +import com.android.systemui.util.AsyncActivityLauncher import dagger.Binds import dagger.Module +import dagger.Provides import dagger.multibindings.ClassKey import dagger.multibindings.IntoMap @@ -29,7 +31,17 @@ abstract class MediaProjectionModule { @Binds @IntoMap @ClassKey(MediaProjectionAppSelectorActivity::class) - abstract fun provideMediaProjectionAppSelectorActivity( + abstract fun bindMediaProjectionAppSelectorActivity( activity: MediaProjectionAppSelectorActivity): Activity + companion object { + @Provides + fun provideMediaProjectionAppSelectorActivity( + activityLauncher: AsyncActivityLauncher + ): MediaProjectionAppSelectorActivity { + return MediaProjectionAppSelectorActivity( + activityLauncher + ) + } + } }