Ver Fonte

fixed initial cursor position for date field

sirekanian há 3 anos atrás
pai
commit
876bbbce6b

+ 17 - 3
app/src/main/java/com/sirekanian/spacetime/ui/DateFieldWrapper.kt

@@ -3,9 +3,23 @@ package com.sirekanian.spacetime.ui
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.setValue
+import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.input.TextFieldValue
 
 class DateFieldWrapper(date: String) {
-    var field by mutableStateOf(DateField(date))
-    fun isEmpty() = field.value.isEmpty()
-    fun isValid() = field.isValid()
+
+    private val text = DateField(date).value
+    var field by mutableStateOf(TextFieldValue(text, TextRange(text.length)))
+        private set
+
+    fun onValueChange(field: TextFieldValue) {
+        this.field = TextFieldValue(DateField(field.text).value, field.selection)
+    }
+
+    fun isEmpty(): Boolean =
+        field.text.isEmpty()
+
+    fun isValid(): Boolean =
+        DateField(field.text).isValid()
+
 }

+ 1 - 1
app/src/main/java/com/sirekanian/spacetime/ui/DraftPage.kt

@@ -41,7 +41,7 @@ fun DraftPage(insets: PaddingValues, state: MainState, onDone: (ImagePage) -> Un
             isNameValid = name.isValid()
             isDateValid = date.isValid()
             if (isNameValid && isDateValid) {
-                onDone(createImagePage(name.field.text, draft.url, date.field.value, blur))
+                onDone(createImagePage(name.field.text, draft.url, date.field.text, blur))
             }
         })
     }

+ 3 - 3
app/src/main/java/com/sirekanian/spacetime/ui/EditForm.kt

@@ -33,7 +33,7 @@ fun EditForm(
     val dateFocusRequester = remember { FocusRequester() }
     OutlinedTextField(
         value = name.field,
-        onValueChange = { name.field = it },
+        onValueChange = name::onValueChange,
         modifier = Modifier
             .fillMaxWidth()
             .focusRequester(nameFocusRequester),
@@ -45,8 +45,8 @@ fun EditForm(
         colors = TextFieldDefaults.outlinedTextFieldColors(backgroundColor = rippleColor),
     )
     OutlinedTextField(
-        value = date.field.value,
-        onValueChange = { date.field = DateField(it) },
+        value = date.field,
+        onValueChange = date::onValueChange,
         modifier = Modifier
             .fillMaxWidth()
             .focusRequester(dateFocusRequester),

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

@@ -42,11 +42,11 @@ fun ImagePageContent(
     BackHandler(isEditMode) {
         state.editablePage = null
     }
-    val name = remember(isEditMode) { NameField(page.name) }
-    val date = remember(isEditMode) { DateFieldWrapper(page.date) }
+    val name = remember { NameField(page.name) }
+    val date = remember { DateFieldWrapper(page.date) }
     var blur by remember(isEditMode) { mutableStateOf(page.blur) }
     var isNameValid by remember(name.field) { mutableStateOf(true) }
-    var isDateValid by remember(date) { mutableStateOf(true) }
+    var isDateValid by remember(date.field) { mutableStateOf(true) }
     PageBackground(
         url = page.url,
         blur = blur,
@@ -64,7 +64,7 @@ fun ImagePageContent(
                     isNameValid = name.isValid()
                     isDateValid = date.isValid()
                     if (isNameValid && isDateValid) {
-                        onDone(ImagePage(page.id, name.field.text, page.url, date.field.value, blur))
+                        onDone(ImagePage(page.id, name.field.text, page.url, date.field.text, blur))
                     }
                 })
             }

+ 13 - 2
app/src/main/java/com/sirekanian/spacetime/ui/NameField.kt

@@ -7,7 +7,18 @@ import androidx.compose.ui.text.TextRange
 import androidx.compose.ui.text.input.TextFieldValue
 
 class NameField(name: String) {
+
     var field by mutableStateOf(TextFieldValue(name, TextRange(name.length)))
-    fun isEmpty() = field.text.isEmpty()
-    fun isValid() = field.text.isNotEmpty()
+        private set
+
+    fun onValueChange(field: TextFieldValue) {
+        this.field = field
+    }
+
+    fun isEmpty(): Boolean =
+        field.text.isEmpty()
+
+    fun isValid(): Boolean =
+        field.text.isNotEmpty()
+
 }