From 795ce9812a2a1b46104bd451429bc0f25836888b Mon Sep 17 00:00:00 2001
From: Rafal Wisniewski <2krafal.wisniewski@gmail.com>
Date: Sat, 25 Apr 2026 13:32:46 +0200
Subject: [PATCH] init
---
.../addexpense/AddExpenseBottomSheet.kt | 6 +-
.../screens/listexpense/DateTimePicker.kt | 73 +++++++++++++------
.../screens/trippicker/AddTripBottomSheet.kt | 2 +-
.../cc/n0th1ng/tripmoney/utils/Currencies.kt | 3 +-
app/src/main/res/values/strings.xml | 1 +
.../BaselineProfileGenerator.kt | 2 +-
6 files changed, 59 insertions(+), 28 deletions(-)
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()