diff --git a/screen/budgets/src/main/java/com/ivy/budgets/BudgetScreen.kt b/screen/budgets/src/main/java/com/ivy/budgets/BudgetScreen.kt index 3f4c470138..74063ad9f9 100644 --- a/screen/budgets/src/main/java/com/ivy/budgets/BudgetScreen.kt +++ b/screen/budgets/src/main/java/com/ivy/budgets/BudgetScreen.kt @@ -21,16 +21,11 @@ import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.ivy.base.legacy.Theme import com.ivy.budgets.model.DisplayBudget import com.ivy.design.api.LocalTimeFormatter import com.ivy.design.l0_system.UI import com.ivy.design.l0_system.style -import com.ivy.legacy.data.model.Month -import com.ivy.legacy.data.model.TimePeriod -import com.ivy.legacy.datamodel.Budget import com.ivy.legacy.legacy.ui.theme.components.BudgetBattery import com.ivy.legacy.utils.clickableNoIndication import com.ivy.legacy.utils.format @@ -44,7 +39,6 @@ import com.ivy.wallet.ui.theme.components.IvyIcon import com.ivy.wallet.ui.theme.components.ReorderButton import com.ivy.wallet.ui.theme.components.ReorderModalSingleType import com.ivy.wallet.ui.theme.wallet.AmountCurrencyB1 -import kotlinx.collections.immutable.persistentListOf @Composable fun BoxWithConstraintsScope.BudgetScreen(screen: BudgetScreen) { diff --git a/screen/home/src/main/java/com/ivy/home/HomeHeader.kt b/screen/home/src/main/java/com/ivy/home/HomeHeader.kt index 666f93d10d..603f239bab 100644 --- a/screen/home/src/main/java/com/ivy/home/HomeHeader.kt +++ b/screen/home/src/main/java/com/ivy/home/HomeHeader.kt @@ -63,9 +63,6 @@ import com.ivy.wallet.ui.theme.components.IvyOutlinedButton import com.ivy.wallet.ui.theme.wallet.AmountCurrencyB1 import kotlin.math.absoluteValue -private const val OverflowLengthOfBalance = 7 -private const val OverflowLengthOfMonthRange = 12 - @ExperimentalAnimationApi @Composable internal fun HomeHeader( diff --git a/shared/base/src/main/java/com/ivy/base/legacy/Transaction.kt b/shared/base/src/main/java/com/ivy/base/legacy/Transaction.kt index 4f91305e22..dd1cf68c19 100644 --- a/shared/base/src/main/java/com/ivy/base/legacy/Transaction.kt +++ b/shared/base/src/main/java/com/ivy/base/legacy/Transaction.kt @@ -12,6 +12,7 @@ import java.util.UUID typealias LegacyTransaction = Transaction +@Suppress("DataClassDefaultValues") @Deprecated("Legacy data model. Will be deleted") @Immutable data class Transaction( diff --git a/shared/base/src/main/java/com/ivy/base/resource/AndroidResourceProvider.kt b/shared/base/src/main/java/com/ivy/base/resource/AndroidResourceProvider.kt index 6850bf34dd..ace35fafb9 100644 --- a/shared/base/src/main/java/com/ivy/base/resource/AndroidResourceProvider.kt +++ b/shared/base/src/main/java/com/ivy/base/resource/AndroidResourceProvider.kt @@ -5,6 +5,7 @@ import androidx.annotation.StringRes import dagger.hilt.android.qualifiers.ApplicationContext import javax.inject.Inject +@Suppress("UnnecessaryPassThroughClass") class AndroidResourceProvider @Inject constructor( @ApplicationContext private val context: Context, diff --git a/shared/base/src/main/java/com/ivy/base/time/TimeRange.kt b/shared/base/src/main/java/com/ivy/base/time/TimeRange.kt new file mode 100644 index 0000000000..37b67c85b3 --- /dev/null +++ b/shared/base/src/main/java/com/ivy/base/time/TimeRange.kt @@ -0,0 +1,14 @@ +package com.ivy.base.time + +import java.time.Instant +import java.util.concurrent.TimeUnit + +const val SAFE_OFFSET_DAYS = 365 * 10L + +val INSTANT_MIN_SAFE: Instant + get() = Instant.ofEpochMilli(Long.MIN_VALUE) + .plusSeconds(TimeUnit.DAYS.toSeconds(SAFE_OFFSET_DAYS)) + +val INSTANT_MAX_SAFE: Instant + get() = Instant.ofEpochMilli(Long.MAX_VALUE) + .minusSeconds(TimeUnit.DAYS.toSeconds(SAFE_OFFSET_DAYS)) \ No newline at end of file diff --git a/shared/base/src/main/java/com/ivy/base/time/impl/StandardTimeConverter.kt b/shared/base/src/main/java/com/ivy/base/time/impl/StandardTimeConverter.kt index 982c49480f..4cbb375a8e 100644 --- a/shared/base/src/main/java/com/ivy/base/time/impl/StandardTimeConverter.kt +++ b/shared/base/src/main/java/com/ivy/base/time/impl/StandardTimeConverter.kt @@ -1,11 +1,14 @@ package com.ivy.base.time.impl +import com.ivy.base.time.INSTANT_MAX_SAFE +import com.ivy.base.time.INSTANT_MIN_SAFE import com.ivy.base.time.TimeConverter import com.ivy.base.time.TimeProvider import java.time.DateTimeException import java.time.Instant import java.time.LocalDate import java.time.LocalDateTime +import java.time.ZoneOffset import javax.inject.Inject class StandardTimeConverter @Inject constructor( @@ -18,9 +21,9 @@ class StandardTimeConverter @Inject constructor( } catch (e: DateTimeException) { // This happens when we overflow MIN/MAX for LocalDateTime if (this > Instant.EPOCH) { - LocalDateTime.MAX.minusYears(10) + INSTANT_MAX_SAFE.atZone(ZoneOffset.UTC).toLocalDateTime() } else { - LocalDateTime.MIN.plusYears(10) + INSTANT_MIN_SAFE.atZone(ZoneOffset.UTC).toLocalDateTime() } } @@ -30,9 +33,9 @@ class StandardTimeConverter @Inject constructor( } catch (e: DateTimeException) { // This happens when we overflow MIN/MAX for LocalDate if (this > Instant.EPOCH) { - LocalDate.MAX.minusYears(10) + INSTANT_MAX_SAFE.atZone(ZoneOffset.UTC).toLocalDate() } else { - LocalDate.MIN.plusYears(10) + INSTANT_MIN_SAFE.atZone(ZoneOffset.UTC).toLocalDate() } } diff --git a/shared/data/core/src/test/java/com/ivy/data/repository/TransactionRepositoryTest.kt b/shared/data/core/src/test/java/com/ivy/data/repository/TransactionRepositoryTest.kt index 4a46e710d0..79ad5e112e 100644 --- a/shared/data/core/src/test/java/com/ivy/data/repository/TransactionRepositoryTest.kt +++ b/shared/data/core/src/test/java/com/ivy/data/repository/TransactionRepositoryTest.kt @@ -28,7 +28,6 @@ import io.kotest.property.arbitrary.arbitrary import io.kotest.property.arbitrary.boolean import io.kotest.property.arbitrary.instant import io.kotest.property.arbitrary.list -import io.kotest.property.arbitrary.localDateTime import io.kotest.property.arbitrary.map import io.kotest.property.arbitrary.next import io.kotest.property.arbitrary.string diff --git a/temp/legacy-code/src/main/java/com/ivy/legacy/IntervalTypeExt.kt b/temp/legacy-code/src/main/java/com/ivy/legacy/IntervalTypeExt.kt index 89e8a528dd..2deae25d6d 100644 --- a/temp/legacy-code/src/main/java/com/ivy/legacy/IntervalTypeExt.kt +++ b/temp/legacy-code/src/main/java/com/ivy/legacy/IntervalTypeExt.kt @@ -17,6 +17,7 @@ fun IntervalType.forDisplay(intervalN: Int): String { } } +@Suppress("MagicNumber") fun IntervalType.incrementDate(date: Instant, intervalN: Long): Instant { return when (this) { IntervalType.DAY -> date.plus(intervalN, ChronoUnit.DAYS) diff --git a/temp/legacy-code/src/main/java/com/ivy/legacy/domain/action/transaction/TrnsWithDateDivsAct.kt b/temp/legacy-code/src/main/java/com/ivy/legacy/domain/action/transaction/TrnsWithDateDivsAct.kt index 3d03d95e36..d1129a8f48 100644 --- a/temp/legacy-code/src/main/java/com/ivy/legacy/domain/action/transaction/TrnsWithDateDivsAct.kt +++ b/temp/legacy-code/src/main/java/com/ivy/legacy/domain/action/transaction/TrnsWithDateDivsAct.kt @@ -3,7 +3,6 @@ package com.ivy.wallet.domain.action.transaction import com.ivy.base.legacy.Transaction import com.ivy.base.legacy.TransactionHistoryItem import com.ivy.base.time.TimeConverter -import com.ivy.base.time.TimeProvider import com.ivy.data.db.dao.read.AccountDao import com.ivy.data.repository.AccountRepository import com.ivy.data.repository.TagRepository @@ -21,7 +20,6 @@ class TrnsWithDateDivsAct @Inject constructor( private val exchangeAct: ExchangeAct, private val tagRepository: TagRepository, private val accountRepository: AccountRepository, - private val timeProvider: TimeProvider, ) : FPAction>() { override suspend fun Input.compose(): suspend () -> List = suspend { @@ -31,7 +29,6 @@ class TrnsWithDateDivsAct @Inject constructor( getTags = { tagIds -> tagRepository.findByIds(tagIds) }, getAccount = accountDao::findById then { it?.toLegacyDomain() }, accountRepository = accountRepository, - timeProvider = timeProvider, exchange = ::actInput then exchangeAct ) } diff --git a/temp/legacy-code/src/main/java/com/ivy/legacy/domain/deprecated/logic/PlannedPaymentsGenerator.kt b/temp/legacy-code/src/main/java/com/ivy/legacy/domain/deprecated/logic/PlannedPaymentsGenerator.kt index e1020a1b5e..affbe70985 100644 --- a/temp/legacy-code/src/main/java/com/ivy/legacy/domain/deprecated/logic/PlannedPaymentsGenerator.kt +++ b/temp/legacy-code/src/main/java/com/ivy/legacy/domain/deprecated/logic/PlannedPaymentsGenerator.kt @@ -39,6 +39,7 @@ class PlannedPaymentsGenerator @Inject constructor( } } + @Suppress("MagicNumber") private suspend fun generateRecurring(rule: PlannedPaymentRule) { val startDate = rule.startDate!! val endDate = startDate.plusSeconds(94_608_000) diff --git a/temp/legacy-code/src/main/java/com/ivy/legacy/domain/pure/transaction/TrnDateDividers.kt b/temp/legacy-code/src/main/java/com/ivy/legacy/domain/pure/transaction/TrnDateDividers.kt index a277a4bf53..820729dfdc 100644 --- a/temp/legacy-code/src/main/java/com/ivy/legacy/domain/pure/transaction/TrnDateDividers.kt +++ b/temp/legacy-code/src/main/java/com/ivy/legacy/domain/pure/transaction/TrnDateDividers.kt @@ -20,7 +20,6 @@ import com.ivy.frp.then import com.ivy.legacy.datamodel.Account import com.ivy.legacy.datamodel.temp.toImmutableLegacyTags import com.ivy.legacy.datamodel.temp.toLegacyDomain -import com.ivy.legacy.utils.convertUTCtoLocal import com.ivy.legacy.utils.toEpochSeconds import com.ivy.wallet.domain.data.TransactionHistoryDateDivider import com.ivy.wallet.domain.deprecated.logic.currency.ExchangeRatesLogic @@ -67,8 +66,6 @@ suspend fun transactionsWithDateDividers( transactions: List, baseCurrencyCode: String, accountRepository: AccountRepository, - timeProvider: TimeProvider, - @SideEffect getAccount: suspend (accountId: UUID) -> Account?, @SideEffect diff --git a/temp/legacy-code/src/main/java/com/ivy/legacy/legacy/ui/theme/modal/ChoosePeriodModal.kt b/temp/legacy-code/src/main/java/com/ivy/legacy/legacy/ui/theme/modal/ChoosePeriodModal.kt index e8455a5552..a1c6ff843c 100644 --- a/temp/legacy-code/src/main/java/com/ivy/legacy/legacy/ui/theme/modal/ChoosePeriodModal.kt +++ b/temp/legacy-code/src/main/java/com/ivy/legacy/legacy/ui/theme/modal/ChoosePeriodModal.kt @@ -500,7 +500,7 @@ private fun ColumnScope.LastNPeriod( } @Composable -@Suppress("ParameterNaming") +@Suppress("ParameterNaming", "MagicNumber") private fun ColumnScope.AllTime( timeRange: FromToTimeRange?, onSelected: (FromToTimeRange?) -> Unit, @@ -555,6 +555,7 @@ private fun Preview_MonthSelected() { } } +@Suppress("MagicNumber") @Preview @Composable private fun Preview_FromTo() { diff --git a/temp/legacy-code/src/main/java/com/ivy/legacy/legacy/ui/theme/modal/LoanRecordModal.kt b/temp/legacy-code/src/main/java/com/ivy/legacy/legacy/ui/theme/modal/LoanRecordModal.kt index 966c112603..ef25b22c30 100644 --- a/temp/legacy-code/src/main/java/com/ivy/legacy/legacy/ui/theme/modal/LoanRecordModal.kt +++ b/temp/legacy-code/src/main/java/com/ivy/legacy/legacy/ui/theme/modal/LoanRecordModal.kt @@ -74,6 +74,7 @@ data class LoanRecordModalData( val id: UUID = UUID.randomUUID(), ) +@Suppress("CyclomaticComplexMethod", "LongMethod") @SuppressLint("ComposeModifierMissing") @Deprecated("Old design system. Use `:ivy-design` and Material3") @Composable diff --git a/temp/legacy-code/src/main/java/com/ivy/legacy/ui/component/transaction/TransactionCard.kt b/temp/legacy-code/src/main/java/com/ivy/legacy/ui/component/transaction/TransactionCard.kt index fc4bc7c8f7..ba49eeee9e 100644 --- a/temp/legacy-code/src/main/java/com/ivy/legacy/ui/component/transaction/TransactionCard.kt +++ b/temp/legacy-code/src/main/java/com/ivy/legacy/ui/component/transaction/TransactionCard.kt @@ -89,6 +89,7 @@ import java.time.LocalDateTime import java.time.ZoneOffset import java.util.UUID +@Suppress("CyclomaticComplexMethod") @Deprecated("Old design system. Use `:ivy-design` and Material3") @Composable fun TransactionCard( diff --git a/temp/legacy-code/src/main/java/com/ivy/legacy/utils/DateExt.kt b/temp/legacy-code/src/main/java/com/ivy/legacy/utils/DateExt.kt index 1facf5d5ca..ce6a0e79bc 100644 --- a/temp/legacy-code/src/main/java/com/ivy/legacy/utils/DateExt.kt +++ b/temp/legacy-code/src/main/java/com/ivy/legacy/utils/DateExt.kt @@ -3,6 +3,8 @@ package com.ivy.legacy.utils import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext import com.ivy.base.legacy.stringRes +import com.ivy.base.time.INSTANT_MAX_SAFE +import com.ivy.base.time.INSTANT_MIN_SAFE import com.ivy.base.time.TimeConverter import com.ivy.frp.Total import com.ivy.ui.R @@ -14,7 +16,6 @@ import java.time.ZoneId import java.time.ZoneOffset import java.time.format.DateTimeFormatter import java.util.Locale -import java.util.concurrent.TimeUnit @Deprecated("Use the TimeProvider interface via DI") fun timeNowLocal(): LocalDateTime = LocalDateTime.now() @@ -269,11 +270,9 @@ fun endOfMonth(date: LocalDate, timeConverter: TimeConverter): Instant { fun LocalDate.atEndOfDay(): LocalDateTime = this.atTime(23, 59, 59) -fun ivyMinTime(): Instant = Instant.ofEpochMilli(Long.MIN_VALUE) - .plusSeconds(TimeUnit.DAYS.toSeconds(365 * 10)) +fun ivyMinTime(): Instant = INSTANT_MIN_SAFE -fun ivyMaxTime(): Instant = Instant.ofEpochMilli(Long.MAX_VALUE) - .minusSeconds(TimeUnit.DAYS.toSeconds(365 * 10)) +fun ivyMaxTime(): Instant = INSTANT_MAX_SAFE fun LocalDate.withDayOfMonthSafe(targetDayOfMonth: Int): LocalDate { val maxDayOfMonth = this.lengthOfMonth() diff --git a/temp/old-design/src/main/java/com/ivy/design/api/IvyUI.kt b/temp/old-design/src/main/java/com/ivy/design/api/IvyUI.kt index f304123b32..089ee02a0b 100644 --- a/temp/old-design/src/main/java/com/ivy/design/api/IvyUI.kt +++ b/temp/old-design/src/main/java/com/ivy/design/api/IvyUI.kt @@ -25,7 +25,6 @@ val LocalTimeProvider = compositionLocalOf { error("No LocalTimePr @Deprecated("Used only for time migration to Instant. Never use it in new code!") val LocalTimeFormatter = compositionLocalOf { error("No LocalTimeFormatter") } - @SuppressLint("ComposeModifierMissing") @Deprecated("Old design system. Use `:ivy-design` and Material3") @Composable