mirror of
https://github.com/aniyomiorg/aniyomi.git
synced 2024-11-29 09:39:03 +03:00
handle new intent in PiP mode
This commit is contained in:
parent
a8477019e0
commit
a34cde7933
2 changed files with 31 additions and 8 deletions
|
@ -71,10 +71,19 @@ class PlayerActivity :
|
|||
}
|
||||
}
|
||||
}
|
||||
override fun onNewIntent(intent: Intent?) {
|
||||
// TODO: When in PiP mode, selecting an episode from list should load new episode
|
||||
// Currently, below finish simply closes the activity. I don't know how to return a new Intent to update the activity
|
||||
finish()
|
||||
|
||||
override fun onNewIntent(intent: Intent) {
|
||||
val anime = intent.extras!!.getLong("anime", -1)
|
||||
val episode = intent.extras!!.getLong("episode", -1)
|
||||
if (anime == -1L || episode == -1L) {
|
||||
finish()
|
||||
return
|
||||
}
|
||||
presenter.saveEpisodeProgress(player.timePos, player.duration)
|
||||
presenter.saveEpisodeHistory()
|
||||
|
||||
presenter.anime = null
|
||||
presenter.init(anime, episode)
|
||||
super.onNewIntent(intent)
|
||||
}
|
||||
|
||||
|
|
|
@ -39,11 +39,15 @@ class PlayerPresenter(
|
|||
private val preferences: PreferencesHelper = Injekt.get(),
|
||||
private val delayedTrackingStore: DelayedTrackingStore = Injekt.get(),
|
||||
) : BasePresenter<PlayerActivity>() {
|
||||
/**
|
||||
* The ID of the anime loaded in the player.
|
||||
*/
|
||||
var animeId: Long = -1L
|
||||
|
||||
/**
|
||||
* The anime loaded in the player. It can be null when instantiated for a short time.
|
||||
*/
|
||||
var anime: Anime? = null
|
||||
private set
|
||||
|
||||
/**
|
||||
* The episode id of the currently loaded episode. Used to restore from process kill.
|
||||
|
@ -60,7 +64,9 @@ class PlayerPresenter(
|
|||
* Episode list for the active anime. It's retrieved lazily and should be accessed for the first
|
||||
* time in a background thread to avoid blocking the UI.
|
||||
*/
|
||||
val episodeList by lazy {
|
||||
lateinit var episodeList: List<Episode>
|
||||
|
||||
private fun initEpisodeList(): List<Episode> {
|
||||
val anime = anime!!
|
||||
val dbEpisodes = db.getEpisodes(anime).executeAsBlocking()
|
||||
|
||||
|
@ -93,7 +99,7 @@ class PlayerPresenter(
|
|||
else -> dbEpisodes
|
||||
}
|
||||
|
||||
episodesForPlayer
|
||||
return episodesForPlayer
|
||||
.sortedWith(getEpisodeSort(anime, sortDescending = false))
|
||||
}
|
||||
|
||||
|
@ -128,6 +134,10 @@ class PlayerPresenter(
|
|||
return anime == null
|
||||
}
|
||||
|
||||
private fun needsInit(newAnimeId: Long): Boolean {
|
||||
return animeId != newAnimeId
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes this presenter with the given [animeId] and [initialEpisodeId]. This method will
|
||||
* fetch the anime from the database and initialize the initial episode.
|
||||
|
@ -155,12 +165,16 @@ class PlayerPresenter(
|
|||
if (!needsInit()) return
|
||||
|
||||
this.anime = anime
|
||||
if (episodeId == -1L) episodeId = initialEpisodeId
|
||||
if (initialEpisodeId != -1L) episodeId = initialEpisodeId
|
||||
|
||||
checkTrackers(anime)
|
||||
|
||||
source = sourceManager.getOrStub(anime.source)
|
||||
|
||||
if (needsInit(anime.id ?: -1L)) {
|
||||
this.animeId = anime.id!!
|
||||
episodeList = initEpisodeList()
|
||||
}
|
||||
currentEpisode = episodeList.first { initialEpisodeId == it.id }
|
||||
launchIO {
|
||||
try {
|
||||
|
|
Loading…
Reference in a new issue