Stability changes

Signed-off-by: Balazs Toldi <balazs@toldi.eu>
This commit is contained in:
Balazs Toldi 2021-11-29 12:04:52 +01:00
parent cf4374d34b
commit 0432c0be90
Signed by: Bazsalanszky
GPG key ID: 933820884952BE27
4 changed files with 36 additions and 43 deletions

View file

@ -28,6 +28,8 @@
<entry key="../../../../../layout/compose-model-1637656156044.xml" value="0.25" />
<entry key="../../../../../layout/compose-model-1637673325505.xml" value="0.11570945945945946" />
<entry key="../../../../../layout/compose-model-1637674242617.xml" value="0.49537037037037035" />
<entry key="../../../../../layout/compose-model-1638180237267.xml" value="0.3095439189189189" />
<entry key="../../../../../layout/compose-model-1638183069943.xml" value="0.33" />
</map>
</option>
</component>

View file

@ -18,24 +18,13 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import eu.toldi.balazs.caster.ui.theme.CasterTheme
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import su.litvak.chromecast.api.v2.Application
import su.litvak.chromecast.api.v2.ChromeCast
import com.yausername.youtubedl_android.YoutubeDL
import com.yausername.youtubedl_android.YoutubeDLRequest
import com.yausername.youtubedl_android.YoutubeDLException
import com.yausername.youtubedl_android.mapper.VideoInfo
import eu.toldi.balazs.caster.model.ChromecastManageViewmodel
import eu.toldi.balazs.caster.services.ChromecastManagerService
import kotlinx.coroutines.withContext
import eu.toldi.balazs.caster.ui.theme.CasterTheme
import su.litvak.chromecast.api.v2.ChromeCast
import su.litvak.chromecast.api.v2.Media
import su.litvak.chromecast.api.v2.MediaStatus
@ -59,7 +48,7 @@ class ChromecastManagerActivity : ComponentActivity() {
} catch (e: YoutubeDLException) {
Log.e("Caster", "failed to initialize youtubedl-android", e)
}
val serviceIntent = Intent(this, ChromecastManagerService::class.java).also {
Intent(this, ChromecastManagerService::class.java).also {
it.action = ChromecastManagerService.ACTION_INIT
it.putExtra("CHROMECAST_ADDRESS", chromeCast.address)
it.putExtra("CHROMECAST_NAME", chromeCast.title)
@ -72,7 +61,7 @@ class ChromecastManagerActivity : ComponentActivity() {
// A surface container using the 'background' color from the theme
Surface(color = MaterialTheme.colors.background) {
Column {
viewModel.fetchMediaStatus()
//viewModel.fetchMediaStatus()
MenuBar()
Column(
modifier = Modifier
@ -107,14 +96,18 @@ class ChromecastManagerActivity : ComponentActivity() {
if (castEnabled.not()) {
CircularProgressIndicator()
}
playBackControl()
PlayBackControl()
val mediaStatus = viewModel.mediaStatus.value
if (mediaStatus != null) {
val nowPlaying = mediaStatus.media.metadata[Media.METADATA_TITLE]
val nowPlaying =
if (mediaStatus.media.metadata != null) mediaStatus.media.metadata[Media.METADATA_TITLE] else ""
Text(text = "Now playing: $nowPlaying")
var sliderPosition by remember { mutableStateOf((mediaStatus.currentTime / mediaStatus.media.duration).toFloat()) }
var sliderPosition by remember { mutableStateOf(0.0f) }
var sliderMoving by remember { mutableStateOf(false) }
if (!sliderMoving)
sliderPosition =
(mediaStatus.currentTime / mediaStatus.media.duration).toFloat()
Row(
Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween
@ -136,8 +129,10 @@ class ChromecastManagerActivity : ComponentActivity() {
}
Slider(value = sliderPosition, onValueChange = {
sliderPosition = it
sliderMoving = true
}, onValueChangeFinished = {
viewModel.seek(sliderPosition.toDouble())
sliderMoving = false
})
}
}
@ -171,8 +166,10 @@ class ChromecastManagerActivity : ComponentActivity() {
}
@Composable
fun playBackControl() {
val mediaStatus = viewModel.mediaStatus.value
fun PlayBackControl() {
val mediaStatus = if (this::viewModel.isInitialized)
viewModel.mediaStatus.value
else null
Row {
IconButton(onClick = {
@ -185,12 +182,6 @@ class ChromecastManagerActivity : ComponentActivity() {
contentDescription = "FastRewind"
)
}
/*
var playBackState by remember { mutableStateOf(MediaStatus.PlayerState.IDLE) }
lifecycleScope.launch(IO) {
if(chromeCast.mediaStatus != null)
playBackState = chromeCast.mediaStatus.playerState
}*/
IconButton(onClick = {
if (mediaStatus != null) {
@ -200,7 +191,6 @@ class ChromecastManagerActivity : ComponentActivity() {
if (mediaStatus.playerState == MediaStatus.PlayerState.PAUSED) {
viewModel.play()
}
viewModel.fetchMediaStatus()
}
}, enabled = mediaStatus != null) {
@ -280,7 +270,7 @@ class ChromecastManagerActivity : ComponentActivity() {
Text(text = "Cast")
}
// val viewModel = ViewModelProvider(this).get(ChromecastManageViewmodel::class.java)
//playBackControl(viewModel)
PlayBackControl()
Text(text = "Now playing: Some video")
var sliderPosition by remember { mutableStateOf(0f) }
Slider(value = sliderPosition, onValueChange = { sliderPosition = it })

View file

@ -9,11 +9,9 @@ import eu.toldi.balazs.caster.ChromeCastHelper
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.launch
import su.litvak.chromecast.api.v2.ChromeCast
import su.litvak.chromecast.api.v2.ChromeCastSpontaneousEvent
import su.litvak.chromecast.api.v2.ChromeCastSpontaneousEventListener
import su.litvak.chromecast.api.v2.MediaStatus
class ChromecastManageViewmodel : ViewModel(), ChromeCastSpontaneousEventListener {
class ChromecastManageViewmodel : ViewModel() {
private val _mediaState = mutableStateOf<MediaStatus?>(null)
val mediaStatus: State<MediaStatus?>
@ -23,13 +21,14 @@ class ChromecastManageViewmodel : ViewModel(), ChromeCastSpontaneousEventListene
init {
viewModelScope.launch(IO) {
fetchMediaStatus()
while (true) {
fetchMediaStatus()
Thread.sleep(1000)
Thread.sleep(3000)
}
}
}
/*
override fun spontaneousEventReceived(event: ChromeCastSpontaneousEvent?) {
Log.e(null, event?.type.toString())
if (event != null) {
@ -37,11 +36,15 @@ class ChromecastManageViewmodel : ViewModel(), ChromeCastSpontaneousEventListene
_mediaState.value = event.data as MediaStatus
}
}
}
}*/
fun fetchMediaStatus() {
viewModelScope.launch(IO) {
_mediaState.value = ChromeCastHelper.fetchMediaStatus()
try {
_mediaState.value = ChromeCastHelper.fetchMediaStatus()
} catch (e: Exception) {
Log.e(null, e.stackTraceToString())
}
}
}

View file

@ -6,9 +6,6 @@ import android.app.PendingIntent
import android.app.Service
import android.content.Intent
import android.media.MediaPlayer
import android.media.session.MediaController
import android.media.session.MediaSession
import android.media.session.PlaybackState
import android.os.Build
import android.os.IBinder
import android.support.v4.media.session.MediaControllerCompat
@ -19,12 +16,13 @@ import androidx.core.app.NotificationCompat
import eu.toldi.balazs.caster.App.Companion.CHANNEL_ID
import eu.toldi.balazs.caster.ChromeCastHelper
import eu.toldi.balazs.caster.R
import kotlinx.coroutines.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import su.litvak.chromecast.api.v2.ChromeCast
import su.litvak.chromecast.api.v2.Media
import su.litvak.chromecast.api.v2.MediaStatus
@ -100,7 +98,7 @@ class ChromecastManagerService : Service() {
} catch (e: Exception) {
Log.e(null,e.stackTraceToString())
}
Thread.sleep(1000)
Thread.sleep(10500)
}
}
}