Updated on 2026-08-14

This commit is contained in:
Tangem 2018-05-29 13:28:36 +03:00
parent 0374157cad
commit 8c17a8d4f0
48 changed files with 3490 additions and 3417 deletions

1
.gitignore vendored
View file

@ -10,3 +10,4 @@
.externalNativeBuild
app/libs/
.idea/vcs.xml
.idea/caches

Binary file not shown.

View file

@ -1,24 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tangem.wallet"
android:versionCode="0"
android:versionName="0">
package="com.tangem.wallet">
<uses-feature
android:name="android.hardware.nfc"
android:required="true" />
android:required="true"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-permission android:name="android.permission.CAMERA" />
<!--<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />-->
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.NFC"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
<application
android:name="com.tangem.AppController"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
@ -31,106 +29,121 @@
android:authorities="com.tangem.wallet.LogFileProvider"
android:enabled="true"
android:exported="false"
android:grantUriPermissions="true" />
android:grantUriPermissions="true"/>
<activity
android:name=".LogoActivity"
android:name="com.tangem.presentation.activity.LogoActivity"
android:label="@string/title_activity_main"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".RequestPINActivity"
android:name="com.tangem.presentation.activity.MainActivity"
android:label="@string/title_activity_main"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".EmptyWalletActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".SelectBlockchainActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".SavePINActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data
android:host="www.tangem.com"
android:scheme="http" />
android:scheme="http"/>
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED" />
<action android:name="android.nfc.action.TECH_DISCOVERED"/>
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
android:resource="@xml/nfc_tech_filter"/>
</activity>
<activity
android:name=".CardInfoActivity"
android:label="@string/title_activity_card_info"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".LoadedWalletActivity"
android:label="@string/title_activity_loaded_wallet"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".VerifyCardActivity"
android:label="@string/title_activity_loaded_wallet"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".CreateNewWalletActivity"
android:name="com.tangem.presentation.activity.RequestPINActivity"
android:label="@string/title_activity_main"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
android:theme="@style/AppTheme.NoActionBar"/>
<activity
android:name=".PreparePaymentActivity"
android:name="com.tangem.presentation.activity.EmptyWalletActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
android:theme="@style/AppTheme.NoActionBar"/>
<activity
android:name=".ConfirmPaymentActivity"
android:name="com.tangem.presentation.activity.SelectBlockchainActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
android:theme="@style/AppTheme.NoActionBar"/>
<activity
android:name=".SignPaymentActivity"
android:name="com.tangem.presentation.activity.SavePINActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
android:theme="@style/AppTheme.NoActionBar"/>
<activity
android:name=".PurgeActivity"
android:name="com.tangem.presentation.activity.CardInfoActivity"
android:label="@string/title_activity_card_info"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
android:theme="@style/AppTheme.NoActionBar"/>
<activity
android:name=".SwapPINActivity"
android:name="com.tangem.presentation.activity.LoadedWalletActivity"
android:label="@string/title_activity_loaded_wallet"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
android:theme="@style/AppTheme.NoActionBar"/>
<activity
android:name=".QRScanActivity"
android:name="com.tangem.presentation.activity.VerifyCardActivity"
android:label="@string/title_activity_loaded_wallet"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
android:theme="@style/AppTheme.NoActionBar"/>
<activity
android:name=".SendTransactionActivity"
android:name="com.tangem.presentation.activity.CreateNewWalletActivity"
android:label="@string/title_activity_main"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
android:theme="@style/AppTheme.NoActionBar"/>
<activity
android:name="com.tangem.presentation.activity.PreparePaymentActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar"/>
<activity
android:name="com.tangem.presentation.activity.ConfirmPaymentActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar"/>
<activity
android:name="com.tangem.presentation.activity.SignPaymentActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar"/>
<activity
android:name="com.tangem.presentation.activity.PurgeActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar"/>
<activity
android:name="com.tangem.presentation.activity.SwapPINActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar"/>
<activity
android:name="com.tangem.presentation.activity.QRScanActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar"/>
<activity
android:name="com.tangem.presentation.activity.SendTransactionActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar"/>
</application>
</manifest>

View file

@ -0,0 +1,4 @@
package com.tangem.domain;
public class Logic {
}

View file

@ -0,0 +1,4 @@
package com.tangem.presentation;
public class Screen {
}

View file

@ -1,4 +1,4 @@
package com.tangem.wallet;
package com.tangem.presentation.activity;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
@ -10,6 +10,10 @@ import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import com.tangem.wallet.R;
import com.tangem.wallet.Tangem_Card;
import com.tangem.wallet.WalletInfoFragment;
public class CardInfoActivity extends AppCompatActivity implements WalletInfoFragment.OnFragmentInteractionListener {
/**

View file

@ -1,14 +1,11 @@
package com.tangem.wallet;
package com.tangem.presentation.activity;
import android.app.Activity;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.Html;
@ -27,6 +24,23 @@ import android.widget.Toast;
import com.tangem.cardReader.NfcManager;
import com.tangem.cardReader.Util;
import com.tangem.wallet.BTCUtils;
import com.tangem.wallet.Blockchain;
import com.tangem.wallet.CoinEngine;
import com.tangem.wallet.CoinEngineFactory;
import com.tangem.wallet.DerEncodingUtil;
import com.tangem.wallet.Electrum_Request;
import com.tangem.wallet.Electrum_Task;
import com.tangem.wallet.Fee_Request;
import com.tangem.wallet.Fee_Task;
import com.tangem.wallet.FormatUtil;
import com.tangem.wallet.Infura_Request;
import com.tangem.wallet.Infura_Task;
import com.tangem.wallet.R;
import com.tangem.wallet.SharedData;
import com.tangem.wallet.Tangem_Card;
import com.tangem.wallet.Transaction;
import com.tangem.wallet.UnspentOutputInfo;
import org.json.JSONException;
@ -59,7 +73,7 @@ public class ConfirmPaymentActivity extends AppCompatActivity implements NfcAdap
int requestPIN2Count = 0;
ProgressBar progressBar;
boolean nodeCheck = false;
Date dtVerifyed=null;
Date dtVerifyed = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -189,10 +203,10 @@ public class ConfirmPaymentActivity extends AppCompatActivity implements NfcAdap
@Override
public void onClick(View v) {
Calendar calendar=Calendar.getInstance();
calendar.add(Calendar.MINUTE,-1);
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MINUTE, -1);
if( dtVerifyed==null || dtVerifyed.before(calendar.getTime()) ) {
if (dtVerifyed == null || dtVerifyed.before(calendar.getTime())) {
FinishActivityWithError(Activity.RESULT_CANCELED, "The obtained data is outdated! Try again");
return;
}
@ -213,14 +227,13 @@ public class ConfirmPaymentActivity extends AppCompatActivity implements NfcAdap
} else if (!engineCoin.IsBalanceNotZero(mCard)) {
FinishActivityWithError(Activity.RESULT_CANCELED, "The wallet is empty");
return;
} else if(!engineCoin.CheckUnspentTransaction(mCard)) {
//else if (mCard.getUnspentTransactions().size() == 0 && mCard.getBlockchain() != Blockchain.Ethereum) {
} else if (!engineCoin.CheckUnspentTransaction(mCard)) {
//else if (mCard.getUnspentTransactions().size() == 0 && mCard.getBlockchain() != Blockchain.Ethereum) {
FinishActivityWithError(Activity.RESULT_CANCELED, "Please wait for confirmation of incoming transaction");
return;
}
if(!engineCoin.CheckAmountValie(mCard, txAmount, txFee, minFeeInInternalUnits))
{
if (!engineCoin.CheckAmountValie(mCard, txAmount, txFee, minFeeInInternalUnits)) {
FinishActivityWithError(Activity.RESULT_CANCELED, "Fee exceeds payment amount. Enter correct value and repeat sending.");
return;
}
@ -249,7 +262,7 @@ public class ConfirmPaymentActivity extends AppCompatActivity implements NfcAdap
CoinEngine engineCoin = CoinEngineFactory.Create(mCard.getBlockchain());
for(int i =0 ; i < data.allRequest; ++i) {
for (int i = 0; i < data.allRequest; ++i) {
String nodeAddress = engineCoin.GetNextNode(mCard);
int nodePort = engineCoin.GetNextNodePort(mCard);
@ -257,7 +270,7 @@ public class ConfirmPaymentActivity extends AppCompatActivity implements NfcAdap
ConnectTask connectTaskEx = new ConnectTask(nodeAddress, nodePort, data);
//connectTaskEx.execute(Electrum_Request.CheckBalance(mCard.getWallet()));
connectTaskEx.executeOnExecutor( AsyncTask.THREAD_POOL_EXECUTOR,Electrum_Request.CheckBalance(mCard.getWallet()));
connectTaskEx.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, Electrum_Request.CheckBalance(mCard.getWallet()));
}
String nodeAddress = engineCoin.GetNode(mCard);
@ -278,8 +291,7 @@ public class ConfirmPaymentActivity extends AppCompatActivity implements NfcAdap
SharedData sharedFee = new SharedData(SharedData.COUNT_REQUEST);
progressBar.setVisibility(View.VISIBLE);
for(int i = 0; i < SharedData.COUNT_REQUEST; ++i)
{
for (int i = 0; i < SharedData.COUNT_REQUEST; ++i) {
ConnectFeeTask feeTask = new ConnectFeeTask(sharedFee);
@ -310,9 +322,9 @@ public class ConfirmPaymentActivity extends AppCompatActivity implements NfcAdap
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_SIGN_PAYMENT) {
if (data != null && data.getExtras().containsKey("UID") && data.getExtras().containsKey("Card")) {
Tangem_Card updatedCard=new Tangem_Card(data.getStringExtra("UID"));
Tangem_Card updatedCard = new Tangem_Card(data.getStringExtra("UID"));
updatedCard.LoadFromBundle(data.getBundleExtra("Card"));
mCard=updatedCard;
mCard = updatedCard;
}
if (resultCode == SignPaymentActivity.RESULT_INVALID_PIN && requestPIN2Count < 2) {
requestPIN2Count++;
@ -433,6 +445,7 @@ public class ConfirmPaymentActivity extends AppCompatActivity implements NfcAdap
public ConnectTask(String host, int port, SharedData sharedData) {
super(host, port, sharedData);
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
@ -453,30 +466,26 @@ public class ConfirmPaymentActivity extends AppCompatActivity implements NfcAdap
etFee.setError("Not enough funds");
balanceRequestSuccess = false;
btnSend.setVisibility(View.INVISIBLE);
dtVerifyed=null;
dtVerifyed = null;
nodeCheck = false;
} else {
etFee.setError(null);
balanceRequestSuccess = true;
if(feeRequestSuccess && balanceRequestSuccess) {
if (feeRequestSuccess && balanceRequestSuccess) {
btnSend.setVisibility(View.VISIBLE);
}
dtVerifyed=new Date();
dtVerifyed = new Date();
nodeCheck = true;
}
} catch (JSONException e) {
if(sharedCounter != null)
{
if (sharedCounter != null) {
int errCounter = sharedCounter.errorRequest.incrementAndGet();
if(errCounter >= sharedCounter.allRequest)
{
if (errCounter >= sharedCounter.allRequest) {
e.printStackTrace();
FinishActivityWithError(Activity.RESULT_CANCELED, "Cannot check balance! No connection with blockchain nodes");
}
}
else
{
} else {
e.printStackTrace();
FinishActivityWithError(Activity.RESULT_CANCELED, "Cannot check balance! No connection with blockchain nodes");
}
@ -489,33 +498,25 @@ public class ConfirmPaymentActivity extends AppCompatActivity implements NfcAdap
} else {
// etFee.setError(request.error);
// btnSend.setVisibility(View.INVISIBLE);
if(sharedCounter != null)
{
if (sharedCounter != null) {
int errCounter = sharedCounter.errorRequest.incrementAndGet();
if(errCounter >= sharedCounter.allRequest)
{
if (errCounter >= sharedCounter.allRequest) {
FinishActivityWithError(Activity.RESULT_CANCELED, "Cannot calculate fee! No connection with blockchain nodes");
}
}
else
{
} else {
FinishActivityWithError(Activity.RESULT_CANCELED, "Cannot calculate fee! No connection with blockchain nodes");
}
return;
}
} catch (JSONException e) {
if(sharedCounter != null)
{
if (sharedCounter != null) {
int errCounter = sharedCounter.errorRequest.incrementAndGet();
if(errCounter >= sharedCounter.allRequest)
{
if (errCounter >= sharedCounter.allRequest) {
e.printStackTrace();
FinishActivityWithError(Activity.RESULT_CANCELED, "Cannot calculate fee! No connection with blockchain nodes");
}
}
else
{
} else {
e.printStackTrace();
FinishActivityWithError(Activity.RESULT_CANCELED, "Cannot calculate fee! No connection with blockchain nodes");
}
@ -526,9 +527,10 @@ public class ConfirmPaymentActivity extends AppCompatActivity implements NfcAdap
}
private class ETHRequestTask extends Infura_Task {
ETHRequestTask(Blockchain blockchain){
ETHRequestTask(Blockchain blockchain) {
super(blockchain);
}
@Override
protected void onPostExecute(List<Infura_Request> requests) {
super.onPostExecute(requests);
@ -543,20 +545,20 @@ public class ConfirmPaymentActivity extends AppCompatActivity implements NfcAdap
gasPrice = gasPrice.substring(2);
BigInteger l = new BigInteger(gasPrice, 16);
BigInteger m = mCard.getBlockchain() == Blockchain.Token ? BigInteger.valueOf(55000) : BigInteger.valueOf(21000);
BigInteger m = mCard.getBlockchain() == Blockchain.Token ? BigInteger.valueOf(55000) : BigInteger.valueOf(21000);
l = l.multiply(m);
String feeInGwei = mCard.getAmountInGwei(String.valueOf(l));
minFee=feeInGwei;
maxFee=feeInGwei;
normalFee=feeInGwei;
minFee = feeInGwei;
maxFee = feeInGwei;
normalFee = feeInGwei;
etFee.setText(feeInGwei);
etFee.setError(null);
btnSend.setVisibility(View.VISIBLE);
feeRequestSuccess = true;
balanceRequestSuccess = true;
dtVerifyed=new Date();
dtVerifyed = new Date();
minFeeInInternalUnits = mCard.InternalUnitsFromString(feeInGwei);
} catch (JSONException e) {
@ -579,6 +581,7 @@ public class ConfirmPaymentActivity extends AppCompatActivity implements NfcAdap
public ConnectFeeTask(SharedData sharedData) {
super(sharedData);
}
@Override
protected void onPostExecute(List<Fee_Request> requests) {
super.onPostExecute(requests);
@ -597,19 +600,15 @@ public class ConfirmPaymentActivity extends AppCompatActivity implements NfcAdap
minFeeRate = minFeeBI.longValue();
} catch (Exception e) {
if(sharedCounter != null)
{
if (sharedCounter != null) {
int errCounter = sharedCounter.errorRequest.incrementAndGet();
if(errCounter >= sharedCounter.allRequest)
{
if (errCounter >= sharedCounter.allRequest) {
progressBar.setVisibility(View.INVISIBLE);
FinishActivityWithError(Activity.RESULT_CANCELED, "Cannot calculate fee! No connection with blockchain nodes");
}
}
else
{
} else {
progressBar.setVisibility(View.INVISIBLE);
FinishActivityWithError(Activity.RESULT_CANCELED, "Cannot calculate fee! No connection with blockchain nodes");
}
@ -633,17 +632,13 @@ public class ConfirmPaymentActivity extends AppCompatActivity implements NfcAdap
}
} catch (Exception e) {
e.printStackTrace();
if(sharedCounter != null)
{
if (sharedCounter != null) {
int errCounter = sharedCounter.errorRequest.incrementAndGet();
if(errCounter >= sharedCounter.allRequest)
{
if (errCounter >= sharedCounter.allRequest) {
progressBar.setVisibility(View.INVISIBLE);
FinishActivityWithError(Activity.RESULT_CANCELED, "Cannot calculate fee! No connection with blockchain nodes");
}
}
else
{
} else {
progressBar.setVisibility(View.INVISIBLE);
FinishActivityWithError(Activity.RESULT_CANCELED, "Cannot calculate fee! No connection with blockchain nodes");
}
@ -669,24 +664,20 @@ public class ConfirmPaymentActivity extends AppCompatActivity implements NfcAdap
etFee.setError(null);
feeRequestSuccess = true;
if(feeRequestSuccess && balanceRequestSuccess) {
if (feeRequestSuccess && balanceRequestSuccess) {
btnSend.setVisibility(View.VISIBLE);
}
dtVerifyed=new Date();
dtVerifyed = new Date();
} else {
if(sharedCounter != null)
{
if (sharedCounter != null) {
int errCounter = sharedCounter.errorRequest.incrementAndGet();
if(errCounter >= sharedCounter.allRequest)
{
if (errCounter >= sharedCounter.allRequest) {
progressBar.setVisibility(View.INVISIBLE);
FinishActivityWithError(Activity.RESULT_CANCELED, "Cannot calculate fee! No connection with blockchain nodes");
}
}
else
{
} else {
progressBar.setVisibility(View.INVISIBLE);
FinishActivityWithError(Activity.RESULT_CANCELED, "Cannot calculate fee! No connection with blockchain nodes");
}

View file

@ -1,4 +1,4 @@
package com.tangem.wallet;
package com.tangem.presentation.activity;
import android.app.Activity;
import android.content.Intent;
@ -18,6 +18,11 @@ import android.widget.Toast;
import com.tangem.cardReader.CardProtocol;
import com.tangem.cardReader.NfcManager;
import com.tangem.cardReader.Util;
import com.tangem.wallet.NoExtendedLengthSupportDialog;
import com.tangem.wallet.PINStorage;
import com.tangem.wallet.R;
import com.tangem.wallet.Tangem_Card;
import com.tangem.wallet.WaitSecurityDelayDialog;
public class CreateNewWalletActivity extends AppCompatActivity implements NfcAdapter.ReaderCallback, CardProtocol.Notifications {
@ -78,7 +83,6 @@ public class CreateNewWalletActivity extends AppCompatActivity implements NfcAda
} catch (Exception e) {
e.printStackTrace();
}
}
@Override

View file

@ -1,4 +1,4 @@
package com.tangem.wallet;
package com.tangem.presentation.activity;
import android.app.Activity;
import android.content.Intent;
@ -20,6 +20,11 @@ import android.widget.Toast;
import com.tangem.cardReader.CardProtocol;
import com.tangem.cardReader.NfcManager;
import com.tangem.cardReader.Util;
import com.tangem.wallet.NoExtendedLengthSupportDialog;
import com.tangem.wallet.R;
import com.tangem.wallet.Tangem_Card;
import com.tangem.wallet.VerifyCardTask;
import com.tangem.wallet.WaitSecurityDelayDialog;
public class EmptyWalletActivity extends AppCompatActivity implements NfcAdapter.ReaderCallback, CardProtocol.Notifications {

View file

@ -1,4 +1,4 @@
package com.tangem.wallet;
package com.tangem.presentation.activity;
import android.app.Activity;
import android.content.Intent;
@ -7,6 +7,9 @@ import android.nfc.Tag;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.tangem.wallet.LoadedWalletActivityFragment;
import com.tangem.wallet.R;
public class LoadedWalletActivity extends AppCompatActivity {

View file

@ -1,4 +1,4 @@
package com.tangem.wallet;
package com.tangem.presentation.activity;
import android.content.Intent;
import android.os.Bundle;
@ -7,6 +7,9 @@ import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.tangem.wallet.BuildConfig;
import com.tangem.wallet.R;
/**
* An example full-screen activity that shows and hides the system UI (i.e.
* status bar and navigation/system bar) with user interaction.

View file

@ -1,4 +1,4 @@
package com.tangem.wallet;
package com.tangem.presentation.activity;
import android.app.AlertDialog;
import android.app.Dialog;
@ -30,6 +30,15 @@ import android.widget.TextView;
import com.scottyab.rootbeer.RootBeer;
import com.skyfishjy.library.RippleBackground;
import com.tangem.wallet.BuildConfig;
import com.tangem.wallet.DeviceNFCAntennaLocation;
import com.tangem.wallet.LastSignStorage;
import com.tangem.wallet.LogFileProvider;
import com.tangem.wallet.Logger;
import com.tangem.wallet.MainActivityFragment;
import com.tangem.wallet.PINStorage;
import com.tangem.wallet.PhoneUtility;
import com.tangem.wallet.R;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;

View file

@ -1,4 +1,4 @@
package com.tangem.wallet;
package com.tangem.presentation.activity;
import android.app.Activity;
import android.content.Intent;
@ -18,10 +18,15 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.tangem.cardReader.NfcManager;
import com.tangem.wallet.Blockchain;
import com.tangem.wallet.CoinEngine;
import com.tangem.wallet.CoinEngineFactory;
import com.tangem.wallet.FormatUtil;
import com.tangem.wallet.R;
import com.tangem.wallet.Tangem_Card;
import java.io.IOException;
public class PreparePaymentActivity extends AppCompatActivity implements NfcAdapter.ReaderCallback {
private static final int REQUEST_CODE_SCAN_QR = 1;
@ -70,15 +75,13 @@ public class PreparePaymentActivity extends AppCompatActivity implements NfcAdap
tvBalanceEquivalent.setText(engine.GetBalanceEquivalent(mCard));
if(etAmount != null && mCard.getRemainingSignatures()<2)
{
if (etAmount != null && mCard.getRemainingSignatures() < 2) {
etAmount.setEnabled(false);
}
if( !mCard.getAmountEquivalentDescriptionAvailable())
{
if (!mCard.getAmountEquivalentDescriptionAvailable()) {
tvBalanceEquivalent.setError("Service unavailable");
}else{
} else {
tvBalanceEquivalent.setError(null);
}
@ -91,11 +94,11 @@ public class PreparePaymentActivity extends AppCompatActivity implements NfcAdap
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
try {
CoinEngine engine = CoinEngineFactory.Create(mCard.getBlockchain());
CoinEngine engine = CoinEngineFactory.Create(mCard.getBlockchain());
tvAmountEquivalent.setText(engine.GetAmountEqualentDescriptor(mCard, etAmount.getText().toString()));
if (!mCard.getAmountEquivalentDescriptionAvailable()) {
tvAmountEquivalent.setError("Service unavailable");
}else{
} else {
tvAmountEquivalent.setError(null);
}
} catch (Exception e) {
@ -110,32 +113,25 @@ public class PreparePaymentActivity extends AppCompatActivity implements NfcAdap
}
});
if(mCard.getBlockchain() == Blockchain.Ethereum || mCard.getBlockchain() == Blockchain.EthereumTestNet)
{
if (mCard.getBlockchain() == Blockchain.Ethereum || mCard.getBlockchain() == Blockchain.EthereumTestNet) {
tvCurrency.setText(engine.GetBalanceCurrency(mCard));
use_mCurrency=false;
use_mCurrency = false;
etAmount.setText(engine.GetBalanceValue(mCard));
}
else if(mCard.getBlockchain() == Blockchain.Bitcoin || mCard.getBlockchain() == Blockchain.BitcoinTestNet)
{
} else if (mCard.getBlockchain() == Blockchain.Bitcoin || mCard.getBlockchain() == Blockchain.BitcoinTestNet) {
Double balance = engine.GetBalanceLong(mCard) / (mCard.getBlockchain().getMultiplier() / 1000.0);
tvCurrency.setText("m" + mCard.getBlockchain().getCurrency());
use_mCurrency=true;
use_mCurrency = true;
String output = FormatUtil.DoubleToString(balance);
etAmount.setText(output);
}
else if(mCard.getBlockchain() == Blockchain.BitcoinCash || mCard.getBlockchain() == Blockchain.BitcoinCashTestNet)
{
} else if (mCard.getBlockchain() == Blockchain.BitcoinCash || mCard.getBlockchain() == Blockchain.BitcoinCashTestNet) {
Double balance = engine.GetBalanceLong(mCard) / (mCard.getBlockchain().getMultiplier() / 1000.0);
tvCurrency.setText("m" + mCard.getBlockchain().getCurrency());
use_mCurrency=true;
use_mCurrency = true;
String output = FormatUtil.DoubleToString(balance);
etAmount.setText(output);
}
else
{
} else {
tvCurrency.setText(engine.GetBalanceCurrency(mCard));
use_mCurrency=false;
use_mCurrency = false;
etAmount.setText(engine.GetBalanceValue(mCard));
}
@ -143,29 +139,24 @@ public class PreparePaymentActivity extends AppCompatActivity implements NfcAdap
@Override
public void onClick(View v) {
String strAmount;
strAmount=etAmount.getText().toString();
strAmount = etAmount.getText().toString();
CoinEngine engine = CoinEngineFactory.Create(mCard.getBlockchain());
try {
if(!engine.CheckAmount(mCard, etAmount.getText().toString()))
{
if (!engine.CheckAmount(mCard, etAmount.getText().toString())) {
etAmount.setError("Not enough funds on your card");
}
}
catch(Exception e)
{
} catch (Exception e) {
etAmount.setError("Unknown amount format");
return;
}
boolean checkAddress = engine.ValdateAddress(etWallet.getText().toString(), mCard);
if(!checkAddress)
{
if (!checkAddress) {
etWallet.setError("Incorrect destination wallet address");
return;
}
if(etWallet.getText().toString().equals(mCard.getWallet()))
{
if (etWallet.getText().toString().equals(mCard.getWallet())) {
etWallet.setError("Destination wallet address equal source address");
return;
}
@ -194,15 +185,14 @@ public class PreparePaymentActivity extends AppCompatActivity implements NfcAdap
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_SCAN_QR && resultCode == Activity.RESULT_OK && data != null && data.getExtras().containsKey("QRCode")) {
String code = data.getStringExtra("QRCode");
if(code.contains("bitcoin:"))
{
if (code.contains("bitcoin:")) {
String tmp[] = code.split("bitcoin:");
code = tmp[1];
}
etWallet.setText(code);
}else if (requestCode == REQUEST_CODE_SEND_PAYMENT ) {
} else if (requestCode == REQUEST_CODE_SEND_PAYMENT) {
setResult(resultCode,data);
setResult(resultCode, data);
finish();
}
}
@ -210,7 +200,7 @@ public class PreparePaymentActivity extends AppCompatActivity implements NfcAdap
@Override
public void onTagDiscovered(Tag tag) {
try {
Log.w(getClass().getName(),"Ignore discovered tag!");
Log.w(getClass().getName(), "Ignore discovered tag!");
mNfcManager.IgnoreTag(tag);
} catch (IOException e) {
e.printStackTrace();

View file

@ -1,4 +1,4 @@
package com.tangem.wallet;
package com.tangem.presentation.activity;
import android.app.Activity;
import android.content.Intent;
@ -18,6 +18,11 @@ import android.widget.Toast;
import com.tangem.cardReader.CardProtocol;
import com.tangem.cardReader.NfcManager;
import com.tangem.cardReader.Util;
import com.tangem.wallet.NoExtendedLengthSupportDialog;
import com.tangem.wallet.PINStorage;
import com.tangem.wallet.R;
import com.tangem.wallet.Tangem_Card;
import com.tangem.wallet.WaitSecurityDelayDialog;
public class PurgeActivity extends AppCompatActivity implements NfcAdapter.ReaderCallback, CardProtocol.Notifications {

View file

@ -1,4 +1,4 @@
package com.tangem.wallet;
package com.tangem.presentation.activity;
import android.Manifest;
import android.app.Activity;

View file

@ -1,4 +1,4 @@
package com.tangem.wallet;
package com.tangem.presentation.activity;
import android.Manifest;
import android.annotation.SuppressLint;
@ -27,6 +27,10 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.tangem.cardReader.NfcManager;
import com.tangem.wallet.FingerprintHelper;
import com.tangem.wallet.PINStorage;
import com.tangem.wallet.R;
import com.tangem.wallet.Tangem_Card;
import java.io.IOException;
import java.security.KeyStore;

View file

@ -1,4 +1,4 @@
package com.tangem.wallet;
package com.tangem.presentation.activity;
import android.Manifest;
import android.annotation.SuppressLint;
@ -23,6 +23,10 @@ import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;
import com.tangem.wallet.FingerprintHelper;
import com.tangem.wallet.PINStorage;
import com.tangem.wallet.R;
import java.io.IOException;
import java.security.KeyStore;
import java.security.KeyStoreException;

View file

@ -1,8 +1,10 @@
package com.tangem.wallet;
package com.tangem.presentation.activity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.tangem.wallet.R;
public class SelectBlockchainActivity extends AppCompatActivity {
@Override

View file

@ -1,14 +1,25 @@
package com.tangem.wallet;
package com.tangem.presentation.activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.tangem.wallet.Blockchain;
import com.tangem.wallet.CoinEngine;
import com.tangem.wallet.CoinEngineFactory;
import com.tangem.wallet.Electrum_Request;
import com.tangem.wallet.Electrum_Task;
import com.tangem.wallet.Infura_Request;
import com.tangem.wallet.Infura_Task;
import com.tangem.wallet.LastSignStorage;
import com.tangem.wallet.R;
import com.tangem.wallet.SharedData;
import com.tangem.wallet.Tangem_Card;
import org.json.JSONException;
import org.json.JSONObject;

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,4 @@
package com.tangem.wallet;
package com.tangem.presentation.activity;
import android.app.Activity;
import android.content.Intent;
@ -18,6 +18,11 @@ import android.widget.Toast;
import com.tangem.cardReader.CardProtocol;
import com.tangem.cardReader.NfcManager;
import com.tangem.cardReader.Util;
import com.tangem.wallet.NoExtendedLengthSupportDialog;
import com.tangem.wallet.PINStorage;
import com.tangem.wallet.R;
import com.tangem.wallet.Tangem_Card;
import com.tangem.wallet.WaitSecurityDelayDialog;
public class SwapPINActivity extends AppCompatActivity implements NfcAdapter.ReaderCallback, CardProtocol.Notifications {

View file

@ -1,10 +1,12 @@
package com.tangem.wallet;
package com.tangem.presentation.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.tangem.wallet.R;
import com.tangem.wallet.VerifyCardActivityFragment;
public class VerifyCardActivity extends AppCompatActivity {
@ -19,8 +21,8 @@ public class VerifyCardActivity extends AppCompatActivity {
@Override
public void onBackPressed() {
//super.onBackPressed();
VerifyCardActivityFragment verifyCardActivityFragment= (VerifyCardActivityFragment) getSupportFragmentManager().findFragmentById(R.id.verify_card_fragment);
Intent data= verifyCardActivityFragment.prepareResultIntent();
VerifyCardActivityFragment verifyCardActivityFragment = (VerifyCardActivityFragment) getSupportFragmentManager().findFragmentById(R.id.verify_card_fragment);
Intent data = verifyCardActivityFragment.prepareResultIntent();
data.putExtra("modification", "update");
setResult(Activity.RESULT_OK, data);
finish();

View file

@ -27,7 +27,7 @@ public class Electrum_Task extends AsyncTask<Electrum_Request, Integer, List<Ele
OutputStreamWriter out;
BufferedReader in;
SharedData sharedCounter = null;
public SharedData sharedCounter = null;
public Electrum_Task(String host, int port) {

View file

@ -15,7 +15,7 @@ import java.util.List;
public class Fee_Task extends AsyncTask<Fee_Request, Void, List<Fee_Request>> {
SharedData sharedCounter = null;
public SharedData sharedCounter = null;
public Fee_Task(SharedData sharedData)
{

View file

@ -35,7 +35,7 @@ public class FingerprintHelper extends FingerprintManager.AuthenticationCallback
cancellationSignal.cancel();
}
interface FingerprintHelperListener {
public interface FingerprintHelperListener {
public void authenticationFailed(String error);
public void authenticationSucceeded(FingerprintManager.AuthenticationResult result);
}

View file

@ -6,7 +6,6 @@ import android.preference.PreferenceManager;
import android.util.ArrayMap;
import android.util.ArraySet;
import java.lang.reflect.Array;
import java.util.Date;
import java.util.Map;
import java.util.Set;
@ -24,7 +23,7 @@ public class LastSignStorage {
private static Map<String, String> txCol = new ArrayMap<>();
private static Map<String, String> txCompleteCol = new ArrayMap<>();
static void Init(Context context) {
public static void Init(Context context) {
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
cards=sharedPreferences.getStringSet("LastSign_Cards", cards);
for (int i = 0; i < cards.size(); i++) {

View file

@ -42,6 +42,12 @@ import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.tangem.cardReader.CardProtocol;
import com.tangem.cardReader.NfcManager;
import com.tangem.cardReader.Util;
import com.tangem.presentation.activity.CreateNewWalletActivity;
import com.tangem.presentation.activity.PreparePaymentActivity;
import com.tangem.presentation.activity.PurgeActivity;
import com.tangem.presentation.activity.RequestPINActivity;
import com.tangem.presentation.activity.SwapPINActivity;
import com.tangem.presentation.activity.VerifyCardActivity;
import org.json.JSONArray;
import org.json.JSONException;

View file

@ -27,6 +27,10 @@ import android.widget.Toast;
import com.tangem.cardReader.CardProtocol;
import com.tangem.cardReader.NfcManager;
import com.tangem.cardReader.Util;
import com.tangem.presentation.activity.EmptyWalletActivity;
import com.tangem.presentation.activity.LoadedWalletActivity;
import com.tangem.presentation.activity.MainActivity;
import com.tangem.presentation.activity.RequestPINActivity;
import org.json.JSONArray;
import org.json.JSONException;

View file

@ -4,7 +4,6 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Base64;
import android.util.Log;
import com.tangem.cardReader.CardProtocol;
@ -18,11 +17,11 @@ import javax.crypto.Cipher;
* Global PIN Storage
*/
class PINStorage {
public class PINStorage {
private static String mSavedPIN, mUserPIN, mLastUsedPIN, mEncryptedPIN, mPIN2;
private static SharedPreferences sharedPreferences=null;
static void Init(Context context) {
public static void Init(Context context) {
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
mSavedPIN = sharedPreferences.getString("SavedPIN", null);
mUserPIN = null;
@ -46,15 +45,15 @@ class PINStorage {
mLastUsedPIN = PIN;
}
static void setUserPIN(String PIN) {
public static void setUserPIN(String PIN) {
mUserPIN = PIN;
}
static void setPIN2(String PIN) {
public static void setPIN2(String PIN) {
mPIN2 = PIN;
}
static void savePIN(String PIN) {
public static void savePIN(String PIN) {
mSavedPIN = PIN;
if (mSavedPIN != null && !mSavedPIN.isEmpty()) {
SharedPreferences.Editor editor = sharedPreferences.edit();
@ -65,7 +64,7 @@ class PINStorage {
}
}
static void deletePIN() {
public static void deletePIN() {
SharedPreferences.Editor editor = sharedPreferences.edit();
if (mSavedPIN != null && mLastUsedPIN != null && mSavedPIN.equals(mLastUsedPIN)) {
mLastUsedPIN = null;
@ -75,7 +74,7 @@ class PINStorage {
editor.apply();
}
static void saveEncryptedPIN(Cipher cipher, String PIN) {
public static void saveEncryptedPIN(Cipher cipher, String PIN) {
try {
byte[] iv = cipher.getIV();
byte[] bytes = cipher.doFinal(PIN.getBytes());
@ -93,14 +92,14 @@ class PINStorage {
}
}
static byte[] loadEncryptedIV() {
public static byte[] loadEncryptedIV() {
String sIV = sharedPreferences.getString("EncryptedIV", "");
// Log.d("PINStorage", String.format("loadEncryptedIV: %s",sIV));
return Base64.decode(sIV, Base64.NO_WRAP);
}
static String loadEncryptedPIN(Cipher cipher) {
public static String loadEncryptedPIN(Cipher cipher) {
String encryptedPIN = sharedPreferences.getString("EncryptedPIN", null);
try {
@ -114,11 +113,11 @@ class PINStorage {
return mEncryptedPIN;
}
static boolean haveEncryptedPIN() {
public static boolean haveEncryptedPIN() {
return sharedPreferences.getString("EncryptedPIN", null) != null;
}
static void deleteEncryptedPIN() {
public static void deleteEncryptedPIN() {
if (mEncryptedPIN != null && mLastUsedPIN != null && mEncryptedPIN.equals(mLastUsedPIN)) {
mLastUsedPIN = null;
}
@ -129,7 +128,7 @@ class PINStorage {
editor.apply();
}
static void saveEncryptedPIN2(Cipher cipher, String PIN) {
public static void saveEncryptedPIN2(Cipher cipher, String PIN) {
try {
byte[] iv = cipher.getIV();
byte[] bytes = cipher.doFinal(PIN.getBytes());
@ -147,14 +146,14 @@ class PINStorage {
}
}
static byte[] loadEncryptedIV2() {
public static byte[] loadEncryptedIV2() {
String sIV = sharedPreferences.getString("EncryptedIV2", "");
// Log.d("PINStorage", String.format("loadEncryptedIV: %s",sIV));
return Base64.decode(sIV, Base64.NO_WRAP);
}
static String loadEncryptedPIN2(Cipher cipher) {
public static String loadEncryptedPIN2(Cipher cipher) {
String encryptedPIN = sharedPreferences.getString("EncryptedPIN2", null);
try {
@ -168,11 +167,11 @@ class PINStorage {
return mPIN2;
}
static boolean haveEncryptedPIN2() {
public static boolean haveEncryptedPIN2() {
return sharedPreferences.getString("EncryptedPIN2", null) != null;
}
static void deleteEncryptedPIN2() {
public static void deleteEncryptedPIN2() {
mPIN2 = null;
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.remove("EncryptedPIN2");

View file

@ -13,6 +13,7 @@ public class SharedData
public AtomicInteger requestCounter;
public int allRequest;
public AtomicInteger errorRequest;
public SharedData(int requstCount)
{
allRequest = requstCount;

File diff suppressed because one or more lines are too long

View file

@ -21,7 +21,7 @@ public class VerifyCardTask extends Thread {
private Tangem_Card mCard;
private NfcManager mNfcManager;
VerifyCardTask(Context context, Tangem_Card card, NfcManager nfcManager, IsoDep isoDep, CardProtocol.Notifications notifications) {
public VerifyCardTask(Context context, Tangem_Card card, NfcManager nfcManager, IsoDep isoDep, CardProtocol.Notifications notifications) {
mCard = card;
mContext = context;
mIsoDep = isoDep;

View file

@ -6,7 +6,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.tangem.wallet.CardInfoActivity">
tools:context="com.tangem.wallet.com.tangem.presentation.activity.CardInfoActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"

View file

@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tangem.wallet.ConfirmPaymentActivity">
tools:context="com.tangem.wallet.com.tangem.presentation.activity.ConfirmPaymentActivity">
<TextView
android:id="@+id/textView"

View file

@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tangem.wallet.CreateNewWalletActivity">
tools:context="com.tangem.wallet.com.tangem.presentation.activity.CreateNewWalletActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"

View file

@ -7,7 +7,7 @@
android:background="@color/white"
android:orientation="vertical"
android:padding="0dp"
tools:context="com.tangem.wallet.EmptyWalletActivity">
tools:context="com.tangem.wallet.com.tangem.presentation.activity.EmptyWalletActivity">
<RelativeLayout
android:layout_width="match_parent"

View file

@ -3,7 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tangem.wallet.LoadedWalletActivity">
tools:context="com.tangem.wallet.com.tangem.presentation.activity.LoadedWalletActivity">
<!--<android.support.design.widget.AppBarLayout-->
<!--android:layout_width="match_parent"-->

View file

@ -5,7 +5,7 @@
android:background="#FFFFFF"
android:gravity="bottom"
android:orientation="vertical"
tools:context="com.tangem.wallet.LogoActivity">
tools:context="com.tangem.wallet.com.tangem.presentation.activity.LogoActivity">
<ImageView
android:id="@+id/imgLogo"

View file

@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tangem.wallet.MainActivity">
tools:context="com.tangem.wallet.com.tangem.presentation.activity.MainActivity">
<!--<ImageView-->
<!--android:id="@+id/ivTap"-->

View file

@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tangem.wallet.PreparePaymentActivity">
tools:context="com.tangem.wallet.com.tangem.presentation.activity.PreparePaymentActivity">
<TextView
android:id="@+id/textView"

View file

@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tangem.wallet.PurgeActivity">
tools:context="com.tangem.wallet.com.tangem.presentation.activity.PurgeActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"

View file

@ -3,6 +3,6 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tangem.wallet.QRScanActivity">
tools:context="com.tangem.wallet.com.tangem.presentation.activity.QRScanActivity">
</android.support.constraint.ConstraintLayout>

View file

@ -4,7 +4,7 @@
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
tools:context="com.tangem.wallet.RequestPINActivity">
tools:context="com.tangem.wallet.com.tangem.presentation.activity.RequestPINActivity">
<!--android:paddingBottom="@dimen/activity_vertical_margin"-->
<!--android:paddingLeft="@dimen/activity_horizontal_margin"-->
<!--android:paddingRight="@dimen/activity_horizontal_margin"-->

View file

@ -4,7 +4,7 @@
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
tools:context="com.tangem.wallet.SavePINActivity">
tools:context="com.tangem.wallet.com.tangem.presentation.activity.SavePINActivity">
<!--android:paddingBottom="@dimen/activity_vertical_margin"-->
<!--android:paddingLeft="@dimen/activity_horizontal_margin"-->
<!--android:paddingRight="@dimen/activity_horizontal_margin"-->

View file

@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tangem.wallet.SendTransactionActivity">
tools:context="com.tangem.wallet.com.tangem.presentation.activity.SendTransactionActivity">
<ProgressBar
android:id="@+id/progressBar"

View file

@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tangem.wallet.SignPaymentActivity">
tools:context="com.tangem.wallet.com.tangem.presentation.activity.SignPaymentActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"

View file

@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tangem.wallet.PurgeActivity">
tools:context="com.tangem.wallet.com.tangem.presentation.activity.PurgeActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"

View file

@ -3,7 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tangem.wallet.VerifyCardActivity">
tools:context="com.tangem.wallet.com.tangem.presentation.activity.VerifyCardActivity">
<include