<lambda>null1 package com.airbnb.lottie.samples
2
3 import android.content.Intent
4 import com.airbnb.epoxy.EpoxyController
5 import com.airbnb.lottie.samples.api.LottiefilesApi
6 import com.airbnb.lottie.samples.model.AnimationResponseV2
7 import com.airbnb.lottie.samples.model.CompositionArgs
8 import com.airbnb.lottie.samples.model.ShowcaseItem
9 import com.airbnb.lottie.samples.utils.BaseEpoxyFragment
10 import com.airbnb.lottie.samples.utils.MvRxViewModel
11 import com.airbnb.lottie.samples.views.animationItemView
12 import com.airbnb.lottie.samples.views.loadingView
13 import com.airbnb.lottie.samples.views.marquee
14 import com.airbnb.lottie.samples.views.showcaseCarousel
15 import com.airbnb.mvrx.Async
16 import com.airbnb.mvrx.MvRxState
17 import com.airbnb.mvrx.MvRxViewModelFactory
18 import com.airbnb.mvrx.Uninitialized
19 import com.airbnb.mvrx.ViewModelContext
20 import com.airbnb.mvrx.fragmentViewModel
21 import com.airbnb.mvrx.withState
22
23 data class ShowcaseState(val response: Async<AnimationResponseV2> = Uninitialized) : MvRxState
24
25 class ShowcaseViewModel(initialState: ShowcaseState, api: LottiefilesApi) : MvRxViewModel<ShowcaseState>(initialState) {
26 init {
27 suspend {
28 api.getCollection()
29 }.execute { copy(response = it) }
30 }
31
32 companion object : MvRxViewModelFactory<ShowcaseViewModel, ShowcaseState> {
33 override fun create(viewModelContext: ViewModelContext, state: ShowcaseState): ShowcaseViewModel {
34 val service = viewModelContext.app<LottieApplication>().lottiefilesService
35 return ShowcaseViewModel(state, service)
36 }
37 }
38 }
39
40 class ShowcaseFragment : BaseEpoxyFragment() {
41
42 private val showcaseItems = listOf(
<lambda>null43 ShowcaseItem(R.drawable.showcase_preview_lottie, R.string.showcase_item_dynamic_properties) {
44 it.startActivity(Intent(it, DynamicActivity::class.java))
45 },
<lambda>null46 ShowcaseItem(R.drawable.gilbert_animated, R.string.showcase_item_animated_text) {
47 it.startActivity(Intent(it, TypographyDemoActivity::class.java))
48 },
<lambda>null49 ShowcaseItem(R.drawable.gilbert_animated, R.string.showcase_item_dynamic_text) {
50 it.startActivity(Intent(it, DynamicTextActivity::class.java))
51 },
<lambda>null52 ShowcaseItem(R.drawable.showcase_preview_lottie, R.string.showcase_item_bullseye) {
53 it.startActivity(Intent(it, BullseyeActivity::class.java))
54 },
<lambda>null55 ShowcaseItem(R.drawable.showcase_preview_lottie, R.string.showcase_item_recycler_view) {
56 it.startActivity(Intent(it, WishListActivity::class.java))
57 }
58 )
59 private val viewModel: ShowcaseViewModel by fragmentViewModel()
60
buildModelsnull61 override fun EpoxyController.buildModels() = withState(viewModel) { state ->
62 marquee {
63 id("showcase")
64 title("Showcase")
65 }
66 showcaseCarousel {
67 id("carousel")
68 showcaseItems(showcaseItems)
69 }
70
71 val collectionItems = state.response()?.data
72
73 if (collectionItems == null) {
74 loadingView {
75 id("loading")
76 }
77 } else {
78 collectionItems.forEach {
79 val activityContext = requireActivity()
80 animationItemView {
81 id(it.id)
82 title(it.title)
83 if (it.preview != null) previewUrl("https://assets9.lottiefiles.com/${it.preview}")
84 previewBackgroundColor(it.bgColorInt)
85 onClickListener { _ -> activityContext.startActivity(PlayerActivity.intent(activityContext, CompositionArgs(animationDataV2 = it))) }
86 }
87 }
88 }
89 }
90 }