Skip to content

Commit 2a3750e

Browse files
committed
Merge remote-tracking branch 'origin/feature/MOBILE-614'
2 parents 5b9ef22 + 9b38fc7 commit 2a3750e

20 files changed

Lines changed: 104 additions & 24 deletions

File tree

app/src/main/java/cash/p/terminal/modules/send/SendFragment.kt

Lines changed: 85 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@ import androidx.compose.foundation.layout.fillMaxSize
66
import androidx.compose.foundation.layout.systemBarsPadding
77
import androidx.compose.material3.Text
88
import androidx.compose.runtime.Composable
9+
import androidx.compose.runtime.LaunchedEffect
910
import androidx.compose.runtime.remember
1011
import androidx.compose.ui.Alignment
1112
import androidx.compose.ui.Modifier
1213
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
1314
import androidx.compose.ui.platform.LocalView
1415
import androidx.compose.ui.platform.SoftwareKeyboardController
16+
import androidx.compose.ui.res.stringResource
1517
import androidx.navigation.NavController
1618
import androidx.navigation.fragment.navArgs
1719
import androidx.navigation.navGraphViewModels
@@ -21,6 +23,11 @@ import cash.p.terminal.core.App
2123
import cash.p.terminal.core.ISendBitcoinAdapter
2224
import cash.p.terminal.core.ISendEthereumAdapter
2325
import cash.p.terminal.core.ISendTonAdapter
26+
import cash.p.terminal.core.ISendZcashAdapter
27+
import cash.p.terminal.core.ISendSolanaAdapter
28+
import cash.p.terminal.core.ISendMoneroAdapter
29+
import cash.p.terminal.core.ISendStellarAdapter
30+
import cash.p.terminal.core.ISendTronAdapter
2431
import cash.p.terminal.core.authorizedAction
2532
import cash.p.terminal.entities.Address
2633
import cash.p.terminal.modules.amount.AmountInputModeModule
@@ -68,6 +75,7 @@ import kotlinx.parcelize.Parcelize
6875
import cash.p.terminal.core.getKoinInstance
6976
import cash.p.terminal.core.managers.PoisonAddressManager
7077
import org.koin.java.KoinJavaComponent.inject
78+
import timber.log.Timber
7179
import java.math.BigDecimal
7280

