diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java
index 90d710ed9dbb4..a7322a568eaa8 100644
--- a/core/java/com/android/internal/app/ChooserActivity.java
+++ b/core/java/com/android/internal/app/ChooserActivity.java
@@ -1632,6 +1632,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 94dc7ce06bd84..72831ae71ff46 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 e3be36503c873..e5e369ea79392 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -1440,6 +1440,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
+ )
+ }
+ }
}