Quellcode durchsuchen

moved thumbnail urls to state

sirekanian vor 3 Jahren
Ursprung
Commit
333d9797d2

+ 7 - 0
app/src/main/java/com/sirekanian/spacetime/MainPresenter.kt

@@ -5,10 +5,12 @@ import androidx.compose.runtime.remember
 import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.ui.platform.LocalContext
 import com.sirekanian.spacetime.data.Repository
+import com.sirekanian.spacetime.data.URLS
 import com.sirekanian.spacetime.ext.app
 import com.sirekanian.spacetime.model.GalleryPage
 import com.sirekanian.spacetime.model.ImagePage
 import com.sirekanian.spacetime.model.Page
+import com.sirekanian.spacetime.model.Thumbnail
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.map
@@ -27,6 +29,7 @@ interface MainPresenter {
     fun observePages(): Flow<List<Page>>
     fun savePage(page: ImagePage)
     fun removePage(page: ImagePage)
+    fun loadGallery()
 
 }
 
@@ -52,4 +55,8 @@ class MainPresenterImpl(
         }
     }
 
+    override fun loadGallery() {
+        state.thumbnails = URLS.map(::Thumbnail)
+    }
+
 }

+ 6 - 1
app/src/main/java/com/sirekanian/spacetime/MainScreen.kt

@@ -35,7 +35,12 @@ fun MainScreen(presenter: MainPresenter) {
                 )
             }
             GalleryPage -> {
-                GalleryPageContent(insets, onSelect = { state.draft = Draft(it) })
+                GalleryPageContent(
+                    insets,
+                    state.thumbnails,
+                    onSelect = { state.draft = Draft(it) },
+                    onEnd = { presenter.loadGallery() }
+                )
             }
         }
     }

+ 2 - 0
app/src/main/java/com/sirekanian/spacetime/MainState.kt

@@ -4,9 +4,11 @@ import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.setValue
 import com.sirekanian.spacetime.model.Draft
+import com.sirekanian.spacetime.model.Thumbnail
 
 class MainState {
 
     var draft by mutableStateOf<Draft?>(null)
+    var thumbnails by mutableStateOf(listOf<Thumbnail>())
 
 }

+ 6 - 1
app/src/main/java/com/sirekanian/spacetime/data/DefaultDataCallback.kt

@@ -8,6 +8,11 @@ import com.sirekanian.spacetime.model.ImagePage
 import com.sirekanian.spacetime.model.createImagePage
 import com.sirekanian.spacetime.ui.DateField
 
+private val defaultImageUrls = listOf(
+    "https://sirekanian.com/apod/image/2209/SnakingFilament_Friedman_960.jpg",
+    "https://sirekanian.com/apod/image/2208/CygnusWall_Bogaerts_960.jpg",
+)
+
 class DefaultDataCallback(resources: Resources) : RoomDatabase.Callback() {
 
     private val defaultPages: List<ImagePage>
@@ -15,7 +20,7 @@ class DefaultDataCallback(resources: Resources) : RoomDatabase.Callback() {
     init {
         val names = resources.getStringArray(R.array.default_page_names)
         val dates = resources.getStringArray(R.array.default_page_dates)
-        defaultPages = names.zip(URLS).zip(dates) { (name, url), date ->
+        defaultPages = names.zip(defaultImageUrls).zip(dates) { (name, url), date ->
             createImagePage(name, url, DateField(date))
         }
     }

+ 3 - 0
app/src/main/java/com/sirekanian/spacetime/model/Thumbnail.kt

@@ -0,0 +1,3 @@
+package com.sirekanian.spacetime.model
+
+class Thumbnail(val url: String)

+ 15 - 4
app/src/main/java/com/sirekanian/spacetime/ui/GalleryPageContent.kt

@@ -7,23 +7,29 @@ import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.lazy.grid.GridCells
 import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.layout.ContentScale
 import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.unit.dp
 import coil.compose.AsyncImage
 import coil.request.ImageRequest
-import com.sirekanian.spacetime.data.URLS
+import com.sirekanian.spacetime.model.Thumbnail
 
 @Composable
-fun GalleryPageContent(insets: PaddingValues, onSelect: (String) -> Unit) {
+fun GalleryPageContent(
+    insets: PaddingValues,
+    thumbnails: List<Thumbnail>,
+    onSelect: (String) -> Unit,
+    onEnd: () -> Unit,
+) {
     LazyVerticalGrid(
         columns = GridCells.Adaptive(100.dp),
         modifier = Modifier.fillMaxSize(),
         contentPadding = insets,
     ) {
-        items(URLS.size) { index ->
-            val url = URLS[index]
+        items(thumbnails.size) { index ->
+            val url = thumbnails[index].url
             AsyncImage(
                 model = ImageRequest.Builder(LocalContext.current)
                     .data(url)
@@ -36,5 +42,10 @@ fun GalleryPageContent(insets: PaddingValues, onSelect: (String) -> Unit) {
                 contentScale = ContentScale.Crop,
             )
         }
+        item {
+            LaunchedEffect(Unit) {
+                onEnd()
+            }
+        }
     }
 }