Skip to content
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
9604817
feat: ConnectionIssuesView
jvsena42 Mar 31, 2026
b93d729
feat: display connection issues view
jvsena42 Mar 31, 2026
1671051
fix: circle alignment
jvsena42 Mar 31, 2026
61e0371
fix: circle color and fading
jvsena42 Mar 31, 2026
e60c9fb
chore: lint
jvsena42 Mar 31, 2026
aaa3d8d
fix: gradient color
jvsena42 Mar 31, 2026
9f3c1f9
feat: display connection issues screen in transfer flows
jvsena42 Apr 1, 2026
46f955f
refactor: remove unnecessary parameter
jvsena42 Apr 1, 2026
e81a4ff
Merge branch 'feat/send-v60' into feat/connection-issues-view
jvsena42 Apr 1, 2026
a5fde6d
fix: re-trigger updateLimits when switch to online
jvsena42 Apr 1, 2026
4f9c6df
Merge branch 'feat/send-v60' into feat/connection-issues-view
jvsena42 Apr 2, 2026
70f1112
fix: not populated LN balance on canSend fallback
jvsena42 Apr 2, 2026
db7d466
fix: add spacer
jvsena42 Apr 2, 2026
8b11ea7
fix: fallback to cached balance for validation when channels are loading
jvsena42 Apr 2, 2026
5f3da5c
fix: isFirstEmission check
jvsena42 Apr 2, 2026
eec1e8e
fix: await for peer connection before try to close
jvsena42 Apr 2, 2026
49167e1
Merge branch 'feat/send-v60' into feat/connection-issues-view
jvsena42 Apr 2, 2026
20154dc
doc: changelog entry
jvsena42 Apr 2, 2026
4e7e2a2
chore: lint
jvsena42 Apr 2, 2026
0136e97
merge: feat/send-v60 into feat/connection-issues-view
jvsena42 Apr 2, 2026
5caf2b3
doc: consolidate changelog entries
jvsena42 Apr 2, 2026
ef540ab
Merge branch 'feat/send-v60' into feat/connection-issues-view
jvsena42 Apr 2, 2026
e3d6b4f
Update app/src/main/java/to/bitkit/ui/components/ConnectionIssuesView.kt
jvsena42 Apr 2, 2026
2c417d5
Merge branch 'feat/send-v60' into feat/connection-issues-view
jvsena42 Apr 2, 2026
1b796a1
feat: add transfer from savings button on empty spending screen
jvsena42 Apr 2, 2026
3f35635
doc: add changelog entry
jvsena42 Apr 2, 2026
7942b52
chore: backfill changelog pr number
jvsena42 Apr 2, 2026
28da848
Merge branch 'feat/connection-issues-view' into feat/transfer-from-sa…
jvsena42 Apr 2, 2026
99cf123
Update app/src/main/java/to/bitkit/ui/screens/wallets/SpendingWalletS…
jvsena42 Apr 2, 2026
e0b12fd
Update app/src/main/java/to/bitkit/ui/screens/wallets/SpendingWalletS…
jvsena42 Apr 2, 2026
ecdb66b
Merge branch 'master' into feat/connection-issues-view
jvsena42 Apr 2, 2026
9805964
Merge branch 'feat/connection-issues-view' into feat/transfer-from-sa…
jvsena42 Apr 2, 2026
984f20c
Merge branch 'master' into feat/connection-issues-view
jvsena42 Apr 6, 2026
2445a59
Merge branch 'feat/connection-issues-view' into feat/transfer-from-sa…
jvsena42 Apr 6, 2026
c032a4d
fix: import
jvsena42 Apr 6, 2026
5392a89
chore: lint
jvsena42 Apr 6, 2026
dc6a27a
chore: lint
jvsena42 Apr 6, 2026
7ec57f9
refactor: replace cache strategy with flow collecting + timeout
jvsena42 Apr 6, 2026
055a783
fix: display SyncNodeView on SendSheet start when node is not running…
jvsena42 Apr 6, 2026
385b655
fix: display sync view early when handling deeplinks
jvsena42 Apr 6, 2026
00a8108
refactor: extract waitForUsableChannels logic from canSend
jvsena42 Apr 6, 2026
3da8e8d
Merge branch 'feat/connection-issues-view' into feat/transfer-from-sa…
ovitrif Apr 6, 2026
fbe31db
fix: don't block navigation by ln fee estimation
jvsena42 Apr 6, 2026
18b4a23
Merge branch 'master' into feat/connection-issues-view
jvsena42 Apr 6, 2026
730a4ae
Merge branch 'master' into feat/transfer-from-savings-button-on-empty…
ovitrif Apr 6, 2026
2d9d0d3
chore: rm unused import
ovitrif Apr 6, 2026
fd8f672
fix: add bg blur to transfer from savings button
ovitrif Apr 6, 2026
2780cc5
fix: secondary button weight layout regression
ovitrif Apr 6, 2026
cb49884
Merge branch 'feat/connection-issues-view' into feat/transfer-from-sa…
ovitrif Apr 6, 2026
ced3109
chore: rm modifier arg trailing comma
ovitrif Apr 6, 2026
34daff4
Merge pull request #882 from synonymdev/feat/transfer-from-savings-bu…
ovitrif Apr 6, 2026
d934929
Merge branch 'master' into feat/connection-issues-view
ovitrif Apr 6, 2026
5225b07
fix: set loading state for confirm button
jvsena42 Apr 7, 2026
b3b57b0
fix: check for usable channels directly from service instead of waiti…
jvsena42 Apr 7, 2026
3948fe6
fix: reduce restrictions for display sync overlay
jvsena42 Apr 7, 2026
52adf83
Merge branch 'master' into feat/connection-issues-view
jvsena42 Apr 7, 2026
7aa3f2a
chore: topbar gradient constant
jvsena42 Apr 7, 2026
08115f4
fix: scroll screens behind top bar and implement gradient effect
jvsena42 Apr 7, 2026
8aade71
fix: set bgDispatcher context
jvsena42 Apr 7, 2026
052883d
fix: hide sheet on lightning only decode error
jvsena42 Apr 7, 2026
1e42566
Merge branch 'feat/connection-issues-view' into fix/spending-and-savi…
jvsena42 Apr 7, 2026
29e9fe6
refactor: implement VerticalSpacer
jvsena42 Apr 7, 2026
15db679
refactor: implement VerticalSpacer
jvsena42 Apr 7, 2026
03ba518
chore: lint
jvsena42 Apr 7, 2026
828e048
chore: lint
jvsena42 Apr 7, 2026
1dd5737
chore: lint
jvsena42 Apr 7, 2026
ec1bee9
doc: changelog entry
jvsena42 Apr 7, 2026
d075af2
Merge branch 'feat/connection-issues-view' into fix/spending-and-savi…
jvsena42 Apr 7, 2026
9050881
Merge branch 'master' into feat/connection-issues-view
jvsena42 Apr 7, 2026
39af4b3
fix: lint
jvsena42 Apr 8, 2026
b5dc130
fix: hide sheet on invalid address and network mismatch
jvsena42 Apr 8, 2026
03698fb
fix: open scanner sheet inside send sheet to fix navigation
jvsena42 Apr 8, 2026
f533734
fix: hide sheet in more error cases
jvsena42 Apr 8, 2026
fabb81a
Update app/src/main/java/to/bitkit/repositories/LightningRepo.kt
jvsena42 Apr 8, 2026
479ff9b
Update app/src/main/java/to/bitkit/ui/screens/wallets/receive/EditInv…
jvsena42 Apr 8, 2026
268ff81
Merge branch 'feat/connection-issues-view' into fix/spending-and-savi…
jvsena42 Apr 8, 2026
5365361
fix: shouldShowSyncOverlay causing too much recompositions
jvsena42 Apr 8, 2026
f7e6f53
Merge remote-tracking branch 'origin/feat/connection-issues-view' int…
jvsena42 Apr 8, 2026
0a02b89
chore: lint
jvsena42 Apr 8, 2026
dada317
chore: lint
jvsena42 Apr 8, 2026
0cfc2af
fix: sync state before check if can send lighting to don't use stale …
jvsena42 Apr 8, 2026
7e1118f
Merge branch 'feat/connection-issues-view' into fix/spending-and-savi…
jvsena42 Apr 8, 2026
588d2e5
fix: sync state after channel ready
jvsena42 Apr 9, 2026
fbe494c
Merge branch 'master' into feat/connection-issues-view
jvsena42 Apr 9, 2026
5ff4110
fix: reconnect peers immediately after connection recovery to restore…
jvsena42 Apr 9, 2026
9f1a66a
Merge branch 'feat/connection-issues-view' into fix/spending-and-savi…
jvsena42 Apr 9, 2026
a87185f
doc: update changelog
jvsena42 Apr 9, 2026
60c57b4
Merge remote-tracking branch 'origin/fix/spending-and-savings-scroll'…
jvsena42 Apr 9, 2026
50d9472
doc: update changelog
jvsena42 Apr 9, 2026
c53d402
Merge branch 'feat/connection-issues-view' into fix/spending-and-savi…
jvsena42 Apr 9, 2026
5aed3e8
Merge branch 'master' into feat/connection-issues-view
jvsena42 Apr 11, 2026
4e812bf
Merge branch 'feat/connection-issues-view' into fix/spending-and-savi…
jvsena42 Apr 11, 2026
5df68a9
Merge pull request #892 from synonymdev/fix/spending-and-savings-scroll
jvsena42 Apr 17, 2026
77e31a1
Merge branch 'master' into feat/connection-issues-view
jvsena42 Apr 20, 2026
e723f8e
Merge branch 'master' into feat/connection-issues-view
ovitrif Apr 21, 2026
d22844e
Merge remote-tracking branch 'origin/master' into feat/connection-iss…
jvsena42 Apr 22, 2026
c38fdcf
Merge remote-tracking branch 'origin/feat/connection-issues-view' int…
jvsena42 Apr 22, 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
5 changes: 4 additions & 1 deletion app/src/main/java/to/bitkit/ui/ContentView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ import to.bitkit.env.Env
import to.bitkit.models.NodeLifecycleState
import to.bitkit.models.Toast
import to.bitkit.models.WidgetType
import to.bitkit.repositories.ConnectivityState
import to.bitkit.ui.Routes.ExternalConnection
import to.bitkit.ui.components.AuthCheckScreen
import to.bitkit.ui.components.DrawerMenu
Expand Down Expand Up @@ -380,12 +381,14 @@ fun ContentView(

is Sheet.Receive -> {
val walletState by walletViewModel.walletState.collectAsStateWithLifecycle()
val connectivityState by appViewModel.isOnline.collectAsStateWithLifecycle()
ReceiveSheet(
walletState = walletState,
isOffline = connectivityState != ConnectivityState.CONNECTED,
navigateToExternalConnection = {
navController.navigateTo(ExternalConnection())
appViewModel.hideSheet()
}
},
)
}

