Big cleanup and refactoring
This commit is contained in:
parent
25ee7d05af
commit
f460c25a92
24 changed files with 130 additions and 93 deletions
|
@ -4,5 +4,4 @@ import android.app.Application
|
|||
import dagger.hilt.android.HiltAndroidApp
|
||||
|
||||
@HiltAndroidApp
|
||||
class BaseApplication : Application() {
|
||||
}
|
||||
class BaseApplication : Application()
|
|
@ -10,8 +10,6 @@ import dev.jdtech.jellyfin.databinding.NextUpSectionBinding
|
|||
import dev.jdtech.jellyfin.databinding.ViewItemBinding
|
||||
import dev.jdtech.jellyfin.models.HomeSection
|
||||
import dev.jdtech.jellyfin.models.View
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||
import java.lang.ClassCastException
|
||||
import java.util.*
|
||||
|
||||
private const val ITEM_VIEW_TYPE_NEXT_UP = 0
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package dev.jdtech.jellyfin.api
|
||||
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import dev.jdtech.jellyfin.BuildConfig
|
||||
import org.jellyfin.sdk.Jellyfin
|
||||
import org.jellyfin.sdk.android
|
||||
|
|
|
@ -6,21 +6,20 @@ import android.view.LayoutInflater
|
|||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import dev.jdtech.jellyfin.R
|
||||
import dev.jdtech.jellyfin.databinding.FragmentAddServerBinding
|
||||
import dev.jdtech.jellyfin.viewmodels.AddServerViewModel
|
||||
|
||||
class AddServerFragment : Fragment() {
|
||||
|
||||
private lateinit var binding: FragmentAddServerBinding
|
||||
private val viewModel: AddServerViewModel by viewModels()
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater, container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
val binding = FragmentAddServerBinding.inflate(inflater)
|
||||
binding = FragmentAddServerBinding.inflate(inflater)
|
||||
|
||||
binding.lifecycleOwner = this
|
||||
binding.viewModel = viewModel
|
||||
|
@ -37,8 +36,7 @@ class AddServerFragment : Fragment() {
|
|||
|
||||
viewModel.navigateToLogin.observe(viewLifecycleOwner, {
|
||||
if (it) {
|
||||
this.findNavController().navigate(R.id.action_addServerFragment_to_loginFragment)
|
||||
viewModel.onNavigateToLoginDone()
|
||||
navigateToLoginFragment()
|
||||
}
|
||||
binding.progressCircular.visibility = View.GONE
|
||||
})
|
||||
|
@ -49,4 +47,9 @@ class AddServerFragment : Fragment() {
|
|||
|
||||
return binding.root
|
||||
}
|
||||
|
||||
private fun navigateToLoginFragment() {
|
||||
findNavController().navigate(AddServerFragmentDirections.actionAddServerFragmentToLoginFragment())
|
||||
viewModel.onNavigateToLoginDone()
|
||||
}
|
||||
}
|
|
@ -14,13 +14,18 @@ import dev.jdtech.jellyfin.viewmodels.EpisodeBottomSheetViewModelFactory
|
|||
class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
|
||||
private val args: EpisodeBottomSheetFragmentArgs by navArgs()
|
||||
|
||||
private lateinit var binding: EpisodeBottomSheetBinding
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
val binding = EpisodeBottomSheetBinding.inflate(inflater, container, false)
|
||||
val viewModelFactory = EpisodeBottomSheetViewModelFactory(requireNotNull(this.activity).application, args.episodeId)
|
||||
binding = EpisodeBottomSheetBinding.inflate(inflater, container, false)
|
||||
val viewModelFactory = EpisodeBottomSheetViewModelFactory(
|
||||
requireNotNull(this.activity).application,
|
||||
args.episodeId
|
||||
)
|
||||
val viewModel: EpisodeBottomSheetViewModel by viewModels { viewModelFactory }
|
||||
|
||||
binding.lifecycleOwner = this
|
||||
|
|
|
@ -6,7 +6,6 @@ import android.view.View
|
|||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import dev.jdtech.jellyfin.R
|
||||
import dev.jdtech.jellyfin.adapters.HomeEpisodeListAdapter
|
||||
|
@ -14,9 +13,11 @@ import dev.jdtech.jellyfin.adapters.ViewItemListAdapter
|
|||
import dev.jdtech.jellyfin.adapters.ViewListAdapter
|
||||
import dev.jdtech.jellyfin.databinding.FragmentHomeBinding
|
||||
import dev.jdtech.jellyfin.viewmodels.HomeViewModel
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||
|
||||
class HomeFragment : Fragment() {
|
||||
|
||||
private lateinit var binding: FragmentHomeBinding
|
||||
private val viewModel: HomeViewModel by viewModels()
|
||||
|
||||
override fun onCreateView(
|
||||
|
@ -24,40 +25,21 @@ class HomeFragment : Fragment() {
|
|||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
val binding = FragmentHomeBinding.inflate(inflater, container, false)
|
||||
binding = FragmentHomeBinding.inflate(inflater, container, false)
|
||||
|
||||
binding.lifecycleOwner = this
|
||||
binding.viewModel = viewModel
|
||||
binding.viewsRecyclerView.adapter = ViewListAdapter(ViewListAdapter.OnClickListener {
|
||||
findNavController().navigate(
|
||||
HomeFragmentDirections.actionNavigationHomeToLibraryFragment(
|
||||
it.id,
|
||||
it.name
|
||||
)
|
||||
)
|
||||
navigateToLibraryFragment(it)
|
||||
}, ViewItemListAdapter.OnClickListener {
|
||||
findNavController().navigate(
|
||||
HomeFragmentDirections.actionNavigationHomeToMediaInfoFragment(
|
||||
it.id,
|
||||
it.name
|
||||
)
|
||||
)
|
||||
}, HomeEpisodeListAdapter.OnClickListener {
|
||||
when (it.type) {
|
||||
navigateToMediaInfoFragment(it)
|
||||
}, HomeEpisodeListAdapter.OnClickListener { item ->
|
||||
when (item.type) {
|
||||
"Episode" -> {
|
||||
findNavController().navigate(
|
||||
HomeFragmentDirections.actionNavigationHomeToEpisodeBottomSheetFragment(
|
||||
it.id
|
||||
)
|
||||
)
|
||||
navigateToEpisodeBottomSheetFragment(item)
|
||||
}
|
||||
"Movie" -> {
|
||||
findNavController().navigate(
|
||||
HomeFragmentDirections.actionNavigationHomeToMediaInfoFragment(
|
||||
it.id,
|
||||
it.name
|
||||
)
|
||||
)
|
||||
navigateToMediaInfoFragment(item)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -68,11 +50,7 @@ class HomeFragment : Fragment() {
|
|||
}
|
||||
|
||||
viewModel.finishedLoading.observe(viewLifecycleOwner, {
|
||||
if (it) {
|
||||
binding.loadingIndicator.visibility = View.GONE
|
||||
} else {
|
||||
binding.loadingIndicator.visibility = View.VISIBLE
|
||||
}
|
||||
binding.loadingIndicator.visibility = if (it) View.GONE else View.VISIBLE
|
||||
})
|
||||
|
||||
viewModel.error.observe(viewLifecycleOwner, {
|
||||
|
@ -87,4 +65,30 @@ class HomeFragment : Fragment() {
|
|||
|
||||
return binding.root
|
||||
}
|
||||
|
||||
private fun navigateToLibraryFragment(view: dev.jdtech.jellyfin.models.View) {
|
||||
findNavController().navigate(
|
||||
HomeFragmentDirections.actionNavigationHomeToLibraryFragment(
|
||||
view.id,
|
||||
view.name
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private fun navigateToMediaInfoFragment(item: BaseItemDto) {
|
||||
findNavController().navigate(
|
||||
HomeFragmentDirections.actionNavigationHomeToMediaInfoFragment(
|
||||
item.id,
|
||||
item.name
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private fun navigateToEpisodeBottomSheetFragment(episode: BaseItemDto) {
|
||||
findNavController().navigate(
|
||||
HomeFragmentDirections.actionNavigationHomeToEpisodeBottomSheetFragment(
|
||||
episode.id
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
|
@ -12,6 +12,7 @@ import dev.jdtech.jellyfin.viewmodels.LibraryViewModel
|
|||
import dev.jdtech.jellyfin.adapters.ViewItemListAdapter
|
||||
import dev.jdtech.jellyfin.databinding.FragmentLibraryBinding
|
||||
import dev.jdtech.jellyfin.viewmodels.LibraryViewModelFactory
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||
|
||||
class LibraryFragment : Fragment() {
|
||||
|
||||
|
@ -37,13 +38,17 @@ class LibraryFragment : Fragment() {
|
|||
val viewModel: LibraryViewModel by viewModels { viewModelFactory }
|
||||
binding.viewModel = viewModel
|
||||
binding.itemsRecyclerView.adapter =
|
||||
ViewItemListAdapter(ViewItemListAdapter.OnClickListener {
|
||||
findNavController().navigate(
|
||||
LibraryFragmentDirections.actionLibraryFragmentToMediaInfoFragment(
|
||||
it.id,
|
||||
it.name
|
||||
)
|
||||
)
|
||||
ViewItemListAdapter(ViewItemListAdapter.OnClickListener { item ->
|
||||
navigateToMediaInfoFragment(item)
|
||||
})
|
||||
}
|
||||
|
||||
private fun navigateToMediaInfoFragment(item: BaseItemDto) {
|
||||
findNavController().navigate(
|
||||
LibraryFragmentDirections.actionLibraryFragmentToMediaInfoFragment(
|
||||
item.id,
|
||||
item.name
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
|
@ -1,13 +1,12 @@
|
|||
package dev.jdtech.jellyfin.fragments
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.fragment.app.Fragment
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import dev.jdtech.jellyfin.R
|
||||
import dev.jdtech.jellyfin.databinding.FragmentLoginBinding
|
||||
import dev.jdtech.jellyfin.viewmodels.LoginViewModel
|
||||
|
||||
|
@ -38,11 +37,15 @@ class LoginFragment : Fragment() {
|
|||
|
||||
viewModel.navigateToMain.observe(viewLifecycleOwner, {
|
||||
if (it) {
|
||||
findNavController().navigate(R.id.action_loginFragment_to_mainActivity)
|
||||
viewModel.doneNavigatingToMain()
|
||||
navigateToMainActivity()
|
||||
}
|
||||
})
|
||||
|
||||
return binding.root
|
||||
}
|
||||
|
||||
private fun navigateToMainActivity() {
|
||||
findNavController().navigate(LoginFragmentDirections.actionLoginFragmentToMainActivity())
|
||||
viewModel.doneNavigatingToMain()
|
||||
}
|
||||
}
|
|
@ -6,14 +6,15 @@ import android.view.View
|
|||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import dev.jdtech.jellyfin.adapters.CollectionListAdapter
|
||||
import dev.jdtech.jellyfin.databinding.FragmentMediaBinding
|
||||
import dev.jdtech.jellyfin.viewmodels.MediaViewModel
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||
|
||||
class MediaFragment : Fragment() {
|
||||
|
||||
private lateinit var binding: FragmentMediaBinding
|
||||
private val viewModel: MediaViewModel by viewModels()
|
||||
|
||||
override fun onCreateView(
|
||||
|
@ -21,27 +22,30 @@ class MediaFragment : Fragment() {
|
|||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
val binding = FragmentMediaBinding.inflate(inflater, container, false)
|
||||
binding = FragmentMediaBinding.inflate(inflater, container, false)
|
||||
|
||||
binding.lifecycleOwner = this
|
||||
binding.viewModel = viewModel
|
||||
binding.viewsRecyclerView.adapter =
|
||||
CollectionListAdapter(CollectionListAdapter.OnClickListener { library ->
|
||||
findNavController().navigate(
|
||||
MediaFragmentDirections.actionNavigationMediaToLibraryFragment(
|
||||
library.id,
|
||||
library.name
|
||||
)
|
||||
)
|
||||
|
||||
nagivateToLibraryFragment(library)
|
||||
})
|
||||
|
||||
viewModel.finishedLoading.observe(viewLifecycleOwner, {
|
||||
if (it) {
|
||||
binding.loadingIncicator.visibility = View.GONE
|
||||
binding.loadingIndicator.visibility = View.GONE
|
||||
}
|
||||
})
|
||||
|
||||
return binding.root
|
||||
}
|
||||
|
||||
private fun nagivateToLibraryFragment(library: BaseItemDto) {
|
||||
findNavController().navigate(
|
||||
MediaFragmentDirections.actionNavigationMediaToLibraryFragment(
|
||||
library.id,
|
||||
library.name
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
|
@ -15,6 +15,7 @@ import dev.jdtech.jellyfin.adapters.ViewItemListAdapter
|
|||
import dev.jdtech.jellyfin.databinding.FragmentMediaInfoBinding
|
||||
import dev.jdtech.jellyfin.viewmodels.MediaInfoViewModel
|
||||
import dev.jdtech.jellyfin.viewmodels.MediaInfoViewModelFactory
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||
|
||||
class MediaInfoFragment : Fragment() {
|
||||
|
||||
|
@ -54,12 +55,15 @@ class MediaInfoFragment : Fragment() {
|
|||
})
|
||||
|
||||
binding.trailerButton.setOnClickListener {
|
||||
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(viewModel.item.value?.remoteTrailers?.get(0)?.url))
|
||||
val intent = Intent(
|
||||
Intent.ACTION_VIEW,
|
||||
Uri.parse(viewModel.item.value?.remoteTrailers?.get(0)?.url)
|
||||
)
|
||||
startActivity(intent)
|
||||
}
|
||||
|
||||
binding.nextUp.setOnClickListener {
|
||||
findNavController().navigate(MediaInfoFragmentDirections.actionMediaInfoFragmentToEpisodeBottomSheetFragment(viewModel.nextUp.value!!.id))
|
||||
navigateToEpisodeBottomSheetFragment(viewModel.nextUp.value!!)
|
||||
}
|
||||
|
||||
binding.seasonsRecyclerView.adapter =
|
||||
|
@ -76,4 +80,11 @@ class MediaInfoFragment : Fragment() {
|
|||
binding.peopleRecyclerView.adapter = PersonListAdapter()
|
||||
}
|
||||
|
||||
private fun navigateToEpisodeBottomSheetFragment(episode: BaseItemDto) {
|
||||
findNavController().navigate(
|
||||
MediaInfoFragmentDirections.actionMediaInfoFragmentToEpisodeBottomSheetFragment(
|
||||
episode.id
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
|
@ -12,6 +12,7 @@ import dev.jdtech.jellyfin.adapters.EpisodeListAdapter
|
|||
import dev.jdtech.jellyfin.databinding.FragmentSeasonBinding
|
||||
import dev.jdtech.jellyfin.viewmodels.SeasonViewModel
|
||||
import dev.jdtech.jellyfin.viewmodels.SeasonViewModelFactory
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||
|
||||
class SeasonFragment : Fragment() {
|
||||
|
||||
|
@ -38,12 +39,8 @@ class SeasonFragment : Fragment() {
|
|||
val viewModel: SeasonViewModel by viewModels { viewModelFactory }
|
||||
binding.viewModel = viewModel
|
||||
binding.episodesRecyclerView.adapter =
|
||||
EpisodeListAdapter(EpisodeListAdapter.OnClickListener {
|
||||
findNavController().navigate(
|
||||
SeasonFragmentDirections.actionSeasonFragmentToEpisodeBottomSheetFragment(
|
||||
it.id
|
||||
)
|
||||
)
|
||||
EpisodeListAdapter(EpisodeListAdapter.OnClickListener { episode ->
|
||||
navigateToEpisodeBottomSheetFragment(episode)
|
||||
})
|
||||
binding.seriesName.text = args.seriesName
|
||||
binding.seasonName.text = args.seasonName
|
||||
|
@ -51,4 +48,11 @@ class SeasonFragment : Fragment() {
|
|||
binding.seasonId = args.seasonId
|
||||
}
|
||||
|
||||
private fun navigateToEpisodeBottomSheetFragment(episode: BaseItemDto) {
|
||||
findNavController().navigate(
|
||||
SeasonFragmentDirections.actionSeasonFragmentToEpisodeBottomSheetFragment(
|
||||
episode.id
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
|
@ -13,7 +13,6 @@ import kotlinx.coroutines.launch
|
|||
import kotlinx.coroutines.withContext
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||
import org.jellyfin.sdk.model.api.BaseItemPerson
|
||||
import org.jellyfin.sdk.model.api.PersonLookupInfo
|
||||
import java.util.*
|
||||
|
||||
class MediaInfoViewModel(application: Application, itemId: UUID) : AndroidViewModel(application) {
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:spanCount="@integer/library_colums"
|
||||
app:spanCount="@integer/library_columns"
|
||||
tools:itemCount="6"
|
||||
tools:listitem="@layout/base_item" />
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
tools:context=".fragments.MediaFragment">
|
||||
|
||||
<com.google.android.material.progressindicator.CircularProgressIndicator
|
||||
android:id="@+id/loading_incicator"
|
||||
android:id="@+id/loading_indicator"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:indeterminate="true"
|
||||
|
@ -40,7 +40,7 @@
|
|||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:spanCount="@integer/collection_colums"
|
||||
app:spanCount="@integer/collection_columns"
|
||||
tools:itemCount="4"
|
||||
tools:listitem="@layout/collection_item" />
|
||||
|
||||
|
|
|
@ -36,7 +36,8 @@
|
|||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="0dp"
|
||||
|
|
|
@ -34,14 +34,15 @@
|
|||
|
||||
<ImageView
|
||||
android:id="@+id/item_banner"
|
||||
itemBackdropById="@{seriesId}"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="200dp"
|
||||
android:scaleType="centerCrop"
|
||||
app:itemBackdropById="@{seriesId}"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:contentDescription="@string/series_poster"/>
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="0dp"
|
||||
|
|
|
@ -61,7 +61,7 @@
|
|||
app:layout_constraintTop_toBottomOf="@+id/image_banner"
|
||||
app:layout_constraintVertical_bias="0.36"
|
||||
app:servers="@{viewModel.servers}"
|
||||
app:spanCount="@integer/server_colums"
|
||||
app:spanCount="@integer/server_columns"
|
||||
tools:itemCount="4"
|
||||
tools:listitem="@layout/server_item" />
|
||||
</LinearLayout>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.Jellyfin" parent="Theme.MaterialComponents.DayNight.NoActionBar">
|
||||
<!-- Primary brand color. -->
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<dimen name="setup_container_width">400dp</dimen>
|
||||
<item name="server_colums" type="integer">6</item>
|
||||
<item name="collection_colums" type="integer">2</item>
|
||||
<item name="library_colums" type="integer">4</item>
|
||||
<item name="server_columns" type="integer">6</item>
|
||||
<item name="collection_columns" type="integer">2</item>
|
||||
<item name="library_columns" type="integer">4</item>
|
||||
<item name="recyclerview_animation_duration" type="integer">450</item>
|
||||
</resources>
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<item name="server_colums" type="integer">8</item>
|
||||
<item name="collection_colums" type="integer">3</item>
|
||||
<item name="library_colums" type="integer">6</item>
|
||||
<item name="server_columns" type="integer">8</item>
|
||||
<item name="collection_columns" type="integer">3</item>
|
||||
<item name="library_columns" type="integer">6</item>
|
||||
</resources>
|
|
@ -4,8 +4,8 @@
|
|||
<item name="wrap_content" type="dimen">-2</item>
|
||||
<dimen name="setup_container_width">@dimen/match_parent</dimen>
|
||||
<dimen name="overview_media_width">150dp</dimen>
|
||||
<item name="server_colums" type="integer">3</item>
|
||||
<item name="collection_colums" type="integer">1</item>
|
||||
<item name="library_colums" type="integer">2</item>
|
||||
<item name="server_columns" type="integer">3</item>
|
||||
<item name="collection_columns" type="integer">1</item>
|
||||
<item name="library_columns" type="integer">2</item>
|
||||
<item name="recyclerview_animation_duration" type="integer">250</item>
|
||||
</resources>
|
|
@ -37,4 +37,5 @@
|
|||
<string name="next_up">Next Up</string>
|
||||
<string name="continue_watching">Continue Watching</string>
|
||||
<string name="latest_library">Latest %1$s</string>
|
||||
<string name="series_poster">Series poster</string>
|
||||
</resources>
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
|
||||
<style name="setup_button">
|
||||
<item name="android:layout_height">48dp</item>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.Jellyfin" parent="Theme.MaterialComponents.DayNight.NoActionBar">
|
||||
<!-- Primary brand color. -->
|
||||
|
|
Loading…
Reference in a new issue