Stability changes
Signed-off-by: Balazs Toldi <balazs@toldi.eu>
This commit is contained in:
parent
cf4374d34b
commit
0432c0be90
4 changed files with 36 additions and 43 deletions
|
@ -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>
|
||||
|
|
|
@ -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 })
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue