blob: 3379dd2cbea8cb78a5f468ee12d4dd380c9788e1 [file] [log] [blame]
package com.airbnb.lottie.samples
import android.content.Intent
import com.airbnb.epoxy.EpoxyController
import com.airbnb.lottie.samples.api.LottiefilesApi
import com.airbnb.lottie.samples.model.AnimationResponseV2
import com.airbnb.lottie.samples.model.CompositionArgs
import com.airbnb.lottie.samples.model.ShowcaseItem
import com.airbnb.lottie.samples.utils.BaseEpoxyFragment
import com.airbnb.lottie.samples.utils.MvRxViewModel
import com.airbnb.lottie.samples.views.animationItemView
import com.airbnb.lottie.samples.views.loadingView
import com.airbnb.lottie.samples.views.marquee
import com.airbnb.lottie.samples.views.showcaseCarousel
import com.airbnb.mvrx.*
data class ShowcaseState(val response: Async<AnimationResponseV2> = Uninitialized) : MvRxState
class ShowcaseViewModel(initialState: ShowcaseState, api: LottiefilesApi) : MvRxViewModel<ShowcaseState>(initialState) {
init {
suspend {
api.getCollection()
}.execute { copy(response = it) }
}
companion object : MvRxViewModelFactory<ShowcaseViewModel, ShowcaseState> {
override fun create(viewModelContext: ViewModelContext, state: ShowcaseState): ShowcaseViewModel {
val service = viewModelContext.app<LottieApplication>().lottiefilesService
return ShowcaseViewModel(state, service)
}
}
}
class ShowcaseFragment : BaseEpoxyFragment() {
private val showcaseItems = listOf(
ShowcaseItem(R.drawable.showcase_preview_lottie, R.string.showcase_item_dynamic_properties) {
startActivity(Intent(requireContext(), DynamicActivity::class.java))
},
ShowcaseItem(R.drawable.gilbert_animated, R.string.showcase_item_animated_text) {
startActivity(Intent(requireContext(), TypographyDemoActivity::class.java))
},
ShowcaseItem(R.drawable.gilbert_animated, R.string.showcase_item_dynamic_text) {
startActivity(Intent(requireContext(), DynamicTextActivity::class.java))
},
ShowcaseItem(R.drawable.showcase_preview_lottie, R.string.showcase_item_bullseye) {
startActivity(Intent(requireContext(), BullseyeActivity::class.java))
},
ShowcaseItem(R.drawable.showcase_preview_lottie, R.string.showcase_item_recycler_view) {
startActivity(Intent(requireContext(), WishListActivity::class.java))
}
)
private val viewModel: ShowcaseViewModel by fragmentViewModel()
override fun EpoxyController.buildModels() = withState(viewModel) { state ->
marquee {
id("showcase")
title("Showcase")
}
showcaseCarousel {
id("carousel")
showcaseItems(showcaseItems)
}
val collectionItems = state.response()?.data
if (collectionItems == null) {
loadingView {
id("loading")
}
} else {
collectionItems.forEach {
animationItemView {
id(it.id)
title(it.title)
previewUrl("https://assets9.lottiefiles.com/${it.preview}")
previewBackgroundColor(it.bgColorInt)
onClickListener { _ -> startActivity(PlayerActivity.intent(requireContext(), CompositionArgs(animationDataV2 = it))) }
}
}
}
}
}