From ea08db364eafe60e54590601f28a3ae88c466a72 Mon Sep 17 00:00:00 2001 From: LavaDesu Date: Tue, 29 Apr 2025 16:13:29 +1000 Subject: [PATCH] feat: dynamic colour, and android maps dark theme --- .../banksia/native/BanksiaTheme.android.kt | 32 +++++++++++++++++++ .../lava/banksia/native/maps/Maps.android.kt | 4 ++- .../commonMain/kotlin/moe/lava/banksia/App.kt | 3 +- .../moe/lava/banksia/native/BanksiaTheme.kt | 12 +++++++ .../lava/banksia/native/BanksiaTheme.ios.kt | 23 +++++++++++++ 5 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 composeApp/src/androidMain/kotlin/moe/lava/banksia/native/BanksiaTheme.android.kt create mode 100644 composeApp/src/commonMain/kotlin/moe/lava/banksia/native/BanksiaTheme.kt create mode 100644 composeApp/src/iosMain/kotlin/moe/lava/banksia/native/BanksiaTheme.ios.kt diff --git a/composeApp/src/androidMain/kotlin/moe/lava/banksia/native/BanksiaTheme.android.kt b/composeApp/src/androidMain/kotlin/moe/lava/banksia/native/BanksiaTheme.android.kt new file mode 100644 index 0000000..a817672 --- /dev/null +++ b/composeApp/src/androidMain/kotlin/moe/lava/banksia/native/BanksiaTheme.android.kt @@ -0,0 +1,32 @@ +package moe.lava.banksia.native + +import android.os.Build +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext + +@Composable +actual fun BanksiaTheme( + darkTheme: Boolean, + dynamicColor: Boolean, + content: @Composable (() -> Unit) +) { + val colorScheme = when { + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + val context = LocalContext.current + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } + + darkTheme -> darkColorScheme() + else -> lightColorScheme() + } + + MaterialTheme( + colorScheme = colorScheme, + content = content + ) +} diff --git a/composeApp/src/androidMain/kotlin/moe/lava/banksia/native/maps/Maps.android.kt b/composeApp/src/androidMain/kotlin/moe/lava/banksia/native/maps/Maps.android.kt index ce9cab3..5ce665b 100644 --- a/composeApp/src/androidMain/kotlin/moe/lava/banksia/native/maps/Maps.android.kt +++ b/composeApp/src/androidMain/kotlin/moe/lava/banksia/native/maps/Maps.android.kt @@ -2,6 +2,7 @@ package moe.lava.banksia.native.maps import android.Manifest import android.content.pm.PackageManager +import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.add import androidx.compose.foundation.layout.asPaddingValues @@ -83,7 +84,8 @@ actual fun Maps( GoogleMap( modifier = Modifier.fillMaxSize(), cameraPositionState = camPos, - mapColorScheme = ComposeMapColorScheme.FOLLOW_SYSTEM, + mapColorScheme = if (isSystemInDarkTheme()) { ComposeMapColorScheme.DARK } else { + ComposeMapColorScheme.LIGHT }, properties = DefaultMapProperties.copy( mapStyleOptions = MapStyleOptions.loadRawResourceStyle(LocalContext.current, R.raw.def_mapstyle), isMyLocationEnabled = checkLocationPermission(), diff --git a/composeApp/src/commonMain/kotlin/moe/lava/banksia/App.kt b/composeApp/src/commonMain/kotlin/moe/lava/banksia/App.kt index fc027af..0c31c32 100644 --- a/composeApp/src/commonMain/kotlin/moe/lava/banksia/App.kt +++ b/composeApp/src/commonMain/kotlin/moe/lava/banksia/App.kt @@ -38,6 +38,7 @@ import kotlinx.coroutines.launch import moe.lava.banksia.api.ptv.PtvService import moe.lava.banksia.api.ptv.structures.Route import moe.lava.banksia.api.ptv.structures.getProperties +import moe.lava.banksia.native.BanksiaTheme import moe.lava.banksia.native.maps.Maps import moe.lava.banksia.native.maps.Point import moe.lava.banksia.native.maps.Polyline @@ -146,7 +147,7 @@ fun App() { var peekHeight by remember { mutableStateOf(128.dp) } var peekHeightMultiplier by remember { mutableFloatStateOf(1F) } - MaterialTheme { + BanksiaTheme { BottomSheetScaffold( scaffoldState = scaffoldState, sheetPeekHeight = peekHeight * peekHeightMultiplier, diff --git a/composeApp/src/commonMain/kotlin/moe/lava/banksia/native/BanksiaTheme.kt b/composeApp/src/commonMain/kotlin/moe/lava/banksia/native/BanksiaTheme.kt new file mode 100644 index 0000000..089ce63 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/moe/lava/banksia/native/BanksiaTheme.kt @@ -0,0 +1,12 @@ +package moe.lava.banksia.native + +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.runtime.Composable + +@Composable +expect fun BanksiaTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + // Dynamic color is available on Android 12+ + dynamicColor: Boolean = true, + content: @Composable () -> Unit +) diff --git a/composeApp/src/iosMain/kotlin/moe/lava/banksia/native/BanksiaTheme.ios.kt b/composeApp/src/iosMain/kotlin/moe/lava/banksia/native/BanksiaTheme.ios.kt new file mode 100644 index 0000000..354541c --- /dev/null +++ b/composeApp/src/iosMain/kotlin/moe/lava/banksia/native/BanksiaTheme.ios.kt @@ -0,0 +1,23 @@ +package moe.lava.banksia.native + +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable + +@Composable +actual fun BanksiaTheme( + darkTheme: Boolean, + dynamicColor: Boolean, + content: @Composable (() -> Unit) +) { + val colorScheme = when { + darkTheme -> darkColorScheme() + else -> lightColorScheme() + } + + MaterialTheme( + colorScheme = colorScheme, + content = content + ) +}