diff --git a/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragment.kt b/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragment.kt index 9752ce305f..5e5f9d27c7 100644 --- a/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragment.kt +++ b/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragment.kt @@ -17,7 +17,6 @@ package app.tivi.showdetails.details import android.os.Bundle -import android.os.Parcelable import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -48,20 +47,15 @@ import app.tivi.extensions.smoothScrollToItemPosition import app.tivi.extensions.toActivityNavigatorExtras import app.tivi.extensions.updateConstraintSets import app.tivi.showdetails.details.databinding.FragmentShowDetailsBinding -import com.airbnb.mvrx.MvRx import com.airbnb.mvrx.fragmentViewModel import com.airbnb.mvrx.withState import dev.chrisbanes.insetter.doOnApplyWindowInsets import javax.inject.Inject -import kotlinx.android.parcel.Parcelize import kotlinx.coroutines.launch import me.saket.inboxrecyclerview.dimming.TintPainter import me.saket.inboxrecyclerview.page.PageStateChangeCallbacks class ShowDetailsFragment : TiviFragmentWithBinding() { - @Parcelize - internal data class Arguments(val showId: Long, val episodeToExpand: Long?) : Parcelable - private val viewModel: ShowDetailsFragmentViewModel by fragmentViewModel() @Inject lateinit var showDetailsViewModelFactory: ShowDetailsFragmentViewModel.Factory @@ -74,17 +68,6 @@ class ShowDetailsFragment : TiviFragmentWithBinding( } } - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - // We need to map the arguments bundle to something MvRx understands - val args = arguments - args?.putParcelable(MvRx.KEY_ARG, Arguments( - args.getLong("show_id"), - args.getLong("episode_id", Long.MIN_VALUE).let { if (it >= 0) it else null } - )) - } - override fun createBinding(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): FragmentShowDetailsBinding { return FragmentShowDetailsBinding.inflate(inflater, container, false) } diff --git a/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragmentViewModel.kt b/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragmentViewModel.kt index a67778aaa5..a279e2d675 100644 --- a/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragmentViewModel.kt +++ b/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragmentViewModel.kt @@ -230,9 +230,27 @@ class ShowDetailsFragmentViewModel @AssistedInject constructor( } companion object : MvRxViewModelFactory { - override fun create(viewModelContext: ViewModelContext, state: ShowDetailsViewState): ShowDetailsFragmentViewModel? { - val fragment: ShowDetailsFragment = (viewModelContext as FragmentViewModelContext).fragment() - return fragment.showDetailsViewModelFactory.create(state) + override fun create( + viewModelContext: ViewModelContext, + state: ShowDetailsViewState + ): ShowDetailsFragmentViewModel? { + val f: ShowDetailsFragment = (viewModelContext as FragmentViewModelContext).fragment() + return f.showDetailsViewModelFactory.create(state).apply { + val args = f.requireArguments() + + // If the fragment arguments contain an episode id, deep link into it + if (args.containsKey("episode_id")) { + submitAction(OpenEpisodeDetails(args.getLong("episode_id"))) + } + } + } + + override fun initialState( + viewModelContext: ViewModelContext + ): ShowDetailsViewState? { + val f: ShowDetailsFragment = (viewModelContext as FragmentViewModelContext).fragment() + val args = f.requireArguments() + return ShowDetailsViewState(showId = args.getLong("show_id")) } } } diff --git a/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsViewState.kt b/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsViewState.kt index 6771ef60fc..ecfeb0264f 100644 --- a/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsViewState.kt +++ b/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsViewState.kt @@ -40,12 +40,7 @@ data class ShowDetailsViewState( val focusedSeason: FocusSeasonUiEffect? = null, val openEpisodeUiEffect: OpenEpisodeUiEffect? = null, val refreshing: Boolean = false -) : MvRxState { - internal constructor(args: ShowDetailsFragment.Arguments) : this( - showId = args.showId, - openEpisodeUiEffect = args.episodeToExpand?.let(::PendingOpenEpisodeUiEffect) - ) -} +) : MvRxState data class FocusSeasonUiEffect(val seasonId: Long)