Skip to content

Commit

Permalink
Tidy up argument handling in show details
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisbanes committed Nov 26, 2019
1 parent 996cc55 commit a7111dc
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 26 deletions.
Expand Up @@ -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
Expand Down Expand Up @@ -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<FragmentShowDetailsBinding>() {
@Parcelize
internal data class Arguments(val showId: Long, val episodeToExpand: Long?) : Parcelable

private val viewModel: ShowDetailsFragmentViewModel by fragmentViewModel()
@Inject lateinit var showDetailsViewModelFactory: ShowDetailsFragmentViewModel.Factory

Expand All @@ -74,17 +68,6 @@ class ShowDetailsFragment : TiviFragmentWithBinding<FragmentShowDetailsBinding>(
}
}

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)
}
Expand Down
Expand Up @@ -230,9 +230,27 @@ class ShowDetailsFragmentViewModel @AssistedInject constructor(
}

companion object : MvRxViewModelFactory<ShowDetailsFragmentViewModel, ShowDetailsViewState> {
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"))
}
}
}
Expand Up @@ -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)

Expand Down

0 comments on commit a7111dc

Please sign in to comment.