Skip to content
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
7b39466
feat: string resources
jvsena42 Mar 25, 2026
77cd683
feat: SendSectionView
jvsena42 Mar 25, 2026
ad62cea
feat: add swipe progress callback to SwipeToConfirm
jvsena42 Mar 25, 2026
ef35e2c
feat: add Instant enum type
jvsena42 Mar 25, 2026
7f37c8c
feat: update SendFeeViewModel Custom Fee Defaults. to: current custom…
jvsena42 Mar 25, 2026
7ccab2d
feat: switch to lighting when selecting instant
jvsena42 Mar 25, 2026
fe98cdc
feat: relative expire date for invoice
jvsena42 Mar 25, 2026
8a67ab0
feat: hide details on send confirmation screen
jvsena42 Mar 25, 2026
204e1dd
test: update test
jvsena42 Mar 25, 2026
d62e6cd
chore: lint
jvsena42 Mar 25, 2026
8d8fa26
Merge branch 'feat/settings-v60' into feat/send-v60
jvsena42 Mar 26, 2026
7c94de7
Merge branch 'feat/settings-v60' into feat/send-v60
jvsena42 Mar 27, 2026
bd59b6e
fix: spacing
jvsena42 Mar 27, 2026
d5fc1a1
fix: switch logic
jvsena42 Mar 27, 2026
d5687db
fix: coin animation
jvsena42 Mar 27, 2026
0b8e70a
fix: reset warnings on amount change and payment method switches
jvsena42 Mar 27, 2026
2bbad48
fix: strings order
jvsena42 Mar 27, 2026
9c84c60
fix: expire text update
jvsena42 Mar 27, 2026
b183d31
fix: apply side effect
jvsena42 Mar 27, 2026
f1cdb2c
fix: remove trailing comma
jvsena42 Mar 27, 2026
e2fb696
fix: remove trailing comma
jvsena42 Mar 27, 2026
978a51c
Merge branch 'feat/settings-v60' into feat/send-v60
jvsena42 Mar 30, 2026
c8da9c2
fix: clean confirmedWarnings when switch to lighting
jvsena42 Mar 30, 2026
85600dd
chore: lint
jvsena42 Mar 30, 2026
49ed094
chore: remove magic number
jvsena42 Mar 30, 2026
95f856c
chore: modifier rule lint
jvsena42 Mar 30, 2026
c95b053
chore: magic number
jvsena42 Mar 30, 2026
1bee2de
feat: dashed add button
jvsena42 Mar 30, 2026
3b80a36
feat: horizontal swipe
jvsena42 Mar 30, 2026
34f2503
fix: dust validation on updateCanSwitchWallet
jvsena42 Mar 30, 2026
0a1d121
Merge branch 'feat/settings-v60' into feat/send-v60
jvsena42 Mar 30, 2026
21ff423
fix: tags section padding
jvsena42 Mar 30, 2026
0224d21
fix: don't hide LNURL details
jvsena42 Mar 30, 2026
764b71a
fix: replace gradient BG with White06
jvsena42 Mar 30, 2026
702863d
doc: changelog entry
jvsena42 Mar 30, 2026
3f5e94d
Merge branch 'feat/settings-v60' into feat/send-v60
jvsena42 Mar 30, 2026
32610e2
doc: changelog entry
jvsena42 Mar 30, 2026
cc9d1f2
chore: code cleanup
jvsena42 Mar 30, 2026
fc5a38e
chore: set modifier as last parameter
jvsena42 Mar 30, 2026
057112c
refactor: eliminate unsafe cast
jvsena42 Mar 30, 2026
3b2b96b
Merge branch 'feat/settings-v60' into feat/send-v60
jvsena42 Apr 1, 2026
0e39602
fix: update text
jvsena42 Apr 1, 2026
684a46c
fix: AddTagButton color
jvsena42 Apr 1, 2026
f2cef84
fix: call updateCanSwitchWallet for fixed amount invoice
jvsena42 Apr 1, 2026
3a741c6
fix: disable instant option when not possible to switch to lighting
jvsena42 Apr 1, 2026
d155c4d
fix: fee estimates not loaded when navigating from lightning
jvsena42 Apr 1, 2026
f92708f
chore: make ContentRunning private
jvsena42 Apr 1, 2026
a74778d
Merge branch 'master' into feat/send-v60
jvsena42 Apr 2, 2026
7a6c9ce
fix: tag text color
jvsena42 Apr 2, 2026
af32125
fix: instant icon
jvsena42 Apr 2, 2026
fabfde3
fix: fixed-amount path missing estimateLightningRoutingFeesIfNeeded
jvsena42 Apr 2, 2026
2c5e2af
fix: instant fee description
jvsena42 Apr 2, 2026
70d07bf
fix: refreshFeeEstimates unconditionally overwriting fee with SendFee…
jvsena42 Apr 2, 2026
da24a7e
test: prevent regressions on send flow
jvsena42 Apr 2, 2026
39cd7a6
fix: lighting fee state override to zero when selecting on-chain
jvsena42 Apr 2, 2026
4eed0a3
chore: replace wheneverBlocking
jvsena42 Apr 2, 2026
e70e9fc
chore: lint
jvsena42 Apr 2, 2026
794f5e2
Merge branch 'master' into feat/send-v60
jvsena42 Apr 2, 2026
bffaa57
chore: update changelog rule
jvsena42 Apr 2, 2026
7312e09
chore: update changelog entrie to match Agentes rule
jvsena42 Apr 2, 2026
9dbc7b7
refactor: remove section comments
jvsena42 Apr 2, 2026
5a567e0
refactor: mock declaration
jvsena42 Apr 2, 2026
a6641f4
refactor: rename component and add preview
jvsena42 Apr 2, 2026
e50948c
doc: consolidate changelog entries
jvsena42 Apr 2, 2026
49518e8
Update app/src/test/java/to/bitkit/viewmodels/AppViewModelSendFlowTes…
jvsena42 Apr 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions app/src/main/java/to/bitkit/ext/DateTime.kt
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,34 @@ fun Long.toRelativeTimeString(
}
}

