blob: f3fa425f297c11acec5e068cadefcff4b9ef0a6a [file] [log] [blame]
package com.airbnb.lottie.samples
import android.arch.lifecycle.Observer
import android.arch.lifecycle.ViewModelProviders
import android.content.Intent
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.airbnb.epoxy.EpoxyController
import com.airbnb.epoxy.EpoxyRecyclerView
import com.airbnb.lottie.samples.model.CompositionArgs
import com.airbnb.lottie.samples.model.ShowcaseItem
import com.airbnb.lottie.samples.views.LoadingViewModel_
import com.airbnb.lottie.samples.views.MarqueeModel_
import com.airbnb.lottie.samples.views.ShowcaseAnimationItemViewModel_
import com.airbnb.lottie.samples.views.ShowcaseCarouselModel_
import kotlinx.android.synthetic.main.fragment_epoxy_recycler_view.*
class ShowcaseFragment : Fragment(), EpoxyRecyclerView.ModelBuilderCallback {
private val showcaseItems = listOf(
ShowcaseItem(R.drawable.showcase_preview_lottie, R.string.showcase_item_app_intro) {
startActivity(Intent(requireContext(), AppIntroActivity::class.java))
},
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_viwe) {
startActivity(Intent(requireContext(), ListActivity::class.java))
}
)
private val viewModel by lazy { ViewModelProviders.of(this).get(ShowcaseViewModel::class.java) }
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? =
inflater.inflate(R.layout.fragment_epoxy_recycler_view, container, false)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
recyclerView.buildModelsWith(this)
viewModel.collection.observe(this, Observer {
recyclerView.requestModelBuild()
})
viewModel.loading.observe(this, Observer {
recyclerView.requestModelBuild()
})
viewModel.fetchAnimations()
}
override fun buildModels(controller: EpoxyController) {
MarqueeModel_()
.id("showcase")
.title("Showcase")
.addTo(controller)
ShowcaseCarouselModel_()
.id("carousel")
.showcaseItems(showcaseItems)
.addTo(controller)
viewModel.collection.value?.data?.forEach {
ShowcaseAnimationItemViewModel_()
.id(it.id)
.title(it.title)
.previewUrl(it.preview)
.onClickListener { _ ->
startActivity(PlayerActivity.intent(requireContext(), CompositionArgs(animationData = it)))
}
.addTo(controller)
}
LoadingViewModel_()
.id("loading")
.addIf(viewModel.loading.value ?: false, controller)
}
}