Expand Down
160 changes: 160 additions & 0 deletions app/src/main/java/to/bitkit/ui/components/ConnectionIssuesView.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
package to.bitkit.ui.components

import androidx.compose.foundation.Canvas
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
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.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.PathEffect
import androidx.compose.ui.graphics.drawscope.DrawScope
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import to.bitkit.R
import to.bitkit.ui.scaffold.SheetTopBar
import to.bitkit.ui.shared.util.gradientBackground
import to.bitkit.ui.theme.AppThemeSurface
import to.bitkit.ui.theme.Colors
import to.bitkit.ui.utils.withAccent

@Composable
fun ConnectionIssuesView(
titleText: String,
modifier: Modifier = Modifier,
) {
Column(
modifier = modifier
.fillMaxSize()
.gradientBackground()
.navigationBarsPadding()
.padding(horizontal = 16.dp)
.testTag("ConnectionIssueView"),
) {
SheetTopBar(titleText = titleText)

Box(
modifier = Modifier
.fillMaxWidth()
.weight(1f),
) {
DashedRingsLayer(outerOnly = true)

Image(
painter = painterResource(R.drawable.phone),
contentDescription = null,
contentScale = ContentScale.Fit,
modifier = Modifier
.size(311.dp)
.align(Alignment.CenterStart),
)
Comment thread
jvsena42 marked this conversation as resolved.

DashedRingsLayer(outerOnly = false)
}

Display(
text = stringResource(R.string.other__connection_issues_title)
.withAccent(accentColor = Colors.Yellow),
modifier = Modifier.fillMaxWidth(),
Comment thread
jvsena42 marked this conversation as resolved.
Outdated
)

VerticalSpacer(8.dp)

BodyM(
text = stringResource(R.string.other__connection_issues_explain),
color = Colors.White64,
modifier = Modifier.fillMaxWidth(),
)

VerticalSpacer(24.dp)

Box(
contentAlignment = Alignment.Center,
modifier = Modifier.fillMaxWidth(),
) {
GradientCircularProgressIndicator(
strokeWidth = 1.dp,
modifier = Modifier.size(32.dp),
)
}

VerticalSpacer(16.dp)
}
}


