diff --git a/app/src/main/java/dev/jdtech/jellyfin/BaseApplication.kt b/app/src/main/java/dev/jdtech/jellyfin/BaseApplication.kt
index 8eaf1312..fd427166 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/BaseApplication.kt
+++ b/app/src/main/java/dev/jdtech/jellyfin/BaseApplication.kt
@@ -4,5 +4,4 @@ import android.app.Application
import dagger.hilt.android.HiltAndroidApp
@HiltAndroidApp
-class BaseApplication : Application() {
-}
\ No newline at end of file
+class BaseApplication : Application()
\ No newline at end of file
diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewListAdapter.kt b/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewListAdapter.kt
index cb21f4ce..2cd14a15 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewListAdapter.kt
+++ b/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewListAdapter.kt
@@ -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
diff --git a/app/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt b/app/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt
index 201530eb..441b58bf 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt
+++ b/app/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt
@@ -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
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt
index 5389a18d..bf1a150f 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt
+++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt
@@ -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()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt
index 83823522..53e3f7e6 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt
+++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt
@@ -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
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt
index ab5af83c..55b41b6c 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt
+++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt
@@ -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
+ )
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt
index b5b78c56..b31add2b 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt
+++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt
@@ -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
+ )
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt
index 9db19b3f..5ef6ac28 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt
+++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt
@@ -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()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt
index d81e471f..75014455 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt
+++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt
@@ -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
+ )
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt
index 173f0c8e..9bc7b896 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt
+++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt
@@ -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
+ )
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt
index 671126ff..1f77784b 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt
+++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt
@@ -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
+ )
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaInfoViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaInfoViewModel.kt
index ecfcebd4..3081a924 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaInfoViewModel.kt
+++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaInfoViewModel.kt
@@ -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) {
diff --git a/app/src/main/res/layout/fragment_library.xml b/app/src/main/res/layout/fragment_library.xml
index 02fcd406..5396719e 100644
--- a/app/src/main/res/layout/fragment_library.xml
+++ b/app/src/main/res/layout/fragment_library.xml
@@ -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" />
diff --git a/app/src/main/res/layout/fragment_media.xml b/app/src/main/res/layout/fragment_media.xml
index 9e802c9a..7db4be56 100644
--- a/app/src/main/res/layout/fragment_media.xml
+++ b/app/src/main/res/layout/fragment_media.xml
@@ -17,7 +17,7 @@
tools:context=".fragments.MediaFragment">
diff --git a/app/src/main/res/layout/fragment_media_info.xml b/app/src/main/res/layout/fragment_media_info.xml
index 747b70e7..eab58a34 100644
--- a/app/src/main/res/layout/fragment_media_info.xml
+++ b/app/src/main/res/layout/fragment_media_info.xml
@@ -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" />
+ app:layout_constraintTop_toTopOf="parent"
+ android:contentDescription="@string/series_poster"/>
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
index 1774d697..e0f2e01d 100644
--- a/app/src/main/res/values-night/themes.xml
+++ b/app/src/main/res/values-night/themes.xml
@@ -1,4 +1,4 @@
-
+