From 2d2b24f09db37da6dbe4b77b869969ac46c5dbaf Mon Sep 17 00:00:00 2001 From: Nick Chameyev Date: Fri, 5 Aug 2022 16:36:46 +0000 Subject: [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 --- .../com/android/internal/app/ChooserActivity.java | 2 + core/res/res/values/symbols.xml | 5 ++ .../SystemUI/res/drawable/ic_present_to_all.xml | 25 ++++++ .../res/layout/media_projection_app_selector.xml | 92 ++++++++++++++++++++++ packages/SystemUI/res/values/dimens.xml | 2 + .../media/MediaProjectionAppSelectorActivity.kt | 32 +++++--- .../systemui/media/dagger/MediaProjectionModule.kt | 14 +++- 7 files changed, 161 insertions(+), 11 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 fbabf52d096e..ccffddaad26c 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 d03550c1777c..6c7e3867316e 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 000000000000..d6c9bbe0960e --- /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 000000000000..4ad6849e9c45 --- /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 8ea2c0cbe8f5..f3d4c1c2f3c5 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 53abd9948d03..0f1ee31e066e 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 - -class MediaProjectionAppSelectorActivity @Inject constructor( - private val activityLauncher: AsyncActivityLauncher +import com.android.systemui.R +import com.android.internal.R as AndroidR + +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 e33a1b909d48..969699834024 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 + ) + } + } } -- cgit v1.2.3-59-g8ed1b