Skip to content

Commit 03f1a9c

Browse files
committed
add grider
1 parent d5cfd9e commit 03f1a9c

10 files changed

Lines changed: 426 additions & 28 deletions

File tree

composeApp/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ kotlin {
6767

6868
implementation("com.squareup.okio:okio:3.9.0")
6969
implementation("io.github.kdroidfilter:composemediaplayer:0.8.6")
70+
71+
implementation(project.dependencies.platform("io.github.jan-tennert.supabase:bom:3.2.6"))
7072
}
7173
commonTest.dependencies {
7274
implementation(libs.kotlin.test)
@@ -103,6 +105,7 @@ android {
103105
buildTypes {
104106
getByName("release") {
105107
isMinifyEnabled = false
108+
signingConfig = signingConfigs.getByName("debug")
106109
}
107110
}
108111
compileOptions {

composeApp/src/androidMain/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<application
55
android:allowBackup="true"
66
android:icon="@mipmap/ic_launcher"
7+
android:hardwareAccelerated="true"
78
android:label="@string/app_name"
89
android:roundIcon="@mipmap/ic_launcher_round"
910
android:supportsRtl="true"
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package neth.iecal.trease
2+
3+
import androidx.compose.ui.graphics.ImageBitmap
4+
import androidx.compose.ui.graphics.asImageBitmap
5+
import coil3.BitmapImage
6+
import coil3.Image
7+
8+
actual fun Image.toComposeImageBitmap(): ImageBitmap {
9+
if (this is BitmapImage) {
10+
return this.bitmap.asImageBitmap()
11+
} else {
12+
throw IllegalArgumentException("Image is not a BitmapImage. It might be a Vector or Drawable.")
13+
}
14+
}
Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package neth.iecal.trease
22
import androidx.compose.runtime.Composable
3+
import androidx.compose.runtime.remember
34
import androidx.navigation.compose.NavHost
45
import androidx.navigation.compose.composable
56
import androidx.navigation.compose.rememberNavController
67
import kotlinx.serialization.Serializable
8+
import neth.iecal.trease.ui.components.IsometricForest
79
import neth.iecal.trease.ui.screens.HomeScreen
810
import neth.iecal.trease.ui.theme.ZenTheme
911

@@ -14,11 +16,16 @@ data object Home
1416
fun App() {
1517
val navController = rememberNavController()
1618
ZenTheme() {
17-
NavHost(navController = navController, startDestination = Home) {
18-
composable<Home> {
19-
HomeScreen()
20-
}
19+
// NavHost(navController = navController, startDestination = Home) {
20+
// composable<Home> {
21+
// HomeScreen()
22+
// }
23+
//
24+
// }
2125

22-
}
26+
// Generate 500 IDs exactly like the user script
27+
val treeIds = remember { MutableList(21) { "tree" } }
28+
29+
IsometricForest(treeIds = treeIds)
2330
}
2431
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package neth.iecal.trease
2+
3+
import androidx.compose.ui.graphics.ImageBitmap
4+
import coil3.Image
5+
6+
/**
7+
* Converts a Coil 3 platform-agnostic Image into a Compose ImageBitmap.
8+
* Throws IllegalArgumentException if the image is not a BitmapImage (e.g. SVGs/Vectors).
9+
*/
10+
expect fun Image.toComposeImageBitmap(): ImageBitmap

composeApp/src/commonMain/kotlin/neth/iecal/trease/ui/bottomsheet/TreeBottomSheet.kt

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,32 @@ import androidx.compose.foundation.shape.RoundedCornerShape
1313
import androidx.compose.ui.Alignment
1414
import androidx.compose.ui.Modifier
1515
import androidx.compose.ui.layout.ContentScale
16+
import kotlinx.serialization.encodeToString
17+
import kotlinx.serialization.json.Json
1618
import neth.iecal.trease.api.TreeRepository
1719
import neth.iecal.trease.models.TreeUiState
20+
import neth.iecal.trease.utils.CacheManager
21+
1822

1923
@OptIn(ExperimentalMaterial3Api::class)
2024
@Composable
2125
fun TreeBottomSheet(onDismiss: () -> Unit,onSelected: (String) -> Unit) {
2226
var uiState by remember { mutableStateOf<TreeUiState>(TreeUiState.Loading) }
2327

2428
LaunchedEffect(Unit) {
25-
uiState = try {
26-
TreeUiState.Success(TreeRepository.fetchTrees())
29+
val cacheManager = CacheManager()
30+
val cache = cacheManager.readFile("tree.json")
31+
if(cache!=null) {
32+
uiState = TreeUiState.Success(
33+
Json.decodeFromString(cache)
34+
)
35+
}
36+
try {
37+
val trees = TreeRepository.fetchTrees()
38+
uiState = TreeUiState.Success(trees)
39+
cacheManager.saveFile("tree.json",Json.encodeToString(trees))
2740
} catch (e: Exception) {
28-
TreeUiState.Error("Failed to load trees")
41+
uiState = TreeUiState.Error("Failed to load trees $e")
2942
}
3043
}
3144

0 commit comments

Comments
 (0)