diff --git a/app/src/main/java/to/bitkit/ui/components/GradientCircularProgressIndicator.kt b/app/src/main/java/to/bitkit/ui/components/GradientCircularProgressIndicator.kt new file mode 100644 index 0000000000..b1be5f08e6 --- /dev/null +++ b/app/src/main/java/to/bitkit/ui/components/GradientCircularProgressIndicator.kt @@ -0,0 +1,53 @@ +package to.bitkit.ui.components + +import androidx.compose.animation.core.LinearEasing +import androidx.compose.animation.core.animateFloat +import androidx.compose.animation.core.infiniteRepeatable +import androidx.compose.animation.core.rememberInfiniteTransition +import androidx.compose.animation.core.tween +import androidx.compose.foundation.Canvas +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.StrokeCap +import androidx.compose.ui.graphics.drawscope.Stroke +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import to.bitkit.ui.theme.Colors + +@Composable +fun GradientCircularProgressIndicator( + modifier: Modifier = Modifier, + strokeWidth: Dp = 1.dp, +) { + val infiniteTransition = rememberInfiniteTransition(label = "rotation") + val angle by infiniteTransition.animateFloat( + initialValue = 0f, + targetValue = 360f, + animationSpec = infiniteRepeatable( + animation = tween(durationMillis = 2000, easing = LinearEasing) + ), + label = "rotation" + ) + + val brush = remember { Brush.sweepGradient(listOf(Color.Transparent, Colors.White)) } + val strokeWidthPx = with(LocalDensity.current) { strokeWidth.toPx() } + val stroke = remember(strokeWidthPx) { Stroke(width = strokeWidthPx, cap = StrokeCap.Round) } + + Canvas( + modifier = modifier.graphicsLayer { rotationZ = angle } + ) { + drawArc( + brush = brush, + startAngle = 0f, + sweepAngle = 360f, + useCenter = false, + style = stroke + ) + } +} diff --git a/app/src/main/java/to/bitkit/ui/components/SyncNodeView.kt b/app/src/main/java/to/bitkit/ui/components/SyncNodeView.kt index 2dfdb29ea5..234a3f11bb 100644 --- a/app/src/main/java/to/bitkit/ui/components/SyncNodeView.kt +++ b/app/src/main/java/to/bitkit/ui/components/SyncNodeView.kt @@ -1,10 +1,10 @@ package to.bitkit.ui.components import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.fillMaxWidth 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 @@ -16,6 +16,7 @@ import to.bitkit.ui.screens.transfer.components.TransferAnimationView 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 SyncNodeView(modifier: Modifier) { @@ -23,15 +24,7 @@ fun SyncNodeView(modifier: Modifier) { modifier = modifier, horizontalAlignment = Alignment.CenterHorizontally ) { - Spacer(Modifier.height(32.dp)) - - BodyM( - text = stringResource(R.string.lightning__wait_text_top), - color = Colors.White64, - modifier = Modifier.padding(horizontal = 16.dp) - ) - - Spacer(modifier = Modifier.weight(1f)) + FillHeight() TransferAnimationView( largeCircleRes = R.drawable.ln_sync_large, @@ -40,11 +33,34 @@ fun SyncNodeView(modifier: Modifier) { rotateContent = false ) - Spacer(modifier = Modifier.weight(1f)) + FillHeight() + + Display( + text = stringResource(R.string.lightning__sync_connecting) + .withAccent(accentColor = Colors.Purple), + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 32.dp) + ) + + VerticalSpacer(8.dp) - BodySSB(text = stringResource(R.string.lightning__wait_text_bottom), color = Colors.White32) + BodyM( + text = stringResource(R.string.lightning__wait_text_top), + color = Colors.White64, + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 32.dp) + ) + + VerticalSpacer(45.dp) + + GradientCircularProgressIndicator( + strokeWidth = 1.dp, + modifier = Modifier.size(24.dp) + ) - Spacer(modifier = Modifier.height(32.dp)) + VerticalSpacer(8.dp) } } @@ -56,7 +72,6 @@ private fun Preview() { modifier = Modifier .fillMaxSize() .gradientBackground() - .padding(horizontal = 16.dp) ) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5019b02e1d..29e02184a6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -237,6 +237,7 @@ Spending balance Status Support + <accent>Connecting</accent>\nto network Total Anchor Channels Reserve Total Lightning Total Onchain