diff --git a/app/src/foss/java/com/github/apognu/otter/utils/Cast.kt b/app/src/foss/java/com/github/apognu/otter/utils/Cast.kt
index eadcf46..805f81d 100644
--- a/app/src/foss/java/com/github/apognu/otter/utils/Cast.kt
+++ b/app/src/foss/java/com/github/apognu/otter/utils/Cast.kt
@@ -2,10 +2,18 @@ package com.github.apognu.otter
import android.content.Context
import android.view.Menu
-import com.github.apognu.otter.utils.log
+import com.github.apognu.otter.playback.PlayerService
+import com.github.apognu.otter.utils.CastInterface
-object Cast {
- fun init(context: Context) {}
- fun setupButton(context: Context, menu: Menu?) {}
+class Cast(val context: Context, val switchListener: PlayerService.OnPlayerSwitchListener, playerEventListener: PlayerService.PlayerEventListener) : CastInterface {
+ companion object {
+ fun init(context: Context) {}
+ fun setupButton(context: Context, menu: Menu?) {}
+
+ fun get(
+ context: Context,
+ playerSwitchListener: PlayerService.OnPlayerSwitchListener,
+ playerEventListener: PlayerService.PlayerEventListener
+ ): Cast? = null
+ }
}
-
diff --git a/app/src/foss/res/menu-land/toolbar.xml b/app/src/foss/res/menu-land/toolbar.xml
new file mode 100644
index 0000000..54a89f4
--- /dev/null
+++ b/app/src/foss/res/menu-land/toolbar.xml
@@ -0,0 +1,24 @@
+
+
diff --git a/app/src/foss/res/menu/toolbar.xml b/app/src/foss/res/menu/toolbar.xml
new file mode 100644
index 0000000..e0428d7
--- /dev/null
+++ b/app/src/foss/res/menu/toolbar.xml
@@ -0,0 +1,35 @@
+
+
diff --git a/app/src/full/java/com/github/apognu/otter/utils/Cast.kt b/app/src/full/java/com/github/apognu/otter/utils/Cast.kt
index 94e2a70..7e9e44d 100644
--- a/app/src/full/java/com/github/apognu/otter/utils/Cast.kt
+++ b/app/src/full/java/com/github/apognu/otter/utils/Cast.kt
@@ -1,17 +1,142 @@
package com.github.apognu.otter
import android.content.Context
+import android.net.Uri
import android.view.Menu
+import com.github.apognu.otter.playback.PlayerService
+import com.github.apognu.otter.utils.AppContext
+import com.github.apognu.otter.utils.CastInterface
+import com.github.apognu.otter.utils.Track
+import com.github.apognu.otter.utils.mustNormalizeUrl
+import com.google.android.exoplayer2.Player
+import com.google.android.exoplayer2.Timeline
+import com.google.android.exoplayer2.ext.cast.CastPlayer
+import com.google.android.exoplayer2.ext.cast.SessionAvailabilityListener
+import com.google.android.gms.cast.MediaInfo
+import com.google.android.gms.cast.MediaMetadata
+import com.google.android.gms.cast.MediaQueueItem
import com.google.android.gms.cast.framework.CastButtonFactory
import com.google.android.gms.cast.framework.CastContext
+import com.google.android.gms.common.images.WebImage
+import com.preference.PowerPreference
-object Cast {
- fun init(context: Context) {
- CastContext.getSharedInstance(context)
+fun Player.onCast(): CastPlayer? {
+ return if (this is CastPlayer) this
+ else null
+}
+
+class Cast(val context: Context, val switchListener: PlayerService.OnPlayerSwitchListener, playerEventListener: PlayerService.PlayerEventListener) : CastInterface {
+ companion object {
+ fun init(context: Context) {
+ CastContext.getSharedInstance(context)
+ }
+
+ fun setupButton(context: Context, menu: Menu?) {
+ CastButtonFactory.setUpMediaRouteButton(context, menu, R.id.cast)
+ }
+
+ fun get(
+ context: Context,
+ playerSwitchListener: PlayerService.OnPlayerSwitchListener,
+ playerEventListener: PlayerService.PlayerEventListener
+ ): Cast = Cast(context, playerSwitchListener, playerEventListener)
}
- fun setupButton(context: Context, menu: Menu?) {
- CastButtonFactory.setUpMediaRouteButton(context, menu, R.id.cast)
+ private val player: Player
+
+ init {
+ player = CastPlayer(CastContext.getSharedInstance(context)).apply {
+ addListener(playerEventListener)
+ setSessionAvailabilityListener(CastSessionListener())
+ }
+ }
+
+ override fun getPlayer(context: Context): Player = player
+
+ override fun replaceQueue(tracks: List