From cc71c599f70455adee5c7fa787c0ac8f435d9195 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 5 Jun 2018 17:29:18 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .idea/caches/build_file_checksums.ser | Bin 536 -> 536 bytes .../presentation/adapter/CardListAdapter.java | 496 +++++++++--------- .../presentation/fragment/MainFragment.java | 2 +- app/src/main/res/layout/item_list_card.xml | 106 ++-- app/src/main/res/values/strings.xml | 22 +- .../res/values/strings_untranslatable.xml | 2 +- 6 files changed, 315 insertions(+), 313 deletions(-) diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 74922420ea39dfcad321bca7d1dca2f95bc79c8d..b7508e3fe1235c9bde4348593e126d75ca2a3ce6 100644 GIT binary patch delta 15 XcmbQiGJ|Ep43-NKg8Uoj)Gz`7EQJMk delta 15 XcmbQiGJ|Ep43^W{yV^I-sbK^FF>nTE diff --git a/app/src/main/java/com/tangem/presentation/adapter/CardListAdapter.java b/app/src/main/java/com/tangem/presentation/adapter/CardListAdapter.java index 770918ad90..e94b38abf1 100644 --- a/app/src/main/java/com/tangem/presentation/adapter/CardListAdapter.java +++ b/app/src/main/java/com/tangem/presentation/adapter/CardListAdapter.java @@ -3,6 +3,8 @@ package com.tangem.presentation.adapter; import android.content.Context; import android.graphics.Color; import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.content.ContextCompat; import android.support.v7.widget.CardView; import android.support.v7.widget.RecyclerView; import android.util.Log; @@ -31,12 +33,16 @@ import static com.tangem.domain.wallet.TangemCard.CountOurTx; public class CardListAdapter extends RecyclerView.Adapter { - public static class CardViewHolder extends RecyclerView.ViewHolder { - CardView cv; - TextView tvBalance, tvOffline, tvBalanceEquivalent, tvWallet, tvInputs, tvStatusInBlockchain, tvCardID, tvLastInput, lbLastInput, lbLastOutput, tvLastOutput, tvBlockchain; - TextView tvType, tvTypeBg, tvVoid; - ImageView imgBlockchain, imgSecurityNotification; - View llCardLoaded, llCardEmpty, llCardError, llCardPurged; + public interface UiCallbacks { + void onViewCard(Bundle cardInfo); + } + + static class CardViewHolder extends RecyclerView.ViewHolder { + private CardView cv; + private TextView tvBalance, tvOffline, tvBalanceEquivalent, tvWallet, tvInputs, tvStatusInBlockchain, tvCardID, tvLastInput, lbLastInput, lbLastOutput, tvLastOutput, tvBlockchain; + private TextView tvType, tvTypeBg, tvVoid; + private ImageView imgBlockchain, imgSecurityNotification; + private View llCardLoaded, llCardEmpty, llCardError, llCardPurged; CardViewHolder(View itemView) { super(itemView); @@ -46,23 +52,15 @@ public class CardListAdapter extends RecyclerView.Adapter 0 || card.useDevelopersFirmware()) { + //holder.imgSecurityNotification.setVisibility(View.VISIBLE); + } else { + holder.imgSecurityNotification.setVisibility(View.INVISIBLE); + } + holder.tvCardID.setText(card.getCIDDescription()); + holder.tvCardID.setError(null); + holder.tvCardID.setVisibility(View.VISIBLE); + + holder.tvType.setVisibility(View.VISIBLE); + holder.tvTypeBg.setVisibility(View.VISIBLE); + if (card.isReusable()) { + holder.tvType.setText(R.string.reusable_reusable); + holder.tvTypeBg.setBackgroundColor(ContextCompat.getColor(mContext, R.color.type_wallet)); + } else { + holder.tvType.setText(R.string.banknote_banknote); + holder.tvTypeBg.setBackgroundColor(ContextCompat.getColor(mContext, R.color.type_banknote)); + } + holder.tvVoid.setVisibility(View.INVISIBLE); + break; + + case Purged: + color = R.color.card_state_purged; + holder.llCardEmpty.setVisibility(View.GONE); + holder.llCardLoaded.setVisibility(View.GONE); + holder.llCardError.setVisibility(View.GONE); + holder.llCardPurged.setVisibility(View.VISIBLE); + holder.imgBlockchain.setVisibility(View.VISIBLE); + if (card.getBlockchain() != null) { + holder.imgBlockchain.setImageResource(card.getBlockchain().getImageResource(this.mContext, card.getTokenSymbol())); + holder.imgBlockchain.setVisibility(View.VISIBLE); + } else + holder.imgBlockchain.setVisibility(View.INVISIBLE); + holder.imgSecurityNotification.setVisibility(View.INVISIBLE); + holder.tvCardID.setText(card.getCIDDescription()); + holder.tvCardID.setVisibility(View.VISIBLE); + holder.tvCardID.setError(null); + holder.tvType.setVisibility(View.VISIBLE); + holder.tvTypeBg.setVisibility(View.VISIBLE); + holder.tvType.setText(R.string.banknote_banknote); + holder.tvTypeBg.setBackgroundColor(ContextCompat.getColor(mContext, R.color.type_banknote)); + holder.tvVoid.setVisibility(View.INVISIBLE); + break; + + case Loaded: + holder.llCardLoaded.setVisibility(View.VISIBLE); + holder.llCardError.setVisibility(View.GONE); + holder.llCardEmpty.setVisibility(View.GONE); + holder.llCardPurged.setVisibility(View.GONE); + holder.tvCardID.setText(card.getCIDDescription()); + holder.tvCardID.setVisibility(View.VISIBLE); + holder.tvWallet.setText(card.getShortWalletString()); + holder.tvBlockchain.setText(card.getBlockchainName()); + + if (card.getBlockchain() != null) { + holder.imgBlockchain.setImageResource(card.getBlockchain().getImageResource(this.mContext, card.getTokenSymbol())); + holder.imgBlockchain.setVisibility(View.VISIBLE); + } else { + holder.imgBlockchain.setVisibility(View.INVISIBLE); + } + + if (!engine.HasBalanceInfo(card)) { + color = R.color.card_state_loaded; + } else if (engine.IsBalanceNotZero(card)) { + color = R.color.card_state_loaded_with_coins; + } else { + color = R.color.card_state_loaded_with_zero; + } + + if (holder.tvStatusInBlockchain != null) { + if (card.hasBalanceInfo() && card.hasUnspentInfo() && card.getUnspentTransactions().size() > 0) { + holder.tvStatusInBlockchain.setText(R.string.ok); + holder.tvStatusInBlockchain.setTextColor(ContextCompat.getColor(mContext, R.color.confirmed)); + } else if (!card.hasBalanceInfo() || !card.hasUnspentInfo()) { + holder.tvStatusInBlockchain.setText(R.string.no_data_string); + holder.tvStatusInBlockchain.setTextColor(ContextCompat.getColor(mContext, R.color.primary_dark)); + } else { + holder.tvStatusInBlockchain.setText(R.string.not_found); + holder.tvStatusInBlockchain.setTextColor(ContextCompat.getColor(mContext, R.color.not_confirmed)); + } + } + + if (engine.HasBalanceInfo(card) || card.getOfflineBalance() == null) { + String balance = engine.GetBalance(card); + holder.tvBalance.setText(balance); + holder.tvBalanceEquivalent.setText(engine.GetBalanceEquivalent(card)); + holder.tvBalance.setTextColor(Color.BLACK); + holder.tvOffline.setVisibility(View.INVISIBLE); + + } else { + + String offlineAmount = engine.ConvertByteArrayToAmount(card, card.getOfflineBalance()); + holder.tvBalance.setText(engine.GetAmountDescription(card, offlineAmount)); + holder.tvBalanceEquivalent.setText(engine.GetAmountEqualentDescriptor(card, offlineAmount)); + holder.tvOffline.setVisibility(View.VISIBLE); + } + if (!card.getAmountEquivalentDescriptionAvailable()) { + //holder.tvBalanceEquivalent.setError("Service unavailable"); + } else { + holder.tvBalanceEquivalent.setError(null); + } + + String error = card.getError(); + //holder.tvCardID.setError(error); + + if (holder.tvInputs != null) { + holder.tvInputs.setText(card.getInputsDescription()); + } + + boolean visibleFlag = engine != null ? engine.InOutPutVisible() : true; + int visibleIOPuts = visibleFlag ? View.VISIBLE : View.GONE; + if (holder.tvLastInput != null) { + holder.tvLastInput.setText(card.getLastInputDescription()); + if (card.getLastInputDescription().contains("awaiting")) + holder.tvLastInput.setTextColor(ContextCompat.getColor(mContext, R.color.not_confirmed)); + else if (card.getLastInputDescription().contains("None") || card.getLastInputDescription().contains("--")) + holder.tvLastInput.setTextColor(ContextCompat.getColor(mContext, R.color.primary_dark)); + else + holder.tvLastInput.setTextColor(ContextCompat.getColor(mContext, R.color.confirmed)); + + holder.tvLastInput.setVisibility(visibleIOPuts); + } + + if (holder.lbLastInput != null) { + holder.lbLastInput.setVisibility(visibleIOPuts); + } + + if (holder.tvLastOutput != null) { + holder.tvLastOutput.setText(card.getLastOutputDescription()); + holder.tvLastOutput.setVisibility(visibleIOPuts); + } + + if (holder.lbLastOutput != null) { + holder.lbLastOutput.setVisibility(visibleIOPuts); + } + + if (card.useDefaultPIN1() || card.useDefaultPIN2() || card.getPauseBeforePIN2() > 0 || card.useDevelopersFirmware()) { +// holder.imgSecurityNotification.setVisibility(View.VISIBLE); + } else { + holder.imgSecurityNotification.setVisibility(View.INVISIBLE); + } + + holder.tvType.setVisibility(View.VISIBLE); + holder.tvTypeBg.setVisibility(View.VISIBLE); + if (card.isReusable()) { + holder.tvType.setText(R.string.reusable_reusable); + holder.tvTypeBg.setBackgroundColor(ContextCompat.getColor(mContext, R.color.type_wallet)); + holder.tvVoid.setVisibility(View.INVISIBLE); + } else { + holder.tvType.setText(R.string.banknote_banknote); + if (card.getRemainingSignatures() != card.getMaxSignatures()) { + holder.tvVoid.setVisibility(View.VISIBLE); + holder.tvTypeBg.setBackgroundColor(ContextCompat.getColor(mContext, R.color.msg_err)); + } else { + holder.tvVoid.setVisibility(View.INVISIBLE); + holder.tvTypeBg.setBackgroundColor(ContextCompat.getColor(mContext, R.color.type_banknote)); + } + } + + break; + } + + if (card.useDevelopersFirmware()) { + holder.tvType.setText(R.string.developer_kit); + holder.tvTypeBg.setBackgroundColor(ContextCompat.getColor(mContext, R.color.fab)); + holder.tvVoid.setVisibility(View.INVISIBLE); + } + + holder.cv.setOnClickListener(new CardClickListener(position)); + holder.cv.setCardBackgroundColor(mContext.getResources().getColor(color)); + + } catch (Exception e) { + Log.e("onBindViewHolder", e.toString()); + } + } public void onSaveInstanceState(Bundle outstate) { - ArrayList UIDs = new ArrayList(mCards.size()); + ArrayList UIDs = new ArrayList<>(mCards.size()); for (TangemCard card : mCards) { Bundle B = new Bundle(); card.SaveToBundle(B); @@ -154,7 +371,6 @@ public class CardListAdapter extends RecyclerView.Adapter 0 || card.useDevelopersFirmware()) { - //holder.imgSecurityNotification.setVisibility(View.VISIBLE); - } else { - holder.imgSecurityNotification.setVisibility(View.INVISIBLE); - } - holder.tvCardID.setText(card.getCIDDescription()); - holder.tvCardID.setError(null); - holder.tvCardID.setVisibility(View.VISIBLE); - - holder.tvType.setVisibility(View.VISIBLE); - holder.tvTypeBg.setVisibility(View.VISIBLE); - if (card.isReusable()) { - holder.tvType.setText(" REUSABLE REUSABLE "); - holder.tvTypeBg.setBackgroundColor(mContext.getResources().getColor(R.color.type_wallet, mContext.getTheme())); - } else { - holder.tvType.setText(" BANKNOTE BANKNOTE"); - holder.tvTypeBg.setBackgroundColor(mContext.getResources().getColor(R.color.type_banknote, mContext.getTheme())); - } - holder.tvVoid.setVisibility(View.INVISIBLE); - break; - case Purged: - color = R.color.card_state_purged; - holder.llCardEmpty.setVisibility(View.GONE); - holder.llCardLoaded.setVisibility(View.GONE); - holder.llCardError.setVisibility(View.GONE); - holder.llCardPurged.setVisibility(View.VISIBLE); - holder.imgBlockchain.setVisibility(View.VISIBLE); - if (card.getBlockchain() != null) { - holder.imgBlockchain.setImageResource(card.getBlockchain().getImageResource(this.mContext, card.getTokenSymbol())); - holder.imgBlockchain.setVisibility(View.VISIBLE); - } else { - holder.imgBlockchain.setVisibility(View.INVISIBLE); - } - holder.imgSecurityNotification.setVisibility(View.INVISIBLE); - holder.tvCardID.setText(card.getCIDDescription()); - holder.tvCardID.setVisibility(View.VISIBLE); - holder.tvCardID.setError(null); - holder.tvType.setVisibility(View.VISIBLE); - holder.tvTypeBg.setVisibility(View.VISIBLE); - holder.tvType.setText(" BANKNOTE BANKNOTE"); - holder.tvTypeBg.setBackgroundColor(mContext.getResources().getColor(R.color.type_banknote, mContext.getTheme())); - holder.tvVoid.setVisibility(View.INVISIBLE); - break; - case Loaded: - holder.llCardLoaded.setVisibility(View.VISIBLE); - holder.llCardError.setVisibility(View.GONE); - holder.llCardEmpty.setVisibility(View.GONE); - holder.llCardPurged.setVisibility(View.GONE); - holder.tvCardID.setText(card.getCIDDescription()); - holder.tvCardID.setVisibility(View.VISIBLE); - holder.tvWallet.setText(card.getShortWalletString()); - - holder.tvBlockchain.setText(card.getBlockchainName()); - - if (card.getBlockchain() != null) { - holder.imgBlockchain.setImageResource(card.getBlockchain().getImageResource(this.mContext, card.getTokenSymbol())); - holder.imgBlockchain.setVisibility(View.VISIBLE); - } else { - holder.imgBlockchain.setVisibility(View.INVISIBLE); - } - - if (!engine.HasBalanceInfo(card)) { - color = R.color.card_state_loaded; - } else if (engine.IsBalanceNotZero(card)) { - color = R.color.card_state_loaded_with_coins; - } else { - color = R.color.card_state_loaded_with_zero; - } - - if (holder.tvStatusInBlockchain != null) { - if (card.hasBalanceInfo() && card.hasUnspentInfo() && card.getUnspentTransactions().size() > 0) { - holder.tvStatusInBlockchain.setText("Ok"); - holder.tvStatusInBlockchain.setTextColor(mContext.getResources().getColor(R.color.confirmed, mContext.getTheme())); - } else if (!card.hasBalanceInfo() || !card.hasUnspentInfo()) { - holder.tvStatusInBlockchain.setText("-- -- --"); - holder.tvStatusInBlockchain.setTextColor(mContext.getResources().getColor(R.color.primary_dark, mContext.getTheme())); - } else { - holder.tvStatusInBlockchain.setText("Not found"); - holder.tvStatusInBlockchain.setTextColor(mContext.getResources().getColor(R.color.not_confirmed, mContext.getTheme())); - } - } - - if (engine.HasBalanceInfo(card) || card.getOfflineBalance() == null) { - String balance = engine.GetBalance(card); - holder.tvBalance.setText(balance); - holder.tvBalanceEquivalent.setText(engine.GetBalanceEquivalent(card)); - holder.tvBalance.setTextColor(Color.BLACK); - holder.tvOffline.setVisibility(View.INVISIBLE); - - } else { - - String offlineAmount = engine.ConvertByteArrayToAmount(card, card.getOfflineBalance()); - holder.tvBalance.setText(engine.GetAmountDescription(card, offlineAmount)); - holder.tvBalanceEquivalent.setText(engine.GetAmountEqualentDescriptor(card, offlineAmount)); - holder.tvOffline.setVisibility(View.VISIBLE); - } - if (!card.getAmountEquivalentDescriptionAvailable()) { - //holder.tvBalanceEquivalent.setError("Service unavailable"); - } else { - holder.tvBalanceEquivalent.setError(null); - } - - String error = card.getError(); - //holder.tvCardID.setError(error); - - if (holder.tvInputs != null) { - holder.tvInputs.setText(card.getInputsDescription()); - } - - boolean visibleFlag = engine != null ? engine.InOutPutVisible() : true; - int visibleIOPuts = visibleFlag ? View.VISIBLE : View.GONE; - if (holder.tvLastInput != null) { - holder.tvLastInput.setText(card.getLastInputDescription()); - if (card.getLastInputDescription().contains("awaiting")) { - holder.tvLastInput.setTextColor(mContext.getResources().getColor(R.color.not_confirmed, mContext.getTheme())); - } else if (card.getLastInputDescription().contains("None") || card.getLastInputDescription().contains("--")) { - holder.tvLastInput.setTextColor(mContext.getResources().getColor(R.color.primary_dark, mContext.getTheme())); - } else { - holder.tvLastInput.setTextColor(mContext.getResources().getColor(R.color.confirmed, mContext.getTheme())); - } - holder.tvLastInput.setVisibility(visibleIOPuts); - } - - if (holder.lbLastInput != null) { - holder.lbLastInput.setVisibility(visibleIOPuts); - } - - if (holder.tvLastOutput != null) { - holder.tvLastOutput.setText(card.getLastOutputDescription()); - holder.tvLastOutput.setVisibility(visibleIOPuts); - } - - if (holder.lbLastOutput != null) { - holder.lbLastOutput.setVisibility(visibleIOPuts); - } - - if (card.useDefaultPIN1() || card.useDefaultPIN2() || card.getPauseBeforePIN2() > 0 || card.useDevelopersFirmware()) { - //holder.imgSecurityNotification.setVisibility(View.VISIBLE); - } else { - holder.imgSecurityNotification.setVisibility(View.INVISIBLE); - } - - holder.tvType.setVisibility(View.VISIBLE); - holder.tvTypeBg.setVisibility(View.VISIBLE); - if (card.isReusable()) { - holder.tvType.setText(" REUSABLE REUSABLE "); - holder.tvTypeBg.setBackgroundColor(mContext.getResources().getColor(R.color.type_wallet, mContext.getTheme())); - holder.tvVoid.setVisibility(View.INVISIBLE); - } else { - holder.tvType.setText(" BANKNOTE BANKNOTE"); - - if (card.getRemainingSignatures() != card.getMaxSignatures()) { - holder.tvVoid.setVisibility(View.VISIBLE); - holder.tvTypeBg.setBackgroundColor(mContext.getResources().getColor(R.color.msg_err, mContext.getTheme())); - } else { - holder.tvVoid.setVisibility(View.INVISIBLE); - holder.tvTypeBg.setBackgroundColor(mContext.getResources().getColor(R.color.type_banknote, mContext.getTheme())); - } - } - - break; - } - - if (card.useDevelopersFirmware()) { - holder.tvType.setText(" DEVELOPER KIT "); - holder.tvTypeBg.setBackgroundColor(mContext.getResources().getColor(R.color.fab, mContext.getTheme())); - holder.tvVoid.setVisibility(View.INVISIBLE); - } - - holder.cv.setOnClickListener(new CardClickListener(position)); - holder.cv.setCardBackgroundColor(mContext.getResources().getColor(color)); - - } catch (Exception e) { - Log.e("onBindViewHolder", e.toString()); - } - } - private class CardClickListener implements View.OnClickListener { - TangemCard card; - int pos; + private TangemCard card; + private int pos; CardClickListener(int position) { card = mCards.get(position); @@ -600,4 +585,5 @@ public class CardListAdapter extends RecyclerView.Adapter + card_view:contentPaddingRight="6dp" + tools:ignore="contentDescription"> + android:textSize="96sp" + tools:text="VOID"/> + android:textSize="12sp" + tools:text=" DEVELOPER KIT "/> + android:textSize="@dimen/text_size_large"/> + android:textSize="@dimen/text_size_large" + android:textStyle="bold" + tools:text="0.0 mBTC"/> + + android:textSize="@dimen/text_size_1_small" + android:textStyle="normal|bold" + tools:text="~ USD 0"/> + + android:textSize="@dimen/text_size_1_small"/> + android:textSize="@dimen/text_size_small" + android:textStyle="bold" + tools:text="Bitcoin"/> @@ -191,9 +193,9 @@ android:layout_width="110dp" android:layout_height="wrap_content" android:fontFamily="@font/raleway_r" - android:text="Wallet " + android:text="@string/wallet" android:textColor="@color/primary_dark" - android:textSize="14dp"/> + android:textSize="@dimen/text_size_1_small"/> + android:textSize="@dimen/text_size_small" + android:textStyle="bold" + tools:text="1DoQdnSYshhZ5Tqt5Sk6svZt29jqoYVwQY"/> + + android:textSize="@dimen/text_size_1_small"/> + + android:textSize="@dimen/text_size_1_small"/> + @@ -272,9 +275,9 @@ android:layout_gravity="center" android:fontFamily="@font/raleway_r" android:gravity="center" - android:text="NO WALLET" + android:text="@string/no_wallet" android:textAlignment="center" - android:textSize="@dimen/font_large"/> + android:textSize="@dimen/text_size_large"/> @@ -290,9 +293,9 @@ android:layout_gravity="center" android:fontFamily="@font/raleway_r" android:gravity="center" - android:text="ERASED WALLET" + android:text="@string/erased_wallet" android:textAlignment="center" - android:textSize="@dimen/font_large"/> + android:textSize="@dimen/text_size_large"/> @@ -309,11 +312,12 @@ android:layout_gravity="center" android:fontFamily="@font/raleway_r" android:gravity="center" - android:text="INVALID CARD" + android:text="@string/invalid_card" android:textAlignment="center" - android:textSize="@dimen/font_large"/> + android:textSize="@dimen/text_size_large"/> + + android:textSize="@dimen/text_size_1_small" + tools:text="BB00 0000 0001 0022"/> @@ -351,9 +355,9 @@ android:layout_alignParentEnd="true" android:layout_alignParentStart="false" android:layout_marginBottom="6dp" - android:layout_marginLeft="24dp" + android:layout_marginStart="24dp" android:background="@drawable/ic_info" android:visibility="invisible"/> - + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ef0a24ae5c..6131cbda74 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,6 +1,7 @@ OK + Not found Not ISO tag! Card must be loaded first! Tag lost! @@ -51,6 +52,22 @@ Reset PINs to default Erase wallet + + Tap Tangem card with your smartphone + Scan a banknote with your \n smartphone as shown above + Try to scan again + Balance + Wallet + Last unspent + Last withdrawal + Blockchain + NO WALLET + ERASED WALLET + INVALID CARD + verified offline + DEVELOPER KIT + BANKNOTE BANKNOTE + REUSABLE REUSABLE BETA @@ -63,11 +80,6 @@ to sign the payment to change PIN/PIN2 codes - - Tap Tangem card with your smartphone - Scan a banknote with your \n smartphone as shown above - Try to scan again - Send payment From banknote diff --git a/app/src/main/res/values/strings_untranslatable.xml b/app/src/main/res/values/strings_untranslatable.xml index 4764f8a593..4a59eaa41e 100644 --- a/app/src/main/res/values/strings_untranslatable.xml +++ b/app/src/main/res/values/strings_untranslatable.xml @@ -5,7 +5,7 @@ **  !!  --  - -- -- -- + -- -- -- <