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 + ) + } + } }