fix(cast): use modern cast menus

This commit is contained in:
2026-07-28 19:47:50 +02:00
parent 099eeabe18
commit 3739e760cf
5 changed files with 26 additions and 1 deletions
+1 -1
View File
@@ -151,7 +151,7 @@ dependencies {
implementation("androidx.media3:media3-exoplayer-hls:1.10.0")
implementation("androidx.media3:media3-cast:1.10.0")
implementation("com.google.android.gms:play-services-cast-framework:21.5.0")
implementation("com.google.android.gms:play-services-cast-framework:22.3.1")
implementation("androidx.mediarouter:mediarouter:1.7.0")
}
@@ -13,6 +13,7 @@ class OmniCastOptionsProvider : OptionsProvider {
return CastOptions.Builder()
.setReceiverApplicationId(appId)
.setShowSystemOutputSwitcherOnCastIconClick(true)
.build()
}
@@ -37,6 +37,7 @@ import androidx.media3.session.DefaultMediaNotificationProvider
import androidx.media3.session.MediaSession
import androidx.media3.session.MediaSessionService
import androidx.mediarouter.app.MediaRouteChooserDialog
import androidx.mediarouter.app.SystemOutputSwitcherDialogController
import com.google.android.gms.cast.framework.CastContext
import com.google.android.gms.cast.framework.CastState
import com.google.android.gms.cast.framework.CastStateListener
@@ -147,6 +148,9 @@ class OmniPlayer(
return@runOnMainThread
}
val activity = ctx.currentActivity ?: return@runOnMainThread
if (SystemOutputSwitcherDialogController.showDialog(activity)) {
return@runOnMainThread
}
val selector = cc.mergedSelector ?: return@runOnMainThread
MediaRouteChooserDialog(activity).apply { routeSelector = selector }.show()
}
@@ -28,5 +28,8 @@
<meta-data
android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
android:value="dev.zoriya.omni.OmniCastOptionsProvider" />
<receiver
android:name="androidx.mediarouter.media.MediaTransferReceiver"
android:exported="true" />
</application>
</manifest>
+17
View File
@@ -7,6 +7,8 @@ import {
const OPTIONS_PROVIDER_NAME =
"com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME";
const OPTIONS_PROVIDER_VALUE = "dev.zoriya.omni.OmniCastOptionsProvider";
const MEDIA_TRANSFER_RECEIVER_NAME =
"androidx.mediarouter.media.MediaTransferReceiver";
function patchManifestForCast(
androidManifest: AndroidConfig.Manifest.AndroidManifest,
@@ -36,6 +38,21 @@ function patchManifestForCast(
}
mainApplication["meta-data"] = metaData;
const receivers = mainApplication.receiver ?? [];
if (
!receivers.some(
(item) => item.$["android:name"] === MEDIA_TRANSFER_RECEIVER_NAME,
)
) {
receivers.push({
$: {
"android:name": MEDIA_TRANSFER_RECEIVER_NAME,
"android:exported": "true",
},
});
}
mainApplication.receiver = receivers;
return androidManifest;
}