summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Andre Le <leandre@google.com> 2025-03-14 21:43:52 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2025-03-14 21:43:52 -0700
commit4c82a978e15a3b2e828594750fe7da6cdc91bef0 (patch)
tree252fce82da4c2cc12bc9af454cdb8a6953d258d9
parent6da88a8f5561e8c78ee57c5e2769a91ff4bf8b66 (diff)
parenta0ce374bf5eb8bd6ef3e6bc01d29b6c401b707a7 (diff)
Merge "Reland "CastDetailsView: Use controller content manager within the details view"" into main
-rw-r--r--core/java/com/android/internal/app/MediaRouteDialogPresenter.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/TileDetails.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/CastDetailsContent.kt22
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/CastDetailsViewModel.kt34
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.
+ }
}