Sfoglia il codice sorgente

Added restoring search state

Vadik Sirekanyan 2 anni fa
parent
commit
1789d2abf3

+ 1 - 0
app/build.gradle.kts

@@ -5,6 +5,7 @@ plugins {
     id("com.android.application")
     kotlin("android")
     kotlin("plugin.serialization")
+    id("kotlin-parcelize")
     id("app.cash.sqldelight")
     id("org.sirekanyan.version-checker")
 }

+ 4 - 2
app/src/main/java/org/sirekanyan/outline/MainState.kt

@@ -37,6 +37,7 @@ import org.sirekanyan.outline.feature.sort.Sorting
 import org.sirekanyan.outline.repository.KeyRepository
 import org.sirekanyan.outline.repository.ServerRepository
 import org.sirekanyan.outline.ui.SearchState
+import org.sirekanyan.outline.ui.rememberSearchState
 import java.net.ConnectException
 import java.net.UnknownHostException
 
@@ -61,15 +62,17 @@ fun rememberMainState(): MainState {
         }
     }
     val supervisor = remember { SupervisorJob() }
+    val search = rememberSearchState()
     val api = remember { OutlineApi() }
     val dao = rememberServerDao()
     val prefs = rememberKeyValueDao()
     val cache = rememberKeyDao()
-    return remember { MainState(scope + supervisor, api, dao, prefs, cache) }
+    return remember { MainState(scope + supervisor, search, api, dao, prefs, cache) }
 }
 
 class MainState(
     val scope: CoroutineScope,
+    val search: SearchState,
     val api: OutlineApi,
     val dao: ServerDao,
     private val prefs: KeyValueDao,
@@ -78,7 +81,6 @@ class MainState(
 
     val servers = ServerRepository(api, dao)
     val keys = KeyRepository(api, cache)
-    val search = SearchState()
     val drawer = DrawerState(DrawerValue.Closed)
     val drawerDisabled by derivedStateOf { search.isOpened && drawer.isClosed }
     var page by mutableStateOf<Page>(HelloPage)

+ 24 - 3
app/src/main/java/org/sirekanyan/outline/ui/SearchState.kt

@@ -1,13 +1,22 @@
 package org.sirekanyan.outline.ui
 
+import android.os.Parcelable
+import androidx.compose.runtime.Composable
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.saveable.Saver
+import androidx.compose.runtime.saveable.rememberSaveable
 import androidx.compose.runtime.setValue
+import kotlinx.parcelize.Parcelize
 
-class SearchState {
+@Composable
+fun rememberSearchState(): SearchState =
+    rememberSaveable(saver = SearchState.Saver) { SearchState() }
 
-    var query by mutableStateOf("")
-    var isOpened by mutableStateOf(false)
+class SearchState(query: String = "", isOpened: Boolean = false) {
+
+    var query by mutableStateOf(query)
+    var isOpened by mutableStateOf(isOpened)
 
     fun openSearch() {
         isOpened = true
@@ -18,4 +27,16 @@ class SearchState {
         isOpened = false
     }
 
+    companion object {
+
+        @Parcelize
+        class Saveable(val query: String, val isOpened: Boolean) : Parcelable
+
+        val Saver = Saver<SearchState, Saveable>(
+            save = { Saveable(it.query, it.isOpened) },
+            restore = { SearchState(it.query, it.isOpened) },
+        )
+
+    }
+
 }