diff --git a/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt b/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt
index a5397d3..835c37b 100644
--- a/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt
+++ b/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt
@@ -302,7 +302,7 @@ object AoDParser {
}
}
- // parse additional information for tv shows
+ // parse additional information for tv shows the episode title (description) is loaded from the "api"
if (media.type == MediaType.TVSHOW) {
res.select("div.three-box-container > div.episodebox").forEach { episodebox ->
// make sure the episode has a streaming link
diff --git a/app/src/main/java/org/mosad/teapod/player/PlayerActivity.kt b/app/src/main/java/org/mosad/teapod/player/PlayerActivity.kt
index 10be9f7..c825ddd 100644
--- a/app/src/main/java/org/mosad/teapod/player/PlayerActivity.kt
+++ b/app/src/main/java/org/mosad/teapod/player/PlayerActivity.kt
@@ -29,6 +29,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.mosad.teapod.R
import org.mosad.teapod.preferences.Preferences
+import org.mosad.teapod.util.DataTypes
import org.mosad.teapod.util.Episode
import java.util.*
import java.util.concurrent.TimeUnit
@@ -44,6 +45,7 @@ class PlayerActivity : AppCompatActivity() {
private lateinit var gestureDetector: GestureDetectorCompat
private lateinit var timerUpdates: TimerTask
+ private var nextEpManually = false
private var playWhenReady = true
private var currentWindow = 0
private var playbackPosition: Long = 0
@@ -129,14 +131,9 @@ class PlayerActivity : AppCompatActivity() {
dataSourceFactory = DefaultDataSourceFactory(this, Util.getUserAgent(this, "Teapod"))
controller = video_view.findViewById(R.id.exo_controller)
- val mediaSource = HlsMediaSource.Factory(dataSourceFactory)
- .createMediaSource(MediaItem.fromUri(Uri.parse(autoSelectStream(model.currentEpisode))))
+ controller.isAnimationEnabled = false // disable controls (time-bar) animation
player.playWhenReady = playWhenReady
- player.setMediaSource(mediaSource)
- player.seekTo(playbackPosition)
- player.prepare()
-
player.addListener(object : Player.EventListener {
override fun onPlaybackStateChanged(state: Int) {
super.onPlaybackStateChanged(state)
@@ -154,14 +151,16 @@ class PlayerActivity : AppCompatActivity() {
}
if (state == ExoPlayer.STATE_ENDED && model.nextEpisode != null && Preferences.autoplay) {
- playNextEpisode()
+ if (nextEpManually) {
+ nextEpManually = false
+ } else {
+ playNextEpisode()
+ }
}
-
}
})
- controller.isAnimationEnabled = false // disable controls (time-bar) animation
- exo_text_title.text = model.currentEpisode.title // set media title
+ playCurrentMedia(true)
}
@SuppressLint("ClickableViewAccessibility")
@@ -187,6 +186,7 @@ class PlayerActivity : AppCompatActivity() {
rwd_10.setOnButtonClickListener { rewind() }
ffwd_10.setOnButtonClickListener { fastForward() }
button_next_ep.setOnClickListener { playNextEpisode() }
+ button_next_ep_c.setOnClickListener { playNextEpisode() }
}
private fun initTimeUpdates() {
@@ -299,18 +299,37 @@ class PlayerActivity : AppCompatActivity() {
}
}
- private fun playNextEpisode() = model.nextEpisode?.let { nextEp ->
- // update the gui
- exo_text_title.text = nextEp.title
+ private fun playNextEpisode() = model.nextEpisode?.let {
+ model.nextEpisode() // current = next, next = new or null
hideButtonNextEp()
+ nextEpManually = true
+ playCurrentMedia(false)
+ }
+
+ /**
+ * start playing a episode
+ * Note: movies are episodes too!
+ */
+ private fun playCurrentMedia(seekToPosition: Boolean) {
+ // update the gui
+ exo_text_title.text = if (model.media.type == DataTypes.MediaType.TVSHOW) {
+ getString(R.string.component_episode_title, model.currentEpisode.number, model.currentEpisode.description)
+ } else {
+ model.currentEpisode.title
+ }
+
+ if (model.nextEpisode == null) {
+ button_next_ep_c.visibility = View.GONE
+ }
+
player.clearMediaItems() //remove previous item
- val mediaSource = HlsMediaSource.Factory(dataSourceFactory)
- .createMediaSource(MediaItem.fromUri(Uri.parse(autoSelectStream(nextEp))))
+ val mediaSource = HlsMediaSource.Factory(dataSourceFactory).createMediaSource(
+ MediaItem.fromUri(Uri.parse(autoSelectStream(model.currentEpisode)))
+ )
+ if (seekToPosition) player.seekTo(playbackPosition)
player.setMediaSource(mediaSource)
player.prepare()
-
- model.nextEpisode()
}
/**
diff --git a/app/src/main/res/drawable/ic_baseline_skip_next_24.xml b/app/src/main/res/drawable/ic_baseline_skip_next_24.xml
new file mode 100644
index 0000000..4680420
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_skip_next_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_baseline_video_library_24.xml b/app/src/main/res/drawable/ic_baseline_video_library_24.xml
index 2259eaf..476e56f 100644
--- a/app/src/main/res/drawable/ic_baseline_video_library_24.xml
+++ b/app/src/main/res/drawable/ic_baseline_video_library_24.xml
@@ -1,10 +1,5 @@
-
-
+
+
diff --git a/app/src/main/res/layout/player_controls.xml b/app/src/main/res/layout/player_controls.xml
index abfc3d2..1e86411 100644
--- a/app/src/main/res/layout/player_controls.xml
+++ b/app/src/main/res/layout/player_controls.xml
@@ -108,4 +108,40 @@
app:layout_constraintTop_toTopOf="parent" />
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml
index c76df61..62656f8 100644
--- a/app/src/main/res/values-de-rDE/strings.xml
+++ b/app/src/main/res/values-de-rDE/strings.xml
@@ -16,8 +16,8 @@
Abspielen
%1$d Episoden
%1$d Minuten
- Ep. %1$d %2$s
- Ep. %1$d %2$s (OmU)
+ Flg. %1$d %2$s
+ Flg. %1$d %2$s (OmU)
Account
@@ -40,7 +40,9 @@
10 Sekunden zurück
Abspielen/Pause
10 Sekunden vorwärts
- Nächste Episode
+ Nächste Folge
+ Folge
+ Folgen
speichern
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6a14e39..c09898f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -52,9 +52,11 @@
forward 10 seconds
- 10 s
+ 10 s
+ Next Episode
%1$02d:%2$02d
%1$d:%2$02d:%3$02d
- Next Episode
+ Episode
+ Episodes
save