diff --git a/app/src/main/java/cc/n0th1ng/tripmoney/screens/addexpense/AddExpenseBottomSheet.kt b/app/src/main/java/cc/n0th1ng/tripmoney/screens/addexpense/AddExpenseBottomSheet.kt index 0092cfd..a006fe3 100644 --- a/app/src/main/java/cc/n0th1ng/tripmoney/screens/addexpense/AddExpenseBottomSheet.kt +++ b/app/src/main/java/cc/n0th1ng/tripmoney/screens/addexpense/AddExpenseBottomSheet.kt @@ -487,7 +487,7 @@ fun NumberKeyboard( onLongClick = onLongBackspaceClick ) - "+", "/", "-", "*" -> KeyboardButton( + "+", "÷", "-", "×" -> KeyboardButton( text = key, onClick = { onOperatorClick(key) }, modifier = Modifier.weight(1f), @@ -531,7 +531,7 @@ fun KeyboardButton( ) { when { text != null -> Text( - text, + text = text, style = MaterialTheme.typography.headlineMedium ) @@ -541,7 +541,7 @@ fun KeyboardButton( } val keyboard = listOf( - listOf("+", "-", "*", "/"), + listOf("+", "-", "×", "÷"), listOf("1", "2", "3"), listOf("4", "5", "6"), listOf("7", "8", "9"), diff --git a/app/src/main/java/cc/n0th1ng/tripmoney/screens/listexpense/DateTimePicker.kt b/app/src/main/java/cc/n0th1ng/tripmoney/screens/listexpense/DateTimePicker.kt index 8e7e10b..ba608df 100644 --- a/app/src/main/java/cc/n0th1ng/tripmoney/screens/listexpense/DateTimePicker.kt +++ b/app/src/main/java/cc/n0th1ng/tripmoney/screens/listexpense/DateTimePicker.kt @@ -2,6 +2,7 @@ package cc.n0th1ng.tripmoney.screens.listexpense import android.os.Build import androidx.annotation.RequiresApi +import androidx.compose.foundation.layout.Row import androidx.compose.material3.AlertDialog import androidx.compose.material3.DatePicker import androidx.compose.material3.DatePickerDialog @@ -20,13 +21,15 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview import cc.n0th1ng.tripmoney.R.* +import cc.n0th1ng.tripmoney.theme.TripMoneyTheme +import cc.n0th1ng.tripmoney.utils.AllPreviews import java.time.Instant import java.time.LocalDate import java.time.LocalDateTime import java.time.LocalTime import java.time.ZoneId -import java.util.Calendar @RequiresApi(Build.VERSION_CODES.O) @OptIn(ExperimentalMaterial3Api::class) @@ -38,8 +41,10 @@ fun DateRangePicker( onConfirm: (LocalDate, LocalDate) -> Unit ) { val datePickerState = - rememberDateRangePickerState(initialSelectedStartDateMillis = startDate.toEpochMilli(), - initialSelectedEndDateMillis = endDate.toEpochMilli()) + rememberDateRangePickerState( + initialSelectedStartDateMillis = startDate.toEpochMilli(), + initialSelectedEndDateMillis = endDate.toEpochMilli() + ) DatePickerDialog( onDismissRequest = onDismiss, @@ -64,7 +69,8 @@ fun DateRangePicker( TextButton(onClick = onDismiss) { Text(stringResource(string.cancel)) } } ) { - DateRangePicker(state = datePickerState, showModeToggle = false, + DateRangePicker( + state = datePickerState, showModeToggle = false, title = {}) } } @@ -73,27 +79,35 @@ fun DateRangePicker( @OptIn(ExperimentalMaterial3Api::class) @Composable fun DatePicker( - dateTime: LocalDate = LocalDate.now(), + date: LocalDate = LocalDate.now(), onDismiss: () -> Unit, onConfirm: (LocalDate) -> Unit ) { val datePickerState = - rememberDatePickerState(initialSelectedDateMillis = dateTime.toEpochMilli()) + rememberDatePickerState(initialSelectedDateMillis = date.toEpochMilli()) DatePickerDialog( onDismissRequest = onDismiss, confirmButton = { - TextButton(onClick = { - val selectedMillis = datePickerState.selectedDateMillis - if (selectedMillis != null) { - val selectedDate = Instant.ofEpochMilli(selectedMillis) - .atZone(ZoneId.systemDefault()) - .toLocalDate() - onConfirm(selectedDate) + Row() { + TextButton(onClick = { + onConfirm(LocalDate.now().minusDays(1)) + }) { + Text(stringResource(string.yesterday)) + } + TextButton(onClick = { + val selectedMillis = datePickerState.selectedDateMillis + if (selectedMillis != null) { + val selectedDate = Instant.ofEpochMilli(selectedMillis) + .atZone(ZoneId.systemDefault()) + .toLocalDate() + onConfirm(selectedDate) + } + }) { + Text("OK") } - }) { - Text("OK") } + }, dismissButton = { TextButton(onClick = onDismiss) { Text(stringResource(string.cancel)) } @@ -103,13 +117,17 @@ fun DatePicker( } } +@RequiresApi(Build.VERSION_CODES.O) @OptIn(ExperimentalMaterial3Api::class) @Composable -fun TimePicker(onDismiss: () -> Unit, onConfirm: (TimePickerState) -> Unit) { - val currentTime = Calendar.getInstance() +fun TimePicker( + onDismiss: () -> Unit, + onConfirm: (TimePickerState) -> Unit, + time: LocalTime = LocalTime.now() +) { val timePickerState = rememberTimePickerState( - initialHour = currentTime.get(Calendar.HOUR_OF_DAY), - initialMinute = currentTime.get(Calendar.MINUTE), + initialHour = time.hour, + initialMinute = time.minute, is24Hour = true ) @@ -141,7 +159,9 @@ fun DateTimePicker( var date by remember { mutableStateOf(dateTime.toLocalDate()) } if (showDatePicker) { - DatePicker(onDismiss = { showDatePicker = false }, onConfirm = { newDate -> + DatePicker( + date = dateTime.toLocalDate(), + onDismiss = { showDatePicker = false }, onConfirm = { newDate -> date = newDate showDatePicker = false showTimePicker = true @@ -157,7 +177,7 @@ fun DateTimePicker( showDatePicker = true val newTime = LocalTime.of(timePickerState.hour, timePickerState.minute) onChange(LocalDateTime.of(date, newTime)) - }) + }, time = dateTime.toLocalTime()) } } @@ -167,4 +187,13 @@ fun LocalDateTime.toEpochMilli(): Long = @RequiresApi(Build.VERSION_CODES.O) fun LocalDate.toEpochMilli(): Long = - this.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() \ No newline at end of file + this.atStartOfDay().atZone(ZoneId.of("UTC")).toInstant().toEpochMilli() + +@RequiresApi(Build.VERSION_CODES.O) +@AllPreviews +@Composable +fun DatePickerPreview() { + TripMoneyTheme { + DatePicker(LocalDate.now(), {}, {}) + } +} \ No newline at end of file diff --git a/app/src/main/java/cc/n0th1ng/tripmoney/screens/trippicker/AddTripBottomSheet.kt b/app/src/main/java/cc/n0th1ng/tripmoney/screens/trippicker/AddTripBottomSheet.kt index e32de5e..3f8501c 100644 --- a/app/src/main/java/cc/n0th1ng/tripmoney/screens/trippicker/AddTripBottomSheet.kt +++ b/app/src/main/java/cc/n0th1ng/tripmoney/screens/trippicker/AddTripBottomSheet.kt @@ -104,7 +104,7 @@ fun AddTripBottomSheet( var endDate by remember { mutableStateOf( - tripToEdit?.startDate ?: LocalDate.now() + tripToEdit?.endDate ?: LocalDate.now() ) } diff --git a/app/src/main/java/cc/n0th1ng/tripmoney/utils/Currencies.kt b/app/src/main/java/cc/n0th1ng/tripmoney/utils/Currencies.kt index 4963490..c510b63 100644 --- a/app/src/main/java/cc/n0th1ng/tripmoney/utils/Currencies.kt +++ b/app/src/main/java/cc/n0th1ng/tripmoney/utils/Currencies.kt @@ -3,7 +3,8 @@ package cc.n0th1ng.tripmoney.utils enum class Currencies { PLN, EUR, - USD; + USD, + RON; companion object { fun default(): Currencies { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 12a3abd..81e4dca 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -39,4 +39,5 @@ Budget Money left Open add expense form on startup + Yesterday \ No newline at end of file diff --git a/baselineprofile/src/main/java/cc/n0th1ng/baselineprofile/BaselineProfileGenerator.kt b/baselineprofile/src/main/java/cc/n0th1ng/baselineprofile/BaselineProfileGenerator.kt index 04bc79a..371e938 100644 --- a/baselineprofile/src/main/java/cc/n0th1ng/baselineprofile/BaselineProfileGenerator.kt +++ b/baselineprofile/src/main/java/cc/n0th1ng/baselineprofile/BaselineProfileGenerator.kt @@ -26,7 +26,7 @@ class BaselineProfileGenerator { packageName = "cc.n0th1ng.tripmoney", includeInStartupProfile = true ) { - pressHome() +// pressHome() startActivityAndWait() device.waitForIdle()