Skip to content

Commit 9550f7a

Browse files
sentinelwebsentinelweb
authored andcommitted
#496 - start and seek in on prepared listener,
1 parent b307472 commit 9550f7a

File tree

2 files changed

+26
-10
lines changed

2 files changed

+26
-10
lines changed

app/src/main/java/uk/co/sentinelweb/cuer/app/ui/player/android/AndroidVideoComposeables.kt

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,17 @@ object AndroidVideoComposeables : KoinComponent {
4949
var aspectRatioState by remember { mutableStateOf(1f) }
5050
var controlsVisible by remember { mutableStateOf(true) }
5151
var volumeVisible by remember { mutableStateOf(true) }
52+
var loadCommand by remember { mutableStateOf<PlayerCommand.Load?>(null) }
5253

5354
val mediaPlayer = remember {
5455
MediaPlayer().apply {
5556
setOnPreparedListener {
5657
start()
58+
loadCommand
59+
?.startPosition
60+
?.takeIf { it > 0 }
61+
?.also { seekTo(it.toInt()) }
62+
?.also { loadCommand = null }
5763
view.dispatch(DurationReceived(duration.toLong()))
5864
}
5965
setOnVideoSizeChangedListener { _, width, height ->
@@ -89,7 +95,11 @@ object AndroidVideoComposeables : KoinComponent {
8995

9096
LaunchedEffect(label.value) {
9197
when (label.value) {
92-
is Command -> processCommand((label.value as Command).command, mediaPlayer)
98+
is Command -> {
99+
processCommand((label.value as Command).command, mediaPlayer)
100+
loadCommand = (label.value as? Command)?.command as? PlayerCommand.Load
101+
}
102+
93103
else -> Unit
94104
}
95105
}
@@ -206,9 +216,6 @@ object AndroidVideoComposeables : KoinComponent {
206216
mediaPlayer.reset()
207217
mediaPlayer.setDataSource(url)
208218
mediaPlayer.prepareAsync()
209-
if (command.startPosition > 0) {
210-
mediaPlayer.seekTo(command.startPosition.toInt())
211-
}
212219
}
213220
}
214221

app/src/main/java/uk/co/sentinelweb/cuer/app/ui/player/exoplayer/ExoPlayerActivity.kt

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,7 @@ import kotlinx.coroutines.launch
3939
import org.koin.android.ext.android.inject
4040
import org.koin.android.scope.AndroidScopeComponent
4141
import org.koin.core.scope.Scope
42-
import rewriteIdsToSource
4342
import uk.co.sentinelweb.cuer.app.orchestrator.OrchestratorContract.Identifier
44-
import uk.co.sentinelweb.cuer.app.orchestrator.OrchestratorContract.Source.LOCAL
4543
import uk.co.sentinelweb.cuer.app.orchestrator.OrchestratorContract.Source.MEMORY
4644
import uk.co.sentinelweb.cuer.app.orchestrator.PlaylistOrchestrator
4745
import uk.co.sentinelweb.cuer.app.orchestrator.deepOptions
@@ -63,6 +61,7 @@ import uk.co.sentinelweb.cuer.app.util.extension.activityScopeWithSource
6361
import uk.co.sentinelweb.cuer.app.util.remote.VideoWakeLockManager
6462
import uk.co.sentinelweb.cuer.app.util.wrapper.HideStatusBarWrapper
6563
import uk.co.sentinelweb.cuer.app.util.wrapper.ShowOnLockScreenWrapper
64+
import uk.co.sentinelweb.cuer.core.wrapper.LogWrapper
6665
import uk.co.sentinelweb.cuer.domain.PlaylistAndItemDomain
6766
import uk.co.sentinelweb.cuer.domain.PlaylistDomain
6867
import uk.co.sentinelweb.cuer.domain.ext.serialise
@@ -79,6 +78,11 @@ class ExoPlayerActivity : FragmentActivity(), AndroidScopeComponent {
7978
private val floatingService: FloatingPlayerServiceManager by inject()
8079
private val showOnLockScreen: ShowOnLockScreenWrapper by inject()
8180
private val videoWakeLockManager: VideoWakeLockManager by inject()
81+
private val log: LogWrapper by inject()
82+
83+
init {
84+
log.tag(this)
85+
}
8286

8387
private lateinit var mviView: MviViewImpl
8488

@@ -133,7 +137,7 @@ class ExoPlayerActivity : FragmentActivity(), AndroidScopeComponent {
133137

134138
override val renderer: ViewRenderer<Model> = object : ViewRenderer<Model> {
135139
override fun render(model: Model) {
136-
Log.d("ExoActivity", "playState=${model.playState}, title=${model.texts.title}")
140+
log.d("playState=${model.playState}, title=${model.texts.title}")
137141
_model.value = model
138142
}
139143
}
@@ -167,6 +171,8 @@ class ExoPlayerActivity : FragmentActivity(), AndroidScopeComponent {
167171
activityClass: KClass<out Activity> = ExoPlayerActivity::class
168172
) =
169173
CoroutineScope(Dispatchers.Main).launch {
174+
Log.d("ExoActivity", "start playlistAndItem.id=${playlistAndItem.item.id}")
175+
Log.d("ExoActivity", "start playlistAndItem.media.id=${playlistAndItem.item.media.id}")
170176
val use: PlaylistAndItemDomain = if (playlistAndItem.playlistId == null) {
171177
// make temporary queue playlist
172178
val queuePlaylist = PlaylistDomain(
@@ -175,14 +181,17 @@ class ExoPlayerActivity : FragmentActivity(), AndroidScopeComponent {
175181
type = PlaylistDomain.PlaylistTypeDomain.APP,
176182
items = listOf(
177183
// todo just leave as local when databse is is saving.
178-
if (playlistAndItem.item.id?.source == LOCAL) {
179-
playlistAndItem.item.rewriteIdsToSource(MEMORY, null)
180-
} else playlistAndItem.item
184+
// if (playlistAndItem.item.id?.source == LOCAL) {
185+
// playlistAndItem.item.rewriteIdsToSource(MEMORY, null)
186+
// } else
187+
playlistAndItem.item
181188
)
182189
)
183190
// save to memory
184191
getKoin().get<PlaylistOrchestrator>()
185192
.save(queuePlaylist, queuePlaylist.id!!.deepOptions())
193+
Log.d("ExoActivity", "start playlistAndItem.id=${queuePlaylist.items[0].id}")
194+
Log.d("ExoActivity", "start playlistAndItem.media.id=${queuePlaylist.items[0].media.id}")
186195

187196
playlistAndItem.copy(
188197
playlistId = queuePlaylist.id,

0 commit comments

Comments
 (0)