fun formatInvoiceExpiryRelative(
expirySeconds: ULong,
locale: Locale = Locale.getDefault(),
): String {
val seconds = expirySeconds.toLong()
if (seconds <= 0) return ""

val uLocale = ULocale.forLocale(locale)
val numberFormat = NumberFormat.getNumberInstance(uLocale)?.apply { maximumFractionDigits = 0 }
val formatter = RelativeDateTimeFormatter.getInstance(
uLocale,
numberFormat,
RelativeDateTimeFormatter.Style.LONG,
DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,
) ?: return ""

val minutes = seconds / Factor.SECONDS_TO_MINUTES.toLong()
val hours = minutes / Factor.MINUTES_TO_HOURS.toLong()
val days = hours / Factor.HOURS_TO_DAYS.toLong()

return when {
minutes < 1 -> formatter.format(seconds.toDouble(), Direction.NEXT, RelativeUnit.SECONDS)
hours < 1 -> formatter.format(minutes.toDouble(), Direction.NEXT, RelativeUnit.MINUTES)
days < 1 -> formatter.format(hours.toDouble(), Direction.NEXT, RelativeUnit.HOURS)
else -> formatter.format(days.toDouble(), Direction.NEXT, RelativeUnit.DAYS)
}
}

fun getDaysInMonth(month: LocalDate): List<LocalDate?> {
val firstDayOfMonth = LocalDate(month.year, month.month, Constants.FIRST_DAY_OF_MONTH)
val daysInMonth = month.month.toJavaMonth().length(isLeapYear(month.year))
Expand Down
9 changes: 8 additions & 1 deletion app/src/main/java/to/bitkit/models/FeeRate.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@ enum class FeeRate(
@DrawableRes val icon: Int,
val color: Color,
) {
INSTANT(
title = R.string.fee__instant__title,
description = R.string.fee__instant__description,
shortDescription = R.string.fee__instant__shortDescription,
color = Colors.Purple,
icon = R.drawable.ic_lightning,
),
FAST(
title = R.string.fee__fast__title,
description = R.string.fee__fast__description,
Expand Down Expand Up @@ -53,7 +60,7 @@ enum class FeeRate(

fun toSpeed(): TransactionSpeed {
return when (this) {
FAST -> TransactionSpeed.Fast
INSTANT, FAST -> TransactionSpeed.Fast
NORMAL -> TransactionSpeed.Medium
MINIMUM, SLOW -> TransactionSpeed.Slow
CUSTOM -> TransactionSpeed.Custom(0u)
Expand Down
24 changes: 24 additions & 0 deletions app/src/main/java/to/bitkit/ui/components/SendSectionView.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package to.bitkit.ui.components

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.HorizontalDivider
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import to.bitkit.ui.theme.Colors

@Composable
fun SendSectionView(
Comment thread
jvsena42 marked this conversation as resolved.
Outdated
caption: String,
modifier: Modifier = Modifier,
content: @Composable () -> Unit,
) {
Column(modifier = modifier.fillMaxWidth()) {
Caption13Up(text = caption, color = Colors.White64)
VerticalSpacer(8.dp)
content()
VerticalSpacer(16.dp)
HorizontalDivider(modifier = Modifier.fillMaxWidth())
}
}
10 changes: 9 additions & 1 deletion app/src/main/java/to/bitkit/ui/components/SwipeToConfirm.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
Expand Down Expand Up @@ -61,15 +62,16 @@ private val Padding = 8.dp

@Composable
fun SwipeToConfirm(
modifier: Modifier = Modifier,
text: String = stringResource(R.string.other__swipe),
color: Color = Colors.Brand,
icon: ImageVector = Icons.AutoMirrored.Default.ArrowForward,
@DrawableRes endIcon: Int = R.drawable.ic_check,
endIconTint: Color = Colors.Black,
loading: Boolean = false,
confirmed: Boolean = false,
onProgressChange: ((Float) -> Unit)? = null,
onConfirm: () -> Unit,
Comment thread
jvsena42 marked this conversation as resolved.
Outdated
modifier: Modifier = Modifier,
) {
val scope = rememberCoroutineScope()
val trailColor = remember(color) { color.copy(alpha = 0.24f) }
Expand All @@ -94,6 +96,12 @@ fun SwipeToConfirm(
)
}

LaunchedEffect(onProgressChange) {
if (onProgressChange == null) return@LaunchedEffect
snapshotFlow { panX.value / maxPanX }
.collect { onProgressChange(it.coerceIn(0f, 1f)) }
}

Box(
modifier = modifier
.requiredHeight(CircleSize + Padding * 2)
Expand Down
Loading
Loading