• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download

<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 }