diff --git a/app/src/main/java/com/tangem/data/nfc/ReadCardInfoTask.java b/app/src/main/java/com/tangem/data/nfc/ReadCardInfoTask.java index 34819b715f..ce7e62dbac 100644 --- a/app/src/main/java/com/tangem/data/nfc/ReadCardInfoTask.java +++ b/app/src/main/java/com/tangem/data/nfc/ReadCardInfoTask.java @@ -79,7 +79,7 @@ public class ReadCardInfoTask extends Thread { if (protocol.haveReadResult()) { //already have read result (obtained while get supported encryption), only read issuer data and define offline balance protocol.parseReadResult(); - protocol.run_ReadOrWriteIssuerDataAndDefineOfflineBalance(); + protocol.run_ReadWriteIssuerData(); mNotifications.OnReadProgress(protocol, 60); PINStorage.setLastUsedPIN(protocol.getCard().getPIN()); } else { diff --git a/app/src/main/java/com/tangem/domain/cardReader/CardProtocol.java b/app/src/main/java/com/tangem/domain/cardReader/CardProtocol.java index dae5d50b8e..ccfd198590 100644 --- a/app/src/main/java/com/tangem/domain/cardReader/CardProtocol.java +++ b/app/src/main/java/com/tangem/domain/cardReader/CardProtocol.java @@ -423,7 +423,7 @@ public class CardProtocol { parseReadResult(); - run_ReadOrWriteIssuerDataAndDefineOfflineBalance(); + run_ReadWriteIssuerData(); } else if (rspApdu.isStatus(SW_PIN_ERROR)) { throw new TangemException_InvalidPIN(String.format("FAILED: [%04X] - Possible PIN is invalid!\n", rspApdu.getSW1SW2())); @@ -432,7 +432,7 @@ public class CardProtocol { } } - public void run_ReadOrWriteIssuerDataAndDefineOfflineBalance() throws Exception { + public void run_ReadWriteIssuerData() throws Exception { TLVList tlvIssuerData; if (mCard.getNeedWriteIssuerData()) { run_WriteIssuerData(mCard.getIssuerData(), mCard.getIssuerDataSignature()); @@ -450,16 +450,24 @@ public class CardProtocol { tlvIssuerData = null; } } + + // try read offline balance data if (mCard.getStatus() == TangemCard.Status.Loaded) { - // try read offline balance data - if (tlvIssuerData != null && tlvIssuerData.getTLV(TLV.Tag.TAG_Denomination) != null && mCard.getMaxSignatures() == mCard.getRemainingSignatures()) { - mCard.setOfflineBalance(tlvIssuerData.getTLV(TLV.Tag.TAG_Denomination).Value); + if (tlvIssuerData != null && tlvIssuerData.getTLV(TLV.Tag.TAG_ValidatedBalance) != null && mCard.getMaxSignatures() == mCard.getRemainingSignatures()) { + mCard.setOfflineBalance(tlvIssuerData.getTLV(TLV.Tag.TAG_ValidatedBalance).Value); } else { mCard.clearOfflineBalance(); } } else { mCard.clearOfflineBalance(); } + + // try read denomination + if (tlvIssuerData != null && tlvIssuerData.getTLV(TLV.Tag.TAG_Denomination) != null) { + mCard.setDenomination(tlvIssuerData.getTLV(TLV.Tag.TAG_Denomination).Value); + } else { + mCard.clearDenomination(); + } } private TLVList readResult = null; diff --git a/app/src/main/java/com/tangem/domain/cardReader/TLV.java b/app/src/main/java/com/tangem/domain/cardReader/TLV.java index 33326d36c8..57a1cc68ca 100644 --- a/app/src/main/java/com/tangem/domain/cardReader/TLV.java +++ b/app/src/main/java/com/tangem/domain/cardReader/TLV.java @@ -88,7 +88,7 @@ public class TLV { TAG_Token_Symbol(0xA0), TAG_Token_Contract_Address(0xA1), TAG_Token_Decimal(0xA2), - TAG_Denomination(/*0xC0*/0xee), //TODO: quick fix + TAG_Denomination(0xC0), TAG_ValidatedBalance(0xC1), TAG_LastSign_Date(0xC2); diff --git a/app/src/main/java/com/tangem/domain/wallet/Blockchain.java b/app/src/main/java/com/tangem/domain/wallet/Blockchain.java index 34ba4cda21..a346758372 100644 --- a/app/src/main/java/com/tangem/domain/wallet/Blockchain.java +++ b/app/src/main/java/com/tangem/domain/wallet/Blockchain.java @@ -12,7 +12,7 @@ public enum Blockchain { BitcoinTestNet("BTC/test", "BTC", 100000000.0, R.drawable.ic_logo_bitcoin_testnet, "Bitcoin Testnet"), Ethereum("ETH", "ETH", 1.0, R.drawable.ic_logo_ethereum, "Ethereum"), EthereumTestNet("ETH/test", "ETH", 1.0, R.drawable.ic_logo_ethereum_testnet, "Ethereum Testnet"), - Token("ETH\\XTZ", "BAT", 1.0, R.drawable.ic_logo_bat_token, "Ethereum"), + Token("Token", "ERC20", 1.0, R.drawable.ic_logo_bat_token, "Ethereum"), BitcoinCash("BCH", "BCH", 100000000.0, R.drawable.ic_logo_bitcoin_cash, "Bitcoin Cash"), BitcoinCashTestNet("BCH/test", "BTC", 100000000.0, R.drawable.ic_logo_bitcoin_cash, "Bitcoin Cash Testnet"); @@ -89,7 +89,7 @@ public enum Blockchain { case "BTC": return R.drawable.ic_logo_bitcoin; - case "ETH\\XTZ": + case "Token": if (symbolName.equals("SEED")) return R.drawable.ic_logo_seed; else diff --git a/app/src/main/java/com/tangem/domain/wallet/EthEngine.java b/app/src/main/java/com/tangem/domain/wallet/EthEngine.java index be2bdd884f..08e8c62007 100644 --- a/app/src/main/java/com/tangem/domain/wallet/EthEngine.java +++ b/app/src/main/java/com/tangem/domain/wallet/EthEngine.java @@ -104,7 +104,7 @@ public class EthEngine extends CoinEngine { BigDecimal d = convertToEth(dec); String s = d.toString(); - String pattern = "#0.000"; // If you like 4 zeros + String pattern = "#0.000###############"; // If you like 4 zeros DecimalFormat myFormatter = new DecimalFormat(pattern); String output = myFormatter.format(d); return output; 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 06bcefe213..68e0657d1d 100644 --- a/app/src/main/java/com/tangem/domain/wallet/TangemCard.java +++ b/app/src/main/java/com/tangem/domain/wallet/TangemCard.java @@ -11,6 +11,7 @@ import com.tangem.wallet.R; import java.math.BigInteger; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -1365,16 +1366,36 @@ public class TangemCard { countConfirmTX = new BigInteger(B.getString("confirmTx"), 16); } + private final static char[] hexArray = "0123456789ABCDEF".toCharArray(); + public static String bytesToHex(byte[] bytes) { + if (bytes == null) return ""; + char[] hexChars = new char[bytes.length * 2]; + for ( int j = 0; j < bytes.length; j++ ) { + int v = bytes[j] & 0xFF; + hexChars[j * 2] = hexArray[v >>> 4]; + hexChars[j * 2 + 1] = hexArray[v & 0x0F]; + } + return new String(hexChars); + } + public int getCardImageResource() { switch (getBlockchainID()) { case "BTC": - return R.drawable.card_btc001; + if ( bytesToHex(getDenomination()).equals("40420F0000000000") ) + return R.drawable.card_btc001; + else if (bytesToHex(getDenomination()).equals("404B4C0000000000") ) + return R.drawable.card_btc005; + else + return R.drawable.card_default; - case "ETH\\XTZ": - return R.drawable.card_seed; + case "Token": + if (getTokenSymbol().equals("SEED")) + return R.drawable.card_seed; + else + return R.drawable.card_default; default: - return R.drawable.card_btc001; + return R.drawable.card_default; } } diff --git a/app/src/main/java/com/tangem/domain/wallet/TokenEngine.java b/app/src/main/java/com/tangem/domain/wallet/TokenEngine.java index 3f97c59e34..a91ccf3a18 100644 --- a/app/src/main/java/com/tangem/domain/wallet/TokenEngine.java +++ b/app/src/main/java/com/tangem/domain/wallet/TokenEngine.java @@ -107,7 +107,7 @@ public class TokenEngine extends CoinEngine { BigDecimal d = convertToEth(dec); String s = d.toString(); - String pattern = "#0.000"; // If you like 4 zeros + String pattern = "#0.000###############"; // If you like 4 zeros DecimalFormat myFormatter = new DecimalFormat(pattern); String output = myFormatter.format(d); return output; @@ -134,7 +134,7 @@ public class TokenEngine extends CoinEngine { p = p.pow(GetTokenDecimals(mCard)); BigDecimal l = d.divide(p); - String pattern = "#0.000"; // If you like 4 zeros + String pattern = "#0.000###############"; // If you like 4 zeros DecimalFormat myFormatter = new DecimalFormat(pattern); String output = myFormatter.format(l); return output; diff --git a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.java b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.java index f68a5b3a0f..406ebeccb7 100644 --- a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.java +++ b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.java @@ -566,7 +566,7 @@ public class LoadedWallet extends Fragment implements SwipeRefreshLayout.OnRefre public void OnReadStart(CardProtocol cardProtocol) { progressBar.post(() -> { rlProgressBar.setVisibility(View.VISIBLE); - progressBar.setVisibility(View.VISIBLE); + //progressBar.setVisibility(View.VISIBLE); progressBar.setProgress(5); }); } diff --git a/app/src/main/java/com/tangem/presentation/fragment/Main.java b/app/src/main/java/com/tangem/presentation/fragment/Main.java index 5cfc5f1b75..8b0b879adf 100644 --- a/app/src/main/java/com/tangem/presentation/fragment/Main.java +++ b/app/src/main/java/com/tangem/presentation/fragment/Main.java @@ -275,7 +275,7 @@ public class Main extends Fragment implements NfcAdapter.ReaderCallback, CardLis public void OnReadStart(CardProtocol cardProtocol) { progressBar.post(() -> { rlProgressBar.setVisibility(View.VISIBLE); - progressBar.setVisibility(View.VISIBLE); + //progressBar.setVisibility(View.VISIBLE); progressBar.setProgress(5); }); } diff --git a/app/src/main/res/drawable/card_btc001.png b/app/src/main/res/drawable/card_btc001.png index 9321aa9022..5160ddf07f 100644 Binary files a/app/src/main/res/drawable/card_btc001.png and b/app/src/main/res/drawable/card_btc001.png differ diff --git a/app/src/main/res/drawable/card_btc005.png b/app/src/main/res/drawable/card_btc005.png index e31f33de45..e123218648 100644 Binary files a/app/src/main/res/drawable/card_btc005.png and b/app/src/main/res/drawable/card_btc005.png differ diff --git a/app/src/main/res/drawable/card_default.png b/app/src/main/res/drawable/card_default.png new file mode 100644 index 0000000000..93abdddfd9 Binary files /dev/null and b/app/src/main/res/drawable/card_default.png differ diff --git a/app/src/main/res/drawable/card_seed.png b/app/src/main/res/drawable/card_seed.png index a2409fe877..f7e62aa506 100644 Binary files a/app/src/main/res/drawable/card_seed.png and b/app/src/main/res/drawable/card_seed.png differ diff --git a/app/src/main/res/layout/fr_loaded_wallet.xml b/app/src/main/res/layout/fr_loaded_wallet.xml index 5c31676193..a868622a7c 100644 --- a/app/src/main/res/layout/fr_loaded_wallet.xml +++ b/app/src/main/res/layout/fr_loaded_wallet.xml @@ -49,12 +49,53 @@ android:textSize="@dimen/text_size_1_small" android:visibility="gone"/> - + + + + + + + + + + + + + + + + + + + + + - - + android:textAlignment="center" + android:textColor="@color/msg_okay" + android:textSize="18sp" + tools:text="Verified balance" /> + android:text="100% safe\nConfirmed balance and banknote identity" + android:textAlignment="center" /> @@ -191,15 +256,6 @@ android:text="@string/blockchain" android:textColor="@color/primary_dark"/> - - @@ -354,32 +410,6 @@ - - - - - - - - @@ -425,6 +455,7 @@ android:id="@+id/rlToolButtons" android:layout_width="0dp" android:layout_height="wrap_content" + android:layout_marginBottom="5dp" android:gravity="center" app:layout_constraintBottom_toTopOf="@+id/rlCardIdAndIcons" app:layout_constraintHorizontal_bias="0.0" @@ -436,7 +467,8 @@ style="@style/AppTheme.RoundedCornerMaterialButton" android:layout_width="wrap_content" android:layout_margin="10dp" - android:text="@string/load"/> + android:elevation="15dp" + android:text="@string/load" /> + app:srcCompat="@drawable/ic_information_variant_white_24dp" /> + app:srcCompat="@drawable/ic_nfc_white_24dp" /> + android:text="@string/extract" /> @@ -540,6 +572,7 @@ + android:visibility="gone" + tools:layout_editor_absoluteY="495dp" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fr_main.xml b/app/src/main/res/layout/fr_main.xml index 7cb2a8f24e..da8b383452 100644 --- a/app/src/main/res/layout/fr_main.xml +++ b/app/src/main/res/layout/fr_main.xml @@ -15,19 +15,19 @@ android:visibility="gone"> + android:alpha="0.8" + android:text="@string/reading" + android:textColor="@color/colorPrimary" + android:textStyle="bold" /> + android:alpha="0.8" + android:elevation="1dp" /> diff --git a/app/src/main/res/layout/layout_progress_horizontal.xml b/app/src/main/res/layout/layout_progress_horizontal.xml index 33a82d00f4..c0f0850604 100644 --- a/app/src/main/res/layout/layout_progress_horizontal.xml +++ b/app/src/main/res/layout/layout_progress_horizontal.xml @@ -1,7 +1,6 @@ - \ No newline at end of file + tools:showIn="@layout/activity_swap_pin" /> \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 984c815663..3ea08659cd 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,7 +1,7 @@ - #027AFF + #027aff #027AFF #027AFF diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d17a801df9..7598d2ed11 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -45,7 +45,7 @@ Scan again to verify the card Smart Cash AG Wallet - Need attach card again + Scan again to verify the card READING… VERIFYING…