blob: d2872abb3e4d6b9a139d0c13a082de0bef7618d0 [file] [log] [blame]
package com.airbnb.lottie.sample.compose.showcase
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.compose.foundation.*
import androidx.compose.foundation.ScrollableColumn
import androidx.compose.foundation.layout.*
import androidx.compose.material.Divider
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Providers
import androidx.compose.runtime.ambientOf
import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.fragment.app.Fragment
import androidx.ui.tooling.preview.Preview
import com.airbnb.lottie.sample.compose.R
import com.airbnb.lottie.sample.compose.composables.*
import com.airbnb.lottie.sample.compose.findNavController
import com.airbnb.lottie.sample.compose.ui.LottieTheme
import com.airbnb.mvrx.*
val ShowcaseStateAmbient = ambientOf { ShowcaseState() }
class ShowcaseFragment : Fragment(), MavericksView {
private val viewModel by fragmentViewModel<ShowcaseFragment, ShowcaseViewModel, ShowcaseState>()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return LottieComposeScaffoldView(requireContext()) {
val showcaseState = viewModel.stateFlow.collectAsState(ShowcaseState())
Providers(ShowcaseStateAmbient provides showcaseState.value) {
ShowcasePage()
}
}
}
override fun invalidate() {
}
}
@Composable
fun ShowcasePage() {
val featuredAnimations = ShowcaseStateAmbient.current.featuredAnimations
val scrollState = rememberScrollState()
val navController = findNavController()
Log.d("Gabe", "ShowcasePage: $featuredAnimations")
Stack(
modifier = Modifier.fillMaxSize()
) {
ScrollableColumn(
scrollState = scrollState
) {
Marquee("Showcase")
featuredAnimations()?.data?.forEach { data ->
AnimationRow(
title = data.title,
previewUrl = data.preview_url ?: "",
previewBackgroundColor = data.bgColor,
) {
navController.navigate(R.id.player, data.asMavericksArgs())
}
Divider(color = Color.LightGray)
}
}
if (featuredAnimations is Uninitialized || featuredAnimations is Loading) {
Loader(modifier = Modifier.gravity(Alignment.Center))
}
}
}
@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
LottieTheme {
ShowcasePage()
}
}