diff options
author | 2025-03-13 21:17:22 +0000 | |
---|---|---|
committer | 2025-03-13 21:17:22 +0000 | |
commit | a0ce374bf5eb8bd6ef3e6bc01d29b6c401b707a7 (patch) | |
tree | 74f0ef938be1d93428751728962e0f22f13c88cd | |
parent | 055ad04aa22aca0070eaf449e17dbed275498d41 (diff) |
Reland "CastDetailsView: Use controller content manager within the
details view"
The original CL was reverted due to b/403313655. This is a clean reland
with no change needed.
Bug: 378514236
Flag: com.android.systemui.qs_tile_detailed_view
Test: CastTileTest
Test: Click on cast tile in the QS -> the cast controller show up
correctly in the details view
Change-Id: Id1033f12a3d363a18c321fb62ced2bfd61dac5f0
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 4cd875594b43..1cfc3d1f06be 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 @@ -133,7 +133,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. + } } |