diff --git a/app/src/main/java/dev/jdtech/jellyfin/dialogs/ErrorDialogFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/dialogs/ErrorDialogFragment.kt index 0f352ef8..9c6dfbd3 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/dialogs/ErrorDialogFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/dialogs/ErrorDialogFragment.kt @@ -6,12 +6,13 @@ import android.os.Bundle import androidx.fragment.app.DialogFragment import com.google.android.material.dialog.MaterialAlertDialogBuilder import dev.jdtech.jellyfin.R +import dev.jdtech.jellyfin.utils.serializable +import java.io.Serializable import java.lang.IllegalStateException -class ErrorDialogFragment( - private val error: Exception -) : DialogFragment() { +class ErrorDialogFragment: DialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val error = requireArguments().serializable("error")!! return activity?.let { val builder = MaterialAlertDialogBuilder(it, R.style.ErrorDialogStyle) builder @@ -32,4 +33,16 @@ class ErrorDialogFragment( builder.create() } ?: throw IllegalStateException("Activity cannot be null") } + + companion object { + const val TAG = "error_dialog" + + fun newInstance(error: Exception): ErrorDialogFragment { + val errorDialogFragment = ErrorDialogFragment() + val args = Bundle() + args.putSerializable("error", error as Serializable) + errorDialogFragment.arguments = args + return errorDialogFragment + } + } } diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/DownloadFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/DownloadFragment.kt index 111345cf..2f286786 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/DownloadFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/DownloadFragment.kt @@ -68,7 +68,7 @@ class DownloadFragment : Fragment() { } binding.errorLayout.errorDetailsButton.setOnClickListener { - errorDialog.show(parentFragmentManager, "errordialog") + errorDialog.show(parentFragmentManager, ErrorDialogFragment.TAG) } return binding.root @@ -92,7 +92,7 @@ class DownloadFragment : Fragment() { } private fun bindUiStateError(uiState: DownloadViewModel.UiState.Error) { - errorDialog = ErrorDialogFragment(uiState.error) + errorDialog = ErrorDialogFragment.newInstance(uiState.error) binding.loadingIndicator.isVisible = false binding.downloadsRecyclerView.isVisible = false binding.errorLayout.errorPanel.isVisible = true diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/DownloadSeriesFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/DownloadSeriesFragment.kt index 82d8987c..8d45c333 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/DownloadSeriesFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/DownloadSeriesFragment.kt @@ -70,7 +70,7 @@ class DownloadSeriesFragment : Fragment() { } binding.errorLayout.errorDetailsButton.setOnClickListener { - errorDialog.show(parentFragmentManager, "errordialog") + errorDialog.show(parentFragmentManager, ErrorDialogFragment.TAG) } viewModel.loadEpisodes(args.seriesMetadata) @@ -84,7 +84,7 @@ class DownloadSeriesFragment : Fragment() { } private fun bindUiStateError(uiState: DownloadSeriesViewModel.UiState.Error) { - errorDialog = ErrorDialogFragment(uiState.error) + errorDialog = ErrorDialogFragment.newInstance(uiState.error) binding.episodesRecyclerView.isVisible = false binding.errorLayout.errorPanel.isVisible = true } 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 2ab0881c..58f6a240 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt @@ -251,7 +251,7 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() { ) binding.progressCircular.visibility = View.INVISIBLE binding.playerItemsErrorDetails.setOnClickListener { - ErrorDialogFragment(error.error).show(parentFragmentManager, "errordialog") + ErrorDialogFragment.newInstance(error.error).show(parentFragmentManager, ErrorDialogFragment.TAG) } } diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/FavoriteFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/FavoriteFragment.kt index 5c8501b3..d598eb6f 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/FavoriteFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/FavoriteFragment.kt @@ -65,7 +65,7 @@ class FavoriteFragment : Fragment() { } binding.errorLayout.errorDetailsButton.setOnClickListener { - errorDialog.show(parentFragmentManager, "errordialog") + errorDialog.show(parentFragmentManager, ErrorDialogFragment.TAG) } return binding.root @@ -89,7 +89,7 @@ class FavoriteFragment : Fragment() { } private fun bindUiStateError(uiState: FavoriteViewModel.UiState.Error) { - errorDialog = ErrorDialogFragment(uiState.error) + errorDialog = ErrorDialogFragment.newInstance(uiState.error) binding.loadingIndicator.isVisible = false binding.favoritesRecyclerView.isVisible = false binding.errorLayout.errorPanel.isVisible = true 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 1bb71e79..b8b4bbe3 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt @@ -108,7 +108,7 @@ class HomeFragment : Fragment() { } binding.errorLayout.errorDetailsButton.setOnClickListener { - errorDialog.show(parentFragmentManager, "errordialog") + errorDialog.show(parentFragmentManager, ErrorDialogFragment.TAG) } } @@ -143,7 +143,7 @@ class HomeFragment : Fragment() { } private fun bindUiStateError(uiState: HomeViewModel.UiState.Error) { - errorDialog = ErrorDialogFragment(uiState.error) + errorDialog = ErrorDialogFragment.newInstance(uiState.error) binding.loadingIndicator.isVisible = false binding.refreshLayout.isRefreshing = false binding.viewsRecyclerView.isVisible = false 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 093e6c6d..3b666287 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt @@ -114,7 +114,7 @@ class LibraryFragment : Fragment() { binding.errorLayout.errorDetailsButton.setOnClickListener { errorDialog.show( parentFragmentManager, - "errordialog" + ErrorDialogFragment.TAG ) } @@ -197,7 +197,7 @@ class LibraryFragment : Fragment() { } private fun bindUiStateError(uiState: LibraryViewModel.UiState.Error) { - errorDialog = ErrorDialogFragment(uiState.error) + errorDialog = ErrorDialogFragment.newInstance(uiState.error) binding.loadingIndicator.isVisible = false binding.itemsRecyclerView.isVisible = false binding.errorLayout.errorPanel.isVisible = true 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 3734c86b..0b9e5c07 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt @@ -71,7 +71,7 @@ class MediaFragment : Fragment() { } binding.errorLayout.errorDetailsButton.setOnClickListener { - errorDialog.show(parentFragmentManager, "errordialog") + errorDialog.show(parentFragmentManager, ErrorDialogFragment.TAG) } return binding.root @@ -139,7 +139,7 @@ class MediaFragment : Fragment() { } private fun bindUiStateError(uiState: MediaViewModel.UiState.Error) { - errorDialog = ErrorDialogFragment(uiState.error) + errorDialog = ErrorDialogFragment.newInstance(uiState.error) binding.loadingIndicator.isVisible = false binding.viewsRecyclerView.isVisible = false binding.errorLayout.errorPanel.isVisible = true 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 7655ab0b..e984fbd6 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt @@ -150,7 +150,7 @@ class MediaInfoFragment : Fragment() { } binding.errorLayout.errorDetailsButton.setOnClickListener { - errorDialog.show(parentFragmentManager, "errordialog") + errorDialog.show(parentFragmentManager, ErrorDialogFragment.TAG) } binding.checkButton.setOnClickListener { @@ -297,7 +297,7 @@ class MediaInfoFragment : Fragment() { } private fun bindUiStateError(uiState: MediaInfoViewModel.UiState.Error) { - errorDialog = ErrorDialogFragment(uiState.error) + errorDialog = ErrorDialogFragment.newInstance(uiState.error) binding.loadingIndicator.isVisible = false binding.mediaInfoScrollview.isVisible = false binding.errorLayout.errorPanel.isVisible = true @@ -326,7 +326,7 @@ class MediaInfoFragment : Fragment() { ) binding.progressCircular.visibility = View.INVISIBLE binding.playerItemsErrorDetails.setOnClickListener { - ErrorDialogFragment(error.error).show(parentFragmentManager, "errordialog") + ErrorDialogFragment.newInstance(error.error).show(parentFragmentManager, ErrorDialogFragment.TAG) } } diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/PersonDetailFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/PersonDetailFragment.kt index c91c8011..10f28406 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/PersonDetailFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/PersonDetailFragment.kt @@ -75,7 +75,7 @@ internal class PersonDetailFragment : Fragment() { } binding.errorLayout.errorDetailsButton.setOnClickListener { - errorDialog.show(parentFragmentManager, "errordialog") + errorDialog.show(parentFragmentManager, ErrorDialogFragment.TAG) } } @@ -109,7 +109,7 @@ internal class PersonDetailFragment : Fragment() { } private fun bindUiStateError(uiState: PersonDetailViewModel.UiState.Error) { - errorDialog = ErrorDialogFragment(uiState.error) + errorDialog = ErrorDialogFragment.newInstance(uiState.error) binding.loadingIndicator.isVisible = false binding.fragmentContent.isVisible = false binding.errorLayout.errorPanel.isVisible = true diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/SearchResultFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/SearchResultFragment.kt index 623d4684..75729357 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/SearchResultFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/SearchResultFragment.kt @@ -73,7 +73,7 @@ class SearchResultFragment : Fragment() { } binding.errorLayout.errorDetailsButton.setOnClickListener { - errorDialog.show(parentFragmentManager, "errordialog") + errorDialog.show(parentFragmentManager, ErrorDialogFragment.TAG) } return binding.root @@ -97,7 +97,7 @@ class SearchResultFragment : Fragment() { } private fun bindUiStateError(uiState: SearchResultViewModel.UiState.Error) { - errorDialog = ErrorDialogFragment(uiState.error) + errorDialog = ErrorDialogFragment.newInstance(uiState.error) binding.loadingIndicator.isVisible = false binding.searchResultsRecyclerView.isVisible = false binding.errorLayout.errorPanel.isVisible = true 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 8106e1a3..d10dfccb 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt @@ -67,7 +67,7 @@ class SeasonFragment : Fragment() { } binding.errorLayout.errorDetailsButton.setOnClickListener { - errorDialog.show(parentFragmentManager, "errordialog") + errorDialog.show(parentFragmentManager, ErrorDialogFragment.TAG) } binding.episodesRecyclerView.adapter = @@ -95,7 +95,7 @@ class SeasonFragment : Fragment() { } private fun bindUiStateError(uiState: SeasonViewModel.UiState.Error) { - errorDialog = ErrorDialogFragment(uiState.error) + errorDialog = ErrorDialogFragment.newInstance(uiState.error) binding.loadingIndicator.isVisible = false binding.episodesRecyclerView.isVisible = false binding.errorLayout.errorPanel.isVisible = true diff --git a/app/src/main/java/dev/jdtech/jellyfin/utils/extensions.kt b/app/src/main/java/dev/jdtech/jellyfin/utils/extensions.kt index 8db9f8de..1ffad32f 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/utils/extensions.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/utils/extensions.kt @@ -2,6 +2,8 @@ package dev.jdtech.jellyfin.utils import android.content.res.ColorStateList import android.content.res.Resources +import android.os.Build +import android.os.Bundle import android.util.TypedValue import android.widget.ImageButton import androidx.annotation.AttrRes @@ -12,6 +14,7 @@ import dev.jdtech.jellyfin.AppNavigationDirections import dev.jdtech.jellyfin.models.View import org.jellyfin.sdk.model.api.BaseItemDto import timber.log.Timber +import java.io.Serializable fun BaseItemDto.toView(): View { return View( @@ -51,3 +54,8 @@ fun ImageButton.setTintColorAttribute(@AttrRes attributeId: Int, theme: Resource ) ) } + +inline fun Bundle.serializable(key: String): T? = when { + Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU -> getSerializable(key, T::class.java) + else -> @Suppress("DEPRECATION") getSerializable(key) as? T +} \ No newline at end of file