AddCoordinatesDialog.kt (3481B) - raw
1 package me.rhunk.snapenhance.ui.manager.pages.location 2 3 import androidx.compose.foundation.layout.* 4 import androidx.compose.material3.Button 5 import androidx.compose.material3.OutlinedTextField 6 import androidx.compose.material3.Text 7 import androidx.compose.runtime.* 8 import androidx.compose.ui.Modifier 9 import androidx.compose.ui.focus.FocusRequester 10 import androidx.compose.ui.focus.focusRequester 11 import androidx.compose.ui.text.TextRange 12 import androidx.compose.ui.text.font.FontWeight 13 import androidx.compose.ui.text.input.TextFieldValue 14 import androidx.compose.ui.unit.dp 15 import androidx.compose.ui.unit.sp 16 import kotlinx.coroutines.delay 17 import me.rhunk.snapenhance.bridge.location.LocationCoordinates 18 import me.rhunk.snapenhance.common.bridge.wrapper.LocaleWrapper 19 import me.rhunk.snapenhance.ui.util.AlertDialogs 20 21 22 @Composable 23 fun AddCoordinatesDialog( 24 alertDialogs: AlertDialogs, 25 translation: LocaleWrapper, 26 locationCoordinates: LocationCoordinates, 27 confirm: (locationCoordinates: LocationCoordinates) -> Unit 28 ) { 29 var savedName by remember { 30 mutableStateOf( 31 (locationCoordinates.name ?: "").let { 32 TextFieldValue(it, selection = TextRange(it.length)) 33 } 34 ) 35 } 36 var savedLatitude by remember { mutableStateOf(locationCoordinates.latitude.toFloat().toString()) } 37 var savedLongitude by remember { mutableStateOf(locationCoordinates.longitude.toFloat().toString()) } 38 39 alertDialogs.DefaultDialogCard { 40 val focusRequester = remember { FocusRequester() } 41 Column( 42 modifier = Modifier.padding(16.dp), 43 verticalArrangement = Arrangement.spacedBy(2.dp) 44 ) { 45 Text(translation["save_coordinates_dialog_title"], fontSize = 20.sp, fontWeight = FontWeight.Bold) 46 OutlinedTextField( 47 modifier = Modifier 48 .focusRequester(focusRequester), 49 value = savedName, 50 onValueChange = { savedName = it }, 51 label = { Text(translation["saved_name_dialog_hint"]) } 52 ) 53 54 LaunchedEffect(Unit) { 55 delay(200) 56 focusRequester.requestFocus() 57 } 58 59 OutlinedTextField( 60 value = savedLatitude, 61 onValueChange = { savedLatitude = it }, 62 label = { Text(translation["latitude_dialog_hint"]) } 63 ) 64 OutlinedTextField( 65 value = savedLongitude, 66 onValueChange = { savedLongitude = it }, 67 label = { Text(translation["longitude_dialog_hint"]) } 68 ) 69 70 Row( 71 modifier = Modifier 72 .fillMaxWidth() 73 .padding(top = 16.dp), 74 horizontalArrangement = Arrangement.End 75 ) { 76 Button( 77 onClick = { 78 confirm(LocationCoordinates().apply { 79 this.name = savedName.text 80 this.latitude = savedLatitude.toDoubleOrNull() ?: 0.0 81 this.longitude = savedLongitude.toDoubleOrNull() ?: 0.0 82 }) 83 }, 84 enabled = savedName.text.isNotBlank() && savedLatitude.isNotBlank() && savedLongitude.isNotBlank() 85 ) { 86 Text(translation["save_dialog_button"]) 87 } 88 } 89 } 90 } 91 }