diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index 33534255..5135239e 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -12,7 +12,7 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4
- name: Validate Gradle Wrapper
- uses: gradle/wrapper-validation-action@v2
+ uses: gradle/actions/wrapper-validation@v3
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
@@ -29,7 +29,7 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4
- name: Validate Gradle Wrapper
- uses: gradle/wrapper-validation-action@v2
+ uses: gradle/actions/wrapper-validation@v3
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml
index 55b65a30..a3cf7674 100644
--- a/.github/workflows/publish.yaml
+++ b/.github/workflows/publish.yaml
@@ -20,7 +20,7 @@ jobs:
bundler-cache: true
- name: Validate Gradle Wrapper
- uses: gradle/wrapper-validation-action@v2
+ uses: gradle/actions/wrapper-validation@v3
- name: Set up JDK 17
uses: actions/setup-java@v4
diff --git a/app/phone/build.gradle.kts b/app/phone/build.gradle.kts
index b9a5e35e..9aa095ae 100644
--- a/app/phone/build.gradle.kts
+++ b/app/phone/build.gradle.kts
@@ -103,9 +103,7 @@ dependencies {
implementation(libs.androidx.constraintlayout)
implementation(libs.androidx.core)
implementation(libs.androidx.hilt.work)
- implementation(libs.androidx.lifecycle.runtime)
implementation(libs.androidx.lifecycle.viewmodel)
- implementation(libs.androidx.media3.exoplayer)
implementation(libs.androidx.media3.ui)
implementation(libs.androidx.media3.session)
implementation(libs.androidx.navigation.fragment)
diff --git a/app/phone/src/main/java/dev/jdtech/jellyfin/BasePlayerActivity.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/BasePlayerActivity.kt
index 653c4ce6..989988ca 100644
--- a/app/phone/src/main/java/dev/jdtech/jellyfin/BasePlayerActivity.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/BasePlayerActivity.kt
@@ -8,7 +8,6 @@ import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat
import androidx.core.view.updatePadding
-import androidx.media3.exoplayer.trackselection.MappingTrackSelector
import androidx.media3.session.MediaSession
import dev.jdtech.jellyfin.viewmodels.PlayerActivityViewModel
@@ -72,19 +71,6 @@ abstract class BasePlayerActivity : AppCompatActivity() {
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
}
- protected fun isRendererType(
- mappedTrackInfo: MappingTrackSelector.MappedTrackInfo,
- rendererIndex: Int,
- type: Int,
- ): Boolean {
- val trackGroupArray = mappedTrackInfo.getTrackGroups(rendererIndex)
- if (trackGroupArray.length == 0) {
- return false
- }
- val trackType = mappedTrackInfo.getRendererType(rendererIndex)
- return type == trackType
- }
-
protected fun configureInsets(playerControls: View) {
playerControls.setOnApplyWindowInsetsListener { _, windowInsets ->
val cutout = windowInsets.displayCutout
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 3919b1e5..0e6d8463 100644
--- a/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt
@@ -293,7 +293,7 @@ class PlayerActivity : BasePlayerActivity() {
hideSystemUI()
}
- override fun onNewIntent(intent: Intent?) {
+ override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
setIntent(intent)
@@ -302,6 +302,7 @@ class PlayerActivity : BasePlayerActivity() {
}
override fun onUserLeaveHint() {
+ super.onUserLeaveHint()
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S &&
appPreferences.playerPipGesture &&
viewModel.player.isPlaying &&
diff --git a/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt
index a98864a6..813196ff 100644
--- a/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt
@@ -1,6 +1,7 @@
package dev.jdtech.jellyfin.fragments
import android.os.Bundle
+import android.text.Html.fromHtml
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -82,7 +83,7 @@ class LoginFragment : Fragment() {
viewModel.uiState.collect { uiState ->
Timber.d("$uiState")
when (uiState) {
- is LoginViewModel.UiState.Normal -> bindUiStateNormal()
+ is LoginViewModel.UiState.Normal -> bindUiStateNormal(uiState)
is LoginViewModel.UiState.Error -> bindUiStateError(uiState)
is LoginViewModel.UiState.Loading -> bindUiStateLoading()
}
@@ -135,11 +136,15 @@ class LoginFragment : Fragment() {
return binding.root
}
- private fun bindUiStateNormal() {
+ private fun bindUiStateNormal(uiState: LoginViewModel.UiState.Normal) {
binding.buttonLogin.isEnabled = true
binding.progressCircular.isVisible = false
binding.editTextUsernameLayout.isEnabled = true
binding.editTextPasswordLayout.isEnabled = true
+
+ uiState.disclaimer?.let { disclaimer ->
+ binding.loginDisclaimer.text = fromHtml(disclaimer, 0)
+ }
}
private fun bindUiStateError(uiState: LoginViewModel.UiState.Error) {
diff --git a/app/phone/src/main/res/layout/fragment_login.xml b/app/phone/src/main/res/layout/fragment_login.xml
index 79d80833..7b898e95 100644
--- a/app/phone/src/main/res/layout/fragment_login.xml
+++ b/app/phone/src/main/res/layout/fragment_login.xml
@@ -141,6 +141,15 @@
android:visibility="invisible" />
+
+
diff --git a/app/tv/build.gradle.kts b/app/tv/build.gradle.kts
index f9eed3ef..3324bee0 100644
--- a/app/tv/build.gradle.kts
+++ b/app/tv/build.gradle.kts
@@ -1,6 +1,7 @@
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
+ alias(libs.plugins.kotlin.compose.compiler)
alias(libs.plugins.kotlin.parcelize)
alias(libs.plugins.hilt)
alias(libs.plugins.ksp)
@@ -56,6 +57,8 @@ android {
}
compileOptions {
+ isCoreLibraryDesugaringEnabled = true
+
sourceCompatibility = Versions.java
targetCompatibility = Versions.java
}
@@ -64,10 +67,6 @@ android {
compose = true
}
- composeOptions {
- kotlinCompilerExtensionVersion = Versions.composeCompiler
- }
-
packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
@@ -95,12 +94,13 @@ dependencies {
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.core)
implementation(libs.androidx.hilt.navigation.compose)
- implementation(libs.androidx.lifecycle.runtime)
implementation(libs.androidx.lifecycle.viewmodel.compose)
implementation(libs.androidx.media3.exoplayer)
implementation(libs.androidx.media3.ui)
implementation(libs.androidx.media3.session)
implementation(libs.androidx.paging.compose)
+ implementation(libs.androidx.tv.foundation)
+ implementation(libs.androidx.tv.material)
implementation(libs.coil.compose)
implementation(libs.coil.svg)
implementation(libs.compose.destinations.core)
@@ -108,8 +108,9 @@ dependencies {
implementation(libs.hilt.android)
ksp(libs.hilt.compiler)
implementation(libs.jellyfin.core)
- implementation(libs.androidx.tv.foundation)
- implementation(libs.androidx.tv.material)
+ implementation(libs.media3.ffmpeg.decoder)
+
+ coreLibraryDesugaring(libs.android.desugar.jdk)
debugImplementation(libs.androidx.compose.ui.tooling)
}
diff --git a/app/tv/proguard-rules.pro b/app/tv/proguard-rules.pro
index 04ec1836..7fe54b74 100644
--- a/app/tv/proguard-rules.pro
+++ b/app/tv/proguard-rules.pro
@@ -27,4 +27,6 @@
-dontwarn org.conscrypt.*
-dontwarn org.openjsse.javax.net.ssl.SSLParameters
-dontwarn org.openjsse.javax.net.ssl.SSLSocket
--dontwarn org.openjsse.net.ssl.OpenJSSE
\ No newline at end of file
+-dontwarn org.openjsse.net.ssl.OpenJSSE
+
+-keep class dev.jdtech.**
\ No newline at end of file
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt
index 950cdd4a..0e0ea714 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt
@@ -23,7 +23,6 @@ data class PlayerActivityNavArgs(
@ActivityDestination(
navArgsDelegate = PlayerActivityNavArgs::class,
)
-@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class)
class PlayerActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/AddServerScreen.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/AddServerScreen.kt
index e1731b4c..acdacdce 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/AddServerScreen.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/AddServerScreen.kt
@@ -32,7 +32,6 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.tv.material3.Button
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.Icon
import androidx.tv.material3.LocalContentColor
import androidx.tv.material3.MaterialTheme
@@ -71,7 +70,6 @@ fun AddServerScreen(
)
}
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
private fun AddServerScreenLayout(
uiState: AddServerViewModel.UiState,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/HomeScreen.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/HomeScreen.kt
index a908e471..4515a414 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/HomeScreen.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/HomeScreen.kt
@@ -22,7 +22,6 @@ import androidx.hilt.navigation.compose.hiltViewModel
import androidx.tv.foundation.lazy.list.TvLazyColumn
import androidx.tv.foundation.lazy.list.TvLazyRow
import androidx.tv.foundation.lazy.list.items
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Text
import com.ramcosta.composedestinations.annotation.Destination
@@ -88,7 +87,6 @@ fun HomeScreen(
)
}
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
private fun HomeScreenLayout(
uiState: HomeViewModel.UiState,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/LibrariesScreen.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/LibrariesScreen.kt
index 5fff7f97..07e042fc 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/LibrariesScreen.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/LibrariesScreen.kt
@@ -17,7 +17,6 @@ import androidx.hilt.navigation.compose.hiltViewModel
import androidx.tv.foundation.lazy.grid.TvGridCells
import androidx.tv.foundation.lazy.grid.TvLazyVerticalGrid
import androidx.tv.foundation.lazy.grid.items
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
@@ -50,7 +49,6 @@ fun LibrariesScreen(
)
}
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
private fun LibrariesScreenLayout(
uiState: MediaViewModel.UiState,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/LibraryScreen.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/LibraryScreen.kt
index 54a04bac..6b18565f 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/LibraryScreen.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/LibraryScreen.kt
@@ -18,7 +18,6 @@ import androidx.paging.compose.collectAsLazyPagingItems
import androidx.tv.foundation.lazy.grid.TvGridCells
import androidx.tv.foundation.lazy.grid.TvGridItemSpan
import androidx.tv.foundation.lazy.grid.TvLazyVerticalGrid
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Text
import com.ramcosta.composedestinations.annotation.Destination
@@ -75,7 +74,6 @@ fun LibraryScreen(
)
}
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
private fun LibraryScreenLayout(
libraryName: String,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/LoginScreen.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/LoginScreen.kt
index 629f1ced..6cbc210c 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/LoginScreen.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/LoginScreen.kt
@@ -6,6 +6,7 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.text.KeyboardOptions
@@ -32,7 +33,6 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.tv.material3.Button
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.Icon
import androidx.tv.material3.LocalContentColor
import androidx.tv.material3.MaterialTheme
@@ -86,7 +86,6 @@ fun LoginScreen(
)
}
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
private fun LoginScreenLayout(
uiState: LoginViewModel.UiState,
@@ -110,6 +109,14 @@ private fun LoginScreenLayout(
else -> Unit
}
+ var disclaimer: String? by remember {
+ mutableStateOf(null)
+ }
+
+ if (uiState is LoginViewModel.UiState.Normal) {
+ disclaimer = uiState.disclaimer
+ }
+
val isError = uiState is LoginViewModel.UiState.Error
val isLoading = uiState is LoginViewModel.UiState.Loading
@@ -241,6 +248,10 @@ private fun LoginScreenLayout(
}
}
}
+ Text(
+ text = disclaimer ?: "",
+ modifier = Modifier.padding(MaterialTheme.spacings.default),
+ )
}
}
@@ -254,7 +265,7 @@ private fun LoginScreenLayout(
private fun LoginScreenLayoutPreview() {
FindroidTheme {
LoginScreenLayout(
- uiState = LoginViewModel.UiState.Normal,
+ uiState = LoginViewModel.UiState.Normal(),
quickConnectUiState = LoginViewModel.QuickConnectUiState.Normal,
onLoginClick = { _, _ -> },
onQuickConnectClick = {},
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/MainScreen.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/MainScreen.kt
index 39afd435..3debc4d8 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/MainScreen.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/MainScreen.kt
@@ -29,7 +29,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.Icon
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Tab
@@ -78,7 +77,6 @@ enum class TabDestination(
// LiveTV(CoreR.drawable.ic_tv, CoreR.string.live_tv)
}
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
private fun MainScreenLayout(
uiState: MainViewModel.UiState,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/MovieScreen.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/MovieScreen.kt
index ca1273be..338b98d3 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/MovieScreen.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/MovieScreen.kt
@@ -39,7 +39,6 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.toSize
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.tv.material3.Button
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.Icon
import androidx.tv.material3.LocalContentColor
import androidx.tv.material3.MaterialTheme
@@ -115,7 +114,6 @@ fun MovieScreen(
)
}
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
private fun MovieScreenLayout(
uiState: MovieViewModel.UiState,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/PlayerScreen.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/PlayerScreen.kt
index e286e358..92cb0aae 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/PlayerScreen.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/PlayerScreen.kt
@@ -30,7 +30,6 @@ import androidx.media3.common.TrackSelectionOverride
import androidx.media3.common.util.UnstableApi
import androidx.media3.session.MediaSession
import androidx.media3.ui.PlayerView
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
@@ -204,7 +203,6 @@ fun PlayerScreen(
}
@androidx.annotation.OptIn(UnstableApi::class)
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
fun VideoPlayerControls(
title: String,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/SeasonScreen.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/SeasonScreen.kt
index b90b138c..e54895e7 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/SeasonScreen.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/SeasonScreen.kt
@@ -18,7 +18,6 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.tv.foundation.lazy.list.TvLazyColumn
import androidx.tv.foundation.lazy.list.items
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Text
import com.ramcosta.composedestinations.annotation.Destination
@@ -76,7 +75,6 @@ fun SeasonScreen(
)
}
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
private fun SeasonScreenLayout(
seriesName: String,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/ServerSelectScreen.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/ServerSelectScreen.kt
index 85a7d3f3..4d3cc63c 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/ServerSelectScreen.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/ServerSelectScreen.kt
@@ -35,7 +35,6 @@ import androidx.tv.foundation.lazy.list.TvLazyRow
import androidx.tv.foundation.lazy.list.items
import androidx.tv.material3.Border
import androidx.tv.material3.ClickableSurfaceDefaults
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.Icon
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.OutlinedButton
@@ -103,7 +102,6 @@ fun ServerSelectScreen(
)
}
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
private fun ServerSelectScreenLayout(
uiState: ServerSelectViewModel.UiState,
@@ -246,7 +244,6 @@ private fun ServerSelectScreenLayoutPreviewNoServers() {
}
}
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
private fun ServerComponent(
server: DiscoveredServer,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/SettingsScreen.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/SettingsScreen.kt
index 8fe27874..9e5866c0 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/SettingsScreen.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/SettingsScreen.kt
@@ -19,7 +19,6 @@ import androidx.tv.foundation.lazy.grid.TvGridCells
import androidx.tv.foundation.lazy.grid.TvGridItemSpan
import androidx.tv.foundation.lazy.grid.TvLazyVerticalGrid
import androidx.tv.foundation.lazy.grid.items
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Text
import com.ramcosta.composedestinations.annotation.Destination
@@ -80,7 +79,6 @@ fun SettingsScreen(
}
}
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
private fun SettingsScreenLayout(
uiState: SettingsViewModel.UiState,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/SettingsSubScreen.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/SettingsSubScreen.kt
index 8bbfa872..eec271ef 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/SettingsSubScreen.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/SettingsSubScreen.kt
@@ -25,7 +25,6 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.tv.foundation.lazy.list.TvLazyColumn
import androidx.tv.foundation.lazy.list.items
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Text
import com.ramcosta.composedestinations.annotation.Destination
@@ -90,7 +89,6 @@ fun SettingsSubScreen(
}
}
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
private fun SettingsSubScreenLayout(
uiState: SettingsViewModel.UiState,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/ShowScreen.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/ShowScreen.kt
index c595461d..77fb1464 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/ShowScreen.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/ShowScreen.kt
@@ -49,7 +49,6 @@ import androidx.tv.foundation.lazy.list.TvLazyRow
import androidx.tv.foundation.lazy.list.items
import androidx.tv.foundation.lazy.list.rememberTvLazyListState
import androidx.tv.material3.Button
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.Icon
import androidx.tv.material3.LocalContentColor
import androidx.tv.material3.MaterialTheme
@@ -126,7 +125,6 @@ fun ShowScreen(
)
}
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
private fun ShowScreenLayout(
uiState: ShowViewModel.UiState,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/UserSelectScreen.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/UserSelectScreen.kt
index 97305e9c..ed1b6e92 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/UserSelectScreen.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/UserSelectScreen.kt
@@ -33,7 +33,6 @@ import androidx.tv.foundation.lazy.list.TvLazyRow
import androidx.tv.foundation.lazy.list.items
import androidx.tv.material3.Border
import androidx.tv.material3.ClickableSurfaceDefaults
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.Icon
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.OutlinedButton
@@ -99,7 +98,6 @@ fun UserSelectScreen(
)
}
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
private fun UserSelectScreenLayout(
uiState: UserSelectViewModel.UiState,
@@ -204,7 +202,6 @@ private fun UserSelectScreenLayoutPreviewNoUsers() {
}
}
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
private fun UserComponent(
user: User,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/EpisodeCard.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/EpisodeCard.kt
index 7d9f8f23..9e1b4569 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/EpisodeCard.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/EpisodeCard.kt
@@ -23,7 +23,6 @@ import androidx.compose.ui.unit.dp
import androidx.tv.material3.Border
import androidx.tv.material3.ClickableSurfaceDefaults
import androidx.tv.material3.ClickableSurfaceScale
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Surface
import androidx.tv.material3.Text
@@ -32,7 +31,6 @@ import dev.jdtech.jellyfin.ui.dummy.dummyEpisode
import dev.jdtech.jellyfin.ui.theme.FindroidTheme
import dev.jdtech.jellyfin.ui.theme.spacings
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
fun EpisodeCard(
episode: FindroidEpisode,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/ItemCard.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/ItemCard.kt
index 6d63c42e..b8bb0fc3 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/ItemCard.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/ItemCard.kt
@@ -21,7 +21,6 @@ import androidx.compose.ui.unit.dp
import androidx.tv.material3.Border
import androidx.tv.material3.ClickableSurfaceDefaults
import androidx.tv.material3.ClickableSurfaceScale
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Surface
import androidx.tv.material3.Text
@@ -33,7 +32,6 @@ import dev.jdtech.jellyfin.ui.dummy.dummyMovie
import dev.jdtech.jellyfin.ui.theme.FindroidTheme
import dev.jdtech.jellyfin.ui.theme.spacings
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
fun ItemCard(
item: FindroidItem,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/ItemPoster.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/ItemPoster.kt
index 623bed32..041f7c0f 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/ItemPoster.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/ItemPoster.kt
@@ -6,7 +6,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
import coil.compose.AsyncImage
import dev.jdtech.jellyfin.models.FindroidEpisode
@@ -17,7 +16,6 @@ enum class Direction {
HORIZONTAL, VERTICAL
}
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
fun ItemPoster(
item: FindroidItem,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/PillBorderIndicator.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/PillBorderIndicator.kt
index 1cfc1958..47489184 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/PillBorderIndicator.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/PillBorderIndicator.kt
@@ -20,7 +20,6 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.height
import androidx.compose.ui.unit.width
import androidx.compose.ui.zIndex
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.TabRow
@@ -35,7 +34,6 @@ import androidx.tv.material3.TabRow
*
* This component is adapted from androidx.tv.material3.TabRowDefaults.PillIndicator
*/
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
fun PillBorderIndicator(
currentTabPosition: DpRect,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/ProfileButton.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/ProfileButton.kt
index f976abba..fa82acf2 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/ProfileButton.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/ProfileButton.kt
@@ -17,7 +17,6 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.tv.material3.Border
import androidx.tv.material3.ClickableSurfaceDefaults
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.Icon
import androidx.tv.material3.Surface
import coil.compose.AsyncImage
@@ -29,7 +28,6 @@ import dev.jdtech.jellyfin.ui.dummy.dummyUser
import dev.jdtech.jellyfin.ui.theme.FindroidTheme
import org.jellyfin.sdk.model.api.ImageType
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
fun ProfileButton(
user: User?,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/ProgressBadge.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/ProgressBadge.kt
index a525cda6..b62db7a8 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/ProgressBadge.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/ProgressBadge.kt
@@ -14,7 +14,6 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.Icon
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Text
@@ -25,7 +24,6 @@ import dev.jdtech.jellyfin.ui.theme.FindroidTheme
import dev.jdtech.jellyfin.ui.theme.spacings
import dev.jdtech.jellyfin.core.R as CoreR
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
fun ProgressBadge(
item: FindroidItem,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/SettingsCategoryCard.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/SettingsCategoryCard.kt
index ae040d93..322f5358 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/SettingsCategoryCard.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/SettingsCategoryCard.kt
@@ -21,7 +21,6 @@ import androidx.compose.ui.unit.dp
import androidx.tv.material3.Border
import androidx.tv.material3.ClickableSurfaceDefaults
import androidx.tv.material3.ClickableSurfaceScale
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.Icon
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Surface
@@ -31,7 +30,6 @@ import dev.jdtech.jellyfin.ui.theme.FindroidTheme
import dev.jdtech.jellyfin.ui.theme.spacings
import dev.jdtech.jellyfin.core.R as CoreR
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
fun SettingsCategoryCard(
preference: PreferenceCategory,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/SettingsDetailsSelectCard.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/SettingsDetailsSelectCard.kt
index 94ff0ed3..74d2b9ba 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/SettingsDetailsSelectCard.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/SettingsDetailsSelectCard.kt
@@ -22,7 +22,6 @@ import androidx.tv.foundation.lazy.list.TvLazyColumn
import androidx.tv.material3.Border
import androidx.tv.material3.ClickableSurfaceDefaults
import androidx.tv.material3.ClickableSurfaceScale
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.RadioButton
import androidx.tv.material3.Surface
@@ -33,7 +32,6 @@ import dev.jdtech.jellyfin.ui.theme.FindroidTheme
import dev.jdtech.jellyfin.ui.theme.spacings
import dev.jdtech.jellyfin.core.R as CoreR
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
fun SettingsDetailsCard(
preference: PreferenceSelect,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/SettingsSelectCard.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/SettingsSelectCard.kt
index 46b9ce29..d858832c 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/SettingsSelectCard.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/SettingsSelectCard.kt
@@ -21,7 +21,6 @@ import androidx.compose.ui.unit.dp
import androidx.tv.material3.Border
import androidx.tv.material3.ClickableSurfaceDefaults
import androidx.tv.material3.ClickableSurfaceScale
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.Icon
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Surface
@@ -32,7 +31,6 @@ import dev.jdtech.jellyfin.ui.theme.FindroidTheme
import dev.jdtech.jellyfin.ui.theme.spacings
import dev.jdtech.jellyfin.core.R as CoreR
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
fun SettingsSelectCard(
preference: PreferenceSelect,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/SettingsSwitchCard.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/SettingsSwitchCard.kt
index 976cb4fd..d0b84f69 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/SettingsSwitchCard.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/SettingsSwitchCard.kt
@@ -21,7 +21,6 @@ import androidx.compose.ui.unit.dp
import androidx.tv.material3.Border
import androidx.tv.material3.ClickableSurfaceDefaults
import androidx.tv.material3.ClickableSurfaceScale
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.Icon
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Surface
@@ -32,7 +31,6 @@ import dev.jdtech.jellyfin.models.PreferenceSwitch
import dev.jdtech.jellyfin.ui.theme.FindroidTheme
import dev.jdtech.jellyfin.ui.theme.spacings
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
fun SettingsSwitchCard(
preference: PreferenceSwitch,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerControls.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerControls.kt
index e8717d28..61d0010c 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerControls.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerControls.kt
@@ -15,12 +15,10 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
import dev.jdtech.jellyfin.ui.theme.FindroidTheme
import dev.jdtech.jellyfin.ui.theme.spacings
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
fun VideoPlayerControlsLayout(
mediaTitle: @Composable () -> Unit,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerMediaButton.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerMediaButton.kt
index 73139a13..54e15b22 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerMediaButton.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerMediaButton.kt
@@ -7,11 +7,9 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.graphics.painter.Painter
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.Icon
import androidx.tv.material3.IconButton
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
fun VideoPlayerMediaButton(
icon: Painter,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerMediaTitle.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerMediaTitle.kt
index e16bb849..4b55f2bd 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerMediaTitle.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerMediaTitle.kt
@@ -4,12 +4,10 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Text
import dev.jdtech.jellyfin.ui.theme.FindroidTheme
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
fun VideoPlayerMediaTitle(
title: String,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerOverlay.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerOverlay.kt
index 86d536d2..f0738e0d 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerOverlay.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerOverlay.kt
@@ -21,12 +21,10 @@ import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
import dev.jdtech.jellyfin.ui.theme.FindroidTheme
import dev.jdtech.jellyfin.ui.theme.spacings
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
fun VideoPlayerOverlay(
isPlaying: Boolean,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerSeekBar.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerSeekBar.kt
index e98685f5..43a79ab3 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerSeekBar.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerSeekBar.kt
@@ -25,12 +25,11 @@ import androidx.compose.ui.graphics.StrokeCap
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
import dev.jdtech.jellyfin.ui.theme.FindroidTheme
import dev.jdtech.jellyfin.utils.handleDPadKeyEvents
-@OptIn(ExperimentalTvMaterial3Api::class, ExperimentalComposeUiApi::class)
+@OptIn(ExperimentalComposeUiApi::class)
@Composable
fun VideoPlayerSeekBar(
progress: Float,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerSeeker.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerSeeker.kt
index 400196a1..4700403b 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerSeeker.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/components/player/VideoPlayerSeeker.kt
@@ -15,7 +15,6 @@ import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.Icon
import androidx.tv.material3.IconButton
import androidx.tv.material3.MaterialTheme
@@ -25,7 +24,6 @@ import dev.jdtech.jellyfin.ui.theme.spacings
import kotlin.time.Duration
import dev.jdtech.jellyfin.core.R as CoreR
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
fun VideoPlayerSeeker(
focusRequester: FocusRequester,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/dialogs/VideoPlayerTrackSelectorDialog.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/dialogs/VideoPlayerTrackSelectorDialog.kt
index 595c609a..94176948 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/dialogs/VideoPlayerTrackSelectorDialog.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/dialogs/VideoPlayerTrackSelectorDialog.kt
@@ -24,7 +24,6 @@ import androidx.tv.foundation.lazy.list.items
import androidx.tv.material3.Border
import androidx.tv.material3.ClickableSurfaceDefaults
import androidx.tv.material3.ClickableSurfaceScale
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.RadioButton
import androidx.tv.material3.Surface
@@ -45,7 +44,6 @@ data class VideoPlayerTrackSelectorDialogResult(
val index: Int,
) : Parcelable
-@OptIn(ExperimentalTvMaterial3Api::class)
@Destination(style = BaseDialogStyle::class)
@Composable
fun VideoPlayerTrackSelectorDialog(
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Color.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Color.kt
index e662f891..42520774 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Color.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Color.kt
@@ -2,7 +2,6 @@ package dev.jdtech.jellyfin.ui.theme
import androidx.compose.material3.darkColorScheme
import androidx.compose.ui.graphics.Color
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.darkColorScheme as darkColorSchemeTv
val PrimaryDark = Color(0xffa1c9ff)
@@ -23,7 +22,6 @@ val ColorScheme = darkColorScheme(
background = Neutral1000,
)
-@OptIn(ExperimentalTvMaterial3Api::class)
val ColorSchemeTv = darkColorSchemeTv(
primary = ColorScheme.primary,
onPrimary = ColorScheme.onPrimary,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Shape.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Shape.kt
index 5470e4c3..487d3c18 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Shape.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Shape.kt
@@ -3,7 +3,6 @@ package dev.jdtech.jellyfin.ui.theme
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Shapes
import androidx.compose.ui.unit.dp
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.Shapes as ShapesTv
val shapes = Shapes(
@@ -11,7 +10,6 @@ val shapes = Shapes(
small = RoundedCornerShape(10.dp),
)
-@OptIn(ExperimentalTvMaterial3Api::class)
val shapesTv = ShapesTv(
extraSmall = shapes.extraSmall,
small = shapes.small,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Spacing.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Spacing.kt
index 0d69d897..884971f8 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Spacing.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Spacing.kt
@@ -4,7 +4,6 @@ import androidx.compose.runtime.Immutable
import androidx.compose.runtime.compositionLocalOf
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
@Immutable
@@ -17,9 +16,7 @@ data class Spacings(
val extraLarge: Dp = 64.dp,
)
-@OptIn(ExperimentalTvMaterial3Api::class)
val MaterialTheme.spacings
get() = Spacings()
-@OptIn(ExperimentalTvMaterial3Api::class)
val LocalSpacings = compositionLocalOf { MaterialTheme.spacings }
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Theme.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Theme.kt
index 30475d26..62ee40e1 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Theme.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Theme.kt
@@ -10,12 +10,10 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.RectangleShape
-import androidx.tv.material3.ExperimentalTvMaterial3Api
-import androidx.tv.material3.NonInteractiveSurfaceDefaults
import androidx.tv.material3.Surface
+import androidx.tv.material3.SurfaceDefaults
import androidx.tv.material3.MaterialTheme as MaterialThemeTv
-@OptIn(ExperimentalTvMaterial3Api::class)
@Composable
fun FindroidTheme(
content: @Composable BoxScope.() -> Unit,
@@ -34,7 +32,7 @@ fun FindroidTheme(
shapes = shapesTv,
content = {
Surface(
- colors = NonInteractiveSurfaceDefaults.colors(
+ colors = SurfaceDefaults.colors(
containerColor = androidx.tv.material3.MaterialTheme.colorScheme.background,
),
shape = RectangleShape,
diff --git a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Type.kt b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Type.kt
index ff6732a2..acc53b68 100644
--- a/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Type.kt
+++ b/app/tv/src/main/java/dev/jdtech/jellyfin/ui/theme/Type.kt
@@ -4,7 +4,6 @@ import androidx.compose.material3.Typography
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.sp
-import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.Typography as TypographyTv
val Typography = Typography(
@@ -34,7 +33,6 @@ val Typography = Typography(
),
)
-@OptIn(ExperimentalTvMaterial3Api::class)
val TypographyTv = TypographyTv(
displayMedium = Typography.displayMedium,
headlineMedium = Typography.headlineMedium,
diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt
index 4a96003b..33ed80aa 100644
--- a/buildSrc/src/main/kotlin/Versions.kt
+++ b/buildSrc/src/main/kotlin/Versions.kt
@@ -11,6 +11,5 @@ object Versions {
val java = JavaVersion.VERSION_17
- const val composeCompiler = "1.5.11"
const val ktlint = "0.50.0"
}
\ No newline at end of file
diff --git a/core/build.gradle.kts b/core/build.gradle.kts
index 33930d84..76bfe312 100644
--- a/core/build.gradle.kts
+++ b/core/build.gradle.kts
@@ -1,6 +1,7 @@
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
+ alias(libs.plugins.kotlin.compose.compiler)
alias(libs.plugins.kotlin.parcelize)
alias(libs.plugins.ksp)
alias(libs.plugins.androidx.navigation.safeargs)
@@ -39,10 +40,6 @@ android {
buildFeatures {
compose = true
}
-
- composeOptions {
- kotlinCompilerExtensionVersion = Versions.composeCompiler
- }
}
ktlint {
@@ -57,16 +54,13 @@ dependencies {
implementation(projects.data)
implementation(projects.preferences)
implementation(projects.player.core)
- implementation(libs.androidx.activity)
implementation(libs.androidx.appcompat)
implementation(composeBom)
implementation(libs.androidx.compose.ui)
implementation(libs.androidx.core)
implementation(libs.androidx.hilt.work)
ksp(libs.androidx.hilt.compiler)
- implementation(libs.androidx.lifecycle.runtime)
implementation(libs.androidx.lifecycle.viewmodel)
- implementation(libs.androidx.navigation.fragment)
implementation(libs.androidx.paging)
implementation(libs.androidx.preference)
implementation(libs.androidx.room.runtime)
diff --git a/core/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModel.kt
index b44950f8..5ec4e2f8 100644
--- a/core/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModel.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModel.kt
@@ -61,7 +61,7 @@ constructor(
parentId = parentId,
includeTypes = itemType,
recursive = recursive,
- sortBy = sortBy,
+ sortBy = if (libraryType == CollectionType.TvShows && sortBy == SortBy.DATE_PLAYED) SortBy.SERIES_DATE_PLAYED else sortBy, // Jellyfin uses a different enum for sorting series by data played
sortOrder = sortOrder,
).cachedIn(viewModelScope)
_uiState.emit(UiState.Normal(items))
diff --git a/core/src/main/java/dev/jdtech/jellyfin/viewmodels/LoginViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/LoginViewModel.kt
index 81f7fcea..7f2f2314 100644
--- a/core/src/main/java/dev/jdtech/jellyfin/viewmodels/LoginViewModel.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/LoginViewModel.kt
@@ -19,6 +19,7 @@ import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.jellyfin.sdk.api.client.extensions.authenticateWithQuickConnect
+import org.jellyfin.sdk.api.client.extensions.brandingApi
import org.jellyfin.sdk.model.api.AuthenticateUserByName
import org.jellyfin.sdk.model.api.AuthenticationResult
import javax.inject.Inject
@@ -32,7 +33,7 @@ constructor(
private val jellyfinApi: JellyfinApi,
private val database: ServerDatabaseDao,
) : ViewModel() {
- private val _uiState = MutableStateFlow(UiState.Normal)
+ private val _uiState = MutableStateFlow(UiState.Normal())
val uiState = _uiState.asStateFlow()
private val _usersState = MutableStateFlow(UsersState.Loading)
val usersState = _usersState.asStateFlow()
@@ -44,8 +45,10 @@ constructor(
private var quickConnectJob: Job? = null
+ private var loginDisclaimer: String? = null
+
sealed class UiState {
- data object Normal : UiState()
+ data class Normal(val disclaimer: String? = null) : UiState()
data object Loading : UiState()
data class Error(val message: UiText) : UiState()
}
@@ -62,10 +65,18 @@ constructor(
}
init {
+ loadDisclaimer()
loadPublicUsers()
loadQuickConnectAvailable()
}
+ private fun loadDisclaimer() {
+ viewModelScope.launch {
+ loginDisclaimer = jellyfinApi.api.brandingApi.getBrandingOptions().content.loginDisclaimer
+ _uiState.emit(UiState.Normal(loginDisclaimer))
+ }
+ }
+
private fun loadPublicUsers() {
viewModelScope.launch {
_usersState.emit(UsersState.Loading)
@@ -121,7 +132,7 @@ constructor(
saveAuthenticationResult(authenticationResult)
- _uiState.emit(UiState.Normal)
+ _uiState.emit(UiState.Normal(loginDisclaimer))
eventsChannel.send(LoginEvent.NavigateToHome)
} catch (e: Exception) {
val message =
diff --git a/core/src/main/res/values-pl/strings.xml b/core/src/main/res/values-pl/strings.xml
index a05cabf9..9c2066b8 100644
--- a/core/src/main/res/values-pl/strings.xml
+++ b/core/src/main/res/values-pl/strings.xml
@@ -175,4 +175,21 @@
Gest domowy obrazu w obrazie
Obraz w obrazie
Użyj przycisku strony głównej lub gestu, aby przejść do trybu obrazu w obrazie podczas odtwarzania wideo
+ Ta kolekcja nie zawiera żadnych elementów
+ Nie znaleziono żadnego serwera
+ Nie znaleziono użytkowników
+ Wybierz użytkownika
+ Telewizja na żywo
+ Odtwórz
+ Odtwórz trailer
+ Uruchom w trybie pełnoekranowym
+ Domyślnie odtwórz wideo w trybie pełnoekranowym
+ Długo przytrzymaj z prawej lub lewej strony aby pominąć rozdziały (omija 2x przyspieszenie wideo)
+ Gest rozdziału
+ Znaczniki rozdziałów
+ Wyświetl znaczniki rozdziałów na pasku odtwarzania
+ Zaznacz jako obejrzane
+ Zaznacz jako nieobejrzane
+ Dodaj do ulubionych
+ Usuń z ulubionych
\ No newline at end of file
diff --git a/core/src/main/res/values-sk/strings.xml b/core/src/main/res/values-sk/strings.xml
index 82d405f9..b44c710a 100644
--- a/core/src/main/res/values-sk/strings.xml
+++ b/core/src/main/res/values-sk/strings.xml
@@ -185,4 +185,11 @@
Zrušiť označenie pozretého
Pridať k obľúbeným
Odstrániť z obľúbených
+ Táto kolekcia neobsahuje žiadne média
+ Začni maximalizovaný
+ Štandardne otvor video v maximalizovanom režime
+ Gesto na kapitoly
+ Dlhé stlačenie na ľavej / pravej strane pre preskočenie kapitoly (prepíše gesto na 2x rýchlosť)
+ Značky kapitol
+ Zobraz značky kapitol na časovej osi
\ No newline at end of file
diff --git a/data/src/main/java/dev/jdtech/jellyfin/models/SortBy.kt b/data/src/main/java/dev/jdtech/jellyfin/models/SortBy.kt
index 5cedc8d1..4d2f2161 100644
--- a/data/src/main/java/dev/jdtech/jellyfin/models/SortBy.kt
+++ b/data/src/main/java/dev/jdtech/jellyfin/models/SortBy.kt
@@ -7,6 +7,7 @@ enum class SortBy(val sortString: String) {
DATE_ADDED("DateCreated"),
DATE_PLAYED("DatePlayed"),
RELEASE_DATE("PremiereDate"),
+ SERIES_DATE_PLAYED("SeriesDatePlayed"),
;
companion object {
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 acb282c5..f01252df 100644
--- a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt
+++ b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt
@@ -306,7 +306,6 @@ class JellyfinRepositoryImpl(
responseProfiles = emptyList(),
subtitleProfiles = listOf(
SubtitleProfile("srt", SubtitleDeliveryMethod.EXTERNAL),
- SubtitleProfile("vtt", SubtitleDeliveryMethod.EXTERNAL),
SubtitleProfile("ass", SubtitleDeliveryMethod.EXTERNAL),
),
xmlRootAttributes = emptyList(),
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 1bbaaab4..4e1305f4 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,18 +1,18 @@
[versions]
-aboutlibraries = "11.1.3"
+aboutlibraries = "11.2.0"
android-desugar-jdk-libs = "2.0.4"
-android-plugin = "8.3.2"
-androidx-activity = "1.8.2"
+android-plugin = "8.4.1"
+androidx-activity = "1.9.0"
androidx-appcompat = "1.6.1"
-androidx-compose-bom = "2024.04.00"
+androidx-compose-bom = "2024.05.00"
androidx-compose-material3 = "1.2.1"
androidx-constraintlayout = "2.1.4"
-androidx-core = "1.12.0"
+androidx-core = "1.13.1"
androidx-hilt = "1.2.0"
-androidx-lifecycle = "2.7.0"
+androidx-lifecycle = "2.8.0"
androidx-media3 = "1.3.1"
androidx-navigation = "2.7.7"
-androidx-paging = "3.2.1"
+androidx-paging = "3.3.0"
androidx-preference = "1.2.1"
androidx-recyclerview = "1.3.2"
androidx-room = "2.6.1"
@@ -23,19 +23,20 @@ androidx-test-junit = "1.1.5"
androidx-test-rules = "1.5.0"
androidx-test-runner = "1.5.2"
androidx-tv = "1.0.0-alpha10"
+androidx-tv-material3 = "1.0.0-beta01"
androidx-work = "2.9.0"
coil = "2.6.0"
hilt = "2.51.1"
compose-destinations = "1.10.2"
jellyfin = "1.4.7"
junit = "4.13.2"
-kotlin = "1.9.23"
+kotlin = "2.0.0"
kotlinx-serialization = "1.6.3"
-ksp = "1.9.23-1.0.20"
-ktlint = "12.1.0"
+ksp = "2.0.0-1.0.21"
+ktlint = "12.1.1"
libmpv = "0.2.0"
-material = "1.11.0"
-media3-ffmpeg-decoder = "1.2.1+1"
+material = "1.12.0"
+media3-ffmpeg-decoder = "1.3.1+2"
timber = "5.0.1"
[libraries]
@@ -55,7 +56,7 @@ androidx-core = { group = "androidx.core", name = "core", version.ref = "android
androidx-hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "androidx-hilt" }
androidx-hilt-work = { group = "androidx.hilt", name = "hilt-work", version.ref = "androidx-hilt" }
androidx-hilt-compiler = { group = "androidx.hilt", name = "hilt-compiler", version.ref = "androidx-hilt" }
-androidx-lifecycle-runtime = { group = "androidx.lifecycle", name = "lifecycle-runtime", version.ref = "androidx-lifecycle" }
+androidx-lifecycle-runtime = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "androidx-lifecycle" }
androidx-lifecycle-viewmodel = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-ktx", version.ref = "androidx-lifecycle" }
androidx-lifecycle-viewmodel-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" }
androidx-media3-common = { group = "androidx.media3", name = "media3-common", version.ref = "androidx-media3" }
@@ -79,7 +80,7 @@ androidx-test-junit = { group = "androidx.test.ext", name = "junit", version.ref
androidx-test-rules = { group = "androidx.test" , name = "rules", version.ref = "androidx-test-rules" }
androidx-test-runner = { group = "androidx.test", name = "runner", version.ref = "androidx-test-runner" }
androidx-tv-foundation = { group = "androidx.tv", name = "tv-foundation", version.ref = "androidx-tv" }
-androidx-tv-material = { group = "androidx.tv", name = "tv-material", version.ref = "androidx-tv" }
+androidx-tv-material = { group = "androidx.tv", name = "tv-material", version.ref = "androidx-tv-material3" }
androidx-work = { group = "androidx.work", name = "work-runtime", version.ref = "androidx-work" }
androidx-work-testing = { group = "androidx.work", name = "work-testing", version.ref = "androidx-work" }
coil = { group = "io.coil-kt", name = "coil", version.ref = "coil" }
@@ -106,6 +107,7 @@ android-library = { id = "com.android.library", version.ref = "android-plugin" }
androidx-navigation-safeargs = { id = "androidx.navigation.safeargs.kotlin", version.ref = "androidx-navigation" }
hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
+kotlin-compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
diff --git a/player/core/build.gradle.kts b/player/core/build.gradle.kts
index 0293020a..91d45fd9 100644
--- a/player/core/build.gradle.kts
+++ b/player/core/build.gradle.kts
@@ -36,10 +36,5 @@ ktlint {
}
dependencies {
- implementation(projects.data)
- implementation(projects.preferences)
- implementation(libs.androidx.core)
- implementation(libs.androidx.preference)
- implementation(libs.jellyfin.core)
implementation(libs.timber)
}
diff --git a/player/video/build.gradle.kts b/player/video/build.gradle.kts
index 5b4ea8d8..2653116e 100644
--- a/player/video/build.gradle.kts
+++ b/player/video/build.gradle.kts
@@ -41,7 +41,6 @@ dependencies {
implementation(projects.player.core)
implementation(projects.data)
implementation(projects.preferences)
- implementation(libs.androidx.core)
implementation(libs.androidx.lifecycle.runtime)
implementation(libs.androidx.lifecycle.viewmodel)
implementation(libs.androidx.media3.exoplayer)
diff --git a/player/video/src/main/java/dev/jdtech/jellyfin/Extensions.kt b/player/video/src/main/java/dev/jdtech/jellyfin/Extensions.kt
index 0915b79d..9f701e3b 100644
--- a/player/video/src/main/java/dev/jdtech/jellyfin/Extensions.kt
+++ b/player/video/src/main/java/dev/jdtech/jellyfin/Extensions.kt
@@ -9,7 +9,7 @@ fun List.getTrackNames(): Array {
val format = group.mediaTrackGroup.getFormat(0)
nameParts.run {
add(format.label)
- add(format.language?.let { Locale(it).displayLanguage })
+ add(format.language?.let { Locale(it.split("-").last()).displayLanguage })
add(format.codecs)
filterNotNull().joinToString(separator = " - ")
}
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 d6f78d9e..5fc1ce1b 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
@@ -28,7 +28,6 @@ import dev.jdtech.jellyfin.repository.JellyfinRepository
import dev.jdtech.jellyfin.utils.bif.BifData
import dev.jdtech.jellyfin.utils.bif.BifUtil
import kotlinx.coroutines.DelicateCoroutinesApi
-import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.delay
@@ -37,7 +36,6 @@ import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
-import kotlinx.coroutines.withContext
import timber.log.Timber
import java.util.UUID
import javax.inject.Inject
@@ -193,11 +191,6 @@ constructor(
currentMediaItemIndex,
startPosition,
)
- if (appPreferences.playerMpv) { // For some reason, adding a 1ms delay between these two lines fixes a crash when playing with mpv from downloads
- withContext(Dispatchers.IO) {
- Thread.sleep(1)
- }
- }
player.prepare()
player.play()
pollPosition(player)
diff --git a/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt b/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt
index d01c8e03..88082a91 100644
--- a/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt
+++ b/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt
@@ -139,20 +139,13 @@ class PlayerViewModel @Inject internal constructor(
mediaStream.isExternal && mediaStream.type == MediaStreamType.SUBTITLE && !mediaStream.path.isNullOrBlank()
}
.map { mediaStream ->
- // Temp fix for vtt
- // Jellyfin returns a srt stream when it should return vtt stream.
- var deliveryUrl = mediaStream.path!!
- if (mediaStream.codec == "webvtt") {
- deliveryUrl = deliveryUrl.replace("Stream.srt", "Stream.vtt")
- }
-
ExternalSubtitle(
mediaStream.title,
mediaStream.language,
- Uri.parse(deliveryUrl),
+ Uri.parse(mediaStream.path!!),
when (mediaStream.codec) {
"subrip" -> MimeTypes.APPLICATION_SUBRIP
- "webvtt" -> MimeTypes.TEXT_VTT
+ "webvtt" -> MimeTypes.APPLICATION_SUBRIP
"ass" -> MimeTypes.TEXT_SSA
else -> MimeTypes.TEXT_UNKNOWN
},
diff --git a/player/video/src/main/res/values-pl/strings.xml b/player/video/src/main/res/values-pl/strings.xml
index fba463a4..4b2dba1e 100644
--- a/player/video/src/main/res/values-pl/strings.xml
+++ b/player/video/src/main/res/values-pl/strings.xml
@@ -15,4 +15,5 @@
Pasek postępu
Odtwórz/wstrzymaj
Wejdź w tryb obrazu w obrazie
+ Brak
\ No newline at end of file