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 }