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-1637656156044.xml" value="0.25" />
|
||||||
<entry key="../../../../../layout/compose-model-1637673325505.xml" value="0.11570945945945946" />
|
<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-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>
|
</map>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
|
|
|
@ -18,24 +18,13 @@ import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.lifecycle.ViewModel
|
|
||||||
import androidx.lifecycle.ViewModelProvider
|
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.YoutubeDL
|
||||||
|
|
||||||
import com.yausername.youtubedl_android.YoutubeDLRequest
|
|
||||||
import com.yausername.youtubedl_android.YoutubeDLException
|
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.model.ChromecastManageViewmodel
|
||||||
import eu.toldi.balazs.caster.services.ChromecastManagerService
|
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.Media
|
||||||
import su.litvak.chromecast.api.v2.MediaStatus
|
import su.litvak.chromecast.api.v2.MediaStatus
|
||||||
|
|
||||||
|
@ -59,7 +48,7 @@ class ChromecastManagerActivity : ComponentActivity() {
|
||||||
} catch (e: YoutubeDLException) {
|
} catch (e: YoutubeDLException) {
|
||||||
Log.e("Caster", "failed to initialize youtubedl-android", e)
|
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.action = ChromecastManagerService.ACTION_INIT
|
||||||
it.putExtra("CHROMECAST_ADDRESS", chromeCast.address)
|
it.putExtra("CHROMECAST_ADDRESS", chromeCast.address)
|
||||||
it.putExtra("CHROMECAST_NAME", chromeCast.title)
|
it.putExtra("CHROMECAST_NAME", chromeCast.title)
|
||||||
|
@ -72,7 +61,7 @@ class ChromecastManagerActivity : ComponentActivity() {
|
||||||
// A surface container using the 'background' color from the theme
|
// A surface container using the 'background' color from the theme
|
||||||
Surface(color = MaterialTheme.colors.background) {
|
Surface(color = MaterialTheme.colors.background) {
|
||||||
Column {
|
Column {
|
||||||
viewModel.fetchMediaStatus()
|
//viewModel.fetchMediaStatus()
|
||||||
MenuBar()
|
MenuBar()
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
|
@ -107,14 +96,18 @@ class ChromecastManagerActivity : ComponentActivity() {
|
||||||
if (castEnabled.not()) {
|
if (castEnabled.not()) {
|
||||||
CircularProgressIndicator()
|
CircularProgressIndicator()
|
||||||
}
|
}
|
||||||
playBackControl()
|
PlayBackControl()
|
||||||
val mediaStatus = viewModel.mediaStatus.value
|
val mediaStatus = viewModel.mediaStatus.value
|
||||||
|
|
||||||
if (mediaStatus != null) {
|
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")
|
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(
|
Row(
|
||||||
Modifier.fillMaxWidth(),
|
Modifier.fillMaxWidth(),
|
||||||
horizontalArrangement = Arrangement.SpaceBetween
|
horizontalArrangement = Arrangement.SpaceBetween
|
||||||
|
@ -136,8 +129,10 @@ class ChromecastManagerActivity : ComponentActivity() {
|
||||||
}
|
}
|
||||||
Slider(value = sliderPosition, onValueChange = {
|
Slider(value = sliderPosition, onValueChange = {
|
||||||
sliderPosition = it
|
sliderPosition = it
|
||||||
|
sliderMoving = true
|
||||||
}, onValueChangeFinished = {
|
}, onValueChangeFinished = {
|
||||||
viewModel.seek(sliderPosition.toDouble())
|
viewModel.seek(sliderPosition.toDouble())
|
||||||
|
sliderMoving = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -171,8 +166,10 @@ class ChromecastManagerActivity : ComponentActivity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun playBackControl() {
|
fun PlayBackControl() {
|
||||||
val mediaStatus = viewModel.mediaStatus.value
|
val mediaStatus = if (this::viewModel.isInitialized)
|
||||||
|
viewModel.mediaStatus.value
|
||||||
|
else null
|
||||||
Row {
|
Row {
|
||||||
|
|
||||||
IconButton(onClick = {
|
IconButton(onClick = {
|
||||||
|
@ -185,12 +182,6 @@ class ChromecastManagerActivity : ComponentActivity() {
|
||||||
contentDescription = "FastRewind"
|
contentDescription = "FastRewind"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
var playBackState by remember { mutableStateOf(MediaStatus.PlayerState.IDLE) }
|
|
||||||
lifecycleScope.launch(IO) {
|
|
||||||
if(chromeCast.mediaStatus != null)
|
|
||||||
playBackState = chromeCast.mediaStatus.playerState
|
|
||||||
}*/
|
|
||||||
IconButton(onClick = {
|
IconButton(onClick = {
|
||||||
|
|
||||||
if (mediaStatus != null) {
|
if (mediaStatus != null) {
|
||||||
|
@ -200,7 +191,6 @@ class ChromecastManagerActivity : ComponentActivity() {
|
||||||
if (mediaStatus.playerState == MediaStatus.PlayerState.PAUSED) {
|
if (mediaStatus.playerState == MediaStatus.PlayerState.PAUSED) {
|
||||||
viewModel.play()
|
viewModel.play()
|
||||||
}
|
}
|
||||||
viewModel.fetchMediaStatus()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}, enabled = mediaStatus != null) {
|
}, enabled = mediaStatus != null) {
|
||||||
|
@ -280,7 +270,7 @@ class ChromecastManagerActivity : ComponentActivity() {
|
||||||
Text(text = "Cast")
|
Text(text = "Cast")
|
||||||
}
|
}
|
||||||
// val viewModel = ViewModelProvider(this).get(ChromecastManageViewmodel::class.java)
|
// val viewModel = ViewModelProvider(this).get(ChromecastManageViewmodel::class.java)
|
||||||
//playBackControl(viewModel)
|
PlayBackControl()
|
||||||
Text(text = "Now playing: Some video")
|
Text(text = "Now playing: Some video")
|
||||||
var sliderPosition by remember { mutableStateOf(0f) }
|
var sliderPosition by remember { mutableStateOf(0f) }
|
||||||
Slider(value = sliderPosition, onValueChange = { sliderPosition = it })
|
Slider(value = sliderPosition, onValueChange = { sliderPosition = it })
|
||||||
|
|
|
@ -9,11 +9,9 @@ import eu.toldi.balazs.caster.ChromeCastHelper
|
||||||
import kotlinx.coroutines.Dispatchers.IO
|
import kotlinx.coroutines.Dispatchers.IO
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import su.litvak.chromecast.api.v2.ChromeCast
|
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
|
import su.litvak.chromecast.api.v2.MediaStatus
|
||||||
|
|
||||||
class ChromecastManageViewmodel : ViewModel(), ChromeCastSpontaneousEventListener {
|
class ChromecastManageViewmodel : ViewModel() {
|
||||||
|
|
||||||
private val _mediaState = mutableStateOf<MediaStatus?>(null)
|
private val _mediaState = mutableStateOf<MediaStatus?>(null)
|
||||||
val mediaStatus: State<MediaStatus?>
|
val mediaStatus: State<MediaStatus?>
|
||||||
|
@ -23,13 +21,14 @@ class ChromecastManageViewmodel : ViewModel(), ChromeCastSpontaneousEventListene
|
||||||
|
|
||||||
init {
|
init {
|
||||||
viewModelScope.launch(IO) {
|
viewModelScope.launch(IO) {
|
||||||
|
fetchMediaStatus()
|
||||||
while (true) {
|
while (true) {
|
||||||
fetchMediaStatus()
|
fetchMediaStatus()
|
||||||
Thread.sleep(1000)
|
Thread.sleep(3000)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
override fun spontaneousEventReceived(event: ChromeCastSpontaneousEvent?) {
|
override fun spontaneousEventReceived(event: ChromeCastSpontaneousEvent?) {
|
||||||
Log.e(null, event?.type.toString())
|
Log.e(null, event?.type.toString())
|
||||||
if (event != null) {
|
if (event != null) {
|
||||||
|
@ -37,11 +36,15 @@ class ChromecastManageViewmodel : ViewModel(), ChromeCastSpontaneousEventListene
|
||||||
_mediaState.value = event.data as MediaStatus
|
_mediaState.value = event.data as MediaStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
fun fetchMediaStatus() {
|
fun fetchMediaStatus() {
|
||||||
viewModelScope.launch(IO) {
|
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.app.Service
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.media.MediaPlayer
|
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.Build
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import android.support.v4.media.session.MediaControllerCompat
|
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.App.Companion.CHANNEL_ID
|
||||||
import eu.toldi.balazs.caster.ChromeCastHelper
|
import eu.toldi.balazs.caster.ChromeCastHelper
|
||||||
import eu.toldi.balazs.caster.R
|
import eu.toldi.balazs.caster.R
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.Dispatchers.IO
|
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.ChromeCast
|
||||||
import su.litvak.chromecast.api.v2.Media
|
import su.litvak.chromecast.api.v2.Media
|
||||||
|
|
||||||
import su.litvak.chromecast.api.v2.MediaStatus
|
import su.litvak.chromecast.api.v2.MediaStatus
|
||||||
|
|
||||||
|
|
||||||
|
@ -100,7 +98,7 @@ class ChromecastManagerService : Service() {
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Log.e(null,e.stackTraceToString())
|
Log.e(null,e.stackTraceToString())
|
||||||
}
|
}
|
||||||
Thread.sleep(1000)
|
Thread.sleep(10500)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue