From 89e1da04dd336ae555823044deaa7fccc5f1b8f8 Mon Sep 17 00:00:00 2001 From: Secozzi <49240133+Secozzi@users.noreply.github.com> Date: Sun, 20 Aug 2023 13:56:51 +0200 Subject: [PATCH] feat(player): Add intro skip for media controls (#1108) --- .../settings/screen/SettingsPlayerScreen.kt | 1 + .../tachiyomi/ui/player/PlayerActivity.kt | 32 +++++++++++++++++++ i18n/src/main/res/values/strings-aniyomi.xml | 6 +++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsPlayerScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsPlayerScreen.kt index c0e7c1aed9..a85b2db097 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsPlayerScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsPlayerScreen.kt @@ -248,6 +248,7 @@ object SettingsPlayerScreen : SearchableSettings { Preference.PreferenceItem.SwitchPreference( pref = mediaChapterSeek, title = stringResource(R.string.pref_media_control_chapter_seeking), + subtitle = stringResource(R.string.pref_media_control_chapter_seeking_summary), ), Preference.PreferenceItem.InfoPreference( title = stringResource(R.string.pref_category_player_aniskip_info), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt index 6c68e6691f..fb98fa5a65 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt @@ -487,6 +487,7 @@ class PlayerActivity : BaseActivity() { if (playerPreferences.mediaChapterSeek().get()) { if (player.loadChapters().isNotEmpty()) { MPVLib.command(arrayOf("add", "chapter", "-1")) + skipAnimation(getString(R.string.go_to_previous_chapter), isForward = false) } } else { changeEpisode(viewModel.getAdjacentEpisodeId(previous = true)) @@ -497,6 +498,10 @@ class PlayerActivity : BaseActivity() { if (playerPreferences.mediaChapterSeek().get()) { if (player.loadChapters().isNotEmpty()) { MPVLib.command(arrayOf("add", "chapter", "1")) + skipAnimation(getString(R.string.go_to_next_chapter), isForward = true) + } else { + MPVLib.command(arrayOf("seek", viewModel.getAnimeSkipIntroLength().toString(), "relative+exact")) + skipAnimation(getString(R.string.go_to_after_opening), isForward = true) } } else { changeEpisode(viewModel.getAdjacentEpisodeId(previous = false)) @@ -920,6 +925,33 @@ class PlayerActivity : BaseActivity() { MPVLib.command(arrayOf("seek", time.toString(), "relative+exact")) } + // Taken from util/AniSkipApi.kt + private fun skipAnimation(skipText: String, isForward: Boolean) { + binding.secondsView.binding.doubleTapSeconds.text = skipText + + binding.secondsView.updateLayoutParams { + rightToRight = if (isForward) ConstraintLayout.LayoutParams.PARENT_ID else ConstraintLayout.LayoutParams.UNSET + leftToLeft = if (isForward) ConstraintLayout.LayoutParams.UNSET else ConstraintLayout.LayoutParams.PARENT_ID + } + binding.secondsView.visibility = View.VISIBLE + binding.secondsView.isForward = isForward + + val bindingBg = if (isForward) binding.ffwdBg else binding.rewBg + + bindingBg.visibility = View.VISIBLE + bindingBg.animate().alpha(0.15f).setDuration(100).withEndAction { + binding.secondsView.animate().alpha(1f).setDuration(500).withEndAction { + binding.secondsView.animate().alpha(0f).setDuration(500).withEndAction { + bindingBg.animate().alpha(0f).setDuration(100).withEndAction { + bindingBg.visibility = View.GONE + binding.secondsView.visibility = View.GONE + binding.secondsView.alpha = 1f + } + } + } + }.start() + } + // Gesture Functions -- Start -- internal fun initSeek() { diff --git a/i18n/src/main/res/values/strings-aniyomi.xml b/i18n/src/main/res/values/strings-aniyomi.xml index a375548fd8..931d57a45c 100644 --- a/i18n/src/main/res/values/strings-aniyomi.xml +++ b/i18n/src/main/res/values/strings-aniyomi.xml @@ -106,7 +106,11 @@ 5s 3s Disable - Use media controls for chapter seeking + Seek chapters with media controls + When enabled, using next will invoke the skip intro button if no chapters are found + Next chapter + Previous chapter + Skipped opening Enable precise seeking When enabled, seeking will not focus on keyframes, leading to slower but precise seeking Show content in display cutout