From e125acba30408af7f18d354f579ea51bbe5fea64 Mon Sep 17 00:00:00 2001 From: DatLag Date: Fri, 15 Mar 2024 18:34:43 +0100 Subject: [PATCH] fully edge to edge --- .../androidMain/res/values-night/themes.xml | 2 +- .../src/androidMain/res/values/themes.xml | 2 +- app/shared/build.gradle.kts | 5 +- .../dev/datlag/burningseries/shared/App.kt | 37 ++++------- .../shared/common/ExtendCompose.kt | 45 ++++++++++++- .../ui/custom/DefaultCollapsingToolbar.kt | 62 ++++++++++++------ .../shared/ui/screen/initial/InitialScreen.kt | 65 ++++++++++--------- .../screen/initial/favorite/FavoriteScreen.kt | 5 +- .../ui/screen/initial/home/HomeScreen.kt | 3 + .../ui/screen/initial/series/SeriesScreen.kt | 53 +++++++-------- .../shared/ui/theme/SchemeTheme.kt | 12 ++-- .../burningseries/shared/ui/theme/Theme.kt | 53 --------------- gradle/libs.versions.toml | 5 +- 13 files changed, 177 insertions(+), 172 deletions(-) diff --git a/app/android/src/androidMain/res/values-night/themes.xml b/app/android/src/androidMain/res/values-night/themes.xml index 4ac8f188..2e02aff7 100644 --- a/app/android/src/androidMain/res/values-night/themes.xml +++ b/app/android/src/androidMain/res/values-night/themes.xml @@ -1,6 +1,6 @@ - diff --git a/app/android/src/androidMain/res/values/themes.xml b/app/android/src/androidMain/res/values/themes.xml index cee2d3fc..6626c0ce 100644 --- a/app/android/src/androidMain/res/values/themes.xml +++ b/app/android/src/androidMain/res/values/themes.xml @@ -1,6 +1,6 @@ - diff --git a/app/shared/build.gradle.kts b/app/shared/build.gradle.kts index 3f5fb644..41eb8693 100644 --- a/app/shared/build.gradle.kts +++ b/app/shared/build.gradle.kts @@ -36,7 +36,6 @@ kotlin { dependencies { api(compose.runtime) api(compose.foundation) - api(compose.material) api(compose.material3) api(compose.materialIconsExtended) api(compose.ui) @@ -59,7 +58,9 @@ kotlin { api(libs.kolor) api(libs.windowsize.multiplatform) - api(libs.insetsx) + + implementation(libs.haze) + implementation(libs.haze.materials) api(libs.ktor) api(libs.ktor.content.negotiation) diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/App.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/App.kt index 3f3393fa..5ea48955 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/App.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/App.kt @@ -1,20 +1,22 @@ package dev.datlag.burningseries.shared import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.compositionLocalOf import androidx.compose.ui.Modifier -import com.moriatsushi.insetsx.rememberWindowInsetsController +import dev.chrisbanes.haze.HazeState import dev.datlag.burningseries.shared.ui.theme.* import org.kodein.di.DI val LocalDarkMode = compositionLocalOf { error("No dark mode state provided") } val LocalDI = compositionLocalOf { error("No dependency injection provided") } +val LocalHaze = compositionLocalOf { error("No Haze state provided") } +val LocalPaddingValues = compositionLocalOf { null } @Composable fun App( @@ -22,15 +24,6 @@ fun App( systemDarkTheme: Boolean = isSystemInDarkTheme(), content: @Composable () -> Unit ) { - val windowInsetsController = rememberWindowInsetsController() - - LaunchedEffect(systemDarkTheme) { - windowInsetsController?.apply { - setStatusBarContentColor(dark = !systemDarkTheme) - setNavigationBarsContentColor(dark = !systemDarkTheme) - } - } - CompositionLocalProvider( LocalDarkMode provides systemDarkTheme, LocalDI provides di @@ -39,20 +32,14 @@ fun App( colorScheme = if (systemDarkTheme) Colors.getDarkScheme() else Colors.getLightScheme(), typography = ManropeTypography() ) { - androidx.compose.material.MaterialTheme( - colors = MaterialTheme.colorScheme.toLegacyColors(systemDarkTheme), - shapes = MaterialTheme.shapes.toLegacyShapes(), - typography = ManropeTypographyLegacy() - ) { - SystemProvider { - CommonSchemeTheme { - Surface( - modifier = Modifier.fillMaxSize(), - color = MaterialTheme.colorScheme.background, - contentColor = MaterialTheme.colorScheme.onBackground - ) { - content() - } + SystemProvider { + CommonSchemeTheme { + Surface( + modifier = Modifier.fillMaxSize(), + color = MaterialTheme.colorScheme.background, + contentColor = MaterialTheme.colorScheme.onBackground + ) { + content() } } } diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/common/ExtendCompose.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/common/ExtendCompose.kt index 1fa38447..f24c520e 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/common/ExtendCompose.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/common/ExtendCompose.kt @@ -8,6 +8,7 @@ import androidx.compose.foundation.hoverable import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.collectIsFocusedAsState import androidx.compose.foundation.interaction.collectIsHoveredAsState +import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.grid.GridItemSpan import androidx.compose.foundation.lazy.grid.LazyGridItemScope @@ -20,8 +21,13 @@ import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.graphics.vector.PathBuilder import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.platform.LocalLayoutDirection +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.unit.LayoutDirection +import androidx.compose.ui.unit.dp import dev.datlag.burningseries.model.common.collectSafe +import dev.datlag.burningseries.shared.LocalPaddingValues import dev.datlag.burningseries.shared.ui.theme.shape.DiagonalShape import kotlin.math.max @@ -201,4 +207,41 @@ fun PathBuilder.drawPathFromSvgData(data: String) { "Z", "z" -> close() } } -} \ No newline at end of file +} + +@Composable +operator fun PaddingValues.plus(other: PaddingValues): PaddingValues { + val direction = LocalLayoutDirection.current + + return PaddingValues( + start = this.calculateStartPadding(direction) + other.calculateStartPadding(direction), + top = this.calculateTopPadding() + other.calculateTopPadding(), + end = this.calculateEndPadding(direction) + other.calculateEndPadding(direction), + bottom = this.calculateBottomPadding() + other.calculateBottomPadding() + ) +} + +fun Modifier.localPadding(additional: PaddingValues = PaddingValues(0.dp)) = composed { + this.padding(LocalPaddingValues.current?.plus(additional) ?: additional) +} + +fun Modifier.localPadding(horizontal: Dp = 0.dp, vertical: Dp = 0.dp) = composed { + this.localPadding(PaddingValues(horizontal = horizontal, vertical = vertical)) +} + +@Composable +fun LocalPadding(additional: PaddingValues = PaddingValues(0.dp)): PaddingValues { + return LocalPaddingValues.current?.plus(additional) ?: additional +} + +@Composable +fun LocalPadding(additional: Dp): PaddingValues { + return LocalPaddingValues.current?.plus(PaddingValues(additional)) ?: PaddingValues(additional) +} + +@Composable +fun LocalPadding(horizontal: Dp = 0.dp, vertical: Dp = 0.dp): PaddingValues { + return LocalPaddingValues.current?.plus( + PaddingValues(horizontal = horizontal, vertical = vertical) + ) ?: PaddingValues(horizontal = horizontal, vertical = vertical) +} diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/custom/DefaultCollapsingToolbar.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/custom/DefaultCollapsingToolbar.kt index 117e0e10..85a97dc2 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/custom/DefaultCollapsingToolbar.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/custom/DefaultCollapsingToolbar.kt @@ -1,20 +1,21 @@ package dev.datlag.burningseries.shared.ui.custom -import androidx.compose.foundation.layout.RowScope -import androidx.compose.foundation.layout.defaultMinSize -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.material.TopAppBar -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.* import androidx.compose.runtime.* +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp +import dev.datlag.burningseries.shared.common.LocalPadding import dev.datlag.burningseries.shared.common.launchMain +import dev.datlag.burningseries.shared.common.toWindowInsets import dev.datlag.burningseries.shared.common.withIOContext import dev.datlag.burningseries.shared.ui.custom.toolbar.* +import io.github.aakira.napier.Napier import kotlinx.coroutines.delay import kotlin.math.abs @@ -37,24 +38,45 @@ fun DefaultCollapsingToolbar( modifier = Modifier.fillMaxSize(), state = state, scrollStrategy = ScrollStrategy.ExitUntilCollapsed, - toolbarModifier = Modifier.fillMaxWidth().defaultMinSize(minHeight = 56.dp).verticalScroll(rememberScrollState()), + toolbarModifier = Modifier.fillMaxWidth(), toolbarScrollable = true, toolbar = { expandedBody(state) - TopAppBar( + Surface( modifier = Modifier.pin(), - backgroundColor = MaterialTheme.colorScheme.surface.copy(alpha = reversedProgress), - contentColor = MaterialTheme.colorScheme.onSurface, - title = { - title(state) - }, - navigationIcon = if (navigationIcon == null) null else { { navigationIcon(state) } }, - actions = { - actions(state) - }, - elevation = 0.dp - ) + color = MaterialTheme.colorScheme.surface.copy(alpha = reversedProgress), + contentColor = MaterialTheme.colorScheme.onSurface + ) { + Row( + modifier = Modifier.fillMaxSize().windowInsetsPadding(TopAppBarDefaults.windowInsets), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(4.dp) + ) { + Box( + modifier = Modifier.padding(start = 4.dp) + ) { + navigationIcon?.invoke(state) + } + Box( + modifier = Modifier.weight(1F), + contentAlignment = Alignment.CenterStart + ) { + CompositionLocalProvider( + LocalTextStyle provides MaterialTheme.typography.titleLarge + ) { + title(state) + } + } + Row( + modifier = Modifier.padding(end = 4.dp), + horizontalArrangement = Arrangement.End, + verticalAlignment = Alignment.CenterVertically, + ) { + actions(state) + } + } + } } ) { content() diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/InitialScreen.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/InitialScreen.kt index 51722f14..98677f4f 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/InitialScreen.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/InitialScreen.kt @@ -9,13 +9,14 @@ import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSiz import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.arkivanov.decompose.ExperimentalDecomposeApi import com.arkivanov.decompose.extensions.compose.pages.Pages import com.arkivanov.decompose.extensions.compose.subscribeAsState -import com.moriatsushi.insetsx.ExperimentalSoftwareKeyboardApi +import dev.datlag.burningseries.shared.LocalPaddingValues import dev.datlag.burningseries.shared.common.lifecycle.collectAsStateWithLifecycle import dev.datlag.burningseries.shared.rememberIsTv import dev.datlag.burningseries.shared.ui.custom.ExpandedPages @@ -41,7 +42,7 @@ fun InitialScreen(component: InitialComponent) { } } -@OptIn(ExperimentalSoftwareKeyboardApi::class, ExperimentalDecomposeApi::class, ExperimentalFoundationApi::class) +@OptIn(ExperimentalDecomposeApi::class, ExperimentalFoundationApi::class) @Composable private fun CompactScreen( component: InitialComponent @@ -72,41 +73,45 @@ private fun CompactScreen( } } ) { - Box(modifier = Modifier.padding(it)) { - val homeScrollEnabled by component.homeScrollEnabled.collectAsStateWithLifecycle() - val favoriteScrollEnabled by component.favoriteScrollEnabled.collectAsStateWithLifecycle() - val searchScrollEnabled by component.searchScrollEnabled.collectAsStateWithLifecycle() + CompositionLocalProvider( + LocalPaddingValues provides it + ) { + Box(modifier = Modifier.fillMaxSize()) { + val homeScrollEnabled by component.homeScrollEnabled.collectAsStateWithLifecycle() + val favoriteScrollEnabled by component.favoriteScrollEnabled.collectAsStateWithLifecycle() + val searchScrollEnabled by component.searchScrollEnabled.collectAsStateWithLifecycle() - Pages( - pages = component.pages, - onPageSelected = { index -> - if (selectedPage != index) { - component.selectPage(index) - } - }, - pager = { modifier, state, key, pageContent -> - val scrollEnabled = when (state.currentPage) { - 0 -> homeScrollEnabled - 1 -> favoriteScrollEnabled - 2 -> searchScrollEnabled - else -> homeScrollEnabled && favoriteScrollEnabled && searchScrollEnabled + Pages( + pages = component.pages, + onPageSelected = { index -> + if (selectedPage != index) { + component.selectPage(index) + } + }, + pager = { modifier, state, key, pageContent -> + val scrollEnabled = when (state.currentPage) { + 0 -> homeScrollEnabled + 1 -> favoriteScrollEnabled + 2 -> searchScrollEnabled + else -> homeScrollEnabled && favoriteScrollEnabled && searchScrollEnabled + } + HorizontalPager( + modifier = modifier, + state = state, + key = key, + pageContent = pageContent, + userScrollEnabled = scrollEnabled + ) } - HorizontalPager( - modifier = modifier, - state = state, - key = key, - pageContent = pageContent, - userScrollEnabled = scrollEnabled - ) + ) { _, page -> + page.render() } - ) { _, page -> - page.render() } } } } -@OptIn(ExperimentalSoftwareKeyboardApi::class, ExperimentalDecomposeApi::class) +@OptIn(ExperimentalDecomposeApi::class) @Composable private fun MediumScreen( component: InitialComponent @@ -147,7 +152,7 @@ private fun MediumScreen( } } -@OptIn(ExperimentalSoftwareKeyboardApi::class, ExperimentalDecomposeApi::class) +@OptIn(ExperimentalDecomposeApi::class) @Composable private fun ExpandedScreen( component: InitialComponent diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/favorite/FavoriteScreen.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/favorite/FavoriteScreen.kt index dddabd25..395457c8 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/favorite/FavoriteScreen.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/favorite/FavoriteScreen.kt @@ -25,6 +25,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.min import com.arkivanov.decompose.extensions.compose.subscribeAsState import dev.datlag.burningseries.shared.SharedRes +import dev.datlag.burningseries.shared.common.LocalPadding import dev.datlag.burningseries.shared.common.header import dev.datlag.burningseries.shared.common.lifecycle.collectAsStateWithLifecycle import dev.datlag.burningseries.shared.common.onClick @@ -94,7 +95,7 @@ private fun ExpandedView(component: FavoriteComponent) { @Composable private fun MainView(component: FavoriteComponent, modifier: Modifier = Modifier) { Row( - modifier = modifier.fillMaxWidth(), + modifier = modifier.fillMaxWidth().padding(horizontal = 16.dp), horizontalArrangement = Arrangement.spacedBy(2.dp) ) { val favorites by component.favorites.collectAsStateWithLifecycle() @@ -106,7 +107,7 @@ private fun MainView(component: FavoriteComponent, modifier: Modifier = Modifier state = listState, verticalArrangement = Arrangement.spacedBy(8.dp), horizontalArrangement = Arrangement.spacedBy(8.dp), - contentPadding = PaddingValues(8.dp) + contentPadding = LocalPadding() ) { header { SearchBar(component) diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/home/HomeScreen.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/home/HomeScreen.kt index 1e0387a6..2146eb1b 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/home/HomeScreen.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/home/HomeScreen.kt @@ -20,8 +20,10 @@ import com.arkivanov.decompose.extensions.compose.subscribeAsState import dev.datlag.burningseries.model.Home import dev.datlag.burningseries.model.state.HomeState import dev.datlag.burningseries.shared.SharedRes +import dev.datlag.burningseries.shared.common.LocalPadding import dev.datlag.burningseries.shared.common.header import dev.datlag.burningseries.shared.common.lifecycle.collectAsStateWithLifecycle +import dev.datlag.burningseries.shared.common.localPadding import dev.datlag.burningseries.shared.other.StateSaver import dev.datlag.burningseries.shared.rememberIsTv import dev.datlag.burningseries.shared.ui.custom.VerticalScrollbar @@ -136,6 +138,7 @@ private fun MainView(home: Home, component: HomeComponent, modifier: Modifier = modifier = Modifier.weight(1F), verticalArrangement = Arrangement.spacedBy(8.dp), horizontalArrangement = Arrangement.spacedBy(8.dp), + contentPadding = LocalPadding(), state = state ) { DeviceContent(component.release, component.onDeviceReachable) diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/series/SeriesScreen.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/series/SeriesScreen.kt index 47baa6a6..da2bb043 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/series/SeriesScreen.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/series/SeriesScreen.kt @@ -26,6 +26,7 @@ import dev.datlag.burningseries.model.BSUtil import dev.datlag.burningseries.model.Series import dev.datlag.burningseries.model.state.SeriesState import dev.datlag.burningseries.shared.SharedRes +import dev.datlag.burningseries.shared.common.LocalPadding import dev.datlag.burningseries.shared.common.diagonalShape import dev.datlag.burningseries.shared.common.lifecycle.collectAsStateWithLifecycle import dev.datlag.burningseries.shared.other.StateSaver @@ -159,7 +160,7 @@ private fun CompactScreen(component: SeriesComponent) { text = title.ifBlank { stringResource(SharedRes.strings.loading_intent_series) }, - modifier = Modifier.road(Alignment.TopStart, Alignment.BottomStart).padding(16.dp).background( + modifier = Modifier.road(Alignment.TopStart, Alignment.BottomStart).padding(horizontal = 16.dp).background( color = Color.Black.copy(alpha = run { val alpha = state.toolbarState.progress if (alpha < 0.5F) { @@ -193,35 +194,31 @@ private fun CompactScreen(component: SeriesComponent) { ) }, title = { state -> - Row( - modifier = Modifier.fillMaxSize(), - verticalAlignment = Alignment.CenterVertically - ) { - val reversedProgress by remember { - derivedStateOf { (abs(1F - state.toolbarState.progress)) } - } + val reversedProgress by remember { + derivedStateOf { (abs(1F - state.toolbarState.progress)) } + } - Text( - text = title.ifBlank { - stringResource(SharedRes.strings.loading_intent_series) - }, - color = LocalContentColor.current.copy(alpha = run { - val alpha = reversedProgress - if (alpha < 0.7F) { - if (alpha < 0.3F) { - 0F - } else { - alpha - } + Text( + modifier = Modifier.fillMaxWidth(), + text = title.ifBlank { + stringResource(SharedRes.strings.loading_intent_series) + }, + color = LocalContentColor.current.copy(alpha = run { + val alpha = reversedProgress + if (alpha < 0.7F) { + if (alpha < 0.3F) { + 0F } else { - 1F + alpha } - }), - maxLines = 1, - overflow = TextOverflow.Ellipsis, - softWrap = true - ) - } + } else { + 1F + } + }), + maxLines = 1, + overflow = TextOverflow.Ellipsis, + softWrap = true + ) }, navigationIcon = { state -> IconButton( @@ -274,7 +271,7 @@ private fun CompactScreen(component: SeriesComponent) { LazyColumn( modifier = Modifier.fillMaxSize(), - contentPadding = PaddingValues(horizontal = 16.dp) + contentPadding = LocalPadding(horizontal = 16.dp) ) { item(key = current.series.description) { DescriptionText(current.series.description) diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/theme/SchemeTheme.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/theme/SchemeTheme.kt index cdeae412..e40099d8 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/theme/SchemeTheme.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/theme/SchemeTheme.kt @@ -11,6 +11,7 @@ import androidx.compose.ui.graphics.painter.Painter import com.kmpalette.DominantColorState import com.kmpalette.rememberPainterDominantColorState import com.materialkolor.AnimatedDynamicMaterialTheme +import com.materialkolor.DynamicMaterialTheme import dev.datlag.burningseries.shared.LocalDarkMode import dev.datlag.burningseries.shared.common.launchIO import dev.datlag.burningseries.shared.common.lifecycle.collectAsStateWithLifecycle @@ -78,15 +79,12 @@ fun SchemeTheme(key: Any?, content: @Composable () -> Unit) { SchemeTheme.itemScheme.map { it[key] } }.collectAsStateWithLifecycle(SchemeTheme.itemScheme.value[key]) - AnimatedDynamicMaterialTheme( + DynamicMaterialTheme( seedColor = color ?: MaterialTheme.colorScheme.primary, - useDarkTheme = LocalDarkMode.current + useDarkTheme = LocalDarkMode.current, + animate = true ) { - androidx.compose.material.MaterialTheme( - colors = MaterialTheme.colorScheme.toLegacyColors(LocalDarkMode.current) - ) { - content() - } + content() } } diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/theme/Theme.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/theme/Theme.kt index 7bac3c20..90f57f17 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/theme/Theme.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/theme/Theme.kt @@ -1,9 +1,5 @@ package dev.datlag.burningseries.shared.ui.theme -import androidx.compose.material.Colors -import androidx.compose.material.Shapes -import androidx.compose.material.darkColors -import androidx.compose.material.lightColors import androidx.compose.material3.Typography import androidx.compose.runtime.Composable import androidx.compose.runtime.remember @@ -15,44 +11,6 @@ import androidx.compose.ui.unit.sp import dev.datlag.burningseries.shared.SharedRes import dev.icerock.moko.resources.compose.asFont -fun androidx.compose.material3.ColorScheme.toLegacyColors(isDark: Boolean): Colors { - return if (isDark) { - darkColors( - primary = this.primary, - primaryVariant = this.primaryContainer, - secondary = this.secondary, - secondaryVariant = this.secondaryContainer, - background = this.background, - surface = this.surface, - error = this.error, - onPrimary = this.onPrimary, - onSecondary = this.onSecondary, - onBackground = this.onBackground, - onSurface = this.onSurface, - onError = this.onError - ) - } else { - lightColors( - primary = this.primary, - primaryVariant = this.primaryContainer, - secondary = this.secondary, - secondaryVariant = this.secondaryContainer, - background = this.background, - surface = this.surface, - error = this.error, - onPrimary = this.onPrimary, - onSecondary = this.onSecondary, - onBackground = this.onBackground, - onSurface = this.onSurface, - onError = this.onError - ) - } -} - -fun androidx.compose.material3.Shapes.toLegacyShapes(): Shapes { - return Shapes(this.small, this.medium, this.large) -} - @Composable fun ManropeFontFamily(): FontFamily { val fonts = listOfNotNull( @@ -195,14 +153,3 @@ fun ManropeTypography(): Typography { ) } } - -@Composable -fun ManropeTypographyLegacy(): androidx.compose.material.Typography { - val fontFamily = ManropeFontFamily() - - return remember(fontFamily) { - androidx.compose.material.Typography( - defaultFontFamily = fontFamily - ) - } -} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e1ae543d..69995a48 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,7 +24,7 @@ firebase-android-crashlytics = "18.6.2" firebase-android-firestore = "24.10.3" flowredux = "1.2.1" grpc = "1.59.0" -instesx = "0.1.0-alpha10" +haze = "0.5.4" jsunpacker = "1.0.2" kcef = "2024.01.07.1" kmpalette = "3.1.0" @@ -92,7 +92,8 @@ firebase-android-crashlytics = { group = "com.google.firebase", name = "firebase firebase-android-firestore = { group = "com.google.firebase", name = "firebase-firestore", version.ref = "firebase-android-firestore" } flowredux = { group = "com.freeletics.flowredux", name = "flowredux", version.ref = "flowredux" } grpc = { group = "io.grpc", name = "grpc-protobuf", version.ref = "grpc" } -insetsx = { group = "com.moriatsushi.insetsx", name = "insetsx", version.ref = "instesx" } +haze = { group = "dev.chrisbanes.haze", name = "haze", version.ref = "haze" } +haze-materials = { group = "dev.chrisbanes.haze", name = "haze-materials", version.ref = "haze" } jsunpacker = { group = "dev.datlag.jsunpacker", name = "jsunpacker", version.ref = "jsunpacker" } kmpalette = { group = "com.kmpalette", name = "kmpalette-core", version.ref = "kmpalette" } kodein = { group = "org.kodein.di", name = "kodein-di", version.ref = "kodein" }