diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ClickableWithdrawal.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ClickableWithdrawal.kt index 3a10db49e..5a5d6db32 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ClickableWithdrawal.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ClickableWithdrawal.kt @@ -2,6 +2,7 @@ package com.vitorpamplona.amethyst.ui.components import android.content.Intent import android.net.Uri +import android.widget.Toast import androidx.compose.animation.Crossfade import androidx.compose.foundation.text.ClickableText import androidx.compose.material.LocalTextStyle @@ -12,6 +13,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.style.TextDirection import androidx.core.content.ContextCompat +import com.vitorpamplona.amethyst.R import com.vitorpamplona.quartz.encoders.LnWithdrawalUtil import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -41,10 +43,7 @@ fun MayBeWithdrawal(lnurlWord: String) { @Composable fun ClickableWithdrawal(withdrawalString: String) { val context = LocalContext.current - - val uri = remember(withdrawalString) { - Uri.parse("lightning:$withdrawalString") - } + val scope = rememberCoroutineScope() val withdraw = remember(withdrawalString) { AnnotatedString("$withdrawalString ") @@ -53,9 +52,18 @@ fun ClickableWithdrawal(withdrawalString: String) { ClickableText( text = withdraw, onClick = { - runCatching { - val intent = Intent(Intent.ACTION_VIEW, uri) + try { + val intent = Intent(Intent.ACTION_VIEW, Uri.parse("lightning:$withdrawalString")) + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK ContextCompat.startActivity(context, intent, null) + } catch (e: Exception) { + scope.launch { + Toast.makeText( + context, + context.getString(R.string.lightning_wallets_not_found), + Toast.LENGTH_LONG + ).show() + } } }, style = LocalTextStyle.current.copy(color = MaterialTheme.colors.primary) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/InvoicePreview.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/InvoicePreview.kt index 87d6179df..52c0f2c50 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/InvoicePreview.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/InvoicePreview.kt @@ -2,6 +2,7 @@ package com.vitorpamplona.amethyst.ui.components import android.content.Intent import android.net.Uri +import android.widget.Toast import androidx.compose.animation.Crossfade import androidx.compose.foundation.border import androidx.compose.foundation.layout.Column @@ -66,6 +67,7 @@ fun MayBeInvoicePreview(lnbcWord: String) { @Composable fun InvoicePreview(lnInvoice: String, amount: String?) { val context = LocalContext.current + val scope = rememberCoroutineScope() Column( modifier = Modifier @@ -118,9 +120,18 @@ fun InvoicePreview(lnInvoice: String, amount: String?) { .fillMaxWidth() .padding(vertical = 10.dp), onClick = { - runCatching { + try { val intent = Intent(Intent.ACTION_VIEW, Uri.parse("lightning:$lnInvoice")) + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK startActivity(context, intent, null) + } catch (e: Exception) { + scope.launch { + Toast.makeText( + context, + context.getString(R.string.lightning_wallets_not_found), + Toast.LENGTH_LONG + ).show() + } } }, shape = QuoteBorder, diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt index 35213f3dc..bc6eaab68 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt @@ -186,9 +186,12 @@ class AccountViewModel(val account: Account) : ViewModel() { onProgress(0f) } } else { - runCatching { + try { val intent = Intent(Intent.ACTION_VIEW, Uri.parse("lightning:$it")) + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK ContextCompat.startActivity(context, intent, null) + } catch (e: Exception) { + onError(context.getString(R.string.lightning_wallets_not_found)) } onProgress(0f) } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt index 1985b72b6..0654d3be9 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt @@ -1050,9 +1050,18 @@ fun DisplayLNAddress( } } } else { - runCatching { + try { val intent = Intent(Intent.ACTION_VIEW, Uri.parse("lightning:$it")) + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK ContextCompat.startActivity(context, intent, null) + } catch (e: Exception) { + scope.launch { + Toast.makeText( + context, + context.getString(R.string.lightning_wallets_not_found), + Toast.LENGTH_LONG + ).show() + } } } }, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7bb0ea5dc..e1ecc33a2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -552,5 +552,6 @@ Update your status + Error parsing error message Votes are weighted by the zap amount. You can set a minimum amount to avoid spammers and a maximum amount to avoid a large zappers taking over the poll. Use the same amount in both fields to make sure every vote is valued the same amount. Leave it empty to accept any amount.