7381
class SendFragment : BaseComposeFragment() {
@@ -114,11 +122,11 @@ class SendFragment : BaseComposeFragment() {
114122
BlockchainType.Dash -> {
115123
val adapter: ISendBitcoinAdapter? = App.adapterManager.getAdapterForWallet(wallet)
116124
if (adapter == null) {
117-
HudHelper.showErrorMessage(
118-
LocalView.current,
119-
"No adapter for wallet $wallet"
125+
MissingWalletAdapterEffect(
126+
navController = navController,
127+
coinUid = wallet.coin.uid,
128+
coinCode = wallet.coin.code,
120129
)
121-
navController.navigateUp()
122130
return
123131
}
124132
val factory = SendBitcoinModule.Factory(wallet, address, hideAddress, adapter)
@@ -146,7 +154,16 @@ class SendFragment : BaseComposeFragment() {
146154
}
147155

148156
BlockchainType.Zcash -> {
149-
val factory = SendZCashModule.Factory(wallet, address, hideAddress)
157+
val adapter: ISendZcashAdapter? = App.adapterManager.getAdapterForWallet(wallet)
158+
if (adapter == null) {
159+
MissingWalletAdapterEffect(
160+
navController = navController,
161+
coinUid = wallet.coin.uid,
162+
coinCode = wallet.coin.code,
163+
)
164+
return
165+
}
166+
val factory = SendZCashModule.Factory(wallet, address, hideAddress, adapter)
150167
val sendZCashViewModel by navGraphViewModels<SendZCashViewModel>(R.id.sendXFragment) {
151168
factory
152169
}
@@ -181,11 +198,11 @@ class SendFragment : BaseComposeFragment() {
181198
BlockchainType.ArbitrumOne -> {
182199
val adapter: ISendEthereumAdapter? = App.adapterManager.getAdapterForWallet(wallet)
183200
if (adapter == null) {
184-
HudHelper.showErrorMessage(
185-
LocalView.current,
186-
"No adapter for wallet $wallet"
201+
MissingWalletAdapterEffect(
202+
navController = navController,
203+
coinUid = wallet.coin.uid,
204+
coinCode = wallet.coin.code,
187205
)
188-
navController.navigateUp()
189206
return
190207
}
191208
val factory = SendEvmModule.Factory(wallet, address, hideAddress, adapter)
@@ -213,7 +230,16 @@ class SendFragment : BaseComposeFragment() {
213230
}
214231

215232
BlockchainType.Solana -> {
216-
val factory = SendSolanaModule.Factory(wallet, address, hideAddress)
233+
val adapter: ISendSolanaAdapter? = App.adapterManager.getAdapterForWallet(wallet)
234+
if (adapter == null) {
235+
MissingWalletAdapterEffect(
236+
navController = navController,
237+
coinUid = wallet.coin.uid,
238+
coinCode = wallet.coin.code,
239+
)
240+
return
241+
}
242+
val factory = SendSolanaModule.Factory(wallet, address, hideAddress, adapter)
217243
val sendSolanaViewModel by navGraphViewModels<SendSolanaViewModel>(R.id.sendXFragment) { factory }
218244
Box(
219245
modifier = Modifier
@@ -237,11 +263,11 @@ class SendFragment : BaseComposeFragment() {
237263
BlockchainType.Ton -> {
238264
val adapter: ISendTonAdapter? = App.adapterManager.getAdapterForWallet(wallet)
239265
if (adapter == null) {
240-
HudHelper.showErrorMessage(
241-
LocalView.current,
242-
"No adapter for wallet $wallet"
266+
MissingWalletAdapterEffect(
267+
navController = navController,
268+
coinUid = wallet.coin.uid,
269+
coinCode = wallet.coin.code,
243270
)
244-
navController.navigateUp()
245271
return
246272
}
247273
val factory = SendTonModule.Factory(wallet, address, hideAddress, adapter)
@@ -266,7 +292,16 @@ class SendFragment : BaseComposeFragment() {
266292
}
267293

268294
BlockchainType.Tron -> {
269-
val factory = SendTronModule.Factory(wallet, address, hideAddress)
295+
val adapter: ISendTronAdapter? = App.adapterManager.getAdapterForWallet(wallet)
296+
if (adapter == null) {
297+
MissingWalletAdapterEffect(
298+
navController = navController,
299+
coinUid = wallet.coin.uid,
300+
coinCode = wallet.coin.code,
301+
)
302+
return
303+
}
304+
val factory = SendTronModule.Factory(wallet, address, hideAddress, adapter)
270305
val sendTronViewModel by navGraphViewModels<SendTronViewModel>(R.id.sendXFragment) { factory }
271306
Box(
272307
modifier = Modifier
@@ -288,7 +323,16 @@ class SendFragment : BaseComposeFragment() {
288323
}
289324

290325
BlockchainType.Monero -> {
291-
val factory = SendMoneroModule.Factory(wallet, address, hideAddress)
326+
val adapter: ISendMoneroAdapter? = App.adapterManager.getAdapterForWallet(wallet)
327+
if (adapter == null) {
328+
MissingWalletAdapterEffect(
329+
navController = navController,
330+
coinUid = wallet.coin.uid,
331+
coinCode = wallet.coin.code,
332+
)
333+
return
334+
}
335+
val factory = SendMoneroModule.Factory(wallet, address, hideAddress, adapter)
292336
val sendMoneroViewModel by navGraphViewModels<SendMoneroViewModel>(R.id.sendXFragment) { factory }
293337
Box(
294338
modifier = Modifier
@@ -310,7 +354,16 @@ class SendFragment : BaseComposeFragment() {
310354
}
311355

312356
BlockchainType.Stellar -> {
313-
val factory = SendStellarModule.Factory(wallet, address, hideAddress)
357+
val adapter: ISendStellarAdapter? = App.adapterManager.getAdapterForWallet(wallet)
358+
if (adapter == null) {
359+
MissingWalletAdapterEffect(
360+
navController = navController,
361+
coinUid = wallet.coin.uid,
362+
coinCode = wallet.coin.code,
363+
)
364+
return
365+
}
366+
val factory = SendStellarModule.Factory(wallet, address, hideAddress, adapter)
314367
val sendStellarViewModel by navGraphViewModels<SendStellarViewModel>(R.id.sendXFragment) { factory }
315368
SendStellarScreen(
316369
title = title,
@@ -340,6 +393,21 @@ class SendFragment : BaseComposeFragment() {
340393
}
341394
}
342395

396+
@Composable
397+
private fun MissingWalletAdapterEffect(
398+
navController: NavController,
399+
coinUid: String,
400+
coinCode: String,
401+
) {
402+
val view = LocalView.current
403+
val message = stringResource(R.string.send_error_adapter_not_found, coinCode)
404+
LaunchedEffect(coinUid) {
405+
Timber.w("No adapter for wallet %s", coinUid)
406+
HudHelper.showErrorMessage(view, message)
407+
navController.navigateUp()
408+
}
409+
}
410+
343411
private fun NavController.handleProceedAction(
344412
data: ProceedActionData,
345413
keyboardController: SoftwareKeyboardController?

app/src/main/java/cash/p/terminal/modules/send/monero/SendMoneroModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ object SendMoneroModule {
2121
private val wallet: Wallet,
2222
private val address: Address?,
2323
private val hideAddress: Boolean,
24+
private val adapter: ISendMoneroAdapter
2425
) : ViewModelProvider.Factory {
2526
private val adapterManager: IAdapterManager by inject(IAdapterManager::class.java)
26-
val adapter = (adapterManager.getAdapterForWalletOld(wallet) as? ISendMoneroAdapter) ?: throw IllegalStateException("SendMoneroAdapter is null")
2727

2828
@Suppress("UNCHECKED_CAST")
2929
override fun <T : ViewModel> create(modelClass: Class<T>): T {

app/src/main/java/cash/p/terminal/modules/send/solana/SendSolanaModule.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,10 @@ object SendSolanaModule {
2828
private val wallet: Wallet,
2929
private val address: Address?,
3030
private val hideAddress: Boolean,
31+
private val adapter: ISendSolanaAdapter
3132
) : ViewModelProvider.Factory {
3233
private val adapterManager: IAdapterManager by inject(IAdapterManager::class.java)
3334
private val pendingRegistrar: PendingTransactionRegistrar by inject(PendingTransactionRegistrar::class.java)
34-
val adapter = (adapterManager.getAdapterForWalletOld(wallet) as? ISendSolanaAdapter)
35-
?: throw IllegalStateException("SendSolanaAdapter is null")
3635

3736
@Suppress("UNCHECKED_CAST")
3837
override fun <T : ViewModel> create(modelClass: Class<T>): T {

app/src/main/java/cash/p/terminal/modules/send/stellar/SendStellarModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ object SendStellarModule {
2121
private val wallet: Wallet,
2222
private val address: Address?,
2323
private val hideAddress: Boolean,
24+
private val adapter: ISendStellarAdapter
2425
) : ViewModelProvider.Factory {
2526
private val adapterManager: IAdapterManager by inject(IAdapterManager::class.java)
26-
val adapter = adapterManager.getAdapterForWallet<ISendStellarAdapter>(wallet) ?: throw IllegalStateException("ISendStellarAdapter is null")
2727

2828
@Suppress("UNCHECKED_CAST")
2929
override fun <T : ViewModel> create(modelClass: Class<T>): T {

app/src/main/java/cash/p/terminal/modules/send/tron/SendTronModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ object SendTronModule {
2424
private val wallet: Wallet,
2525
private val address: Address?,
2626
private val hideAddress: Boolean,
27+
private val adapter: ISendTronAdapter
2728
) : ViewModelProvider.Factory {
2829
private val adapterManager: IAdapterManager by inject(IAdapterManager::class.java)
29-
val adapter = (adapterManager.getAdapterForWalletOld(wallet) as? ISendTronAdapter) ?: throw IllegalStateException("SendTronAdapter is null")
3030

3131
@Suppress("UNCHECKED_CAST")
3232
override fun <T : ViewModel> create(modelClass: Class<T>): T {

app/src/main/java/cash/p/terminal/modules/send/zcash/SendZCashModule.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,9 @@ object SendZCashModule {
2020
private val wallet: Wallet,
2121
private val address: Address?,
2222
private val hideAddress: Boolean,
23+
private val adapter: ISendZcashAdapter
2324
) : ViewModelProvider.Factory {
2425
private val adapterManager: IAdapterManager by inject(IAdapterManager::class.java)
25-
val adapter =
26-
(adapterManager.getAdapterForWalletOld(wallet) as? ISendZcashAdapter) ?: throw IllegalStateException("SendZcashAdapter is null")
2726
private val pendingRegistrar: PendingTransactionRegistrar by inject(PendingTransactionRegistrar::class.java)
2827

2928
@Suppress("UNCHECKED_CAST")

core/strings/src/main/res/values-ar/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<!--Common-->
44
<string name="Error_ParameterNotSet">لم يتم تحديد الإعدادات</string>
55
<string name="error_account_not_found">الحساب غير موجود</string>
6+
<string name="send_error_adapter_not_found">لم يتم العثور على المحول لمحفظة %1$s</string>
67
<string name="LargeNumberFormat">%1$s%2$s</string>
78
<string name="Alert_Cancel">إلغاء</string>
89
<string name="Alert_Copy">نسخ</string>

core/strings/src/main/res/values-de/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<!--Common-->
44
<string name="Error_ParameterNotSet">Parameter ist nicht festgelegt</string>
55
<string name="error_account_not_found">Konto nicht gefunden</string>
6+
<string name="send_error_adapter_not_found">Adapter für Wallet %1$s nicht gefunden</string>
67
<string name="LargeNumberFormat">%1$s%2$s</string>
78
<string name="Alert_Cancel">Abbrechen</string>
89
<string name="Alert_Copy">Kopieren</string>

core/strings/src/main/res/values-es/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<!--Common-->
44
<string name="Error_ParameterNotSet">Parámetro no establecido</string>
55
<string name="error_account_not_found">Cuenta no encontrada</string>
6+
<string name="send_error_adapter_not_found">No se encontró el adaptador para la billetera %1$s</string>
67
<string name="LargeNumberFormat">%1$s%2$s</string>
78
<string name="Alert_Cancel">Cancelar</string>
89
<string name="Alert_Copy">Copiar</string>

core/strings/src/main/res/values-fa/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<!--Common-->
44
<string name="Error_ParameterNotSet">Parameter is not set</string>
55
<string name="error_account_not_found">حساب یافت نشد</string>
6+
<string name="send_error_adapter_not_found">آداپتور برای کیف پول %1$s یافت نشد</string>
67
<string name="LargeNumberFormat">%1$s%2$s</string>
78
<string name="Alert_Cancel">انصراف</string>
89
<string name="Alert_Copy">رونوشت</string>

0 commit comments

Comments
 (0)