Updated on 2026-08-14
This commit is contained in:
commit
d04d7459e8
10 changed files with 41 additions and 19 deletions
|
|
@ -64,7 +64,7 @@ dependencies {
|
|||
implementation 'com.google.android.material:material:1.2.1'
|
||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.10'
|
||||
|
||||
implementation 'com.tangem:blockchain:1.57.0'
|
||||
implementation 'com.tangem:blockchain:1.64.0'
|
||||
implementation 'com.tangem:core:1.63.0'
|
||||
implementation 'com.tangem:sdk:1.63.0'
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import android.content.pm.ActivityInfo
|
|||
import android.nfc.NfcAdapter
|
||||
import android.nfc.Tag
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.tangem.CardFilter
|
||||
import com.tangem.Config
|
||||
|
|
@ -77,7 +78,7 @@ class MainActivity : AppCompatActivity() {
|
|||
|
||||
override fun onNewIntent(intent: Intent?) {
|
||||
super.onNewIntent(intent)
|
||||
handleBackgroundScan(intent)
|
||||
Handler(mainLooper).postDelayed( { handleBackgroundScan(intent) } , 200)
|
||||
}
|
||||
|
||||
private fun handleBackgroundScan(intent: Intent?) {
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import com.tangem.tangem_sdk_new.extensions.init
|
|||
import com.tangem.tap.domain.tasks.CreateWalletAndRescanTask
|
||||
import com.tangem.tap.domain.tasks.ScanNoteResponse
|
||||
import com.tangem.tap.domain.tasks.ScanNoteTask
|
||||
import com.tangem.wallet.R
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import java.util.*
|
||||
|
|
@ -22,15 +23,18 @@ class TangemSdkManager(val activity: ComponentActivity) {
|
|||
)
|
||||
|
||||
suspend fun scanNote(): CompletionResult<ScanNoteResponse> {
|
||||
return runTaskAsyncReturnOnMain(ScanNoteTask())
|
||||
return runTaskAsyncReturnOnMain(ScanNoteTask(),
|
||||
initialMessage = Message(activity.getString(R.string.tap_to_scan)))
|
||||
}
|
||||
|
||||
suspend fun createWallet(cardId: String?): CompletionResult<ScanNoteResponse> {
|
||||
return runTaskAsyncReturnOnMain(CreateWalletAndRescanTask(), cardId)
|
||||
return runTaskAsyncReturnOnMain(CreateWalletAndRescanTask(), cardId,
|
||||
initialMessage = Message(activity.getString(R.string.tap_to_create_wallet)))
|
||||
}
|
||||
|
||||
suspend fun eraseWallet(cardId: String?): CompletionResult<PurgeWalletResponse> {
|
||||
return runTaskAsyncReturnOnMain(PurgeWalletCommand(), cardId)
|
||||
return runTaskAsyncReturnOnMain(PurgeWalletCommand(), cardId,
|
||||
initialMessage = Message(activity.getString(R.string.tap_to_purge_wallet)))
|
||||
}
|
||||
|
||||
suspend fun setPasscode(cardId: String?): CompletionResult<SetPinResponse> {
|
||||
|
|
@ -38,7 +42,7 @@ class TangemSdkManager(val activity: ComponentActivity) {
|
|||
pinType = PinType.Pin2,
|
||||
newPin1 = tangemSdk.config.defaultPin1.calculateSha256(),
|
||||
newPin2 = null
|
||||
), cardId)
|
||||
), cardId, initialMessage = Message(activity.getString(R.string.tap_to_change_passcode)))
|
||||
}
|
||||
|
||||
suspend fun setAccessCode(cardId: String?): CompletionResult<SetPinResponse> {
|
||||
|
|
@ -46,7 +50,7 @@ class TangemSdkManager(val activity: ComponentActivity) {
|
|||
pinType = PinType.Pin1,
|
||||
newPin1 = null,
|
||||
newPin2 = tangemSdk.config.defaultPin2.calculateSha256()
|
||||
), cardId)
|
||||
), cardId, initialMessage = Message(activity.getString(R.string.tap_to_change_access_code)))
|
||||
}
|
||||
|
||||
suspend fun setLongTap(cardId: String?): CompletionResult<SetPinResponse> {
|
||||
|
|
@ -54,7 +58,7 @@ class TangemSdkManager(val activity: ComponentActivity) {
|
|||
pinType = PinType.Pin1,
|
||||
newPin1 = tangemSdk.config.defaultPin1.calculateSha256(),
|
||||
newPin2 = tangemSdk.config.defaultPin2.calculateSha256()
|
||||
), cardId)
|
||||
), cardId, initialMessage = Message(activity.getString(R.string.tap_the_card)))
|
||||
}
|
||||
|
||||
private suspend fun <T : CommandResponse> runTaskAsync(
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.tangem.tap.features.send.redux
|
||||
|
||||
import com.tangem.Message
|
||||
import com.tangem.blockchain.common.Amount
|
||||
import com.tangem.tap.common.redux.ErrorAction
|
||||
import com.tangem.tap.common.redux.ToastNotificationAction
|
||||
|
|
@ -102,7 +103,7 @@ sealed class ReceiptAction : SendScreenAction {
|
|||
}
|
||||
|
||||
sealed class SendActionUi : SendScreenActionUi {
|
||||
object SendAmountToRecipient : SendScreenActionUi
|
||||
data class SendAmountToRecipient(val messageForSigner: Message) : SendScreenActionUi
|
||||
}
|
||||
|
||||
sealed class SendAction : SendScreenAction {
|
||||
|
|
|
|||
|
|
@ -35,14 +35,17 @@ val sendMiddleware: Middleware<AppState> = { dispatch, appState ->
|
|||
is AddressPayIdActionUi -> AddressPayIdMiddleware().handle(action, appState(), dispatch)
|
||||
is AmountActionUi -> AmountMiddleware().handle(action, appState(), dispatch)
|
||||
is RequestFee -> RequestFeeMiddleware().handle(appState(), dispatch)
|
||||
is SendActionUi.SendAmountToRecipient -> verifyAndSendTransaction(appState(), dispatch)
|
||||
is SendActionUi.SendAmountToRecipient ->
|
||||
verifyAndSendTransaction(action, appState(), dispatch)
|
||||
}
|
||||
nextDispatch(action)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun verifyAndSendTransaction(appState: AppState?, dispatch: (Action) -> Unit) {
|
||||
private fun verifyAndSendTransaction(
|
||||
action: SendActionUi.SendAmountToRecipient, appState: AppState?, dispatch: (Action) -> Unit
|
||||
) {
|
||||
val sendState = appState?.sendState ?: return
|
||||
val walletManager = appState.globalState.scanNoteResponse?.walletManager ?: return
|
||||
val recipientAddress = sendState.addressPayIdState.recipientWalletAddress ?: return
|
||||
|
|
@ -61,7 +64,8 @@ private fun verifyAndSendTransaction(appState: AppState?, dispatch: (Action) ->
|
|||
val txData = walletManager.createTransaction(amountToSend, feeAmount, recipientAddress)
|
||||
scope.launch {
|
||||
walletManager.update()
|
||||
val result = (walletManager as TransactionSender).send(txData, Signer(tangemSdk))
|
||||
val signer = Signer(tangemSdk, action.messageForSigner)
|
||||
val result = (walletManager as TransactionSender).send(txData, signer)
|
||||
withContext(Dispatchers.Main) {
|
||||
when (result) {
|
||||
is Result.Success -> {
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import android.view.inputmethod.EditorInfo
|
|||
import android.widget.EditText
|
||||
import androidx.core.view.postDelayed
|
||||
import androidx.core.widget.addTextChangedListener
|
||||
import com.tangem.Message
|
||||
import com.tangem.merchant.common.toggleWidget.ToggleWidget
|
||||
import com.tangem.tangem_sdk_new.extensions.hideSoftKeyboard
|
||||
import com.tangem.tap.common.KeyboardObserver
|
||||
|
|
@ -65,7 +66,9 @@ class SendFragment : BaseStoreFragment(R.layout.fragment_send) {
|
|||
setupFeeLayout()
|
||||
|
||||
btnSend.setOnClickListener {
|
||||
store.dispatch(SendActionUi.SendAmountToRecipient)
|
||||
store.dispatch(SendActionUi.SendAmountToRecipient(
|
||||
Message(getString(R.string.tap_to_sign))
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -205,7 +208,8 @@ class SendFragment : BaseStoreFragment(R.layout.fragment_send) {
|
|||
val sp = requireContext().getSharedPreferences("SendScreen", Context.MODE_PRIVATE)
|
||||
val mainCurrency = sp.getString("mainCurrency", TapCurrency.DEFAULT_FIAT_CURRENCY)
|
||||
val foundType = MainCurrencyType.values()
|
||||
.firstOrNull { it.name.toLowerCase() == mainCurrency!!.toLowerCase() } ?: MainCurrencyType.FIAT
|
||||
.firstOrNull { it.name.toLowerCase() == mainCurrency!!.toLowerCase() }
|
||||
?: MainCurrencyType.FIAT
|
||||
return foundType
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -144,9 +144,9 @@ private fun internalReduce(action: Action, state: AppState): WalletState {
|
|||
val cardPublicKey = action.card.cardPublicKey?.toHexString()
|
||||
val artworkUrl = if (cardPublicKey != null && action.artworkId != null) {
|
||||
TangemService.getUrlForArtwork(cardId, cardPublicKey, action.artworkId)
|
||||
} else if (action.card.cardData?.batchId == Artwork.SERGIO_BATCH) {
|
||||
} else if (action.card.cardId.startsWith(Artwork.SERGIO_CARD_ID)) {
|
||||
Artwork.SERGIO_CARD_URL
|
||||
} else if (action.card.cardData?.batchId == Artwork.MARTA_BATCH) {
|
||||
} else if (action.card.cardId.startsWith(Artwork.MARTA_CARD_ID)) {
|
||||
Artwork.MARTA_CARD_URL
|
||||
} else {
|
||||
Artwork.DEFAULT_IMG_URL
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ data class Artwork(
|
|||
const val DEFAULT_IMG_URL = "https://app.tangem.com/cards/card_default.png"
|
||||
const val SERGIO_CARD_URL = "https://app.tangem.com/cards/card_tg059.png"
|
||||
const val MARTA_CARD_URL = "https://app.tangem.com/cards/card_tg083.png"
|
||||
const val SERGIO_BATCH = "tg059"
|
||||
const val MARTA_BATCH = "tg083"
|
||||
const val SERGIO_CARD_ID = "BC01"
|
||||
const val MARTA_CARD_ID = "BC02"
|
||||
}
|
||||
}
|
||||
|
|
@ -215,8 +215,8 @@ class WalletFragment : Fragment(R.layout.fragment_wallet), StoreSubscriber<Walle
|
|||
CreatingPayIdState.EnterPayId -> {
|
||||
if (dialog == null) dialog = PayIdDialog(requireContext()).apply {
|
||||
this.show()
|
||||
this.stopProgress()
|
||||
}
|
||||
(dialog as? PayIdDialog)?.stopProgress()
|
||||
}
|
||||
CreatingPayIdState.Waiting -> (dialog as? PayIdDialog)?.showProgress()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,14 @@
|
|||
<string name="generic_and">and</string>
|
||||
<string name="generic_warning">Warning</string>
|
||||
|
||||
<string name="tap_to_scan">Tap to scan</string>
|
||||
<string name="tap_the_card">Tap the card</string>
|
||||
<string name="tap_to_sign">Tap to sign</string>
|
||||
<string name="tap_to_purge_wallet">Tap to purge wallet</string>
|
||||
<string name="tap_to_create_wallet">Tap to create wallet</string>
|
||||
<string name="tap_to_change_passcode">Tap to change passcode</string>
|
||||
<string name="tap_to_change_access_code">Tap to change access code</string>
|
||||
|
||||
<string name="notification_address_copied">Address was successfully copied</string>
|
||||
<string name="notification_no_internet">No internet connection</string>
|
||||
<string name="notification_no_internet_retry">@string/generic_retry</string>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue