diff options
5 files changed, 61 insertions, 12 deletions
diff --git a/core/java/com/android/internal/app/MediaRouteDialogPresenter.java b/core/java/com/android/internal/app/MediaRouteDialogPresenter.java index 5628b7ed9d15..76b289416076 100644 --- a/core/java/com/android/internal/app/MediaRouteDialogPresenter.java +++ b/core/java/com/android/internal/app/MediaRouteDialogPresenter.java @@ -86,10 +86,7 @@ public abstract class MediaRouteDialogPresenter { public static Dialog createDialog(Context context, int routeTypes, View.OnClickListener extendedSettingsClickListener, int theme, boolean showProgressBarWhenEmpty) { - final MediaRouter router = context.getSystemService(MediaRouter.class); - - MediaRouter.RouteInfo route = router.getSelectedRoute(); - if (route.isDefault() || !route.matchesTypes(routeTypes)) { + if (shouldShowChooserDialog(context, routeTypes)) { final MediaRouteChooserDialog d = new MediaRouteChooserDialog(context, theme, showProgressBarWhenEmpty); d.setRouteTypes(routeTypes); @@ -99,4 +96,11 @@ public abstract class MediaRouteDialogPresenter { return new MediaRouteControllerDialog(context, theme); } } + + /** Whether we should show the chooser dialog or the controller dialog.. */ + public static boolean shouldShowChooserDialog(Context context, int routeTypes) { + final MediaRouter router = context.getSystemService(MediaRouter.class); + MediaRouter.RouteInfo route = router.getSelectedRoute(); + return route.isDefault() || !route.matchesTypes(routeTypes); + } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/TileDetails.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/TileDetails.kt index 098e14c53f72..f3ed07a8a753 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/TileDetails.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/TileDetails.kt @@ -157,7 +157,7 @@ private fun MapTileDetailsContent(tileDetailsViewModel: TileDetailsViewModel) { is BluetoothDetailsViewModel -> BluetoothDetailsContent(tileDetailsViewModel.detailsContentViewModel) is ModesDetailsViewModel -> ModesDetailsContent(tileDetailsViewModel) - is CastDetailsViewModel -> CastDetailsContent() + is CastDetailsViewModel -> CastDetailsContent(tileDetailsViewModel) } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java index 349c771048dc..49ec1baeeeee 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java @@ -192,7 +192,8 @@ public class CastTile extends QSTileImpl<BooleanState> { @Override public boolean getDetailsViewModel(Consumer<TileDetailsViewModel> callback) { - CastDetailsViewModel viewModel = mCastDetailsViewModelFactory.create(); + CastDetailsViewModel viewModel = mCastDetailsViewModelFactory + .create(mShadeDialogContextInteractor.getContext(), ROUTE_TYPE_REMOTE_DISPLAY); handleClick(() -> { if (!mKeyguard.isShowing()) { callback.accept(viewModel); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/CastDetailsContent.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/CastDetailsContent.kt index e31108ea450b..cd33c964ce1b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/CastDetailsContent.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/CastDetailsContent.kt @@ -20,18 +20,34 @@ import android.view.LayoutInflater import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.viewinterop.AndroidView import com.android.internal.R +import com.android.internal.app.MediaRouteControllerContentManager @Composable -fun CastDetailsContent() { - // TODO(b/378514236): Finish implementing this function. +fun CastDetailsContent(castDetailsViewModel: CastDetailsViewModel) { + if (castDetailsViewModel.shouldShowChooserDialog()) { + // TODO(b/378514236): Show the chooser UI here. + return + } + + val contentManager: MediaRouteControllerContentManager = remember { + castDetailsViewModel.createControllerContentManager() + } + AndroidView( modifier = Modifier.fillMaxWidth().fillMaxHeight(), factory = { context -> // Inflate with the existing dialog xml layout - LayoutInflater.from(context).inflate(R.layout.media_route_controller_dialog, null) + val view = + LayoutInflater.from(context).inflate(R.layout.media_route_controller_dialog, null) + contentManager.bindViews(view) + contentManager.onAttachedToWindow() + + view }, + onRelease = { contentManager.onDetachedFromWindow() }, ) } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/CastDetailsViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/CastDetailsViewModel.kt index 10f719fd41cc..72322eff8bed 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/CastDetailsViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/CastDetailsViewModel.kt @@ -16,21 +16,37 @@ package com.android.systemui.qs.tiles.dialog +import android.content.Context import android.content.Intent +import android.graphics.drawable.Drawable import android.provider.Settings +import com.android.internal.app.MediaRouteControllerContentManager +import com.android.internal.app.MediaRouteDialogPresenter import com.android.systemui.plugins.qs.TileDetailsViewModel import com.android.systemui.qs.tiles.base.domain.actions.QSTileIntentUserInputHandler +import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject /** The view model used for the screen record details view in the Quick Settings */ class CastDetailsViewModel @AssistedInject -constructor(private val qsTileIntentUserActionHandler: QSTileIntentUserInputHandler) : - TileDetailsViewModel { +constructor( + private val qsTileIntentUserActionHandler: QSTileIntentUserInputHandler, + @Assisted private val context: Context, + @Assisted private val routeTypes: Int, +) : MediaRouteControllerContentManager.Delegate, TileDetailsViewModel { @AssistedFactory fun interface Factory { - fun create(): CastDetailsViewModel + fun create(context: Context, routeTypes: Int): CastDetailsViewModel + } + + fun shouldShowChooserDialog(): Boolean { + return MediaRouteDialogPresenter.shouldShowChooserDialog(context, routeTypes) + } + + fun createControllerContentManager(): MediaRouteControllerContentManager { + return MediaRouteControllerContentManager(context, this) } override fun clickOnSettingsButton() { @@ -47,4 +63,16 @@ constructor(private val qsTileIntentUserActionHandler: QSTileIntentUserInputHand // TODO(b/388321032): Replace this string with a string in a translatable xml file, override val subTitle: String get() = "Searching for devices..." + + override fun setMediaRouteDeviceTitle(title: CharSequence?) { + // TODO(b/378514236): Finish implementing this function. + } + + override fun setMediaRouteDeviceIcon(icon: Drawable?) { + // TODO(b/378514236): Finish implementing this function. + } + + override fun dismissView() { + // TODO(b/378514236): Finish implementing this function. + } } |