fix differences between free and non free cast services

This commit is contained in:
Felix 2020-06-11 16:09:15 +02:00
parent 59a9538559
commit 1f14416b3d
5 changed files with 37 additions and 16 deletions

View file

@ -6,30 +6,31 @@ import androidx.appcompat.app.AppCompatActivity
import de.nicidienase.chaosflix.common.mediadata.entities.recording.persistence.Event
import de.nicidienase.chaosflix.common.mediadata.entities.recording.persistence.Recording
import de.nicidienase.chaosflix.common.mediadata.entities.streaming.StreamUrl
import de.nicidienase.chaosflix.common.userdata.entities.progress.PlaybackProgress
import de.nicidienase.chaosflix.touch.browse.streaming.StreamingItem
@SuppressWarnings("unused")
class CastService {
class CastServiceImpl : CastService {
val connected: Boolean = false
override val connected: Boolean = false
fun castStream(streamingItem: StreamingItem, streamUrl: StreamUrl, contentKey: String) {
override fun castStream(streamingItem: StreamingItem, streamUrl: StreamUrl, contentKey: String) {
Log.e(TAG, "No Cast Support")
}
fun loadMediaAndPlay(recording: Recording, event: Event) {
override fun loadMediaAndPlay(recording: Recording, event: Event, progress: PlaybackProgress?) {
Log.e(TAG, "No Cast Support")
}
fun addMediaRouteMenuItem(menu: Menu) {
override fun addMediaRouteMenuItem(menu: Menu) {
Log.i(TAG, "No Cast Support, adding no Menu item")
}
fun attachToActivity(activity: AppCompatActivity) {
override fun attachToActivity(activity: AppCompatActivity) {
Log.i(TAG, "No Cast Support, doing nothing")
}
companion object {
val TAG = CastService::class.java.simpleName
private val TAG = CastServiceImpl::class.java.simpleName + "Free"
}
}

View file

@ -16,6 +16,7 @@ import de.nicidienase.chaosflix.common.mediadata.StreamingRepository
import de.nicidienase.chaosflix.common.mediadata.ThumbnailParser
import de.nicidienase.chaosflix.common.mediadata.network.ApiFactory
import de.nicidienase.chaosflix.touch.browse.cast.CastService
import de.nicidienase.chaosflix.touch.browse.cast.CastServiceImpl
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
@ -40,7 +41,7 @@ class ViewModelFactory private constructor(context: Context) : ViewModelProvider
private val externalFilesDir = Environment.getExternalStorageDirectory()
private val resourcesFacade by lazy { ResourcesFacade(context) }
private val thumbnailParser by lazy { ThumbnailParser(apiFactory.client) }
private val castService: CastService by lazy { CastService(database.playbackProgressDao(), coroutineScope) }
private val castService: CastService by lazy { CastServiceImpl(database.playbackProgressDao(), coroutineScope) }
val mediaRepository by lazy { MediaRepository(apiFactory.recordingApi, database) }
@Suppress("UNCHECKED_CAST")

View file

@ -0,0 +1,18 @@
package de.nicidienase.chaosflix.touch.browse.cast
import android.view.Menu
import androidx.appcompat.app.AppCompatActivity
import de.nicidienase.chaosflix.common.mediadata.entities.recording.persistence.Event
import de.nicidienase.chaosflix.common.mediadata.entities.recording.persistence.Recording
import de.nicidienase.chaosflix.common.mediadata.entities.streaming.StreamUrl
import de.nicidienase.chaosflix.common.userdata.entities.progress.PlaybackProgress
import de.nicidienase.chaosflix.touch.browse.streaming.StreamingItem
interface CastService {
val connected: Boolean
fun attachToActivity(activity: AppCompatActivity)
fun castStream(streamingItem: StreamingItem, streamUrl: StreamUrl, contentKey: String)
fun loadMediaAndPlay(recording: Recording, event: Event, progress: PlaybackProgress?)
fun addMediaRouteMenuItem(menu: Menu)
}

View file

@ -24,18 +24,18 @@ import kotlinx.coroutines.launch
import pl.droidsonroids.casty.Casty
import pl.droidsonroids.casty.MediaData
class CastService(
class CastServiceImpl(
private val playbackProgressDao: PlaybackProgressDao,
private val scope: CoroutineScope
) : LifecycleObserver {
) : LifecycleObserver, CastService {
private var currentEvent: Event? = null
private var casty: Casty? = null
val connected: Boolean
override val connected: Boolean
get() = casty?.isConnected ?: false
fun attachToActivity(activity: AppCompatActivity) {
override fun attachToActivity(activity: AppCompatActivity) {
casty = Casty.create(activity)
activity.lifecycle.addObserver(this)
currentEvent?.let {
@ -48,7 +48,7 @@ class CastService(
casty = null
}
fun castStream(streamingItem: StreamingItem, streamUrl: StreamUrl, contentKey: String) {
override fun castStream(streamingItem: StreamingItem, streamUrl: StreamUrl, contentKey: String) {
casty?.let {
val contentType = getContentTypeForKey(contentKey)
val mediaData = MediaData.Builder(streamUrl.url)
@ -62,7 +62,7 @@ class CastService(
}
}
fun loadMediaAndPlay(recording: Recording, event: Event, progress: PlaybackProgress?) {
override fun loadMediaAndPlay(recording: Recording, event: Event, progress: PlaybackProgress?) {
Log.d(TAG, "Casting: ${event.title}")
currentEvent = event
casty?.let {
@ -80,7 +80,7 @@ class CastService(
sessionManager?.currentCastSession?.let { sessionListener.attachProgressListener(it) }
}
fun addMediaRouteMenuItem(menu: Menu) {
override fun addMediaRouteMenuItem(menu: Menu) {
casty?.addMediaRouteMenuItem(menu)
}
@ -180,6 +180,6 @@ class CastService(
}
companion object {
private val TAG = CastService::class.java.simpleName
private val TAG = CastServiceImpl::class.java.simpleName + "NoFree"
}
}

View file

@ -11,6 +11,7 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="android:label"
tools:ignore="GoogleAppIndexingWarning">
<activity
android:name=".conferences.ConferencesActivity"