Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,10 @@ import androidx.paging.LoadState
import androidx.paging.compose.collectAsLazyPagingItems
import androidx.paging.compose.itemKey
import androidx.paging.compose.LazyPagingItems
import com.airbnb.lottie.compose.LottieCompositionSpec
import ir.composenews.base.LoadableComponent
import ir.composenews.base.errorViewMapper
import ir.composenews.base.isLoading
import ir.composenews.base.use
import ir.composenews.designsystem.R
import ir.composenews.designsystem.component.EmptyStateAnimation
import ir.composenews.designsystem.component.pull_refresh_indicator.PullRefreshIndicator
import ir.composenews.designsystem.component.pull_refresh_indicator.pullRefresh
Expand Down Expand Up @@ -195,11 +193,7 @@ fun FavoriteMarketListScreen(
exit = fadeOut(),
) {
if (data.isEmpty() && state.showFavoriteList) {
EmptyStateAnimation(
lottieCompositionSpec = LottieCompositionSpec.RawRes(
R.raw.empty_state_animation,
),
)
EmptyStateAnimation()
} else {
LazyColumn(modifier = Modifier.fillMaxWidth()) {
items(
Expand Down
4 changes: 2 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ horologistComposeLayout = "0.7.15"
detekt = "1.23.8"
kermit = "2.0.5"
koin = "4.0.4"
lottieAnimation = "6.7.1"
compottie = "2.1.0"

lifeCycle = "2.10.0"
lifeCycleViewModelKtx = "2.10.0"
Expand Down Expand Up @@ -135,7 +135,7 @@ kotlinx-collections-immutable = { group = "org.jetbrains.kotlinx", name = "kotli

window-size = { group = "androidx.compose.material3", name = "material3-window-size-class", version.ref = "windowsSizeClass" }

compose-lottie-animation = { group = "com.airbnb.android", name = "lottie-compose", version.ref = "lottieAnimation" }
compottie = { module = "io.github.alexzhirkevich:compottie", version.ref = "compottie" }

paging-common = { group = "androidx.paging", name = "paging-common", version.ref = "paging" }
paging-compose = { group = "androidx.paging", name = "paging-compose", version.ref = "paging" }
Expand Down
3 changes: 2 additions & 1 deletion library/designsystem/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,8 @@ dependencies {
api(compose.coil)
api(lifecycle.runtime.compose)
api(window.size)
api(compose.lottie.animation)
api(libs.compottie)
implementation(androidx.ktx)
implementation(compose.icons.core)
implementation(compose.icons.extended)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,28 +11,35 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.scale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.airbnb.lottie.compose.LottieCompositionSpec
import io.github.alexzhirkevich.compottie.LottieCompositionSpec
import io.github.alexzhirkevich.compottie.rememberLottieComposition
import ir.composenews.designsystem.R
import ir.composenews.designsystem.preview.ThemePreviews
import ir.composenews.designsystem.theme.ComposeNewsTheme

@Composable
fun EmptyStateAnimation(
lottieCompositionSpec: LottieCompositionSpec,
) {
fun EmptyStateAnimation() {
val context = LocalContext.current
val composition by rememberLottieComposition {
val json = context.resources.openRawResource(R.raw.empty_state_animation)
.use { it.bufferedReader().readText() }
LottieCompositionSpec.JsonString(json)
}
Column(
modifier = Modifier
.fillMaxSize(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally,
) {
LottieAnimationComposable(
animationSpec = lottieCompositionSpec,
composition = composition,
modifier = Modifier
.size(250.dp, 250.dp)
.scale(
Expand All @@ -54,9 +61,7 @@ fun EmptyStateAnimation(
fun EmptyStateAnimationPrev() {
ComposeNewsTheme {
Surface {
EmptyStateAnimation(
lottieCompositionSpec = LottieCompositionSpec.RawRes(R.raw.empty_state_animation),
)
EmptyStateAnimation()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,36 +2,29 @@

package ir.composenews.designsystem.component

import androidx.compose.foundation.Image
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale
import com.airbnb.lottie.compose.LottieAnimation
import com.airbnb.lottie.compose.LottieCompositionSpec
import com.airbnb.lottie.compose.animateLottieCompositionAsState
import com.airbnb.lottie.compose.rememberLottieComposition
import io.github.alexzhirkevich.compottie.Compottie
import io.github.alexzhirkevich.compottie.LottieComposition
import io.github.alexzhirkevich.compottie.rememberLottiePainter

@Composable
fun LottieAnimationComposable(
animationSpec: LottieCompositionSpec,
composition: LottieComposition?,
modifier: Modifier = Modifier,
repeatCount: Int = Integer.MAX_VALUE,
iterations: Int = Compottie.IterateForever,
contentScale: ContentScale = ContentScale.None,
speed: Float = 1f,
autoPlay: Boolean = true,
) {
val composition by rememberLottieComposition(spec = animationSpec)

val progress by animateLottieCompositionAsState(
composition = composition,
iterations = repeatCount,
speed = speed,
reverseOnRepeat = autoPlay,
)

LottieAnimation(
composition = composition,
progress = { progress },
Image(
painter = rememberLottiePainter(
composition = composition,
iterations = iterations,
speed = speed,
),
contentDescription = null,
modifier = modifier,
contentScale = contentScale,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import androidx.compose.runtime.SideEffect
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalView
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsControllerCompat

private val LightColorScheme = lightColorScheme(
primary = md_theme_light_primary,
Expand Down Expand Up @@ -111,10 +111,9 @@ fun ComposeNewsTheme(
SideEffect {
val window = (view.context as Activity).window
window.statusBarColor = colorScheme.primary.toArgb()
WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars =
useDarkTheme
WindowCompat.getInsetsController(window, view).isAppearanceLightNavigationBars =
useDarkTheme.not()
val insetsController = WindowInsetsControllerCompat(window, view)
insetsController.isAppearanceLightStatusBars = useDarkTheme
insetsController.isAppearanceLightNavigationBars = useDarkTheme.not()
window.navigationBarColor = colorScheme.background.toArgb()
}
}
Expand Down
Loading