Skip to content

Commit 555a7c9

Browse files
committed
(android) Adapt UI for Tor changes
The Tor proxy status UI has been removed. Phoenix now controls that the Electrum server is an onion address, or shows a message otherwise. The "enable tor" switch and the confirmation dialog have been updated. Some warning about background payments have been amended or removed since using a Tor VPN app should be more reliable. Translation have been removed and need to be fixed.
1 parent 58867b1 commit 555a7c9

33 files changed

+681
-753
lines changed

phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/AppView.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ import fr.acinq.phoenix.android.services.NodeServiceState
8181
import fr.acinq.phoenix.android.settings.AboutView
8282
import fr.acinq.phoenix.android.settings.AppAccessSettings
8383
import fr.acinq.phoenix.android.settings.DisplayPrefsView
84-
import fr.acinq.phoenix.android.settings.ElectrumView
84+
import fr.acinq.phoenix.android.settings.electrum.ElectrumView
8585
import fr.acinq.phoenix.android.settings.ExperimentalView
8686
import fr.acinq.phoenix.android.settings.ForceCloseView
8787
import fr.acinq.phoenix.android.settings.LogsView
@@ -366,7 +366,7 @@ fun AppView(
366366
ElectrumView()
367367
}
368368
composable(Screen.TorConfig.route) {
369-
TorConfigView()
369+
TorConfigView(appViewModel = appVM, onBackClick = { navController.popBackStack() }, onBusinessTeardown = { navController.popToHome() })
370370
}
371371
composable(Screen.Channels.route) {
372372
ChannelsView(

phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/components/Dialogs.kt

+3-6
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ fun Dialog(
6464
title: String? = null,
6565
properties: DialogProperties = DialogProperties(usePlatformDefaultWidth = false),
6666
isScrollable: Boolean = true,
67-
buttonsTopMargin: Dp = 24.dp,
68-
buttons: (@Composable RowScope.() -> Unit)? = { Button(onClick = onDismiss, text = stringResource(id = R.string.btn_ok), padding = PaddingValues(16.dp)) },
67+
buttonsTopMargin: Dp = 20.dp,
68+
buttons: (@Composable RowScope.() -> Unit)? = { Button(onClick = onDismiss, text = stringResource(id = R.string.btn_ok), padding = PaddingValues(16.dp), shape = RoundedCornerShape(16.dp)) },
6969
content: @Composable ColumnScope.() -> Unit,
7070
) {
7171
androidx.compose.ui.window.Dialog(onDismissRequest = onDismiss, properties = properties) {
@@ -79,10 +79,7 @@ fun Dialog(
7979
// buttons
8080
if (buttons != null) {
8181
Spacer(Modifier.height(buttonsTopMargin))
82-
Row(
83-
modifier = Modifier
84-
.align(Alignment.End)
85-
) {
82+
Row(modifier = Modifier.align(Alignment.End).padding(8.dp)) {
8683
buttons()
8784
}
8885
}

phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/components/ProgressView.kt

+2
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,11 @@ fun ProgressView(
3636
progressCircleSize: Dp = 20.dp,
3737
progressCircleWidth: Dp = 2.dp,
3838
space: Dp = 8.dp,
39+
horizontalArrangement: Arrangement.Horizontal = Arrangement.Start,
3940
) {
4041
Row(
4142
modifier.padding(padding),
43+
horizontalArrangement = horizontalArrangement,
4244
) {
4345
CircularProgressIndicator(Modifier.size(progressCircleSize), strokeWidth = progressCircleWidth)
4446
Spacer(Modifier.width(space))

phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/home/ConnectionDialog.kt

+29-30
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ package fr.acinq.phoenix.android.home
1818

1919
import androidx.compose.foundation.clickable
2020
import androidx.compose.foundation.layout.Column
21+
import androidx.compose.foundation.layout.PaddingValues
2122
import androidx.compose.foundation.layout.Row
2223
import androidx.compose.foundation.layout.Spacer
24+
import androidx.compose.foundation.layout.fillMaxWidth
2325
import androidx.compose.foundation.layout.height
2426
import androidx.compose.foundation.layout.padding
2527
import androidx.compose.foundation.layout.size
@@ -30,24 +32,27 @@ import androidx.compose.material.Surface
3032
import androidx.compose.material.Text
3133
import androidx.compose.runtime.Composable
3234
import androidx.compose.runtime.collectAsState
35+
import androidx.compose.runtime.getValue
3336
import androidx.compose.ui.Alignment
3437
import androidx.compose.ui.Modifier
3538
import androidx.compose.ui.res.stringResource
3639
import androidx.compose.ui.semantics.Role
3740
import androidx.compose.ui.unit.dp
38-
import androidx.compose.ui.unit.sp
3941
import fr.acinq.lightning.utils.Connection
4042
import fr.acinq.phoenix.android.R
43+
import fr.acinq.phoenix.android.components.Card
4144
import fr.acinq.phoenix.android.components.Dialog
4245
import fr.acinq.phoenix.android.components.HSeparator
4346
import fr.acinq.phoenix.android.components.TextWithIcon
4447
import fr.acinq.phoenix.android.userPrefs
4548
import fr.acinq.phoenix.android.utils.extensions.isBadCertificate
4649
import fr.acinq.phoenix.android.utils.monoTypo
50+
import fr.acinq.phoenix.android.utils.mutedBgColor
4751
import fr.acinq.phoenix.android.utils.negativeColor
4852
import fr.acinq.phoenix.android.utils.orange
4953
import fr.acinq.phoenix.android.utils.positiveColor
5054
import fr.acinq.phoenix.managers.Connections
55+
import fr.acinq.phoenix.utils.extensions.isOnion
5156

5257

5358
@Composable
@@ -66,52 +71,45 @@ fun ConnectionDialog(
6671
modifier = Modifier.padding(top = 16.dp, start = 24.dp, end = 24.dp)
6772
)
6873
} else {
69-
if (connections.electrum != Connection.ESTABLISHED || connections.peer != Connection.ESTABLISHED) {
74+
val hasConnectionIssues = connections.electrum != Connection.ESTABLISHED || connections.peer != Connection.ESTABLISHED
75+
if (hasConnectionIssues) {
7076
Text(text = stringResource(id = R.string.conndialog_summary_not_ok), Modifier.padding(horizontal = 24.dp))
7177
}
72-
Spacer(modifier = Modifier.height(24.dp))
78+
Spacer(modifier = Modifier.height(16.dp))
7379
HSeparator()
74-
75-
val isTorEnabled = userPrefs.getIsTorEnabled.collectAsState(initial = null).value
76-
if (isTorEnabled != null && isTorEnabled) {
77-
ConnectionDialogLine(label = stringResource(id = R.string.conndialog_tor), connection = connections.tor, onClick = onTorClick)
78-
HSeparator()
79-
}
80-
8180
ConnectionDialogLine(label = stringResource(id = R.string.conndialog_electrum), connection = connections.electrum, onClick = onElectrumClick) {
8281
when (val connection = connections.electrum) {
8382
Connection.ESTABLISHING -> {
8483
Text(text = stringResource(R.string.conndialog_connecting), style = monoTypo)
8584
}
8685
Connection.ESTABLISHED -> {
87-
Column {
88-
Text(text = stringResource(R.string.conndialog_connected), style = monoTypo)
89-
if (electrumBlockheight < 795_000) { // FIXME use a dynamic blockheight
90-
TextWithIcon(
91-
text = stringResource(id = R.string.conndialog_connected_electrum_behind, electrumBlockheight),
92-
textStyle = MaterialTheme.typography.body1.copy(fontSize = 14.sp),
93-
icon = R.drawable.ic_alert_triangle,
94-
iconTint = negativeColor
95-
)
96-
}
97-
}
86+
Text(text = stringResource(R.string.conndialog_connected), style = monoTypo)
9887
}
9988
else -> {
100-
Text(
101-
text = if (connection is Connection.CLOSED && connection.isBadCertificate()) {
102-
stringResource(R.string.conndialog_closed_bad_cert)
103-
} else {
104-
stringResource(R.string.conndialog_closed)
105-
},
106-
style = monoTypo
107-
)
89+
val customElectrumServer by userPrefs.getElectrumServer.collectAsState(initial = null)
90+
if (customElectrumServer?.isOnion == false) {
91+
TextWithIcon(text = stringResource(R.string.conndialog_electrum_not_onion), textStyle = monoTypo, icon = R.drawable.ic_alert_triangle, iconTint = negativeColor)
92+
} else if (connection is Connection.CLOSED && connection.isBadCertificate()) {
93+
TextWithIcon(text = stringResource(R.string.conndialog_closed_bad_cert), textStyle = monoTypo, icon = R.drawable.ic_alert_triangle, iconTint = negativeColor)
94+
} else {
95+
Text(text = stringResource(R.string.conndialog_closed), style = monoTypo)
96+
}
10897
}
10998
}
11099
}
111100
HSeparator()
112101
ConnectionDialogLine(label = stringResource(id = R.string.conndialog_lightning), connection = connections.peer)
113102
HSeparator()
114103
Spacer(Modifier.height(16.dp))
104+
105+
val isTorEnabled = userPrefs.getIsTorEnabled.collectAsState(initial = null).value
106+
if (hasConnectionIssues && isTorEnabled == true) {
107+
Card(backgroundColor = mutedBgColor, modifier = Modifier.fillMaxWidth(), internalPadding = PaddingValues(horizontal = 16.dp, vertical = 12.dp), onClick = onTorClick) {
108+
TextWithIcon(text = stringResource(id = R.string.conndialog_tor_disclaimer_title), icon = R.drawable.ic_tor_shield, textStyle = MaterialTheme.typography.body2)
109+
Spacer(modifier = Modifier.height(4.dp))
110+
Text(text = stringResource(id = R.string.conndialog_tor_disclaimer_body))
111+
}
112+
}
115113
}
116114
}
117115
}
@@ -147,7 +145,7 @@ private fun ConnectionDialogLine(
147145
.then(
148146
if (onClick != null) Modifier.clickable(role = Role.Button, onClickLabel = stringResource(id = R.string.conndialog_accessibility_desc, label), onClick = onClick) else Modifier
149147
)
150-
.padding(vertical = 12.dp, horizontal = 24.dp),
148+
.padding(vertical = 16.dp, horizontal = 24.dp),
151149
verticalAlignment = Alignment.CenterVertically
152150
) {
153151
Surface(
@@ -161,6 +159,7 @@ private fun ConnectionDialogLine(
161159
) {}
162160
Spacer(modifier = Modifier.width(16.dp))
163161
Text(text = label, modifier = Modifier.weight(1.0f))
162+
Spacer(modifier = Modifier.width(24.dp))
164163
content()
165164
}
166165
}

phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/home/HomeBalance.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ fun HomeBalance(
8080
balanceDisplayMode: HomeAmountDisplayMode,
8181
) {
8282
if (balance == null) {
83-
ProgressView(modifier = modifier, text = stringResource(id = R.string.home__balance_loading))
83+
ProgressView(modifier = modifier, text = stringResource(id = R.string.home_balance_loading))
8484
} else {
8585
val isAmountRedacted = balanceDisplayMode == HomeAmountDisplayMode.REDACTED
8686
Column(
@@ -136,7 +136,7 @@ private fun OnChainBalance(
136136
) {
137137
TextWithIcon(
138138
text = if (balanceDisplayMode == HomeAmountDisplayMode.REDACTED) "****" else {
139-
stringResource(id = R.string.home__onchain_incoming, availableOnchainBalance.toPrettyString(preferredAmountUnit, fiatRate, withUnit = true))
139+
stringResource(id = R.string.home_onchain_incoming, availableOnchainBalance.toPrettyString(preferredAmountUnit, fiatRate, withUnit = true))
140140
},
141141
textStyle = MaterialTheme.typography.caption,
142142
icon = R.drawable.ic_chain,

phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/home/HomePayments.kt

+2-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import androidx.compose.ui.res.stringResource
3030
import androidx.compose.ui.text.style.TextAlign
3131
import androidx.compose.ui.unit.dp
3232
import androidx.compose.ui.unit.sp
33-
import fr.acinq.lightning.utils.sat
3433
import fr.acinq.phoenix.android.PaymentRowState
3534
import fr.acinq.phoenix.android.PaymentsViewModel
3635
import fr.acinq.phoenix.android.R
@@ -57,7 +56,7 @@ fun ColumnScope.PaymentsList(
5756
Column(modifier = modifier.weight(1f, fill = true), horizontalAlignment = Alignment.CenterHorizontally) {
5857
if (payments.isEmpty()) {
5958
Text(
60-
text = stringResource(id = R.string.home__payments_none),
59+
text = stringResource(id = R.string.home_payments_none),
6160
style = MaterialTheme.typography.caption.copy(textAlign = TextAlign.Center, fontSize = 14.sp),
6261
modifier = Modifier
6362
.padding(horizontal = 32.dp)
@@ -87,7 +86,7 @@ private fun ColumnScope.LatestPaymentsList(
8786
) {
8887
val morePaymentsButton: @Composable () -> Unit = {
8988
FilledButton(
90-
text = stringResource(id = R.string.home__payments_more_button),
89+
text = stringResource(id = R.string.home_payments_more_button),
9190
icon = R.drawable.ic_chevron_down,
9291
iconTint = MaterialTheme.typography.caption.color,
9392
onClick = onPaymentsHistoryClick,

0 commit comments

Comments
 (0)