diff --git a/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt
index 84982dbb..1b7b8099 100644
--- a/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt
@@ -32,6 +32,7 @@ import androidx.media3.ui.DefaultTimeBar
import androidx.media3.ui.PlayerView
import androidx.navigation.navArgs
import dagger.hilt.android.AndroidEntryPoint
+import dev.jdtech.jellyfin.core.R as CoreR
import dev.jdtech.jellyfin.databinding.ActivityPlayerBinding
import dev.jdtech.jellyfin.dialogs.SpeedSelectionDialogFragment
import dev.jdtech.jellyfin.dialogs.TrackSelectionDialogFragment
@@ -136,10 +137,15 @@ class PlayerActivity : BasePlayerActivity() {
videoNameTextView.text = currentItemTitle
// Skip Intro button
- skipIntroButton.isVisible = !isInPictureInPictureMode && currentIntro != null
+ skipIntroButton.isVisible = !isInPictureInPictureMode && (currentIntro != null || currentCredit != null)
+ skipIntroButton.text = if (currentCredit != null) getString(CoreR.string.skip_credit_button) else getString(CoreR.string.skip_intro_button)
skipIntroButton.setOnClickListener {
- currentIntro?.let {
- binding.playerView.player?.seekTo((it.introEnd * 1000).toLong())
+ if (currentIntro != null) {
+ currentIntro?.let {
+ binding.playerView.player?.seekTo((it.introEnd * 1000).toLong())
+ }
+ } else if (currentCredit != null) {
+ binding.playerView.player?.seekToNext()
}
}
diff --git a/app/phone/src/main/res/layout/exo_player_view.xml b/app/phone/src/main/res/layout/exo_player_view.xml
index 03b28bbd..16b91058 100644
--- a/app/phone/src/main/res/layout/exo_player_view.xml
+++ b/app/phone/src/main/res/layout/exo_player_view.xml
@@ -55,7 +55,6 @@
android:layout_gravity="end|bottom"
android:layout_marginEnd="24dp"
android:layout_marginBottom="64dp"
- android:text="@string/player_controls_skip_intro"
android:textColor="@android:color/white"
android:visibility="gone"
app:backgroundTint="@color/player_background"
diff --git a/core/src/main/java/dev/jdtech/jellyfin/utils/DownloaderImpl.kt b/core/src/main/java/dev/jdtech/jellyfin/utils/DownloaderImpl.kt
index 0b670493..66630ed8 100644
--- a/core/src/main/java/dev/jdtech/jellyfin/utils/DownloaderImpl.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/utils/DownloaderImpl.kt
@@ -15,6 +15,7 @@ import dev.jdtech.jellyfin.models.FindroidMovie
import dev.jdtech.jellyfin.models.FindroidSource
import dev.jdtech.jellyfin.models.TrickPlayManifest
import dev.jdtech.jellyfin.models.UiText
+import dev.jdtech.jellyfin.models.toCreditDto
import dev.jdtech.jellyfin.models.toFindroidEpisodeDto
import dev.jdtech.jellyfin.models.toFindroidMediaStreamDto
import dev.jdtech.jellyfin.models.toFindroidMovieDto
@@ -46,6 +47,7 @@ class DownloaderImpl(
try {
val source = jellyfinRepository.getMediaSources(item.id, true).first { it.id == sourceId }
val intro = jellyfinRepository.getIntroTimestamps(item.id)
+ val credit = jellyfinRepository.getCreditTimestamps(item.id)
val trickPlayManifest = jellyfinRepository.getTrickPlayManifest(item.id)
val trickPlayData = if (trickPlayManifest != null) {
jellyfinRepository.getTrickPlayData(
@@ -81,6 +83,9 @@ class DownloaderImpl(
if (intro != null) {
database.insertIntro(intro.toIntroDto(item.id))
}
+ if (credit != null) {
+ database.insertCredit(credit.toCreditDto(item.id))
+ }
if (trickPlayManifest != null && trickPlayData != null) {
downloadTrickPlay(item, trickPlayManifest, trickPlayData)
}
@@ -110,6 +115,9 @@ class DownloaderImpl(
if (intro != null) {
database.insertIntro(intro.toIntroDto(item.id))
}
+ if (credit != null) {
+ database.insertCredit(credit.toCreditDto(item.id))
+ }
if (trickPlayManifest != null && trickPlayData != null) {
downloadTrickPlay(item, trickPlayManifest, trickPlayData)
}
diff --git a/core/src/main/res/values-it/strings.xml b/core/src/main/res/values-it/strings.xml
index 5a961d89..c5303760 100644
--- a/core/src/main/res/values-it/strings.xml
+++ b/core/src/main/res/values-it/strings.xml
@@ -185,4 +185,6 @@
Diretta TV
Riproduci
Rimuovi dai preferiti
+ Salta intro
+ Prossimo episodio
\ No newline at end of file
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index ec8684c0..87846ec4 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -140,9 +140,9 @@
Video output
Audio output
Intro Skipper
- Requires ConfusedPolarBear\'s Intro Skipper plugin to be installed on the server
+ Requires ConfusedPolarBear\'s Intro Skipper plugin to be installed on the server.\nInstall jumoog\'s Intro Skipper v0.1.8 or higher to skip end credits.
Trick Play
- Requires nicknsy\'s Jellyscrub plugin to be installed on the server
+ Requires nicknsy\'s Jellyscrub plugin to be installed on the server
Addresses
Add address
Add server address
@@ -185,4 +185,6 @@
Unmark as played
Add to favorites
Remove from favorites
+ Skip Intro
+ Next episode
diff --git a/data/schemas/dev.jdtech.jellyfin.database.ServerDatabase/3.json b/data/schemas/dev.jdtech.jellyfin.database.ServerDatabase/3.json
index 22b5646d..6742f17d 100644
--- a/data/schemas/dev.jdtech.jellyfin.database.ServerDatabase/3.json
+++ b/data/schemas/dev.jdtech.jellyfin.database.ServerDatabase/3.json
@@ -2,7 +2,7 @@
"formatVersion": 1,
"database": {
"version": 3,
- "identityHash": "3cb9aaa3295b9e461cb94dfc708258ed",
+ "identityHash": "2611f255654b3d481be40f080a8b5401",
"entities": [
{
"tableName": "servers",
@@ -758,6 +758,50 @@
"indices": [],
"foreignKeys": []
},
+ {
+ "tableName": "credits",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`itemId` TEXT NOT NULL, `start` REAL NOT NULL, `end` REAL NOT NULL, `showAt` REAL NOT NULL, `hideAt` REAL NOT NULL, PRIMARY KEY(`itemId`))",
+ "fields": [
+ {
+ "fieldPath": "itemId",
+ "columnName": "itemId",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "start",
+ "columnName": "start",
+ "affinity": "REAL",
+ "notNull": true
+ },
+ {
+ "fieldPath": "end",
+ "columnName": "end",
+ "affinity": "REAL",
+ "notNull": true
+ },
+ {
+ "fieldPath": "showAt",
+ "columnName": "showAt",
+ "affinity": "REAL",
+ "notNull": true
+ },
+ {
+ "fieldPath": "hideAt",
+ "columnName": "hideAt",
+ "affinity": "REAL",
+ "notNull": true
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": false,
+ "columnNames": [
+ "itemId"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
{
"tableName": "userdata",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`userId` TEXT NOT NULL, `itemId` TEXT NOT NULL, `played` INTEGER NOT NULL, `favorite` INTEGER NOT NULL, `playbackPositionTicks` INTEGER NOT NULL, `toBeSynced` INTEGER NOT NULL, PRIMARY KEY(`userId`, `itemId`))",
@@ -813,7 +857,7 @@
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
- "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '3cb9aaa3295b9e461cb94dfc708258ed')"
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '2611f255654b3d481be40f080a8b5401')"
]
}
}
\ No newline at end of file
diff --git a/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabase.kt b/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabase.kt
index 1d84c004..f63625cf 100644
--- a/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabase.kt
+++ b/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabase.kt
@@ -4,6 +4,7 @@ import androidx.room.AutoMigration
import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
+import dev.jdtech.jellyfin.models.CreditDto
import dev.jdtech.jellyfin.models.FindroidEpisodeDto
import dev.jdtech.jellyfin.models.FindroidMediaStreamDto
import dev.jdtech.jellyfin.models.FindroidMovieDto
@@ -18,7 +19,7 @@ import dev.jdtech.jellyfin.models.TrickPlayManifestDto
import dev.jdtech.jellyfin.models.User
@Database(
- entities = [Server::class, ServerAddress::class, User::class, FindroidMovieDto::class, FindroidShowDto::class, FindroidSeasonDto::class, FindroidEpisodeDto::class, FindroidSourceDto::class, FindroidMediaStreamDto::class, TrickPlayManifestDto::class, IntroDto::class, FindroidUserDataDto::class],
+ entities = [Server::class, ServerAddress::class, User::class, FindroidMovieDto::class, FindroidShowDto::class, FindroidSeasonDto::class, FindroidEpisodeDto::class, FindroidSourceDto::class, FindroidMediaStreamDto::class, TrickPlayManifestDto::class, IntroDto::class, CreditDto::class, FindroidUserDataDto::class],
version = 3,
autoMigrations = [
AutoMigration(from = 2, to = 3),
diff --git a/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt b/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt
index 1d78c789..b6d2c271 100644
--- a/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt
+++ b/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt
@@ -6,6 +6,7 @@ import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Transaction
import androidx.room.Update
+import dev.jdtech.jellyfin.models.CreditDto
import dev.jdtech.jellyfin.models.FindroidEpisodeDto
import dev.jdtech.jellyfin.models.FindroidMediaStreamDto
import dev.jdtech.jellyfin.models.FindroidMovieDto
@@ -222,6 +223,15 @@ interface ServerDatabaseDao {
@Query("DELETE FROM intros WHERE itemId = :itemId")
fun deleteIntro(itemId: UUID)
+ @Insert(onConflict = OnConflictStrategy.REPLACE)
+ fun insertCredit(credit: CreditDto)
+
+ @Query("SELECT * FROM credits WHERE itemId = :itemId")
+ fun getCredit(itemId: UUID): CreditDto?
+
+ @Query("DELETE FROM credits WHERE itemId = :itemId")
+ fun deleteCredit(itemId: UUID)
+
@Query("SELECT * FROM seasons")
fun getSeasons(): List
diff --git a/data/src/main/java/dev/jdtech/jellyfin/models/Credit.kt b/data/src/main/java/dev/jdtech/jellyfin/models/Credit.kt
new file mode 100644
index 00000000..1f4311b6
--- /dev/null
+++ b/data/src/main/java/dev/jdtech/jellyfin/models/Credit.kt
@@ -0,0 +1,33 @@
+package dev.jdtech.jellyfin.models
+
+import kotlinx.serialization.SerialName
+import kotlinx.serialization.Serializable
+
+@Serializable
+data class Credit(
+ @SerialName("Credits")
+ val credit: Credits,
+)
+
+@Serializable
+data class Credits(
+ @SerialName("IntroStart")
+ val introStart: Double,
+ @SerialName("IntroEnd")
+ val introEnd: Double,
+ @SerialName("ShowSkipPromptAt")
+ val showSkipPromptAt: Double,
+ @SerialName("HideSkipPromptAt")
+ val hideSkipPromptAt: Double,
+)
+
+fun CreditDto.toCredit(): Credit {
+ return Credit(
+ credit = Credits(
+ introStart = start,
+ introEnd = end,
+ showSkipPromptAt = showAt,
+ hideSkipPromptAt = hideAt,
+ )
+ )
+}
diff --git a/data/src/main/java/dev/jdtech/jellyfin/models/CreditDto.kt b/data/src/main/java/dev/jdtech/jellyfin/models/CreditDto.kt
new file mode 100644
index 00000000..4f24bf68
--- /dev/null
+++ b/data/src/main/java/dev/jdtech/jellyfin/models/CreditDto.kt
@@ -0,0 +1,25 @@
+package dev.jdtech.jellyfin.models
+
+import androidx.room.Entity
+import androidx.room.PrimaryKey
+import java.util.UUID
+
+@Entity(tableName = "credits")
+data class CreditDto(
+ @PrimaryKey
+ val itemId: UUID,
+ val start: Double,
+ val end: Double,
+ val showAt: Double,
+ val hideAt: Double,
+)
+
+fun Credit.toCreditDto(itemId: UUID): CreditDto {
+ return CreditDto(
+ itemId = itemId,
+ start = credit.introStart,
+ end = credit.introEnd,
+ showAt = credit.showSkipPromptAt,
+ hideAt = credit.hideSkipPromptAt,
+ )
+}
diff --git a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt
index 8b902f55..7f31e281 100644
--- a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt
+++ b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt
@@ -1,6 +1,7 @@
package dev.jdtech.jellyfin.repository
import androidx.paging.PagingData
+import dev.jdtech.jellyfin.models.Credit
import dev.jdtech.jellyfin.models.FindroidCollection
import dev.jdtech.jellyfin.models.FindroidEpisode
import dev.jdtech.jellyfin.models.FindroidItem
@@ -86,6 +87,8 @@ interface JellyfinRepository {
suspend fun getIntroTimestamps(itemId: UUID): Intro?
+ suspend fun getCreditTimestamps(itemId: UUID): Credit?
+
suspend fun getTrickPlayManifest(itemId: UUID): TrickPlayManifest?
suspend fun getTrickPlayData(itemId: UUID, width: Int): ByteArray?
diff --git a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt
index f5019f0c..8c887036 100644
--- a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt
+++ b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt
@@ -7,6 +7,7 @@ import androidx.paging.PagingData
import dev.jdtech.jellyfin.AppPreferences
import dev.jdtech.jellyfin.api.JellyfinApi
import dev.jdtech.jellyfin.database.ServerDatabaseDao
+import dev.jdtech.jellyfin.models.Credit
import dev.jdtech.jellyfin.models.FindroidCollection
import dev.jdtech.jellyfin.models.FindroidEpisode
import dev.jdtech.jellyfin.models.FindroidItem
@@ -17,6 +18,7 @@ import dev.jdtech.jellyfin.models.FindroidSource
import dev.jdtech.jellyfin.models.Intro
import dev.jdtech.jellyfin.models.SortBy
import dev.jdtech.jellyfin.models.TrickPlayManifest
+import dev.jdtech.jellyfin.models.toCredit
import dev.jdtech.jellyfin.models.toFindroidCollection
import dev.jdtech.jellyfin.models.toFindroidEpisode
import dev.jdtech.jellyfin.models.toFindroidItem
@@ -372,6 +374,28 @@ class JellyfinRepositoryImpl(
}
}
+ override suspend fun getCreditTimestamps(itemId: UUID): Credit? =
+ withContext(Dispatchers.IO) {
+ val credit = database.getCredit(itemId)?.toCredit()
+
+ if (credit != null) {
+ return@withContext credit
+ }
+
+ // https://github.com/ConfusedPolarBear/intro-skipper/blob/master/docs/api.md
+ val pathParameters = mutableMapOf()
+ pathParameters["itemId"] = itemId
+
+ try {
+ return@withContext jellyfinApi.api.get(
+ "/Episode/{itemId}/IntroSkipperSegments",
+ pathParameters,
+ ).content
+ } catch (e: Exception) {
+ return@withContext null
+ }
+ }
+
override suspend fun getTrickPlayManifest(itemId: UUID): TrickPlayManifest? =
withContext(Dispatchers.IO) {
val trickPlayManifest = database.getTrickPlayManifest(itemId)
diff --git a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt
index 2fb4a399..389749a1 100644
--- a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt
+++ b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt
@@ -5,6 +5,7 @@ import androidx.paging.PagingData
import dev.jdtech.jellyfin.AppPreferences
import dev.jdtech.jellyfin.api.JellyfinApi
import dev.jdtech.jellyfin.database.ServerDatabaseDao
+import dev.jdtech.jellyfin.models.Credit
import dev.jdtech.jellyfin.models.FindroidCollection
import dev.jdtech.jellyfin.models.FindroidEpisode
import dev.jdtech.jellyfin.models.FindroidItem
@@ -15,6 +16,7 @@ import dev.jdtech.jellyfin.models.FindroidSource
import dev.jdtech.jellyfin.models.Intro
import dev.jdtech.jellyfin.models.SortBy
import dev.jdtech.jellyfin.models.TrickPlayManifest
+import dev.jdtech.jellyfin.models.toCredit
import dev.jdtech.jellyfin.models.toFindroidEpisode
import dev.jdtech.jellyfin.models.toFindroidMovie
import dev.jdtech.jellyfin.models.toFindroidSeason
@@ -184,6 +186,11 @@ class JellyfinRepositoryOfflineImpl(
database.getIntro(itemId)?.toIntro()
}
+ override suspend fun getCreditTimestamps(itemId: UUID): Credit? =
+ withContext(Dispatchers.IO) {
+ database.getCredit(itemId)?.toCredit()
+ }
+
override suspend fun getTrickPlayManifest(itemId: UUID): TrickPlayManifest? =
withContext(Dispatchers.IO) {
database.getTrickPlayManifest(itemId)?.toTrickPlayManifest()
diff --git a/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt b/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt
index b2ee5e9d..377c9d9d 100644
--- a/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt
+++ b/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt
@@ -18,6 +18,8 @@ import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.exoplayer.trackselection.DefaultTrackSelector
import dagger.hilt.android.lifecycle.HiltViewModel
import dev.jdtech.jellyfin.AppPreferences
+import dev.jdtech.jellyfin.models.Credit
+import dev.jdtech.jellyfin.models.Credits
import dev.jdtech.jellyfin.models.Intro
import dev.jdtech.jellyfin.models.PlayerItem
import dev.jdtech.jellyfin.mpv.MPVPlayer
@@ -55,6 +57,7 @@ constructor(
UiState(
currentItemTitle = "",
currentIntro = null,
+ currentCredit = null,
currentTrickPlay = null,
fileLoaded = false,
),
@@ -65,12 +68,14 @@ constructor(
val eventsChannelFlow = eventsChannel.receiveAsFlow()
private val intros: MutableMap = mutableMapOf()
+ private val credits: MutableMap = mutableMapOf()
private val trickPlays: MutableMap = mutableMapOf()
data class UiState(
val currentItemTitle: String,
val currentIntro: Intro?,
+ val currentCredit: Credits?,
val currentTrickPlay: BifData?,
val fileLoaded: Boolean,
)
@@ -152,6 +157,9 @@ constructor(
jellyfinRepository.getIntroTimestamps(item.itemId)?.let { intro ->
intros[item.itemId] = intro
}
+ jellyfinRepository.getCreditTimestamps(item.itemId)?.let { credit ->
+ credits[item.itemId] = credit.credit
+ }
}
Timber.d("Stream url: $streamUrl")
@@ -241,10 +249,11 @@ constructor(
handler.postDelayed(this, 5000L)
}
}
- val introCheckRunnable = object : Runnable {
+ val skipCheckRunnable = object : Runnable {
override fun run() {
if (player.currentMediaItem != null && player.currentMediaItem!!.mediaId.isNotEmpty()) {
val itemId = UUID.fromString(player.currentMediaItem!!.mediaId)
+
intros[itemId]?.let { intro ->
val seconds = player.currentPosition / 1000.0
if (seconds > intro.showSkipPromptAt && seconds < intro.hideSkipPromptAt) {
@@ -253,12 +262,22 @@ constructor(
}
_uiState.update { it.copy(currentIntro = null) }
}
+
+ credits[itemId]?.let { credit ->
+ val seconds = player.currentPosition / 1000.0
+ if (seconds > credit.showSkipPromptAt && seconds < credit.hideSkipPromptAt) {
+ _uiState.update { it.copy(currentCredit = credit) }
+ return@let
+ }
+ _uiState.update { it.copy(currentCredit = null) }
+ }
}
+
handler.postDelayed(this, 1000L)
}
}
handler.post(playbackProgressRunnable)
- if (intros.isNotEmpty()) handler.post(introCheckRunnable)
+ if (intros.isNotEmpty()) handler.post(skipCheckRunnable)
}
override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) {
diff --git a/player/video/src/main/res/values-b+es+419/strings.xml b/player/video/src/main/res/values-b+es+419/strings.xml
index b76a8749..3a11a2b3 100644
--- a/player/video/src/main/res/values-b+es+419/strings.xml
+++ b/player/video/src/main/res/values-b+es+419/strings.xml
@@ -7,7 +7,6 @@
Rebobinar>
Salir de reproductor
Avanzar
- Saltar intro
Externo
Saltar atrás
Reproducir pausar
diff --git a/player/video/src/main/res/values-bg/strings.xml b/player/video/src/main/res/values-bg/strings.xml
index 55bf2fa1..7fc902d3 100644
--- a/player/video/src/main/res/values-bg/strings.xml
+++ b/player/video/src/main/res/values-bg/strings.xml
@@ -14,6 +14,5 @@
Truques
Pausa na reprodução
Sair do reprodutor
- Pular introdução
Insira imagem em imagem
\ No newline at end of file
diff --git a/player/video/src/main/res/values-cs-rCZ/strings.xml b/player/video/src/main/res/values-cs-rCZ/strings.xml
index daae75dd..f033c9bf 100644
--- a/player/video/src/main/res/values-cs-rCZ/strings.xml
+++ b/player/video/src/main/res/values-cs-rCZ/strings.xml
@@ -9,7 +9,6 @@
Přeskočit zpět
Přehrát pauza
Přetočit
- Přeskočit úvod
Ukončit přehrávač
Rychlý posun vpřed
Přeskočit vpřed
diff --git a/player/video/src/main/res/values-de/strings.xml b/player/video/src/main/res/values-de/strings.xml
index 37ba16d3..b0e68dc9 100644
--- a/player/video/src/main/res/values-de/strings.xml
+++ b/player/video/src/main/res/values-de/strings.xml
@@ -8,5 +8,4 @@
Player verlassen
Wiederholen
Vorspulen
- Intro überspringen
diff --git a/player/video/src/main/res/values-es-rMX/strings.xml b/player/video/src/main/res/values-es-rMX/strings.xml
index a3da9e7f..ff19a455 100644
--- a/player/video/src/main/res/values-es-rMX/strings.xml
+++ b/player/video/src/main/res/values-es-rMX/strings.xml
@@ -8,7 +8,6 @@
Salir de reproductor
Atrasar
Avanzar
- Saltar intro
Saltar adelante
Avance
Bloquea el reproductor
diff --git a/player/video/src/main/res/values-es/strings.xml b/player/video/src/main/res/values-es/strings.xml
index fa5bc468..6b101382 100644
--- a/player/video/src/main/res/values-es/strings.xml
+++ b/player/video/src/main/res/values-es/strings.xml
@@ -8,7 +8,6 @@
Salir del reproductor
Rebobinar
Avanzar
- Saltar introducción
Saltar adelante
Bloquea el reproductor
Reproducir pausar
diff --git a/player/video/src/main/res/values-fr/strings.xml b/player/video/src/main/res/values-fr/strings.xml
index c4f13ee4..94ad3382 100644
--- a/player/video/src/main/res/values-fr/strings.xml
+++ b/player/video/src/main/res/values-fr/strings.xml
@@ -8,7 +8,6 @@
Quitter le lecteur
Rembobiner
Avance rapide
- Ignorer l\'introduction
Verrouille le lecteur
Lecture / Pause
Retour en arrière
diff --git a/player/video/src/main/res/values-hu/strings.xml b/player/video/src/main/res/values-hu/strings.xml
index 0d87f497..a1a2c227 100644
--- a/player/video/src/main/res/values-hu/strings.xml
+++ b/player/video/src/main/res/values-hu/strings.xml
@@ -8,7 +8,6 @@
Kilépés a lejátszóból
Visszatekerés
Előrepörgetés
- Intro kihagyása
Zárolja a lejátszót
Ugrás vissza
Ugrás előre
diff --git a/player/video/src/main/res/values-it/strings.xml b/player/video/src/main/res/values-it/strings.xml
index caf23db6..083bfe92 100644
--- a/player/video/src/main/res/values-it/strings.xml
+++ b/player/video/src/main/res/values-it/strings.xml
@@ -14,7 +14,6 @@
Riavvolgi
Blocca il player
Esci dal player
- Salta intro
Attiva picture in picture
Nessuno
\ No newline at end of file
diff --git a/player/video/src/main/res/values-iw/strings.xml b/player/video/src/main/res/values-iw/strings.xml
index c2fa91a4..dae114b9 100644
--- a/player/video/src/main/res/values-iw/strings.xml
+++ b/player/video/src/main/res/values-iw/strings.xml
@@ -8,7 +8,6 @@
צא מהנגן
הרצה אחורה
הרצה קדימה
- דלג פתיח
דלג קדימה
נועל את הנגן
דלג אחורה
diff --git a/player/video/src/main/res/values-ko/strings.xml b/player/video/src/main/res/values-ko/strings.xml
index 8993e36d..c6ee35dd 100644
--- a/player/video/src/main/res/values-ko/strings.xml
+++ b/player/video/src/main/res/values-ko/strings.xml
@@ -8,7 +8,6 @@
되감기
빨리 감기
플레이어 나가기
- 오프닝 스킵
플레이어 잠금
Trickplay
뒤로 건너뛰기
diff --git a/player/video/src/main/res/values-nl/strings.xml b/player/video/src/main/res/values-nl/strings.xml
index 6b69e563..c021b257 100644
--- a/player/video/src/main/res/values-nl/strings.xml
+++ b/player/video/src/main/res/values-nl/strings.xml
@@ -8,5 +8,4 @@
Sluit speler
Terugspoelen
Snel vooruit
- Intro overslaan
diff --git a/player/video/src/main/res/values-pl/strings.xml b/player/video/src/main/res/values-pl/strings.xml
index ee45bc6f..fba463a4 100644
--- a/player/video/src/main/res/values-pl/strings.xml
+++ b/player/video/src/main/res/values-pl/strings.xml
@@ -8,7 +8,6 @@
Zamknij odtwarzacz
Przewiń
Przewiń do przodu
- Pomiń czołówkę
Zablokuj odtwarzacz
Skocz do tyłu
Trickplay
diff --git a/player/video/src/main/res/values-pt-rBR/strings.xml b/player/video/src/main/res/values-pt-rBR/strings.xml
index d394cac9..6eb53b13 100644
--- a/player/video/src/main/res/values-pt-rBR/strings.xml
+++ b/player/video/src/main/res/values-pt-rBR/strings.xml
@@ -8,7 +8,6 @@
Sair do reprodutor
Retroceder
Avanço rápido
- Pular introdução
Bloqueia o reprodutor
Saltar para trás
Miniatura de pré-visualização
diff --git a/player/video/src/main/res/values-pt/strings.xml b/player/video/src/main/res/values-pt/strings.xml
index 0cc14bd2..b07f00b0 100644
--- a/player/video/src/main/res/values-pt/strings.xml
+++ b/player/video/src/main/res/values-pt/strings.xml
@@ -14,6 +14,5 @@
Barra de progresso
Avançar
Pular para trás
- Pular introdução
Insira imagem em imagem
\ No newline at end of file
diff --git a/player/video/src/main/res/values-ru/strings.xml b/player/video/src/main/res/values-ru/strings.xml
index f4e97c9d..fd12b06a 100644
--- a/player/video/src/main/res/values-ru/strings.xml
+++ b/player/video/src/main/res/values-ru/strings.xml
@@ -8,7 +8,6 @@
Выйти из проигрывателя
Перемотка
Быстрая перемотка
- Пропустить заставку
Блокировка
Перейти назад
Плей пауза
diff --git a/player/video/src/main/res/values-sk/strings.xml b/player/video/src/main/res/values-sk/strings.xml
index ccb936f2..2dc95d79 100644
--- a/player/video/src/main/res/values-sk/strings.xml
+++ b/player/video/src/main/res/values-sk/strings.xml
@@ -8,7 +8,6 @@
Zavrieť prehrávač
Pretočiť dozadu
Pretočiť dopredu
- Preskočiť úvodnú zvučku
Zamkne prehrávač
Preskočiť späť
Preskočiť dopredu
diff --git a/player/video/src/main/res/values-sl/strings.xml b/player/video/src/main/res/values-sl/strings.xml
index 72b604ef..a5e04c51 100644
--- a/player/video/src/main/res/values-sl/strings.xml
+++ b/player/video/src/main/res/values-sl/strings.xml
@@ -8,7 +8,6 @@
Izhod iz predvajalnika
Previj nazaj
Navijaj naprej
- Preskoči uvod
Zaklene predvajalnik
Preskoči nazaj
Predvajaj ustavi
diff --git a/player/video/src/main/res/values-sv/strings.xml b/player/video/src/main/res/values-sv/strings.xml
index 3e9998a1..c7086524 100644
--- a/player/video/src/main/res/values-sv/strings.xml
+++ b/player/video/src/main/res/values-sv/strings.xml
@@ -8,5 +8,4 @@
Avsluta spelare
Spola tillbaka
Spola framåt
- Hoppa över intro
\ No newline at end of file
diff --git a/player/video/src/main/res/values-uk/strings.xml b/player/video/src/main/res/values-uk/strings.xml
index 8b54d3f5..41c42b80 100644
--- a/player/video/src/main/res/values-uk/strings.xml
+++ b/player/video/src/main/res/values-uk/strings.xml
@@ -8,5 +8,4 @@
Відмотка
Швидке перемотування
Вийти з плеєра
- Пропустити вступ
\ No newline at end of file
diff --git a/player/video/src/main/res/values-vi/strings.xml b/player/video/src/main/res/values-vi/strings.xml
index f3061da1..44964e2c 100644
--- a/player/video/src/main/res/values-vi/strings.xml
+++ b/player/video/src/main/res/values-vi/strings.xml
@@ -8,7 +8,6 @@
Thoát khỏi trình xem
Tua lùi
Tua tới
- Bỏ qua đoạn mở đầu
Bỏ qua / Trở về
Khoá trình phát
Phát / Tạm dừng
diff --git a/player/video/src/main/res/values-zh-rCN/strings.xml b/player/video/src/main/res/values-zh-rCN/strings.xml
index 4d329a21..59cd4ed1 100644
--- a/player/video/src/main/res/values-zh-rCN/strings.xml
+++ b/player/video/src/main/res/values-zh-rCN/strings.xml
@@ -8,7 +8,6 @@
退出播放器
快退
快进
- 跳过片头
锁定播放器
跳回
播放暂停
diff --git a/player/video/src/main/res/values-zh-rTW/strings.xml b/player/video/src/main/res/values-zh-rTW/strings.xml
index 0c81db38..c4bf81c9 100644
--- a/player/video/src/main/res/values-zh-rTW/strings.xml
+++ b/player/video/src/main/res/values-zh-rTW/strings.xml
@@ -8,7 +8,6 @@
關閉播放器
倒帶
快轉
- 跳過片頭
鎖定播放器
跳回
播放暫停
diff --git a/player/video/src/main/res/values/strings.xml b/player/video/src/main/res/values/strings.xml
index fe54ebe6..eb6df272 100644
--- a/player/video/src/main/res/values/strings.xml
+++ b/player/video/src/main/res/values/strings.xml
@@ -11,7 +11,6 @@
Play pause
Rewind
Exit player
- Skip Intro
Fast forward
Skip forward
Trickplay