Quellcode durchsuchen

Added hiding keyboard on touch

Vadik Sirekanyan vor 2 Jahren
Ursprung
Commit
e6821e8291

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

@@ -73,9 +73,9 @@ fun MainContent(state: MainState) {
                     state.keys.observeAllKeys(search.query)
                     state.keys.observeAllKeys(search.query)
                 }
                 }
                 allKeys?.let { keys ->
                 allKeys?.let { keys ->
-                    if (keys.isNotEmpty() || search.isOpened) {
+                    if (keys.isNotEmpty()) {
                         KeysContent(insets, state, keys, sorting)
                         KeysContent(insets, state, keys, sorting)
-                    } else {
+                    } else if (!search.isOpened) {
                         Box(Modifier.fillMaxSize().padding(insets), Alignment.Center) {
                         Box(Modifier.fillMaxSize().padding(insets), Alignment.Center) {
                             TextButton(onClick = { state.dialog = AddServerDialog }) {
                             TextButton(onClick = { state.dialog = AddServerDialog }) {
                                 Icon(Icons.Default.Add, null)
                                 Icon(Icons.Default.Add, null)

+ 14 - 0
app/src/main/java/org/sirekanyan/outline/ext/Modifier.kt

@@ -0,0 +1,14 @@
+package org.sirekanyan.outline.ext
+
+import androidx.compose.foundation.gestures.awaitEachGesture
+import androidx.compose.foundation.gestures.awaitFirstDown
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.input.pointer.pointerInput
+
+fun Modifier.pointerInputOnDown(key: Any?, onDownEvent: () -> Unit): Modifier =
+    pointerInput(key) {
+        awaitEachGesture {
+            awaitFirstDown(requireUnconsumed = false)
+            onDownEvent()
+        }
+    }

+ 8 - 1
app/src/main/java/org/sirekanyan/outline/feature/keys/KeysContent.kt

@@ -1,12 +1,14 @@
 package org.sirekanyan.outline.feature.keys
 package org.sirekanyan.outline.feature.keys
 
 
 import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.produceState
 import androidx.compose.runtime.produceState
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.alpha
 import androidx.compose.ui.draw.alpha
+import androidx.compose.ui.platform.LocalFocusManager
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.dp
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.withContext
 import kotlinx.coroutines.withContext
@@ -14,6 +16,7 @@ import org.sirekanyan.outline.HelloPage
 import org.sirekanyan.outline.MainState
 import org.sirekanyan.outline.MainState
 import org.sirekanyan.outline.api.model.Key
 import org.sirekanyan.outline.api.model.Key
 import org.sirekanyan.outline.ext.plus
 import org.sirekanyan.outline.ext.plus
+import org.sirekanyan.outline.ext.pointerInputOnDown
 import org.sirekanyan.outline.feature.sort.Sorting
 import org.sirekanyan.outline.feature.sort.Sorting
 
 
 @Composable
 @Composable
@@ -23,7 +26,11 @@ fun KeysContent(insets: PaddingValues, state: MainState, keys: List<Key>, sortin
             keys.sortedWith(sorting.comparator)
             keys.sortedWith(sorting.comparator)
         }
         }
     }
     }
-    LazyColumn(contentPadding = insets + PaddingValues(top = 4.dp, bottom = 4.dp)) {
+    val focusManager = LocalFocusManager.current
+    LazyColumn(
+        contentPadding = insets + PaddingValues(top = 4.dp, bottom = 4.dp),
+        modifier = Modifier.fillMaxSize().pointerInputOnDown(Unit) { focusManager.clearFocus() },
+    ) {
         sortedKeys.forEach { key ->
         sortedKeys.forEach { key ->
             item {
             item {
                 val isDeleting = key.accessKey.accessUrl == state.deletingKey?.accessKey?.accessUrl
                 val isDeleting = key.accessKey.accessUrl == state.deletingKey?.accessKey?.accessUrl