private val outerRing = DashedRingSpec(
Comment thread Fixed
radiusFraction = 0.60f,
color = Colors.Yellow.copy(alpha = 0.08f),
)

private val innerRings = listOf(
DashedRingSpec(radiusFraction = 0.15f, color = Colors.Yellow.copy(alpha = 0.4f)),
DashedRingSpec(radiusFraction = 0.30f, color = Colors.Yellow.copy(alpha = 0.25f)),
DashedRingSpec(radiusFraction = 0.45f, color = Colors.Yellow.copy(alpha = 0.15f)),
)

@Composable
private fun DashedRingsLayer(outerOnly: Boolean, modifier: Modifier = Modifier) {
val rings = if (outerOnly) listOf(outerRing) else innerRings
Canvas(modifier = modifier.fillMaxSize()) {
val center = Offset(size.width * 0.25f, size.height * 0.40f)

if (outerOnly) {
val fadeRadius = size.minDimension * 0.45f
drawCircle(
brush = Brush.radialGradient(
colors = listOf(Colors.White.copy(alpha = 0.06f), Color.Transparent),
center = center,
radius = fadeRadius,
),
radius = fadeRadius,
center = center,
)
}

rings.forEach { ring -> drawDashedRing(ring, center) }
}
}

private fun DrawScope.drawDashedRing(ring: DashedRingSpec, center: Offset) {
drawCircle(
color = ring.color,
radius = size.minDimension * ring.radiusFraction,
center = center,
style = Stroke(
width = 1.dp.toPx(),
pathEffect = PathEffect.dashPathEffect(
floatArrayOf(8.dp.toPx(), 6.dp.toPx()),
),
),
)
}

private data class DashedRingSpec(
val radiusFraction: Float,
val color: Color,
)

@Preview(showSystemUi = true)
@Composable
private fun Preview() {
AppThemeSurface {
BottomSheetPreview {
ConnectionIssuesView(titleText = "Send Bitcoin")
}
}
}
Loading
Loading