|
@@ -1,15 +1,11 @@
|
|
|
package org.sirekanyan.outline
|
|
package org.sirekanyan.outline
|
|
|
|
|
|
|
|
import android.os.Parcelable
|
|
import android.os.Parcelable
|
|
|
-import androidx.compose.material3.DrawerState
|
|
|
|
|
-import androidx.compose.material3.DrawerValue
|
|
|
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.Composable
|
|
|
-import androidx.compose.runtime.MutableState
|
|
|
|
|
import androidx.compose.runtime.derivedStateOf
|
|
import androidx.compose.runtime.derivedStateOf
|
|
|
import androidx.compose.runtime.getValue
|
|
import androidx.compose.runtime.getValue
|
|
|
import androidx.compose.runtime.mutableStateOf
|
|
import androidx.compose.runtime.mutableStateOf
|
|
|
import androidx.compose.runtime.remember
|
|
import androidx.compose.runtime.remember
|
|
|
-import androidx.compose.runtime.saveable.rememberSaveable
|
|
|
|
|
import androidx.compose.runtime.setValue
|
|
import androidx.compose.runtime.setValue
|
|
|
import androidx.compose.ui.platform.LocalContext
|
|
import androidx.compose.ui.platform.LocalContext
|
|
|
import kotlinx.coroutines.CoroutineScope
|
|
import kotlinx.coroutines.CoroutineScope
|
|
@@ -34,16 +30,14 @@ import org.sirekanyan.outline.ui.SearchState
|
|
|
import org.sirekanyan.outline.ui.rememberSearchState
|
|
import org.sirekanyan.outline.ui.rememberSearchState
|
|
|
|
|
|
|
|
@Composable
|
|
@Composable
|
|
|
-fun rememberMainState(): MainState {
|
|
|
|
|
|
|
+fun rememberMainState(router: Router): MainState {
|
|
|
val context = LocalContext.current
|
|
val context = LocalContext.current
|
|
|
val scope = rememberStateScope()
|
|
val scope = rememberStateScope()
|
|
|
val search = rememberSearchState()
|
|
val search = rememberSearchState()
|
|
|
- val page = rememberSaveable { mutableStateOf<Page>(HelloPage) }
|
|
|
|
|
- val dialog = rememberSaveable { mutableStateOf<Dialog?>(null) }
|
|
|
|
|
val prefs = remember { context.app().prefsDao }
|
|
val prefs = remember { context.app().prefsDao }
|
|
|
val servers = remember { context.app().serverRepository }
|
|
val servers = remember { context.app().serverRepository }
|
|
|
val keys = remember { context.app().keyRepository }
|
|
val keys = remember { context.app().keyRepository }
|
|
|
- return remember { MainState(scope, servers, keys, search, page, dialog, prefs) }
|
|
|
|
|
|
|
+ return remember { MainState(scope, servers, keys, search, router, prefs) }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
class MainState(
|
|
class MainState(
|
|
@@ -51,15 +45,14 @@ class MainState(
|
|
|
val servers: ServerRepository,
|
|
val servers: ServerRepository,
|
|
|
val keys: KeyRepository,
|
|
val keys: KeyRepository,
|
|
|
val search: SearchState,
|
|
val search: SearchState,
|
|
|
- pageState: MutableState<Page>,
|
|
|
|
|
- dialogState: MutableState<Dialog?>,
|
|
|
|
|
|
|
+ private val router: Router,
|
|
|
private val prefs: KeyValueDao,
|
|
private val prefs: KeyValueDao,
|
|
|
) {
|
|
) {
|
|
|
|
|
|
|
|
- val drawer = DrawerState(DrawerValue.Closed)
|
|
|
|
|
|
|
+ val drawer = router.drawer
|
|
|
val drawerDisabled by derivedStateOf { search.isOpened && drawer.isClosed }
|
|
val drawerDisabled by derivedStateOf { search.isOpened && drawer.isClosed }
|
|
|
- var page by pageState
|
|
|
|
|
- var dialog by dialogState
|
|
|
|
|
|
|
+ var page by router.pageState
|
|
|
|
|
+ var dialog by router.dialogState
|
|
|
val selectedPage by derivedStateOf { page as? SelectedPage }
|
|
val selectedPage by derivedStateOf { page as? SelectedPage }
|
|
|
var selectedKey by mutableStateOf<Key?>(null)
|
|
var selectedKey by mutableStateOf<Key?>(null)
|
|
|
val isFabVisible by derivedStateOf { (page as? SelectedPage)?.keys is KeysIdleState }
|
|
val isFabVisible by derivedStateOf { (page as? SelectedPage)?.keys is KeysIdleState }
|
|
@@ -74,19 +67,11 @@ class MainState(
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
fun openDrawer() {
|
|
fun openDrawer() {
|
|
|
- scope.launch {
|
|
|
|
|
- drawer.open()
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ router.openDrawer()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
fun closeDrawer(animated: Boolean = true) {
|
|
fun closeDrawer(animated: Boolean = true) {
|
|
|
- scope.launch {
|
|
|
|
|
- if (animated) {
|
|
|
|
|
- drawer.close()
|
|
|
|
|
- } else {
|
|
|
|
|
- drawer.snapTo(DrawerValue.Closed)
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ router.closeDrawer(animated)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
suspend fun refreshCurrentKeys(showLoading: Boolean) {
|
|
suspend fun refreshCurrentKeys(showLoading: Boolean) {
|