diff --git a/app/src/main/java/com/tangem/domain/wallet/BalanceValidator.java b/app/src/main/java/com/tangem/domain/wallet/BalanceValidator.java index 0aa7695240..a12ce32564 100644 --- a/app/src/main/java/com/tangem/domain/wallet/BalanceValidator.java +++ b/app/src/main/java/com/tangem/domain/wallet/BalanceValidator.java @@ -30,7 +30,7 @@ public class BalanceValidator { secondLine = ""; // rule 1 - if(!CheckOfflineBalance(card) && !CheckOnlineBalance(card)) { + if((!CheckOfflineBalance(card) && !CheckOnlineBalance(card)) || (!CheckOnlineBalance(card) && HasEverSigned(card))) { score = 0; firstLine = "Unknown balance"; secondLine = "Balance cannot be verified. Swipe down to refresh."; @@ -62,10 +62,20 @@ public class BalanceValidator { } // rule 5 - if(IsLostSecondRead(card)) + if(!isCodeConfirmed(card)) { score = 0; - secondLine = "Wallet and note keys were not verified. Tap again. "; + firstLine = "Not genuine banknote"; + secondLine = "Firmware binary code verification failed"; + return; + } + + // rule 5 + if(card.PIN2 == TangemCard.PIN2_Mode.CustomPIN2) + { + score = 0; + firstLine = "Locked with PIN2"; + secondLine = "Ask the holder to disable PIN2 before accepting"; return; } @@ -79,7 +89,7 @@ public class BalanceValidator { } // rule 4 TODO: need to check SignedHashed against number of outputs in blockchain - if(HasEverSigned(card)) + if(HasEverSigned(card) && card.getBalance() != 0) { score = 80; firstLine = "Unguaranteed balance"; @@ -87,7 +97,7 @@ public class BalanceValidator { return; } // rule 7 - if(CheckOfflineBalance(card) && !CheckOnlineBalance(card)) + if(CheckOfflineBalance(card) && !CheckOnlineBalance(card) && !HasEverSigned(card) && card.getBalance() != 0) { score = 80; firstLine = "Verified offline balance"; @@ -157,8 +167,8 @@ public class BalanceValidator { return card.getBalanceUnconfirmed()!=0; } - boolean IsLostSecondRead(TangemCard card) + boolean isCodeConfirmed(TangemCard card) { - return card.isCodeConfirmed() != null; + return card.isCodeConfirmed() == null || card.isCodeConfirmed(); } } diff --git a/app/src/main/java/com/tangem/domain/wallet/TangemCard.java b/app/src/main/java/com/tangem/domain/wallet/TangemCard.java index e8833c4280..f434872827 100644 --- a/app/src/main/java/com/tangem/domain/wallet/TangemCard.java +++ b/app/src/main/java/com/tangem/domain/wallet/TangemCard.java @@ -47,11 +47,11 @@ public class TangemCard { private float rate = 0; private float rateAlter = 0; +// public static final int SettingsMask_AllowSwapPIN = 0x0010; // public static final int SettingsMask_IsReusable = 0x0001; // public static final int SettingsMask_UseRecovery = 0x0002; // public static final int SettingsMask_UseBlock = 0x0004; // -// public static final int SettingsMask_AllowSwapPIN = 0x0010; // public static final int SettingsMask_AllowSwapPIN2 = 0x0020; // public static final int SettingsMask_UseCVC = 0x0040; // diff --git a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt index d94444f461..b43633b534 100644 --- a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt +++ b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt @@ -201,9 +201,9 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific } btnExtract.setOnClickListener { - if (!mCard!!.hasBalanceInfo()) { - - } else if (!engine!!.IsBalanceNotZero(mCard)) + if (!mCard!!.hasBalanceInfo()) + Toast.makeText(context, R.string.cannot_obtain_data_from_blockchain, Toast.LENGTH_LONG).show() + else if (!engine!!.IsBalanceNotZero(mCard)) Toast.makeText(context, R.string.wallet_empty, Toast.LENGTH_LONG).show() else if (!engine.IsBalanceAlterNotZero(mCard)) Toast.makeText(context, R.string.not_enough_funds, Toast.LENGTH_LONG).show() @@ -213,11 +213,12 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific Toast.makeText(context, R.string.please_wait_for_confirmation, Toast.LENGTH_LONG).show() else if (mCard!!.remainingSignatures == 0) Toast.makeText(context, R.string.card_hasn_t_remaining_signature, Toast.LENGTH_LONG).show() - - val intent = Intent(context, PreparePaymentActivity::class.java) - intent.putExtra("UID", mCard!!.uid) - intent.putExtra("Card", mCard!!.asBundle) - startActivityForResult(intent, REQUEST_CODE_SEND_PAYMENT) + else { + val intent = Intent(context, PreparePaymentActivity::class.java) + intent.putExtra("UID", mCard!!.uid) + intent.putExtra("Card", mCard!!.asBundle) + startActivityForResult(intent, REQUEST_CODE_SEND_PAYMENT) + } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d171b07ce0..ef40669a92 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -92,7 +92,7 @@ Not enough funds for transaction fee (gas)! Please wait while previous transaction is confirmed in blockchain Could not obtain all inputs. Swipe down to refresh. - Card hasn\'t remaining signature! + Card has no remaining signature! REUSABLE WALLET BANKNOTE NON-TRANSFERABLE BANKNOTE