From 7fb8609adce873ef5d41e1156879a848ff41a6d9 Mon Sep 17 00:00:00 2001 From: Joseph Sameh <20220099@stud.fci-cu.edu.eg> Date: Tue, 7 Jul 2026 01:27:25 +0300 Subject: [PATCH 1/4] Add TimePicker and time support Introduce a TimePicker dialog component and add time handling across features: UI (add/edit transaction, add/scheduled payments, scheduled payments list/details) now show editable time fields; ViewModels and InteractionListeners handle time selection; UiStates include LocalTime or LocalDateTime where appropriate. Domain models updated (startDate / startDate types switched to LocalDateTime) and DTO mapping adjusted. Added LocalTime.format extension, new strings (select_time / time_label), tweaked BottomSheet insets and DatePicker preview. These changes enable selecting and persisting date+time for transactions and scheduled payments. --- .../CreateScheduledPaymentDto.kt | 3 +- .../scheduledPayment/ScheduledPaymentDto.kt | 2 +- .../CreateScheduledPayment.kt | 3 +- .../scheduledPayment/ScheduledPayment.kt | 2 +- .../AddScheduledPaymentBottomSheet.kt | 66 ++++++-- .../AddScheduledPaymentInteractionListener.kt | 2 + .../AddScheduledPaymentUiState.kt | 7 +- .../AddScheduledPaymentViewModel.kt | 12 +- .../AddTransactionBottomSheet.kt | 74 ++++++--- .../AddTransactionInteractionListener.kt | 3 + .../AddTransactionUiState.kt | 4 + .../AddTransactionViewModel.kt | 18 ++- .../EditTransactionBottomSheet.kt | 64 ++++++-- .../EditTransactionInteractionListener.kt | 3 + .../EditTransactionUiState.kt | 4 + .../EditTransactionViewModel.kt | 17 ++- .../ScheduledPaymentDetailsUiState.kt | 4 +- .../ScheduledPaymentsUiState.kt | 4 +- .../ScheduledPaymentsViewModel.kt | 2 - .../composeResources/values-ar/strings.xml | 1 + .../composeResources/values/strings.xml | 1 + .../components/dialog/DatePicker.kt | 8 +- .../components/dialog/TimePicker.kt | 141 ++++++++++++++++++ .../components/sheet/BottomSheet.kt | 2 + .../designsystem/utils/extentions/format.kt | 7 + 25 files changed, 388 insertions(+), 66 deletions(-) create mode 100644 designSystem/src/commonMain/kotlin/com/spendoo/designsystem/components/dialog/TimePicker.kt diff --git a/categoriesData/src/commonMain/kotlin/com/spendoo/categories/data/dataSource/remote/dto/scheduledPayment/CreateScheduledPaymentDto.kt b/categoriesData/src/commonMain/kotlin/com/spendoo/categories/data/dataSource/remote/dto/scheduledPayment/CreateScheduledPaymentDto.kt index 157a13e6..8c2e5483 100644 --- a/categoriesData/src/commonMain/kotlin/com/spendoo/categories/data/dataSource/remote/dto/scheduledPayment/CreateScheduledPaymentDto.kt +++ b/categoriesData/src/commonMain/kotlin/com/spendoo/categories/data/dataSource/remote/dto/scheduledPayment/CreateScheduledPaymentDto.kt @@ -4,7 +4,6 @@ import com.spendoo.categories.domain.entity.scheduledPayment.CreateScheduledPaym import kotlinx.serialization.Serializable import com.spendoo.categories.domain.entity.scheduledPayment.PaymentFrequency import com.spendoo.categories.domain.entity.scheduledPayment.ReminderUnit -import com.spendoo.shared.domain.utils.toLocalDateTime import com.spendoo.shared.domain.utils.toUtcInstant @Serializable @@ -23,7 +22,7 @@ fun CreateScheduledPayment.toDto(): CreateScheduledPaymentDto { title = this.title, amount = this.amount, categoryId = this.categoryId, - startDate = this.startDate.toLocalDateTime().toUtcInstant().toString(), + startDate = this.startDate.toUtcInstant().toString(), frequency = if (this.frequency == PaymentFrequency.CUSTOM) this.customFrequencyDays ?: 0 else this.frequency.toDays(), reminderPeriod = this.reminderPeriod, reminderUnit = this.reminderUnit diff --git a/categoriesData/src/commonMain/kotlin/com/spendoo/categories/data/dataSource/remote/dto/scheduledPayment/ScheduledPaymentDto.kt b/categoriesData/src/commonMain/kotlin/com/spendoo/categories/data/dataSource/remote/dto/scheduledPayment/ScheduledPaymentDto.kt index d32cc260..8178e793 100644 --- a/categoriesData/src/commonMain/kotlin/com/spendoo/categories/data/dataSource/remote/dto/scheduledPayment/ScheduledPaymentDto.kt +++ b/categoriesData/src/commonMain/kotlin/com/spendoo/categories/data/dataSource/remote/dto/scheduledPayment/ScheduledPaymentDto.kt @@ -33,7 +33,7 @@ fun ScheduledPaymentDto.toDomain(): ScheduledPayment { amount = this.amount, categoryId = this.categoryId, categoryIcon = CategoryIcon.fromStringOrDefault(this.categoryIcon), - startDate = this.startDate?.toLocalDateTimeOrDefault()?.date ?: today, + startDate = this.startDate?.toLocalDateTimeOrDefault() ?: now, nextDueDate = this.nextDueDate?.toLocalDateTimeOrDefault() ?: now, nextReminderDate = this.nextReminderDate?.toLocalDateTimeOrDefault()?.date ?: today, frequency = domainFrequency, diff --git a/categoriesDomain/src/commonMain/kotlin/com/spendoo/categories/domain/entity/scheduledPayment/CreateScheduledPayment.kt b/categoriesDomain/src/commonMain/kotlin/com/spendoo/categories/domain/entity/scheduledPayment/CreateScheduledPayment.kt index 9d57229f..2bab15b9 100644 --- a/categoriesDomain/src/commonMain/kotlin/com/spendoo/categories/domain/entity/scheduledPayment/CreateScheduledPayment.kt +++ b/categoriesDomain/src/commonMain/kotlin/com/spendoo/categories/domain/entity/scheduledPayment/CreateScheduledPayment.kt @@ -1,12 +1,13 @@ package com.spendoo.categories.domain.entity.scheduledPayment import kotlinx.datetime.LocalDate +import kotlinx.datetime.LocalDateTime data class CreateScheduledPayment( val title: String, val amount: Double, val categoryId: String, - val startDate: LocalDate, + val startDate: LocalDateTime, val frequency: PaymentFrequency, val customFrequencyDays: Int? = null, val reminderPeriod: Int, diff --git a/categoriesDomain/src/commonMain/kotlin/com/spendoo/categories/domain/entity/scheduledPayment/ScheduledPayment.kt b/categoriesDomain/src/commonMain/kotlin/com/spendoo/categories/domain/entity/scheduledPayment/ScheduledPayment.kt index aeadf6da..318359ce 100644 --- a/categoriesDomain/src/commonMain/kotlin/com/spendoo/categories/domain/entity/scheduledPayment/ScheduledPayment.kt +++ b/categoriesDomain/src/commonMain/kotlin/com/spendoo/categories/domain/entity/scheduledPayment/ScheduledPayment.kt @@ -10,7 +10,7 @@ data class ScheduledPayment( val amount: Double, val categoryId: String, val categoryIcon: CategoryIcon, - val startDate: LocalDate, + val startDate: LocalDateTime, val nextDueDate: LocalDateTime, val nextReminderDate: LocalDate, val frequency: PaymentFrequency, diff --git a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addScheduledPaymentBottomSheet/AddScheduledPaymentBottomSheet.kt b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addScheduledPaymentBottomSheet/AddScheduledPaymentBottomSheet.kt index 0bac5c1e..0d775b54 100644 --- a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addScheduledPaymentBottomSheet/AddScheduledPaymentBottomSheet.kt +++ b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addScheduledPaymentBottomSheet/AddScheduledPaymentBottomSheet.kt @@ -29,6 +29,7 @@ import org.jetbrains.compose.resources.stringResource import spendoo.designsystem.generated.resources.enter_custom_days import com.spendoo.designsystem.components.button.AppButtonState import com.spendoo.designsystem.components.dialog.DatePicker +import com.spendoo.designsystem.components.dialog.TimePicker import com.spendoo.designsystem.components.dropdownMenu.DropdownMenu import com.spendoo.designsystem.components.dropdownMenu.DropdownMenuItem import com.spendoo.designsystem.components.icon.Icon @@ -55,6 +56,8 @@ import spendoo.designsystem.generated.resources.enter_title import spendoo.designsystem.generated.resources.frequency import spendoo.designsystem.generated.resources.ic_arrow_down import spendoo.designsystem.generated.resources.ic_date +import spendoo.designsystem.generated.resources.ic_clock_red +import spendoo.designsystem.generated.resources.time_label import spendoo.designsystem.generated.resources.reminder_period import spendoo.designsystem.generated.resources.save_payment @@ -170,33 +173,64 @@ private fun AddScheduledPaymentContent( trailingIconColor = Theme.colorScheme.text.link ) - CustomTextField( - value = state.startDate.format(), - onValueChange = { }, - hint = Res.string.enter_start_date.asString(), - enabled = false, + Row( modifier = Modifier .fillMaxWidth() - .clickableNoRipple { + .padding(bottom = 16.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + CustomTextField( + value = state.startDate.date.format(), + onValueChange = { }, + hint = Res.string.enter_start_date.asString(), + enabled = false, + modifier = Modifier + .weight(1f) + .clickableNoRipple { + focusManager.clearFocus() + interactionListener.onShowDatePicker(true) + }, + onTrailingIconClick = { focusManager.clearFocus() interactionListener.onShowDatePicker(true) - } - .padding(bottom = 16.dp), - onTrailingIconClick = { - focusManager.clearFocus() - interactionListener.onShowDatePicker(true) - }, - trailingIcon = Res.drawable.ic_date.painter(), - trailingIconColor = Theme.colorScheme.text.label - ) + }, + trailingIcon = Res.drawable.ic_date.painter(), + trailingIconColor = Theme.colorScheme.text.label + ) + CustomTextField( + value = state.startDate.time.format(), + onValueChange = { }, + hint = stringResource(Res.string.time_label), + enabled = false, + modifier = Modifier + .weight(1f) + .clickableNoRipple { + focusManager.clearFocus() + interactionListener.onShowTimePicker(true) + }, + onTrailingIconClick = { + focusManager.clearFocus() + interactionListener.onShowTimePicker(true) + }, + trailingIcon = Res.drawable.ic_clock_red.painter(), + trailingIconColor = Theme.colorScheme.text.label + ) + } DatePicker( showDialog = state.showDatePicker, - selectedDate = state.startDate, + selectedDate = state.startDate.date, onDateSelected = interactionListener::onStartDateChanged, onDismiss = { interactionListener.onShowDatePicker(false) } ) + TimePicker( + showDialog = state.showTimePicker, + selectedTime = state.startDate.time, + onTimeSelected = interactionListener::onStartTimeChanged, + onDismiss = { interactionListener.onShowTimePicker(false) } + ) + Text( text = Res.string.frequency.asString(), style = Theme.typography.label.medium.small, diff --git a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addScheduledPaymentBottomSheet/AddScheduledPaymentInteractionListener.kt b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addScheduledPaymentBottomSheet/AddScheduledPaymentInteractionListener.kt index e888b55a..b008fe73 100644 --- a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addScheduledPaymentBottomSheet/AddScheduledPaymentInteractionListener.kt +++ b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addScheduledPaymentBottomSheet/AddScheduledPaymentInteractionListener.kt @@ -12,6 +12,8 @@ interface AddScheduledPaymentInteractionListener { fun onCategorySelected(category: CategoryItemUiState) fun onStartDateChanged(date: LocalDate) fun onShowDatePicker(show: Boolean) + fun onShowTimePicker(show: Boolean) + fun onStartTimeChanged(time: kotlinx.datetime.LocalTime) fun onFrequencyChanged(frequency: PaymentFrequency) fun onCustomFrequencyDaysChanged(days: String) fun onReminderPeriodValueChanged(value: String) diff --git a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addScheduledPaymentBottomSheet/AddScheduledPaymentUiState.kt b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addScheduledPaymentBottomSheet/AddScheduledPaymentUiState.kt index eb3bfdbd..e14e8d96 100644 --- a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addScheduledPaymentBottomSheet/AddScheduledPaymentUiState.kt +++ b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addScheduledPaymentBottomSheet/AddScheduledPaymentUiState.kt @@ -3,7 +3,9 @@ package com.spendoo.categories.presentation.screen.addScheduledPaymentBottomShee import com.spendoo.shared.domain.entity.CategoryIcon import com.spendoo.categories.domain.entity.scheduledPayment.PaymentFrequency import com.spendoo.categories.domain.entity.scheduledPayment.ReminderUnit -import com.spendoo.shared.domain.utils.getToday +import com.spendoo.shared.domain.utils.getNow +import kotlinx.datetime.LocalDateTime +import kotlinx.datetime.LocalTime import kotlinx.datetime.LocalDate import spendoo.designsystem.generated.resources.Res import spendoo.designsystem.generated.resources.daily @@ -31,8 +33,9 @@ data class AddScheduledPaymentUiState( val categoryIcon: CategoryIcon = CategoryIcon.DEFAULT, val categoryName: String = "", val isCategorySelectionSheetVisible: Boolean = false, - val startDate: LocalDate = getToday(), + val startDate: LocalDateTime = getNow(), val showDatePicker: Boolean = false, + val showTimePicker: Boolean = false, val frequency: PaymentFrequency = PaymentFrequency.MONTHLY, val customFrequencyDays: String = "", val customFrequencyDaysError: StringResource? = null, diff --git a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addScheduledPaymentBottomSheet/AddScheduledPaymentViewModel.kt b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addScheduledPaymentBottomSheet/AddScheduledPaymentViewModel.kt index 7a48046d..d36b5614 100644 --- a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addScheduledPaymentBottomSheet/AddScheduledPaymentViewModel.kt +++ b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addScheduledPaymentBottomSheet/AddScheduledPaymentViewModel.kt @@ -10,6 +10,8 @@ import com.spendoo.designsystem.navigation.BaseViewModel import com.spendoo.designsystem.utils.UiText import com.spendoo.shared.domain.utils.toCleanDoubleOrNull import kotlinx.datetime.LocalDate +import kotlinx.datetime.LocalTime +import kotlinx.datetime.LocalDateTime import spendoo.designsystem.generated.resources.Res import spendoo.designsystem.generated.resources.an_error_occurred import spendoo.designsystem.generated.resources.custom_frequency_must_be_greater_than_zero @@ -58,13 +60,21 @@ class AddScheduledPaymentViewModel( } override fun onStartDateChanged(date: LocalDate) { - updateState { copy(startDate = date, showDatePicker = false) } + updateState { copy(startDate = LocalDateTime(date, startDate.time), showDatePicker = false) } } override fun onShowDatePicker(show: Boolean) { updateState { copy(showDatePicker = show) } } + override fun onShowTimePicker(show: Boolean) { + updateState { copy(showTimePicker = show) } + } + + override fun onStartTimeChanged(time: LocalTime) { + updateState { copy(startDate = LocalDateTime(startDate.date, time), showTimePicker = false) } + } + override fun onFrequencyChanged(frequency: PaymentFrequency) { updateState { val customDays = diff --git a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addTransactionBottomSheet/AddTransactionBottomSheet.kt b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addTransactionBottomSheet/AddTransactionBottomSheet.kt index 1073e822..3f92a4e1 100644 --- a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addTransactionBottomSheet/AddTransactionBottomSheet.kt +++ b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addTransactionBottomSheet/AddTransactionBottomSheet.kt @@ -5,8 +5,10 @@ import androidx.compose.animation.expandVertically import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.animation.shrinkVertically +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding @@ -23,6 +25,7 @@ import com.spendoo.categories.presentation.screen.addTransactionBottomSheet.comp import com.spendoo.categories.presentation.screen.addTransactionBottomSheet.components.IncomeEntriesSection import com.spendoo.categories.presentation.screen.categorySelectionSheet.CategorySelectionSheet import com.spendoo.designsystem.components.dialog.DatePicker +import com.spendoo.designsystem.components.dialog.TimePicker import com.spendoo.designsystem.components.general.AppSegmentedControl import com.spendoo.designsystem.components.sheet.BottomSheet import com.spendoo.designsystem.components.sheet.BottomSheetTemplate @@ -36,6 +39,7 @@ import com.spendoo.designsystem.utils.extentions.painter import com.spendoo.shared.domain.entity.CategoryIcon import io.github.vinceglb.filekit.PlatformFile import kotlinx.datetime.LocalDate +import kotlinx.datetime.LocalTime import org.jetbrains.compose.resources.stringResource import org.koin.compose.viewmodel.koinViewModel import spendoo.designsystem.generated.resources.Res @@ -43,7 +47,9 @@ import spendoo.designsystem.generated.resources.add import spendoo.designsystem.generated.resources.add_transaction import spendoo.designsystem.generated.resources.cancel import spendoo.designsystem.generated.resources.enter_your_date +import spendoo.designsystem.generated.resources.ic_clock_red import spendoo.designsystem.generated.resources.ic_date +import spendoo.designsystem.generated.resources.time_label import spendoo.designsystem.generated.resources.write_a_note_optional @Composable @@ -77,6 +83,13 @@ fun AddTransactionBottomSheet( onDateSelected = viewModel::onDateSelected, onDismiss = viewModel::onDatePickerDismissed ) + + TimePicker( + showDialog = state.showTimePicker, + selectedTime = state.time, + onTimeSelected = viewModel::onTimeSelected, + onDismiss = viewModel::onTimePickerDismissed + ) } @Composable @@ -124,26 +137,50 @@ private fun AddTransactionBottomSheetContent( enter = fadeIn() + expandVertically(), exit = fadeOut() + shrinkVertically() ) { - CustomTextField( - value = state.date.format(), - onValueChange = { }, - hint = stringResource(Res.string.enter_your_date), - enabled = false, + Row( modifier = Modifier .fillMaxWidth() - .clickableNoRipple { - focusManager.clearFocus() - interactionListener.onDatePickerRequested() - } .padding(bottom = 8.dp) .padding(horizontal = 16.dp), - onTrailingIconClick = { - focusManager.clearFocus() - interactionListener.onDatePickerRequested() - }, - trailingIcon = Res.drawable.ic_date.painter(), - trailingIconColor = Theme.colorScheme.text.label - ) + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + CustomTextField( + value = state.date.format(), + onValueChange = { }, + hint = stringResource(Res.string.enter_your_date), + enabled = false, + modifier = Modifier + .weight(1f) + .clickableNoRipple { + focusManager.clearFocus() + interactionListener.onDatePickerRequested() + }, + onTrailingIconClick = { + focusManager.clearFocus() + interactionListener.onDatePickerRequested() + }, + trailingIcon = Res.drawable.ic_date.painter(), + trailingIconColor = Theme.colorScheme.text.label + ) + CustomTextField( + value = state.time.format(), + onValueChange = { }, + hint = stringResource(Res.string.time_label), + enabled = false, + modifier = Modifier + .weight(1f) + .clickableNoRipple { + focusManager.clearFocus() + interactionListener.onTimePickerRequested() + }, + onTrailingIconClick = { + focusManager.clearFocus() + interactionListener.onTimePickerRequested() + }, + trailingIcon = Res.drawable.ic_clock_red.painter(), + trailingIconColor = Theme.colorScheme.text.label + ) + } } AnimatedVisibility( @@ -168,7 +205,7 @@ private fun AddTransactionBottomSheetContent( } item { - Spacer(modifier = Modifier.padding(bottom = 60.dp)) + Spacer(modifier = Modifier.padding(bottom = 16.dp)) } } @@ -199,6 +236,9 @@ val previewInteractionListener = object : AddTransactionInteractionListener { override fun onSavingAmountChanged(amount: String) {} override fun onDatePickerRequested() {} override fun onDatePickerDismissed() {} + override fun onTimeSelected(time: LocalTime) {} + override fun onTimePickerRequested() {} + override fun onTimePickerDismissed() {} override fun onNoteChanged(note: String) {} override fun onDateSelected(date: LocalDate) {} override fun submit() {} diff --git a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addTransactionBottomSheet/AddTransactionInteractionListener.kt b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addTransactionBottomSheet/AddTransactionInteractionListener.kt index a85ba748..339bc4f8 100644 --- a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addTransactionBottomSheet/AddTransactionInteractionListener.kt +++ b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addTransactionBottomSheet/AddTransactionInteractionListener.kt @@ -14,6 +14,9 @@ interface AddTransactionInteractionListener { fun onDateSelected(date: LocalDate) fun onDatePickerRequested() fun onDatePickerDismissed() + fun onTimeSelected(time: kotlinx.datetime.LocalTime) + fun onTimePickerRequested() + fun onTimePickerDismissed() fun onSavingChecked(checked: Boolean) // Expense Entry Actions diff --git a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addTransactionBottomSheet/AddTransactionUiState.kt b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addTransactionBottomSheet/AddTransactionUiState.kt index 72ce3e05..6d1093f5 100644 --- a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addTransactionBottomSheet/AddTransactionUiState.kt +++ b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addTransactionBottomSheet/AddTransactionUiState.kt @@ -3,8 +3,10 @@ package com.spendoo.categories.presentation.screen.addTransactionBottomSheet import com.spendoo.categories.domain.entity.category.Category import com.spendoo.shared.domain.entity.CategoryIcon import com.spendoo.shared.domain.utils.getToday +import com.spendoo.shared.domain.utils.getNow import com.spendoo.designsystem.utils.UiText import kotlinx.datetime.LocalDate +import kotlinx.datetime.LocalTime import org.jetbrains.compose.resources.StringResource import spendoo.designsystem.generated.resources.Res import spendoo.designsystem.generated.resources.expenses @@ -51,9 +53,11 @@ data class AddTransactionUiState( val incomeAmount: Double? = null, val incomeNote: String = "", val date: LocalDate = getToday(), + val time: LocalTime = getNow().time, val isSavingChecked: Boolean = false, val savingAmount: Double? = null, val showDatePicker: Boolean = false, + val showTimePicker: Boolean = false, val isSubmitting: Boolean = false, val isProcessingMedia: Boolean = false, val showCategorySheet: Boolean = false, diff --git a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addTransactionBottomSheet/AddTransactionViewModel.kt b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addTransactionBottomSheet/AddTransactionViewModel.kt index ec2a9948..5e31a372 100644 --- a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addTransactionBottomSheet/AddTransactionViewModel.kt +++ b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/addTransactionBottomSheet/AddTransactionViewModel.kt @@ -8,6 +8,8 @@ import com.spendoo.categories.domain.entity.transaction.IncomeEntry import com.spendoo.categories.domain.entity.transaction.ReadyTransactionEntry import com.spendoo.categories.domain.repository.TransactionsRepository import com.spendoo.shared.domain.utils.toLocalDateTime +import kotlinx.datetime.LocalTime +import kotlinx.datetime.LocalDateTime import com.spendoo.designsystem.navigation.BaseViewModel import com.spendoo.designsystem.utils.UiText import com.spendoo.designsystem.utils.toUiText @@ -100,6 +102,18 @@ class AddTransactionViewModel( updateState { it.copy(showDatePicker = false) } } + override fun onTimeSelected(time: LocalTime) { + updateState { it.copy(time = time, showTimePicker = false) } + } + + override fun onTimePickerRequested() { + updateState { it.copy(showTimePicker = true) } + } + + override fun onTimePickerDismissed() { + updateState { it.copy(showTimePicker = false) } + } + override fun onSavingChecked(checked: Boolean) { updateState { it.copy(isSavingChecked = checked, savingAmountError = null) } } @@ -375,7 +389,7 @@ class AddTransactionViewModel( IncomeEntry( title = state.value.incomeTitle, amount = amount, - transactionDate = state.value.date.toLocalDateTime(), + transactionDate = LocalDateTime(state.value.date, state.value.time), note = state.value.incomeNote.ifBlank { null } ) ) @@ -418,7 +432,7 @@ class AddTransactionViewModel( title = it.title, amount = it.amount ?: 0.0, categoryId = it.categoryId ?: "", - transactionDate = state.value.date.toLocalDateTime(), + transactionDate = LocalDateTime(state.value.date, state.value.time), note = it.note.ifBlank { null } ) } diff --git a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/editTransactionBottomSheet/EditTransactionBottomSheet.kt b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/editTransactionBottomSheet/EditTransactionBottomSheet.kt index db3237db..f7d68f3f 100644 --- a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/editTransactionBottomSheet/EditTransactionBottomSheet.kt +++ b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/editTransactionBottomSheet/EditTransactionBottomSheet.kt @@ -2,6 +2,7 @@ package com.spendoo.categories.presentation.screen.editTransactionBottomSheet import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size @@ -20,6 +21,7 @@ import com.spendoo.designsystem.components.button.AppButton import com.spendoo.designsystem.components.button.AppButtonState import com.spendoo.designsystem.components.button.AppButtonType import com.spendoo.designsystem.components.dialog.DatePicker +import com.spendoo.designsystem.components.dialog.TimePicker import com.spendoo.designsystem.components.icon.Icon import com.spendoo.designsystem.components.sheet.BottomSheet import com.spendoo.designsystem.components.textField.CustomTextField @@ -38,9 +40,11 @@ import spendoo.designsystem.generated.resources.amount import spendoo.designsystem.generated.resources.choose_category import spendoo.designsystem.generated.resources.enter_your_date import spendoo.designsystem.generated.resources.ic_arrow_down +import spendoo.designsystem.generated.resources.ic_clock_red import spendoo.designsystem.generated.resources.ic_date import spendoo.designsystem.generated.resources.note_optional import spendoo.designsystem.generated.resources.save +import spendoo.designsystem.generated.resources.time_label import spendoo.designsystem.generated.resources.title @Composable @@ -112,24 +116,47 @@ fun EditTransactionBottomSheet( ) } - CustomTextField( - value = state.date.format(), - onValueChange = { }, - hint = stringResource(Res.string.enter_your_date), - enabled = false, - modifier = Modifier - .fillMaxWidth() - .clickableNoRipple { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + CustomTextField( + value = state.date.format(), + onValueChange = { }, + hint = stringResource(Res.string.enter_your_date), + enabled = false, + modifier = Modifier + .weight(1f) + .clickableNoRipple { + focusManager.clearFocus() + viewModel.onDatePickerRequested() + }, + onTrailingIconClick = { focusManager.clearFocus() viewModel.onDatePickerRequested() }, - onTrailingIconClick = { - focusManager.clearFocus() - viewModel.onDatePickerRequested() - }, - trailingIcon = Res.drawable.ic_date.painter(), - trailingIconColor = Theme.colorScheme.text.label - ) + trailingIcon = Res.drawable.ic_date.painter(), + trailingIconColor = Theme.colorScheme.text.label + ) + CustomTextField( + value = state.time.format(), + onValueChange = { }, + hint = stringResource(Res.string.time_label), + enabled = false, + modifier = Modifier + .weight(1f) + .clickableNoRipple { + focusManager.clearFocus() + viewModel.onTimePickerRequested() + }, + onTrailingIconClick = { + focusManager.clearFocus() + viewModel.onTimePickerRequested() + }, + trailingIcon = Res.drawable.ic_clock_red.painter(), + trailingIconColor = Theme.colorScheme.text.label + ) + } CustomTextField( modifier = Modifier.fillMaxWidth(), value = state.note, @@ -160,4 +187,11 @@ fun EditTransactionBottomSheet( onDateSelected = viewModel::onDateSelected, selectedDate = state.date ) + + TimePicker( + showDialog = state.showTimePicker, + onDismiss = viewModel::onTimePickerDismissed, + onTimeSelected = viewModel::onTimeSelected, + selectedTime = state.time + ) } diff --git a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/editTransactionBottomSheet/EditTransactionInteractionListener.kt b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/editTransactionBottomSheet/EditTransactionInteractionListener.kt index d2486923..ed3a68b9 100644 --- a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/editTransactionBottomSheet/EditTransactionInteractionListener.kt +++ b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/editTransactionBottomSheet/EditTransactionInteractionListener.kt @@ -11,6 +11,9 @@ interface EditTransactionInteractionListener { fun onDateSelected(date: LocalDate) fun onDatePickerRequested() fun onDatePickerDismissed() + fun onTimeSelected(time: kotlinx.datetime.LocalTime) + fun onTimePickerRequested() + fun onTimePickerDismissed() fun onCategoryFieldClicked() fun onCategorySelected(category: CategoryItemUiState) fun onCategorySheetDismissed() diff --git a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/editTransactionBottomSheet/EditTransactionUiState.kt b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/editTransactionBottomSheet/EditTransactionUiState.kt index 2589beee..a530dd1a 100644 --- a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/editTransactionBottomSheet/EditTransactionUiState.kt +++ b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/editTransactionBottomSheet/EditTransactionUiState.kt @@ -4,7 +4,9 @@ import com.spendoo.categories.domain.entity.transaction.TransactionType import com.spendoo.designsystem.utils.UiText import com.spendoo.shared.domain.entity.CategoryIcon import com.spendoo.shared.domain.utils.getToday +import com.spendoo.shared.domain.utils.getNow import kotlinx.datetime.LocalDate +import kotlinx.datetime.LocalTime data class EditTransactionUiState( val transactionId: String = "", @@ -13,12 +15,14 @@ data class EditTransactionUiState( val amount: Double? = null, val note: String = "", val date: LocalDate = getToday(), + val time: LocalTime = getNow().time, val categoryId: String? = null, val categoryName: String = "", val categoryIcon: CategoryIcon? = null, val isSaving: Boolean = false, val isLoading: Boolean = true, val showDatePicker: Boolean = false, + val showTimePicker: Boolean = false, val showCategorySheet: Boolean = false, val titleError: UiText? = null, val amountError: UiText? = null, diff --git a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/editTransactionBottomSheet/EditTransactionViewModel.kt b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/editTransactionBottomSheet/EditTransactionViewModel.kt index 7ff58968..6b00f413 100644 --- a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/editTransactionBottomSheet/EditTransactionViewModel.kt +++ b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/editTransactionBottomSheet/EditTransactionViewModel.kt @@ -10,6 +10,8 @@ import com.spendoo.shared.domain.utils.toCleanDoubleOrNull import com.spendoo.shared.domain.utils.toLocalDateTime import com.spendoo.shared.domain.utils.toUtcInstant import kotlinx.datetime.LocalDate +import kotlinx.datetime.LocalTime +import kotlinx.datetime.LocalDateTime import spendoo.designsystem.generated.resources.Res import spendoo.designsystem.generated.resources.an_error_occurred import spendoo.designsystem.generated.resources.enter_a_title @@ -43,6 +45,7 @@ class EditTransactionViewModel( amount = transaction.amount.absoluteValue, note = transaction.note ?: "", date = transaction.date.date, + time = transaction.date.time, categoryId = transaction.category?.categoryId, categoryName = transaction.category?.categoryName ?: "", categoryIcon = transaction.category?.categoryIcon, @@ -85,6 +88,18 @@ class EditTransactionViewModel( updateState { it.copy(showDatePicker = false) } } + override fun onTimeSelected(time: LocalTime) { + updateState { it.copy(time = time, showTimePicker = false) } + } + + override fun onTimePickerRequested() { + updateState { it.copy(showTimePicker = true) } + } + + override fun onTimePickerDismissed() { + updateState { it.copy(showTimePicker = false) } + } + override fun onCategoryFieldClicked() { updateState { it.copy(showCategorySheet = true) } } @@ -152,7 +167,7 @@ class EditTransactionViewModel( val amountValue = state.value.amount ?: 0.0 val request = UpdateTransaction( title = state.value.title, - transactionDate = state.value.date.toLocalDateTime().toUtcInstant().toString(), + transactionDate = LocalDateTime(state.value.date, state.value.time).toUtcInstant().toString(), note = state.value.note.takeIf { it.isNotBlank() }, amount = amountValue, categoryId = state.value.categoryId diff --git a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/scheduledPaymentDetails/ScheduledPaymentDetailsUiState.kt b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/scheduledPaymentDetails/ScheduledPaymentDetailsUiState.kt index cb9a7dda..d25dd420 100644 --- a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/scheduledPaymentDetails/ScheduledPaymentDetailsUiState.kt +++ b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/scheduledPaymentDetails/ScheduledPaymentDetailsUiState.kt @@ -5,8 +5,10 @@ import com.spendoo.categories.domain.entity.scheduledPayment.PaymentFrequency import com.spendoo.categories.domain.entity.scheduledPayment.ReminderUnit import com.spendoo.categories.presentation.screen.addScheduledPaymentBottomSheet.AddScheduledPaymentUiState import com.spendoo.shared.domain.utils.getToday +import com.spendoo.shared.domain.utils.getNow import com.spendoo.designsystem.utils.UiText import kotlinx.datetime.LocalDate +import kotlinx.datetime.LocalDateTime data class ScheduledPaymentDetailsUiState( val isLoading: Boolean = true, @@ -16,7 +18,7 @@ data class ScheduledPaymentDetailsUiState( val amount: String = "", val categoryId: String = "", val categoryIcon: CategoryIcon = CategoryIcon.DEFAULT, - val startDate: LocalDate = getToday(), + val startDate: LocalDateTime = getNow(), val frequency: PaymentFrequency = PaymentFrequency.DAILY, val customFrequencyDays: Int? = null, val reminderPeriod: Int = 0, diff --git a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/scheduledPayments/ScheduledPaymentsUiState.kt b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/scheduledPayments/ScheduledPaymentsUiState.kt index a729c4f3..31afbeea 100644 --- a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/scheduledPayments/ScheduledPaymentsUiState.kt +++ b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/scheduledPayments/ScheduledPaymentsUiState.kt @@ -7,7 +7,9 @@ import com.spendoo.categories.presentation.screen.addScheduledPaymentBottomSheet import com.spendoo.categories.domain.entity.scheduledPayment.PaymentFrequency import com.spendoo.categories.domain.entity.scheduledPayment.ReminderUnit import com.spendoo.shared.domain.utils.getToday +import com.spendoo.shared.domain.utils.getNow import kotlinx.datetime.LocalDate +import kotlinx.datetime.LocalDateTime import com.spendoo.designsystem.utils.UiText data class ScheduledPaymentsUiState( @@ -32,7 +34,7 @@ data class ScheduledPaymentUiState( val leftOverOption: LeftOverOption = LeftOverOption.MOVE_TO_SAVINGS, val timeLeft: UiText = UiText.DynamicString(""), val isDueSoon: Boolean = false, - val startDate: LocalDate = getToday(), + val startDate: LocalDateTime = getNow(), val categoryId: String = "", val frequency: PaymentFrequency = PaymentFrequency.DAILY, val customFrequencyDays: String = "", diff --git a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/scheduledPayments/ScheduledPaymentsViewModel.kt b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/scheduledPayments/ScheduledPaymentsViewModel.kt index e9f884aa..731fc44d 100644 --- a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/scheduledPayments/ScheduledPaymentsViewModel.kt +++ b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/scheduledPayments/ScheduledPaymentsViewModel.kt @@ -10,10 +10,8 @@ import com.spendoo.designsystem.utils.UiText import com.spendoo.designsystem.utils.extentions.toTimeLeftText import com.spendoo.shared.domain.utils.getNow import kotlinx.coroutines.launch -import kotlin.time.Clock import kotlin.time.ExperimentalTime import kotlinx.datetime.TimeZone -import kotlinx.datetime.toLocalDateTime import kotlinx.datetime.toInstant import spendoo.designsystem.generated.resources.Res import spendoo.designsystem.generated.resources.an_error_occurred diff --git a/designSystem/src/commonMain/composeResources/values-ar/strings.xml b/designSystem/src/commonMain/composeResources/values-ar/strings.xml index d19066ce..11c1d53b 100644 --- a/designSystem/src/commonMain/composeResources/values-ar/strings.xml +++ b/designSystem/src/commonMain/composeResources/values-ar/strings.xml @@ -374,5 +374,6 @@ سلسلة تسجيل الدخول سلسلة المعاملات الفئات + اختر الوقت diff --git a/designSystem/src/commonMain/composeResources/values/strings.xml b/designSystem/src/commonMain/composeResources/values/strings.xml index f8bfcff8..76f9261b 100644 --- a/designSystem/src/commonMain/composeResources/values/strings.xml +++ b/designSystem/src/commonMain/composeResources/values/strings.xml @@ -374,4 +374,5 @@ Login Streak Transaction Streak Categories + Select Time diff --git a/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/components/dialog/DatePicker.kt b/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/components/dialog/DatePicker.kt index 93f66eb5..eac8cd44 100644 --- a/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/components/dialog/DatePicker.kt +++ b/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/components/dialog/DatePicker.kt @@ -13,6 +13,8 @@ import androidx.compose.material3.rememberDatePickerState import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.graphics.Color +import androidx.compose.ui.tooling.preview.AndroidUiModes.UI_MODE_NIGHT_YES +import androidx.compose.ui.tooling.preview.AndroidUiModes.UI_MODE_TYPE_NORMAL import androidx.compose.ui.tooling.preview.Preview import com.spendoo.designsystem.theme.theme.SpendooTheme import com.spendoo.designsystem.theme.theme.Theme @@ -34,7 +36,7 @@ fun DatePicker( dismissText: String = stringResource(Res.string.cancel), containerColor: Color = Theme.colorScheme.background.tertiary, contentColor: Color = Theme.colorScheme.text.body, - brandColor: Color = Theme.colorScheme.brand.primary, + brandColor: Color = Theme.colorScheme.icon.primary, errorColor: Color = Theme.colorScheme.additional.onError, ) { if (showDialog) { @@ -129,8 +131,8 @@ fun DatePicker( } @Composable -@Preview -fun DatePickerDialogPreview() = SpendooTheme { +@Preview(widthDp = 360, heightDp = 640, name = "Dark", uiMode = UI_MODE_NIGHT_YES or UI_MODE_TYPE_NORMAL) +fun DatePickerDialogPreview() = SpendooTheme(darkTheme = true) { DatePicker( showDialog = true, selectedDate = LocalDate(2026, 1, 7), diff --git a/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/components/dialog/TimePicker.kt b/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/components/dialog/TimePicker.kt new file mode 100644 index 00000000..4ebf9fc5 --- /dev/null +++ b/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/components/dialog/TimePicker.kt @@ -0,0 +1,141 @@ +package com.spendoo.designsystem.components.dialog + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.IntrinsicSize +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.TimePicker +import androidx.compose.material3.TimePickerDefaults +import androidx.compose.material3.rememberTimePickerState +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.tooling.preview.AndroidUiModes.UI_MODE_NIGHT_YES +import androidx.compose.ui.tooling.preview.AndroidUiModes.UI_MODE_TYPE_NORMAL +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.Dialog +import androidx.compose.ui.window.DialogProperties +import com.spendoo.designsystem.theme.theme.SpendooTheme +import com.spendoo.designsystem.theme.theme.Theme +import kotlinx.datetime.LocalTime +import org.jetbrains.compose.resources.stringResource +import spendoo.designsystem.generated.resources.Res +import spendoo.designsystem.generated.resources.cancel +import spendoo.designsystem.generated.resources.ok +import spendoo.designsystem.generated.resources.select_time + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun TimePicker( + showDialog: Boolean, + selectedTime: LocalTime?, + onTimeSelected: (LocalTime) -> Unit, + onDismiss: () -> Unit, + confirmText: String = stringResource(Res.string.ok), + dismissText: String = stringResource(Res.string.cancel), + containerColor: Color = Theme.colorScheme.background.tertiary, + contentColor: Color = Theme.colorScheme.text.body, + brandColor: Color = Theme.colorScheme.icon.primary, +) { + if (showDialog) { + val initialTime = selectedTime ?: LocalTime(12, 0) + val timePickerState = rememberTimePickerState( + initialHour = initialTime.hour, + initialMinute = initialTime.minute, + is24Hour = false + ) + + Dialog( + onDismissRequest = onDismiss, + properties = DialogProperties(usePlatformDefaultWidth = false) + ) { + Surface( + shape = RoundedCornerShape(20.dp), + color = containerColor, + modifier = Modifier + .width(IntrinsicSize.Min) + .padding(24.dp) + ) { + Column( + modifier = Modifier.padding(24.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + text = stringResource(Res.string.select_time), + style = Theme.typography.label.medium.medium, + color = Theme.colorScheme.text.title, + modifier = Modifier + .fillMaxWidth() + .padding(bottom = 20.dp) + ) + + TimePicker( + state = timePickerState, + colors = TimePickerDefaults.colors( + clockDialColor = Theme.colorScheme.background.secondary, + clockDialSelectedContentColor = Theme.colorScheme.text.title, + clockDialUnselectedContentColor = Theme.colorScheme.text.body, + selectorColor = brandColor, + periodSelectorBorderColor = Theme.colorScheme.border.secondary, + periodSelectorSelectedContainerColor = brandColor, + periodSelectorUnselectedContainerColor = Color.Transparent, + periodSelectorSelectedContentColor = Theme.colorScheme.text.title, + periodSelectorUnselectedContentColor = Theme.colorScheme.text.body, + timeSelectorSelectedContainerColor = brandColor.copy(alpha = 0.2f), + timeSelectorUnselectedContainerColor = Theme.colorScheme.background.secondary, + timeSelectorSelectedContentColor = brandColor, + timeSelectorUnselectedContentColor = Theme.colorScheme.text.body + ) + ) + + Spacer(modifier = Modifier.height(16.dp)) + + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + Spacer(modifier = Modifier.weight(1f)) + TextButton( + colors = ButtonDefaults.textButtonColors(contentColor = contentColor), + onClick = onDismiss + ) { + Text(dismissText, style = Theme.typography.label.medium.small) + } + Spacer(modifier = Modifier.width(8.dp)) + TextButton( + colors = ButtonDefaults.textButtonColors(contentColor = contentColor), + onClick = { + onTimeSelected(LocalTime(timePickerState.hour, timePickerState.minute)) + } + ) { + Text(confirmText, style = Theme.typography.label.medium.small) + } + } + } + } + } + } +} + +@Composable +@Preview(widthDp = 360, heightDp = 640, name = "Dark", uiMode = UI_MODE_NIGHT_YES or UI_MODE_TYPE_NORMAL) +private fun TimePickerDialogPreview() = SpendooTheme(darkTheme = true) { + TimePicker( + showDialog = true, + selectedTime = LocalTime(12, 30), + onTimeSelected = {}, + onDismiss = {} + ) +} diff --git a/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/components/sheet/BottomSheet.kt b/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/components/sheet/BottomSheet.kt index 8d8e79de..1a176719 100644 --- a/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/components/sheet/BottomSheet.kt +++ b/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/components/sheet/BottomSheet.kt @@ -4,6 +4,7 @@ import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding @@ -71,6 +72,7 @@ fun BottomSheet( onDismiss() } }, + contentWindowInsets = { WindowInsets(0.dp) }, sheetState = sheetState, containerColor = containerColor, scrimColor = scrimColor, diff --git a/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/utils/extentions/format.kt b/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/utils/extentions/format.kt index 09b0e0ff..b69fc9ea 100644 --- a/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/utils/extentions/format.kt +++ b/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/utils/extentions/format.kt @@ -1,6 +1,7 @@ package com.spendoo.designsystem.utils.extentions import kotlinx.datetime.LocalDate +import kotlinx.datetime.LocalTime import kotlinx.datetime.number fun LocalDate?.format() = this?.let { @@ -9,3 +10,9 @@ fun LocalDate?.format() = this?.let { val year = it.year.toString().padStart(4, '0') "$day/$month/$year" }.orEmpty() + +fun LocalTime?.format() = this?.let { + val hour = it.hour.toString().padStart(2, '0') + val minute = it.minute.toString().padStart(2, '0') + "$hour:$minute" +}.orEmpty() From 702f532cf8a8177082962c0f602336e3fa8da649 Mon Sep 17 00:00:00 2001 From: Joseph Sameh <20220099@stud.fci-cu.edu.eg> Date: Tue, 7 Jul 2026 02:08:53 +0300 Subject: [PATCH 2/4] Add profile logout and action execution Adds logout and profile navigation from the profile and statistics screens, and wires financial action execution into the alert sheet with loading state and error handling. Also updates theme language detection for locale codes like `en-US` and introduces the alert/logout/win icons and related copy. --- .../FinancialActionInteractionListener.kt | 1 + .../FinancialActionScreen.kt | 7 ++-- .../FinancialActionUiState.kt | 5 ++- .../FinancialActionViewModel.kt | 33 +++++++++++++++++- .../drawable-hdpi/img_alert.png | Bin 0 -> 18997 bytes .../drawable-xhdpi/img_alert.png | Bin 0 -> 29538 bytes .../drawable-xxhdpi/img_alert.png | Bin 0 -> 54899 bytes .../drawable-xxxhdpi/img_alert.png | Bin 0 -> 87288 bytes .../composeResources/drawable/ic_logout.xml | 9 +++++ .../composeResources/drawable/ic_win_cup.xml | 17 +++++++++ .../composeResources/drawable/img_alert.png | Bin 0 -> 10372 bytes .../composeResources/values-ar/strings.xml | 1 + .../composeResources/values/strings.xml | 1 + .../components/dialog/AppAlert.kt | 9 ++++- .../designsystem/theme/theme/SpendooTheme.kt | 2 +- .../profile/ProfileInteractionListener.kt | 2 ++ .../screen/profile/ProfileScreen.kt | 2 ++ .../screen/profile/ProfileViewModel.kt | 15 ++++++++ .../profile/components/FollowingSection.kt | 2 +- .../profile/components/ProfileSettingsList.kt | 12 +++++-- .../profile/components/UserAvatarChip.kt | 7 ++-- .../src/commonMain/kotlin/com/spendoo/App.kt | 9 ++++- .../StatisticsInteractionListener.kt | 1 + .../screen/statistics/StatisticsScreen.kt | 5 ++- .../screen/statistics/StatisticsViewModel.kt | 5 +++ .../components/StatisticsChartsContent.kt | 1 + 26 files changed, 132 insertions(+), 14 deletions(-) create mode 100644 designSystem/src/commonMain/composeResources/drawable-hdpi/img_alert.png create mode 100644 designSystem/src/commonMain/composeResources/drawable-xhdpi/img_alert.png create mode 100644 designSystem/src/commonMain/composeResources/drawable-xxhdpi/img_alert.png create mode 100644 designSystem/src/commonMain/composeResources/drawable-xxxhdpi/img_alert.png create mode 100644 designSystem/src/commonMain/composeResources/drawable/ic_logout.xml create mode 100644 designSystem/src/commonMain/composeResources/drawable/ic_win_cup.xml create mode 100644 designSystem/src/commonMain/composeResources/drawable/img_alert.png diff --git a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/financialActionScreen/FinancialActionInteractionListener.kt b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/financialActionScreen/FinancialActionInteractionListener.kt index e3543257..44954bef 100644 --- a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/financialActionScreen/FinancialActionInteractionListener.kt +++ b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/financialActionScreen/FinancialActionInteractionListener.kt @@ -2,4 +2,5 @@ package com.spendoo.categories.presentation.screen.financialActionScreen interface FinancialActionInteractionListener { fun onDismiss() + fun onExecute() } \ No newline at end of file diff --git a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/financialActionScreen/FinancialActionScreen.kt b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/financialActionScreen/FinancialActionScreen.kt index 941b0c78..0b771b32 100644 --- a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/financialActionScreen/FinancialActionScreen.kt +++ b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/financialActionScreen/FinancialActionScreen.kt @@ -15,7 +15,7 @@ import org.koin.compose.viewmodel.koinViewModel import org.koin.core.parameter.parametersOf import spendoo.designsystem.generated.resources.Res import spendoo.designsystem.generated.resources.cancel -import spendoo.designsystem.generated.resources.ic_cancel +import spendoo.designsystem.generated.resources.img_alert import spendoo.designsystem.generated.resources.ok @Composable @@ -50,13 +50,14 @@ fun FinancialActionBottomSheetContent( AppAlertContent( modifier = Modifier .fillMaxWidth(), - iconRes = Res.drawable.ic_cancel, + iconRes = Res.drawable.img_alert, title = state.tile, minWidth = Dp.Unspecified, shape = RectangleShape, + buttonState = state.buttonState, description = state.body, actionText = Res.string.ok.asString(), - onActionClick = {}, + onActionClick = interactionListener::onExecute, dismissText = Res.string.cancel.asString(), onDismissRequest = interactionListener::onDismiss ) diff --git a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/financialActionScreen/FinancialActionUiState.kt b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/financialActionScreen/FinancialActionUiState.kt index dfd0e40d..b95bdfba 100644 --- a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/financialActionScreen/FinancialActionUiState.kt +++ b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/financialActionScreen/FinancialActionUiState.kt @@ -1,7 +1,10 @@ package com.spendoo.categories.presentation.screen.financialActionScreen +import com.spendoo.designsystem.components.button.AppButtonState + data class FinancialActionUiState( val tile: String = "", val body: String = "", - val payload: Map = emptyMap() + val payload: Map = emptyMap(), + val buttonState: AppButtonState = AppButtonState.Enabled ) \ No newline at end of file diff --git a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/financialActionScreen/FinancialActionViewModel.kt b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/financialActionScreen/FinancialActionViewModel.kt index e459fd03..04c86819 100644 --- a/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/financialActionScreen/FinancialActionViewModel.kt +++ b/categoriesPresentation/src/commonMain/kotlin/com/spendoo/categories/presentation/screen/financialActionScreen/FinancialActionViewModel.kt @@ -1,11 +1,18 @@ package com.spendoo.categories.presentation.screen.financialActionScreen +import com.spendoo.categories.domain.repository.BudgetActionRepository +import com.spendoo.designsystem.components.button.AppButtonState import com.spendoo.designsystem.navigation.BaseViewModel +import com.spendoo.designsystem.utils.UiText +import spendoo.designsystem.generated.resources.Res +import spendoo.designsystem.generated.resources.an_error_occurred +import spendoo.designsystem.generated.resources.unknown_error class FinancialActionViewModel( private val navTile: String, private val navBody: String, - private val navPayload: Map + private val navPayload: Map, + private val budgetActionRepository: BudgetActionRepository ) : BaseViewModel(FinancialActionUiState()), FinancialActionInteractionListener { @@ -22,4 +29,28 @@ class FinancialActionViewModel( override fun onDismiss() { popBackStack() } + + override fun onExecute() { + val actionId = navPayload["actionId"] ?: return + tryToCall( + onStart = { + updateState { copy(buttonState = AppButtonState.Loading) } + }, + block = { budgetActionRepository.executeProposedAction(actionId) }, + onSuccess = { + popBackStack() + }, + onError = { throwable -> + showSnackBar( + title = UiText.StringRes(Res.string.an_error_occurred), + message = throwable.message?.let { msg -> UiText.DynamicString(msg) } + ?: UiText.StringRes(Res.string.unknown_error), + isSuccess = false + ) + }, + onEnd = { + updateState { copy(buttonState = AppButtonState.Enabled) } + } + ) + } } diff --git a/designSystem/src/commonMain/composeResources/drawable-hdpi/img_alert.png b/designSystem/src/commonMain/composeResources/drawable-hdpi/img_alert.png new file mode 100644 index 0000000000000000000000000000000000000000..51e1628bb0bef89a8c3755783c7991615db3ce1c GIT binary patch literal 18997 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±;^J90v1_lO0hb%KeEAO!;7(5i#`|{28e_9av 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 literal 0 HcmV?d00001 diff --git a/designSystem/src/commonMain/composeResources/drawable-xhdpi/img_alert.png b/designSystem/src/commonMain/composeResources/drawable-xhdpi/img_alert.png new file mode 100644 index 0000000000000000000000000000000000000000..356a6b48f8c97a018fff535adb9c98ec413da5ba GIT binary patch literal 29538 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 literal 0 HcmV?d00001 diff --git a/designSystem/src/commonMain/composeResources/drawable-xxhdpi/img_alert.png b/designSystem/src/commonMain/composeResources/drawable-xxhdpi/img_alert.png new file mode 100644 index 0000000000000000000000000000000000000000..aa6fd17afb12157824c977d1fd42c5abc0c22508 GIT binary patch literal 54899 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 literal 0 HcmV?d00001 diff --git a/designSystem/src/commonMain/composeResources/drawable/ic_logout.xml b/designSystem/src/commonMain/composeResources/drawable/ic_logout.xml new file mode 100644 index 00000000..a70eeb21 --- /dev/null +++ b/designSystem/src/commonMain/composeResources/drawable/ic_logout.xml @@ -0,0 +1,9 @@ + + + diff --git a/designSystem/src/commonMain/composeResources/drawable/ic_win_cup.xml b/designSystem/src/commonMain/composeResources/drawable/ic_win_cup.xml new file mode 100644 index 00000000..d8bd7ead --- /dev/null +++ b/designSystem/src/commonMain/composeResources/drawable/ic_win_cup.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/designSystem/src/commonMain/composeResources/drawable/img_alert.png b/designSystem/src/commonMain/composeResources/drawable/img_alert.png new file mode 100644 index 0000000000000000000000000000000000000000..466c10a3053978c63fc22ebe93d6431ed7d5f7f5 GIT binary patch literal 10372 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 im%j9+FMavvF8>#>A$nz`_-;}F0000سلسلة المعاملات الفئات اختر الوقت + تسجيل الخروج diff --git a/designSystem/src/commonMain/composeResources/values/strings.xml b/designSystem/src/commonMain/composeResources/values/strings.xml index 76f9261b..9c8dcdf1 100644 --- a/designSystem/src/commonMain/composeResources/values/strings.xml +++ b/designSystem/src/commonMain/composeResources/values/strings.xml @@ -375,4 +375,5 @@ Transaction Streak Categories Select Time + Logout diff --git a/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/components/dialog/AppAlert.kt b/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/components/dialog/AppAlert.kt index 9b7b2c93..e9e71e18 100644 --- a/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/components/dialog/AppAlert.kt +++ b/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/components/dialog/AppAlert.kt @@ -7,6 +7,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width @@ -28,6 +29,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.window.DialogProperties import com.spendoo.designsystem.components.appBar.SpendooIconButton import com.spendoo.designsystem.components.button.AppButton +import com.spendoo.designsystem.components.button.AppButtonState import com.spendoo.designsystem.components.button.AppButtonType import com.spendoo.designsystem.components.text.Text import com.spendoo.designsystem.theme.theme.Theme @@ -82,6 +84,7 @@ fun AppAlertContent( actionText: String, onActionClick: () -> Unit, dismissText: String, + buttonState: AppButtonState = AppButtonState.Enabled, minWidth: Dp = 328.dp, shape: Shape = RoundedCornerShape(20.dp), onDismissRequest: () -> Unit, @@ -91,6 +94,7 @@ fun AppAlertContent( .width(minWidth) .clip(shape) .background(Theme.colorScheme.background.tertiary) + .navigationBarsPadding() .padding(vertical = 16.dp) ) { LazyColumn( @@ -124,6 +128,7 @@ fun AppAlertContent( iconRes = iconRes, description = description, actionText = actionText, + buttonState = buttonState, onActionClick = onActionClick, dismissText = dismissText, onDismissRequest = onDismissRequest @@ -139,7 +144,8 @@ private fun LazyListScope.bodySection( actionText: String, onActionClick: () -> Unit, dismissText: String, - onDismissRequest: () -> Unit + onDismissRequest: () -> Unit, + buttonState: AppButtonState ) { item { Image( @@ -168,6 +174,7 @@ private fun LazyListScope.bodySection( AppButton( type = AppButtonType.Primary, onClick = onActionClick, + state = buttonState, text = actionText, modifier = Modifier.fillMaxWidth() ) diff --git a/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/theme/theme/SpendooTheme.kt b/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/theme/theme/SpendooTheme.kt index 6717a846..2a981a79 100644 --- a/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/theme/theme/SpendooTheme.kt +++ b/designSystem/src/commonMain/kotlin/com/spendoo/designsystem/theme/theme/SpendooTheme.kt @@ -29,7 +29,7 @@ fun SpendooTheme( val typography = createThemeTypography() val layoutDirection = remember(language) { - if (language == AppLanguage.English.iso) LayoutDirection.Ltr else LayoutDirection.Rtl + if (language.lowercase().startsWith("en") || language == AppLanguage.English.iso) LayoutDirection.Ltr else LayoutDirection.Rtl } CompositionLocalProvider( diff --git a/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/ProfileInteractionListener.kt b/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/ProfileInteractionListener.kt index 6a977aa0..0d991541 100644 --- a/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/ProfileInteractionListener.kt +++ b/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/ProfileInteractionListener.kt @@ -20,4 +20,6 @@ interface ProfileInteractionListener { fun onDismissLanguageBottomSheet() fun onToggleTheme(isDark: Boolean) fun onReload() + fun onClickLogout() + fun onClickUser(userId: String, userName: String, imageUrl: String?) } diff --git a/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/ProfileScreen.kt b/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/ProfileScreen.kt index 2c1a38b8..175124f0 100644 --- a/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/ProfileScreen.kt +++ b/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/ProfileScreen.kt @@ -159,6 +159,8 @@ private fun ProfileScreenPreview() { override fun onDismissLanguageBottomSheet() {} override fun onToggleTheme(isDark: Boolean) {} override fun onReload() {} + override fun onClickLogout() {} + override fun onClickUser(userId: String, userName: String, imageUrl: String?) {} } ) } diff --git a/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/ProfileViewModel.kt b/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/ProfileViewModel.kt index 6ff856c3..ad63b396 100644 --- a/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/ProfileViewModel.kt +++ b/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/ProfileViewModel.kt @@ -9,6 +9,7 @@ import com.spendoo.home.api.NotificationsRoute import com.spendoo.identity.api.EditProfileRoute import com.spendoo.identity.api.FollowersRoute import com.spendoo.identity.api.FollowingRoute +import com.spendoo.identity.domain.repository.AuthenticationRepository import com.spendoo.identity.domain.repository.FollowCodeRepository import com.spendoo.identity.domain.repository.FollowRepository import com.spendoo.identity.domain.repository.ProfileRepository @@ -16,6 +17,7 @@ import com.spendoo.identity.domain.repository.SettingsRepository import com.spendoo.identity.domain.util.AppLanguage import com.spendoo.identity.domain.util.AppTheme import com.spendoo.shared.domain.utils.PageQuery +import com.spendoo.statistics.api.StatisticsRoute import spendoo.designsystem.generated.resources.Res import spendoo.designsystem.generated.resources.an_error_occurred import spendoo.designsystem.generated.resources.copied @@ -26,6 +28,7 @@ class ProfileViewModel( private val followRepository: FollowRepository, private val followCodeRepository: FollowCodeRepository, private val settingsRepository: SettingsRepository, + private val authenticationRepository: AuthenticationRepository, ) : BaseViewModel(ProfileUiState()), ProfileInteractionListener { init { @@ -180,4 +183,16 @@ class ProfileViewModel( onError = { handleError(it) } ) } + + override fun onClickLogout() { + tryToCall( + block = { authenticationRepository.logout() }, + onSuccess = {}, + onError = { handleError(it) } + ) + } + + override fun onClickUser(userId: String, userName: String, imageUrl: String?) { + navigate(StatisticsRoute(userId = userId, userName = userName, userImageUrl = imageUrl)) + } } diff --git a/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/components/FollowingSection.kt b/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/components/FollowingSection.kt index d10842ed..420a7300 100644 --- a/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/components/FollowingSection.kt +++ b/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/components/FollowingSection.kt @@ -94,7 +94,7 @@ fun FollowingSection( } items(state.followings) { user -> - UserAvatarChip(user = user) + UserAvatarChip(user = user, modifier = Modifier.clickableNoRipple { listener.onClickUser(user.userId, user.fullName, user.imageUrl) }) } } } diff --git a/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/components/ProfileSettingsList.kt b/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/components/ProfileSettingsList.kt index 0a600faa..c2b33298 100644 --- a/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/components/ProfileSettingsList.kt +++ b/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/components/ProfileSettingsList.kt @@ -31,11 +31,13 @@ import spendoo.designsystem.generated.resources.change_language import spendoo.designsystem.generated.resources.change_theme import spendoo.designsystem.generated.resources.ic_bell import spendoo.designsystem.generated.resources.ic_categories +import spendoo.designsystem.generated.resources.ic_logout import spendoo.designsystem.generated.resources.ic_mobile import spendoo.designsystem.generated.resources.ic_profile_details import spendoo.designsystem.generated.resources.ic_repeat import spendoo.designsystem.generated.resources.ic_stats -import spendoo.designsystem.generated.resources.img_coin +import spendoo.designsystem.generated.resources.ic_win_cup +import spendoo.designsystem.generated.resources.logout import spendoo.designsystem.generated.resources.notifications import spendoo.designsystem.generated.resources.profile_details import spendoo.designsystem.generated.resources.scheduled_payments @@ -64,7 +66,7 @@ fun ProfileSettingsList( onClickArrow = { listener.onClickScheduledPayments() } ) ProfileSettingItem( - icon = Res.drawable.img_coin, + icon = Res.drawable.ic_win_cup, title = stringResource(Res.string.achievements), onClickArrow = { listener.onClickAchievements() } ) @@ -117,5 +119,11 @@ fun ProfileSettingsList( onCheckedChange = { listener.onToggleTheme(!isDark) } ) } + + ProfileSettingItem( + icon = Res.drawable.ic_logout, + title = stringResource(Res.string.logout), + onClickArrow = { listener.onClickLogout() } + ) } } diff --git a/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/components/UserAvatarChip.kt b/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/components/UserAvatarChip.kt index 43d6de3c..a33a2345 100644 --- a/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/components/UserAvatarChip.kt +++ b/identityPresentation/src/commonMain/kotlin/com/spendoo/identity/presentation/screen/profile/components/UserAvatarChip.kt @@ -26,10 +26,13 @@ import spendoo.designsystem.generated.resources.Res import spendoo.designsystem.generated.resources.ic_profile_details @Composable -fun UserAvatarChip(user: UserSearch) { +fun UserAvatarChip( + user: UserSearch, + modifier: Modifier = Modifier +) { Column( horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier.width(70.dp) + modifier = modifier.width(70.dp) ) { if (!user.imageUrl.isNullOrBlank()) { AsyncImage( diff --git a/spendooApp/src/commonMain/kotlin/com/spendoo/App.kt b/spendooApp/src/commonMain/kotlin/com/spendoo/App.kt index 25d3f385..5ec3b1e8 100644 --- a/spendooApp/src/commonMain/kotlin/com/spendoo/App.kt +++ b/spendooApp/src/commonMain/kotlin/com/spendoo/App.kt @@ -18,6 +18,7 @@ import com.spendoo.designsystem.navigation.effector.Effector import com.spendoo.designsystem.theme.theme.SpendooTheme import com.spendoo.identity.domain.repository.AuthenticationRepository import com.spendoo.identity.domain.repository.SettingsRepository +import com.spendoo.identity.domain.util.AppLanguage import com.spendoo.identity.domain.util.AppLocalizer import com.spendoo.identity.domain.util.AppTheme import com.spendoo.util.SetSystemBarsAppearance @@ -81,8 +82,14 @@ fun App( }) } + val languageCode = if (currentLanguage == AppLanguage.DEFAULT) { + appLocalizer.getDeviceLanguageIso() + } else { + currentLanguage.iso + } + SpendooTheme( - language = currentLanguage.iso, + language = languageCode, darkTheme = isDarkTheme, content = { SetSystemBarsAppearance(currentTheme) diff --git a/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/StatisticsInteractionListener.kt b/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/StatisticsInteractionListener.kt index 354e57c0..c496f421 100644 --- a/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/StatisticsInteractionListener.kt +++ b/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/StatisticsInteractionListener.kt @@ -22,4 +22,5 @@ interface StatisticsInteractionListener { fun onEditTransaction(transactionId: String) fun onDeleteTransaction(transactionId: String) fun onTransactionClicked(transactionId: String) + fun onClickUserProfile() } diff --git a/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/StatisticsScreen.kt b/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/StatisticsScreen.kt index 3b1104c7..34abebe0 100644 --- a/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/StatisticsScreen.kt +++ b/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/StatisticsScreen.kt @@ -42,6 +42,7 @@ import com.spendoo.designsystem.components.appBar.SpendooIconButton import com.spendoo.designsystem.components.appBar.TopBar import com.spendoo.designsystem.components.general.AppSegmentedControl import com.spendoo.designsystem.components.indicator.PullToRefresh +import com.spendoo.designsystem.modifier.clickableNoRipple import com.spendoo.designsystem.theme.theme.SpendooTheme import com.spendoo.designsystem.theme.theme.Theme import com.spendoo.designsystem.utils.UiText @@ -157,6 +158,7 @@ private fun StatisticsContent( modifier = Modifier .padding(end = 12.dp) .size(50.dp) + .clickableNoRipple(enabled = state.userImageUrl != null) { listener.onClickUserProfile() } .clip(CircleShape) .border(0.5.dp, Theme.colorScheme.button.secondary, CircleShape), contentScale = ContentScale.Crop @@ -293,7 +295,6 @@ private fun StatisticsContentTransactionsPreview() { override fun onClickBack() {} override fun onDownloadReportClicked() {} override fun onFollowUserClicked() {} - override fun onOpenScheduledPayments() {} override fun onTabSelected(tab: StatisticsTab) {} override fun onGranularitySelected(granularity: Granularity) {} @@ -309,6 +310,7 @@ private fun StatisticsContentTransactionsPreview() { override fun onEditTransaction(transactionId: String) {} override fun onDeleteTransaction(transactionId: String) {} override fun onTransactionClicked(transactionId: String) {} + override fun onClickUserProfile() {} } ) } @@ -452,6 +454,7 @@ private fun StatisticsContentChartsPreview() { override fun onEditTransaction(transactionId: String) {} override fun onDeleteTransaction(transactionId: String) {} override fun onTransactionClicked(transactionId: String) {} + override fun onClickUserProfile() {} } ) } diff --git a/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/StatisticsViewModel.kt b/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/StatisticsViewModel.kt index 5e573eec..be59ea88 100644 --- a/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/StatisticsViewModel.kt +++ b/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/StatisticsViewModel.kt @@ -11,6 +11,7 @@ import com.spendoo.designsystem.navigation.BaseViewModel import com.spendoo.designsystem.utils.UiText import com.spendoo.designsystem.utils.toUiText import com.spendoo.identity.api.FollowingRoute +import com.spendoo.identity.api.ProfileRoute import com.spendoo.identity.domain.repository.ProfileRepository import com.spendoo.shared.domain.utils.PageQuery import com.spendoo.shared.domain.utils.getNow @@ -398,6 +399,10 @@ class StatisticsViewModel( navigate(TransactionDetailsRoute(transactionId)) } + override fun onClickUserProfile() { + navigate(ProfileRoute) + } + companion object { const val INITIAL_PAGE = 0 const val PAGE_SIZE = 20 diff --git a/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/components/StatisticsChartsContent.kt b/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/components/StatisticsChartsContent.kt index 75e1ea41..4199ec84 100644 --- a/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/components/StatisticsChartsContent.kt +++ b/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/components/StatisticsChartsContent.kt @@ -472,6 +472,7 @@ private fun StatisticsChartsContentPreview() { override fun onEditTransaction(transactionId: String) {} override fun onDeleteTransaction(transactionId: String) {} override fun onTransactionClicked(transactionId: String) {} + override fun onClickUserProfile() {} } ) } From 59731b9db9a6e1597a4ea983325b210f220f2886 Mon Sep 17 00:00:00 2001 From: Joseph Sameh <20220099@stud.fci-cu.edu.eg> Date: Tue, 7 Jul 2026 02:50:18 +0300 Subject: [PATCH 3/4] Handle payment required errors in statistics Introduces PaymentRequiredException as a typed exception for payment requirement errors. Updates BaseGateway to throw this exception when receiving 402 status. StatisticsViewModel now catches payment errors, resets granularity to WEEK, and retries loading statistics. Also adds custom timeout configuration (Long.MAX_VALUE) for PDF export requests to prevent premature timeouts on large files. --- .../composeResources/values-ar/strings.xml | 1 + .../composeResources/values/strings.xml | 1 + .../spendoo/shared/data/shared/BaseGateway.kt | 3 +- .../domain/exception/NetworkException.kt | 2 + .../repository/StatisticsRepositoryImpl.kt | 5 ++ .../screen/download/DownloadViewModel.kt | 72 +++++++++++++------ .../screen/statistics/StatisticsViewModel.kt | 33 ++++++--- 7 files changed, 86 insertions(+), 31 deletions(-) diff --git a/designSystem/src/commonMain/composeResources/values-ar/strings.xml b/designSystem/src/commonMain/composeResources/values-ar/strings.xml index 2ed06a69..5dc953bd 100644 --- a/designSystem/src/commonMain/composeResources/values-ar/strings.xml +++ b/designSystem/src/commonMain/composeResources/values-ar/strings.xml @@ -376,5 +376,6 @@ الفئات اختر الوقت تسجيل الخروج + مطلوب الدفع diff --git a/designSystem/src/commonMain/composeResources/values/strings.xml b/designSystem/src/commonMain/composeResources/values/strings.xml index 9c8dcdf1..8fa381ea 100644 --- a/designSystem/src/commonMain/composeResources/values/strings.xml +++ b/designSystem/src/commonMain/composeResources/values/strings.xml @@ -376,4 +376,5 @@ Categories Select Time Logout + Payment Required diff --git a/sharedData/src/commonMain/kotlin/com/spendoo/shared/data/shared/BaseGateway.kt b/sharedData/src/commonMain/kotlin/com/spendoo/shared/data/shared/BaseGateway.kt index 93a89528..1b3e79a6 100644 --- a/sharedData/src/commonMain/kotlin/com/spendoo/shared/data/shared/BaseGateway.kt +++ b/sharedData/src/commonMain/kotlin/com/spendoo/shared/data/shared/BaseGateway.kt @@ -5,6 +5,7 @@ import com.spendoo.shared.domain.exception.InternetException import com.spendoo.shared.domain.exception.InvalidCredentialsException import com.spendoo.shared.domain.exception.InvalidRequestException import com.spendoo.shared.domain.exception.NoNetworkException +import com.spendoo.shared.domain.exception.PaymentRequiredException import com.spendoo.shared.domain.exception.TooManyRequestsException import com.spendoo.shared.domain.exception.UnAuthorizedException import com.spendoo.shared.domain.exception.UnknownErrorException @@ -35,7 +36,7 @@ abstract class BaseGateway(val client: HttpClient): KoinComponent { when { status == HttpStatusCode.PaymentRequired -> { globalNavigationHandler.onPaymentRequiredError() - throw CancellationException(message = "Payment required.", cause = e) + throw CancellationException(message = "Payment required.", cause = PaymentRequiredException()) } status == HttpStatusCode.Unauthorized -> throw UnAuthorizedException() status == HttpStatusCode.NotFound -> throw InvalidCredentialsException() diff --git a/sharedDomain/src/commonMain/kotlin/com/spendoo/shared/domain/exception/NetworkException.kt b/sharedDomain/src/commonMain/kotlin/com/spendoo/shared/domain/exception/NetworkException.kt index 59843937..f692184e 100644 --- a/sharedDomain/src/commonMain/kotlin/com/spendoo/shared/domain/exception/NetworkException.kt +++ b/sharedDomain/src/commonMain/kotlin/com/spendoo/shared/domain/exception/NetworkException.kt @@ -21,3 +21,5 @@ open class InternetException(errorMessage: String = "") : AuthenticationExceptio } class UnknownErrorException(message: String) : AuthenticationException(message) + +class PaymentRequiredException : AuthenticationException("Payment required") \ No newline at end of file diff --git a/statisticsData/src/commonMain/kotlin/com/spendoo/statistics/data/repository/StatisticsRepositoryImpl.kt b/statisticsData/src/commonMain/kotlin/com/spendoo/statistics/data/repository/StatisticsRepositoryImpl.kt index aa053751..8f568570 100644 --- a/statisticsData/src/commonMain/kotlin/com/spendoo/statistics/data/repository/StatisticsRepositoryImpl.kt +++ b/statisticsData/src/commonMain/kotlin/com/spendoo/statistics/data/repository/StatisticsRepositoryImpl.kt @@ -12,6 +12,7 @@ import com.spendoo.statistics.domain.entity.Granularity import com.spendoo.statistics.domain.entity.ReportDataType import com.spendoo.statistics.domain.repository.StatisticsRepository import io.ktor.client.HttpClient +import io.ktor.client.plugins.timeout import io.ktor.client.request.get import kotlinx.datetime.LocalDateTime @@ -58,6 +59,10 @@ class StatisticsRepositoryImpl( ): ByteArray { val response = tryToExecute { get("/api/v1/statistics/pdf") { + timeout { //TODO: Check the enough timeout for large PDFs + requestTimeoutMillis = Long.MAX_VALUE + socketTimeoutMillis = Long.MAX_VALUE + } url { parameters.append("start_date", startDate.toUtcInstant().toString()) parameters.append("end_date", endDate.toUtcInstant().toString()) diff --git a/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/download/DownloadViewModel.kt b/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/download/DownloadViewModel.kt index 5263d691..fc45faa5 100644 --- a/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/download/DownloadViewModel.kt +++ b/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/download/DownloadViewModel.kt @@ -4,6 +4,7 @@ import com.spendoo.designsystem.navigation.BaseViewModel import com.spendoo.designsystem.utils.UiText import com.spendoo.identity.domain.repository.SettingsRepository import com.spendoo.identity.domain.util.AppTheme +import com.spendoo.shared.domain.exception.PaymentRequiredException import com.spendoo.statistics.domain.entity.DataToInclude import com.spendoo.statistics.domain.entity.ExportChoices import com.spendoo.statistics.domain.entity.Granularity @@ -18,6 +19,7 @@ import com.spendoo.statistics.presentation.screen.statistics.PieChartUiState import com.spendoo.statistics.presentation.screen.statistics.getBarXLabels import com.spendoo.statistics.presentation.screen.statistics.getDashedRanges import com.spendoo.statistics.presentation.screen.statistics.getXAxisLabels +import kotlinx.coroutines.CancellationException import kotlinx.datetime.DateTimeUnit import kotlinx.datetime.LocalDate import kotlinx.datetime.LocalDateTime @@ -30,6 +32,7 @@ import kotlinx.datetime.plus import kotlinx.datetime.toLocalDateTime import spendoo.designsystem.generated.resources.Res import spendoo.designsystem.generated.resources.an_error_occurred +import spendoo.designsystem.generated.resources.payment_required import kotlin.time.Clock class DownloadViewModel( @@ -38,8 +41,11 @@ class DownloadViewModel( ) : BaseViewModel(DownloadUiState()), DownloadInteractionListener { private var isSystemDarkTheme: Boolean = false + private var isInitialized = false fun initialize(isSystemDarkTheme: Boolean) { + if (isInitialized) return + isInitialized = true this.isSystemDarkTheme = isSystemDarkTheme val choices = statisticsRepository.getExportChoices() updateState { copy(exportChoices = choices) } @@ -106,22 +112,34 @@ class DownloadViewModel( tryToCall( block = { - val targetUserId = choices.targetUserId - if (targetUserId != null) { - statisticsRepository.getUserStatisticsPdf( - targetUserId = targetUserId, - startDate = startDateTime, - endDate = endDateTime, - reportDataType = reportDataType, - theme = theme - ) - } else { - statisticsRepository.getStatisticsPdf( - startDate = startDateTime, - endDate = endDateTime, - reportDataType = reportDataType, - theme = theme - ) + try { + val targetUserId = choices.targetUserId + if (targetUserId != null) { + statisticsRepository.getUserStatisticsPdf( + targetUserId = targetUserId, + startDate = startDateTime, + endDate = endDateTime, + reportDataType = reportDataType, + theme = theme + ) + } else { + statisticsRepository.getStatisticsPdf( + startDate = startDateTime, + endDate = endDateTime, + reportDataType = reportDataType, + theme = theme + ) + } + } catch (e: CancellationException) { + if (e.cause is PaymentRequiredException) { + updateState { + copy( + isLoading = false, + errorMessage = UiText.StringRes(Res.string.payment_required) + ) + } + } + throw e } }, onSuccess = { pdfBytes -> @@ -174,11 +192,23 @@ class DownloadViewModel( tryToCall( block = { - val targetUserId = choices.targetUserId - if (targetUserId != null) { - statisticsRepository.getUserStatistics(targetUserId, granularity, startDateTime, endDateTime) - } else { - statisticsRepository.getStatistics(granularity, startDateTime, endDateTime) + try { + val targetUserId = choices.targetUserId + if (targetUserId != null) { + statisticsRepository.getUserStatistics(targetUserId, granularity, startDateTime, endDateTime) + } else { + statisticsRepository.getStatistics(granularity, startDateTime, endDateTime) + } + } catch (e: CancellationException) { + if (e.cause is PaymentRequiredException) { + updateState { + copy( + isLoading = false, + errorMessage = UiText.StringRes(Res.string.payment_required) + ) + } + } + throw e } }, onSuccess = { stats -> diff --git a/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/StatisticsViewModel.kt b/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/StatisticsViewModel.kt index be59ea88..bd31fb41 100644 --- a/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/StatisticsViewModel.kt +++ b/statisticsPresentation/src/commonMain/kotlin/com/spendoo/statistics/presentation/screen/statistics/StatisticsViewModel.kt @@ -13,12 +13,14 @@ import com.spendoo.designsystem.utils.toUiText import com.spendoo.identity.api.FollowingRoute import com.spendoo.identity.api.ProfileRoute import com.spendoo.identity.domain.repository.ProfileRepository +import com.spendoo.shared.domain.exception.PaymentRequiredException import com.spendoo.shared.domain.utils.PageQuery import com.spendoo.shared.domain.utils.getNow import com.spendoo.shared.domain.utils.getToday import com.spendoo.statistics.api.ExportRoute import com.spendoo.statistics.domain.entity.Granularity import com.spendoo.statistics.domain.repository.StatisticsRepository +import kotlinx.coroutines.CancellationException import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow @@ -231,15 +233,28 @@ class StatisticsViewModel( updateState { copy(isLoading = true) } tryToCall( block = { - if (targetUserId != null) { - statisticsRepository.getUserStatistics( - targetUserId, - granularity, - startDateTime, - endDateTime - ) - } else { - statisticsRepository.getStatistics(granularity, startDateTime, endDateTime) + try { + if (targetUserId != null) { + statisticsRepository.getUserStatistics( + targetUserId, + granularity, + startDateTime, + endDateTime + ) + } else { + statisticsRepository.getStatistics(granularity, startDateTime, endDateTime) + } + } catch (e: CancellationException) { + if (e.cause is PaymentRequiredException) { + updateState { + copy( + selectedGranularity = Granularity.WEEK, + isLoading = false + ) + } + loadStatistics(Granularity.WEEK) + } + throw e } }, onSuccess = { stats -> From 9ec440f8fdcb111a16383ebcd5484e8558150a97 Mon Sep 17 00:00:00 2001 From: Joseph Sameh <20220099@stud.fci-cu.edu.eg> Date: Tue, 7 Jul 2026 03:00:35 +0300 Subject: [PATCH 4/4] Update EntryPoint.kt --- .../commonMain/kotlin/com/spendoo/appEntryPoint/EntryPoint.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spendooApp/src/commonMain/kotlin/com/spendoo/appEntryPoint/EntryPoint.kt b/spendooApp/src/commonMain/kotlin/com/spendoo/appEntryPoint/EntryPoint.kt index bbd3ad45..03cd5e1a 100644 --- a/spendooApp/src/commonMain/kotlin/com/spendoo/appEntryPoint/EntryPoint.kt +++ b/spendooApp/src/commonMain/kotlin/com/spendoo/appEntryPoint/EntryPoint.kt @@ -86,8 +86,8 @@ fun EntryPoint( || currentRoute == LoginRoute || currentRoute == SignUpRoute || currentRoute == ForgetPasswordRoute - || currentRoute == VerifyEmailRoute - || currentRoute == CreateNewPasswordRoute + || currentRoute is VerifyEmailRoute + || currentRoute is CreateNewPasswordRoute if (targetRoute == HomeRoute) { if (isUnauthRoute) {