diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index b7508e3fe1..56e6275b46 100644
Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ
diff --git a/app/src/main/java/com/tangem/data/network/task/VerifyCardTask.java b/app/src/main/java/com/tangem/data/network/task/VerifyCardTask.java
index 0f487578e5..3c2658b340 100644
--- a/app/src/main/java/com/tangem/data/network/task/VerifyCardTask.java
+++ b/app/src/main/java/com/tangem/data/network/task/VerifyCardTask.java
@@ -86,7 +86,7 @@ public class VerifyCardTask extends Thread {
mNotifications.OnReadFinish(protocol);
}
} finally {
- mNfcManager.IgnoreTag(mIsoDep.getTag());
+ mNfcManager.ignoreTag(mIsoDep.getTag());
}
} catch (Exception e) {
e.printStackTrace();
diff --git a/app/src/main/java/com/tangem/domain/cardReader/NfcManager.java b/app/src/main/java/com/tangem/domain/cardReader/NfcManager.java
index b8632e8d60..89f259842a 100644
--- a/app/src/main/java/com/tangem/domain/cardReader/NfcManager.java
+++ b/app/src/main/java/com/tangem/domain/cardReader/NfcManager.java
@@ -21,8 +21,7 @@ import com.tangem.presentation.dialog.NFCEnableDialog;
import java.io.IOException;
public class NfcManager {
-
- private static final String TAG = "NfcManager";
+ public static final String TAG = NfcManager.class.getSimpleName();
// reader mode flags: listen for type A (not B), skipping ndef check
private static final int READER_FLAGS = NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK | NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS;
@@ -40,7 +39,7 @@ public class NfcManager {
//
// }
-// @Inject
+ // @Inject
public NfcManager(Activity activity, NfcAdapter.ReaderCallback readerCallback) {
mActivity = activity;
mReaderCallback = readerCallback;
@@ -53,18 +52,13 @@ public class NfcManager {
mActivity.registerReceiver(mBroadcastReceiver, filter);
if (mNfcAdapter == null || !mNfcAdapter.isEnabled()) {
- ShowNFCEnableDialog();
+ showNFCEnableDialog();
} else {
enableReaderMode();
}
}
- public void ShowNFCEnableDialog() {
- mEnableNfcDialog = new NFCEnableDialog();
- mEnableNfcDialog.show(mActivity.getFragmentManager(), "NFCEnableDialog");
- }
-
public void onPause() {
mActivity.unregisterReceiver(mBroadcastReceiver);
disableReaderMode();
@@ -76,7 +70,7 @@ public class NfcManager {
}
}
- public void IgnoreTag(Tag tag) throws IOException {
+ public void ignoreTag(Tag tag) throws IOException {
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// mNfcAdapter.ignore(tag, 500, null, null);
// }else{
@@ -87,6 +81,11 @@ public class NfcManager {
// }
}
+ private void showNFCEnableDialog() {
+ mEnableNfcDialog = new NFCEnableDialog();
+ mEnableNfcDialog.show(mActivity.getFragmentManager(), NFCEnableDialog.TAG);
+ }
+
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@SuppressWarnings("deprecation")
@Override
@@ -95,12 +94,9 @@ public class NfcManager {
if (action == null)
return;
if (action.equals(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED)) {
- int state = intent.getIntExtra(NfcAdapter.EXTRA_ADAPTER_STATE,
- NfcAdapter.STATE_ON);
- if (state == NfcAdapter.STATE_ON
- || state == NfcAdapter.STATE_TURNING_ON) {
- Log.d(TAG, "state: " + state + " , dialog: "
- + mEnableNfcDialog);
+ int state = intent.getIntExtra(NfcAdapter.EXTRA_ADAPTER_STATE, NfcAdapter.STATE_ON);
+ if (state == NfcAdapter.STATE_ON || state == NfcAdapter.STATE_TURNING_ON) {
+ Log.d(TAG, "state: " + state + " , dialog: " + mEnableNfcDialog);
if (mEnableNfcDialog != null) {
mEnableNfcDialog.dismiss();
}
@@ -109,7 +105,7 @@ public class NfcManager {
}
} else {
if (mEnableNfcDialog == null || !mEnableNfcDialog.isVisible()) {
- ShowNFCEnableDialog();
+ showNFCEnableDialog();
}
}
}
diff --git a/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.java b/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.java
index 2f3cb225e0..4647019697 100644
--- a/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.java
+++ b/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.java
@@ -364,7 +364,7 @@ public class ConfirmPaymentActivity extends AppCompatActivity implements NfcAdap
public void onTagDiscovered(Tag tag) {
try {
Log.w(getClass().getName(), "Ignore discovered tag!");
- mNfcManager.IgnoreTag(tag);
+ mNfcManager.ignoreTag(tag);
} catch (IOException e) {
e.printStackTrace();
}
diff --git a/app/src/main/java/com/tangem/presentation/activity/CreateNewWalletActivity.java b/app/src/main/java/com/tangem/presentation/activity/CreateNewWalletActivity.java
index 30ceaeb9b0..54002545a3 100644
--- a/app/src/main/java/com/tangem/presentation/activity/CreateNewWalletActivity.java
+++ b/app/src/main/java/com/tangem/presentation/activity/CreateNewWalletActivity.java
@@ -76,7 +76,7 @@ public class CreateNewWalletActivity extends AppCompatActivity implements NfcAda
createNewWalletTask.start();
} else {
Log.d(logTag, "Mismatch card UID (" + sUID + " instead of " + mCard.getUID() + ")");
- mNfcManager.IgnoreTag(isoDep.getTag());
+ mNfcManager.ignoreTag(isoDep.getTag());
return;
}
@@ -169,7 +169,7 @@ public class CreateNewWalletActivity extends AppCompatActivity implements NfcAda
protocol.run_Read();
} finally {
- mNfcManager.IgnoreTag(mIsoDep.getTag());
+ mNfcManager.ignoreTag(mIsoDep.getTag());
}
} catch (Exception e) {
e.printStackTrace();
diff --git a/app/src/main/java/com/tangem/presentation/activity/EmptyWalletActivity.java b/app/src/main/java/com/tangem/presentation/activity/EmptyWalletActivity.java
index 1f7e858384..dea4ee02d4 100644
--- a/app/src/main/java/com/tangem/presentation/activity/EmptyWalletActivity.java
+++ b/app/src/main/java/com/tangem/presentation/activity/EmptyWalletActivity.java
@@ -216,7 +216,7 @@ public class EmptyWalletActivity extends AppCompatActivity implements NfcAdapter
String sUID = Util.byteArrayToHexString(UID);
if (!mCard.getUID().equals(sUID)) {
Log.d(logTag, "Invalid UID: " + sUID);
- mNfcManager.IgnoreTag(isoDep.getTag());
+ mNfcManager.ignoreTag(isoDep.getTag());
return;
} else {
Log.v(logTag, "UID: " + sUID);
diff --git a/app/src/main/java/com/tangem/presentation/activity/MainActivity.java b/app/src/main/java/com/tangem/presentation/activity/MainActivity.java
index 2b68bf3e56..fc9110cca0 100644
--- a/app/src/main/java/com/tangem/presentation/activity/MainActivity.java
+++ b/app/src/main/java/com/tangem/presentation/activity/MainActivity.java
@@ -4,7 +4,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.nfc.NfcAdapter;
-import android.nfc.Tag;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
@@ -92,7 +91,6 @@ public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuI
lp.topMargin = (int) (dp * (-100 + antenna.Y * 250));
lp2.topMargin = (int) (dp * (-125 + antenna.Y * 250));
nfc.setLayoutParams(lp2);
-
Animation a = new Animation() {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
@@ -115,13 +113,13 @@ public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuI
hideCleanButton();
// NFC
- Intent intent = getIntent();
- if (intent != null && (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction()) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction()))) {
- Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
- if (tag != null && onNFCReaderCallback != null) {
- onNFCReaderCallback.onTagDiscovered(tag);
- }
- }
+// Intent intent = getIntent();
+// if (intent != null && (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction()) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction()))) {
+// Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
+// if (tag != null && onNFCReaderCallback != null) {
+// onNFCReaderCallback.onTagDiscovered(tag);
+// }
+// }
// check if device root
RootBeer rootBeer = new RootBeer(this);
@@ -129,16 +127,16 @@ public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuI
new RootFoundDialog().show(getFragmentManager(), RootFoundDialog.TAG);
}
- @Override
- protected void onNewIntent(Intent intent) {
- super.onNewIntent(intent);
- if (intent != null && (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction()) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction()))) {
- Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
- if (tag != null && onNFCReaderCallback != null) {
- onNFCReaderCallback.onTagDiscovered(tag);
- }
- }
- }
+// @Override
+// protected void onNewIntent(Intent intent) {
+// super.onNewIntent(intent);
+// if (intent != null && (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction()) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction()))) {
+// Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
+// if (tag != null && onNFCReaderCallback != null) {
+// onNFCReaderCallback.onTagDiscovered(tag);
+// }
+// }
+// }
@Override
public boolean onKeyDown(int keycode, KeyEvent e) {
diff --git a/app/src/main/java/com/tangem/presentation/activity/PreparePaymentActivity.java b/app/src/main/java/com/tangem/presentation/activity/PreparePaymentActivity.java
index 2f4f09793b..a58939fee3 100644
--- a/app/src/main/java/com/tangem/presentation/activity/PreparePaymentActivity.java
+++ b/app/src/main/java/com/tangem/presentation/activity/PreparePaymentActivity.java
@@ -201,7 +201,7 @@ public class PreparePaymentActivity extends AppCompatActivity implements NfcAdap
public void onTagDiscovered(Tag tag) {
try {
Log.w(getClass().getName(), "Ignore discovered tag!");
- mNfcManager.IgnoreTag(tag);
+ mNfcManager.ignoreTag(tag);
} catch (IOException e) {
e.printStackTrace();
}
diff --git a/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.java b/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.java
index c9ab49c818..a472fae5b7 100644
--- a/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.java
+++ b/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.java
@@ -74,7 +74,7 @@ public class PurgeActivity extends AppCompatActivity implements NfcAdapter.Reade
purgeTask.start();
} else {
Log.d(logTag, "Mismatch card UID (" + sUID + " instead of " + mCard.getUID() + ")");
- mNfcManager.IgnoreTag(isoDep.getTag());
+ mNfcManager.ignoreTag(isoDep.getTag());
return;
}
@@ -173,7 +173,7 @@ public class PurgeActivity extends AppCompatActivity implements NfcAdapter.Reade
if (isCancelled) return;
} finally {
- mNfcManager.IgnoreTag(mIsoDep.getTag());
+ mNfcManager.ignoreTag(mIsoDep.getTag());
}
} catch (Exception e) {
e.printStackTrace();
diff --git a/app/src/main/java/com/tangem/presentation/activity/RequestPINActivity.java b/app/src/main/java/com/tangem/presentation/activity/RequestPINActivity.java
index e10c13d5ab..f15f972fdf 100644
--- a/app/src/main/java/com/tangem/presentation/activity/RequestPINActivity.java
+++ b/app/src/main/java/com/tangem/presentation/activity/RequestPINActivity.java
@@ -333,7 +333,7 @@ public class RequestPINActivity extends AppCompatActivity implements NfcAdapter.
public void onTagDiscovered(Tag tag) {
try {
Log.w(getClass().getName(), "Ignore discovered tag!");
- mNfcManager.IgnoreTag(tag);
+ mNfcManager.ignoreTag(tag);
} catch (IOException e) {
e.printStackTrace();
}
diff --git a/app/src/main/java/com/tangem/presentation/activity/SignPaymentActivity.java b/app/src/main/java/com/tangem/presentation/activity/SignPaymentActivity.java
index 2f7a821d85..0fc059862d 100644
--- a/app/src/main/java/com/tangem/presentation/activity/SignPaymentActivity.java
+++ b/app/src/main/java/com/tangem/presentation/activity/SignPaymentActivity.java
@@ -1 +1 @@
-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.nfc.tech.IsoDep;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.tangem.domain.cardReader.CardProtocol;
import com.tangem.domain.cardReader.NfcManager;
import com.tangem.domain.wallet.TangemCard;
import com.tangem.util.Util;
import com.tangem.util.BTCUtils;
import com.tangem.domain.wallet.Blockchain;
import com.tangem.domain.wallet.CoinEngine;
import com.tangem.domain.wallet.CoinEngineFactory;
import com.tangem.domain.wallet.LastSignStorage;
import com.tangem.presentation.dialog.NoExtendedLengthSupportDialog;
import com.tangem.wallet.R;
import com.tangem.presentation.dialog.WaitSecurityDelayDialog;
public class SignPaymentActivity extends AppCompatActivity implements NfcAdapter.ReaderCallback, CardProtocol.Notifications {
private static final int REQUEST_CODE_SEND_PAYMENT = 1;
public static final int RESULT_INVALID_PIN = Activity.RESULT_FIRST_USER;
private TangemCard mCard;
private TextView tvCardID;
private NfcManager mNfcManager;
private static final String logTag = "SignPayment";
private ProgressBar progressBar;
private SignPaymentTask signPaymentTask;
private String amountStr;
private String feeStr;
private String outAddressStr;
private boolean lastReadSuccess = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_payment);
MainActivity.commonInit(getApplicationContext());
mCard = new TangemCard(getIntent().getStringExtra("UID"));
mCard.LoadFromBundle(getIntent().getExtras().getBundle("Card"));
amountStr = getIntent().getStringExtra("Amount");
feeStr = getIntent().getStringExtra("Fee");
outAddressStr = getIntent().getStringExtra("Wallet");
tvCardID = findViewById(R.id.tvCardID);
tvCardID.setText(mCard.getCIDDescription());
mNfcManager = new NfcManager(this, this);
progressBar = findViewById(R.id.progressBar);
progressBar.setProgressTintList(ColorStateList.valueOf(Color.DKGRAY));
progressBar.setVisibility(View.INVISIBLE);
}
@Override
public void onTagDiscovered(Tag tag) {
try {
// get IsoDep handle and run cardReader thread
final IsoDep isoDep = IsoDep.get(tag);
if (isoDep == null) {
throw new CardProtocol.TangemException(getString(R.string.wrong_tag_err));
}
byte UID[] = tag.getId();
String sUID = Util.byteArrayToHexString(UID);
Log.v(logTag, "UID: " + sUID);
if (sUID.equals(mCard.getUID())) {
if (lastReadSuccess) {
isoDep.setTimeout(mCard.getPauseBeforePIN2() + 5000);
} else {
isoDep.setTimeout(mCard.getPauseBeforePIN2() + 65000);
}
signPaymentTask = new SignPaymentTask(isoDep, this, amountStr, feeStr, outAddressStr);
signPaymentTask.start();
} else {
Log.d(logTag, "Mismatch card UID (" + sUID + " instead of " + mCard.getUID() + ")");
mNfcManager.IgnoreTag(isoDep.getTag());
return;
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onResume() {
super.onResume();
mNfcManager.onResume();
}
@Override
public void onPause() {
mNfcManager.onPause();
if (signPaymentTask != null) {
signPaymentTask.cancel(true);
}
super.onPause();
}
@Override
public void onStop() {
// dismiss enable NFC dialog
mNfcManager.onStop();
if (signPaymentTask != null) {
signPaymentTask.cancel(true);
}
super.onStop();
}
// @Override
// public Dialog CreateNFCDialog(int id, AlertDialogWrapper.Builder builder, LayoutInflater li) {
// return mNfcManager.onCreateDialog(id, builder, li);
// }
private class SignPaymentTask extends Thread {
String txAmount = "";
String txFee = "";
public void SetTransactionValue(String amount, String fee) {
txAmount = amount;
txFee = fee;
}
private String txOutAddress;
IsoDep mIsoDep;
CardProtocol.Notifications mNotifications;
private boolean isCancelled = false;
public SignPaymentTask(IsoDep isoDep, CardProtocol.Notifications notifications, String amount, String fee, String outAddress) {
mIsoDep = isoDep;
mNotifications = notifications;
txOutAddress = outAddress;
SetTransactionValue(amount, fee);
}
@Override
public void run() {
if (mIsoDep == null) {
return;
}
CardProtocol protocol = new CardProtocol(getBaseContext(), mIsoDep, mCard, mNotifications);
mNotifications.OnReadStart(protocol);
try {
// for Samsung's bugs -
// Workaround for the Samsung Galaxy S5 (since the
// first connection always hangs on transceive).
int timeout = mIsoDep.getTimeout();
mIsoDep.connect();
mIsoDep.close();
mIsoDep.connect();
mIsoDep.setTimeout(timeout);
try {
mNotifications.OnReadProgress(protocol, 5);
Log.i("SignPaymentTask", "[-- Start sign payment --]");
if (isCancelled) return;
protocol.run_VerifyCard();
Log.i("SignPaymentTask", "Manufacturer: " + protocol.getCard().getManufacturer().getOfficialName());
mNotifications.OnReadProgress(protocol, 30);
if (isCancelled) return;
//
// if (mCard.getBlockchain() == Blockchain.Ethereum) {
// SignETH_TX(protocol);
// } else {
// SignBTC_TX(protocol);
// }
CoinEngine engine = CoinEngineFactory.Create(mCard.getBlockchain());
if (engine != null) {
if (mCard.getPauseBeforePIN2() > 0) {
mNotifications.OnReadWait(mCard.getPauseBeforePIN2());
}
byte[] tx;
// try {
tx = engine.Sign(txFee, txAmount, txOutAddress, mCard, protocol);
// }
// finally {
// mNotifications.OnReadWait(0);
// }
if (tx != null) {
String txStr = BTCUtils.toHex(tx);
if (mCard.getBlockchain() == Blockchain.Ethereum || mCard.getBlockchain() == Blockchain.EthereumTestNet || mCard.getBlockchain() == Blockchain.Token) {
txStr = String.format("0x%s", txStr);
}
LastSignStorage.setLastTX(mCard.getWallet(), txStr);
Intent intent = new Intent(getBaseContext(), SendTransactionActivity.class);
intent.putExtra("UID", mCard.getUID());
intent.putExtra("Card", mCard.getAsBundle());
intent.putExtra("TX", txStr);
startActivityForResult(intent, REQUEST_CODE_SEND_PAYMENT);
}
}
mNotifications.OnReadProgress(protocol, 100);
if (isCancelled) return;
} finally {
mNfcManager.IgnoreTag(mIsoDep.getTag());
}
} catch (CardProtocol.TangemException_InvalidPIN e) {
e.printStackTrace();
protocol.setError(e);
} catch (Exception e) {
e.printStackTrace();
protocol.setError(e);
} finally {
Log.i("SignPaymentTask", "[-- Finish sign payment --]");
mNotifications.OnReadFinish(protocol);
}
}
public void cancel(Boolean AllowInterrupt) {
try {
if (this.isAlive()) {
isCancelled = true;
join(500);
}
if (this.isAlive() && AllowInterrupt) {
interrupt();
mNotifications.OnReadCancel();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void OnReadStart(CardProtocol cardProtocol) {
progressBar.post(new Runnable() {
@Override
public void run() {
progressBar.setVisibility(View.VISIBLE);
progressBar.setProgress(5);
}
});
}
public void OnReadFinish(final CardProtocol cardProtocol) {
signPaymentTask = null;
if (cardProtocol != null) {
if (cardProtocol.getError() == null) {
progressBar.post(new Runnable() {
@Override
public void run() {
progressBar.setProgress(100);
progressBar.setProgressTintList(ColorStateList.valueOf(Color.GREEN));
}
});
} else {
lastReadSuccess = false;
if (cardProtocol.getError().getClass().equals(CardProtocol.TangemException_InvalidPIN.class)) {
progressBar.post(new Runnable() {
@Override
public void run() {
progressBar.setProgress(100);
progressBar.setProgressTintList(ColorStateList.valueOf(Color.RED));
}
});
progressBar.postDelayed(new Runnable() {
@Override
public void run() {
try {
progressBar.setProgress(0);
progressBar.setProgressTintList(ColorStateList.valueOf(Color.DKGRAY));
progressBar.setVisibility(View.INVISIBLE);
Intent intent = new Intent();
intent.putExtra("message", "Cannot sign transaction. Make sure you enter correct PIN2!");
intent.putExtra("UID", cardProtocol.getCard().getUID());
intent.putExtra("Card", cardProtocol.getCard().getAsBundle());
setResult(RESULT_INVALID_PIN, intent);
finish();
} catch (Exception e) {
e.printStackTrace();
}
}
}, 500);
return;
} else {
progressBar.post(new Runnable() {
@Override
public void run() {
if (cardProtocol.getError() instanceof CardProtocol.TangemException_ExtendedLengthNotSupported) {
if (!NoExtendedLengthSupportDialog.allreadyShowed) {
new NoExtendedLengthSupportDialog().show(getFragmentManager(), "NoExtendedLengthSupportDialog");
}
} else {
Toast.makeText(getBaseContext(), "Try to scan again", Toast.LENGTH_LONG).show();
}
progressBar.setProgress(100);
progressBar.setProgressTintList(ColorStateList.valueOf(Color.RED));
}
});
}
}
}
progressBar.postDelayed(new Runnable() {
@Override
public void run() {
try {
progressBar.setProgress(0);
progressBar.setProgressTintList(ColorStateList.valueOf(Color.DKGRAY));
progressBar.setVisibility(View.INVISIBLE);
} catch (Exception e) {
e.printStackTrace();
}
}
}, 500);
}
public void OnReadProgress(CardProtocol protocol, final int progress) {
progressBar.post(new Runnable() {
@Override
public void run() {
progressBar.setProgress(progress);
}
});
}
public void OnReadCancel() {
signPaymentTask = null;
progressBar.postDelayed(new Runnable() {
@Override
public void run() {
try {
progressBar.setProgress(0);
progressBar.setProgressTintList(ColorStateList.valueOf(Color.DKGRAY));
progressBar.setVisibility(View.INVISIBLE);
} catch (Exception e) {
e.printStackTrace();
}
}
}, 500);
}
@Override
public void OnReadWait(final int msec) {
WaitSecurityDelayDialog.OnReadWait(this, msec);
}
@Override
public void OnReadBeforeRequest(int timeout) {
WaitSecurityDelayDialog.onReadBeforeRequest(this, timeout);
}
@Override
public void OnReadAfterRequest() {
WaitSecurityDelayDialog.onReadAfterRequest(this);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
Intent intent = new Intent();
intent.putExtra("message", "Operation canceled by user");
setResult(Activity.RESULT_CANCELED, intent);
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_SEND_PAYMENT) {
setResult(resultCode, data);
finish();
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
}
\ No newline at end of file
+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.nfc.tech.IsoDep;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.tangem.domain.cardReader.CardProtocol;
import com.tangem.domain.cardReader.NfcManager;
import com.tangem.domain.wallet.TangemCard;
import com.tangem.util.Util;
import com.tangem.util.BTCUtils;
import com.tangem.domain.wallet.Blockchain;
import com.tangem.domain.wallet.CoinEngine;
import com.tangem.domain.wallet.CoinEngineFactory;
import com.tangem.domain.wallet.LastSignStorage;
import com.tangem.presentation.dialog.NoExtendedLengthSupportDialog;
import com.tangem.wallet.R;
import com.tangem.presentation.dialog.WaitSecurityDelayDialog;
public class SignPaymentActivity extends AppCompatActivity implements NfcAdapter.ReaderCallback, CardProtocol.Notifications {
private static final int REQUEST_CODE_SEND_PAYMENT = 1;
public static final int RESULT_INVALID_PIN = Activity.RESULT_FIRST_USER;
private TangemCard mCard;
private TextView tvCardID;
private NfcManager mNfcManager;
private static final String logTag = "SignPayment";
private ProgressBar progressBar;
private SignPaymentTask signPaymentTask;
private String amountStr;
private String feeStr;
private String outAddressStr;
private boolean lastReadSuccess = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_payment);
MainActivity.commonInit(getApplicationContext());
mCard = new TangemCard(getIntent().getStringExtra("UID"));
mCard.LoadFromBundle(getIntent().getExtras().getBundle("Card"));
amountStr = getIntent().getStringExtra("Amount");
feeStr = getIntent().getStringExtra("Fee");
outAddressStr = getIntent().getStringExtra("Wallet");
tvCardID = findViewById(R.id.tvCardID);
tvCardID.setText(mCard.getCIDDescription());
mNfcManager = new NfcManager(this, this);
progressBar = findViewById(R.id.progressBar);
progressBar.setProgressTintList(ColorStateList.valueOf(Color.DKGRAY));
progressBar.setVisibility(View.INVISIBLE);
}
@Override
public void onTagDiscovered(Tag tag) {
try {
// get IsoDep handle and run cardReader thread
final IsoDep isoDep = IsoDep.get(tag);
if (isoDep == null) {
throw new CardProtocol.TangemException(getString(R.string.wrong_tag_err));
}
byte UID[] = tag.getId();
String sUID = Util.byteArrayToHexString(UID);
Log.v(logTag, "UID: " + sUID);
if (sUID.equals(mCard.getUID())) {
if (lastReadSuccess) {
isoDep.setTimeout(mCard.getPauseBeforePIN2() + 5000);
} else {
isoDep.setTimeout(mCard.getPauseBeforePIN2() + 65000);
}
signPaymentTask = new SignPaymentTask(isoDep, this, amountStr, feeStr, outAddressStr);
signPaymentTask.start();
} else {
Log.d(logTag, "Mismatch card UID (" + sUID + " instead of " + mCard.getUID() + ")");
mNfcManager.ignoreTag(isoDep.getTag());
return;
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onResume() {
super.onResume();
mNfcManager.onResume();
}
@Override
public void onPause() {
mNfcManager.onPause();
if (signPaymentTask != null) {
signPaymentTask.cancel(true);
}
super.onPause();
}
@Override
public void onStop() {
// dismiss enable NFC dialog
mNfcManager.onStop();
if (signPaymentTask != null) {
signPaymentTask.cancel(true);
}
super.onStop();
}
// @Override
// public Dialog CreateNFCDialog(int id, AlertDialogWrapper.Builder builder, LayoutInflater li) {
// return mNfcManager.onCreateDialog(id, builder, li);
// }
private class SignPaymentTask extends Thread {
String txAmount = "";
String txFee = "";
public void SetTransactionValue(String amount, String fee) {
txAmount = amount;
txFee = fee;
}
private String txOutAddress;
IsoDep mIsoDep;
CardProtocol.Notifications mNotifications;
private boolean isCancelled = false;
public SignPaymentTask(IsoDep isoDep, CardProtocol.Notifications notifications, String amount, String fee, String outAddress) {
mIsoDep = isoDep;
mNotifications = notifications;
txOutAddress = outAddress;
SetTransactionValue(amount, fee);
}
@Override
public void run() {
if (mIsoDep == null) {
return;
}
CardProtocol protocol = new CardProtocol(getBaseContext(), mIsoDep, mCard, mNotifications);
mNotifications.OnReadStart(protocol);
try {
// for Samsung's bugs -
// Workaround for the Samsung Galaxy S5 (since the
// first connection always hangs on transceive).
int timeout = mIsoDep.getTimeout();
mIsoDep.connect();
mIsoDep.close();
mIsoDep.connect();
mIsoDep.setTimeout(timeout);
try {
mNotifications.OnReadProgress(protocol, 5);
Log.i("SignPaymentTask", "[-- Start sign payment --]");
if (isCancelled) return;
protocol.run_VerifyCard();
Log.i("SignPaymentTask", "Manufacturer: " + protocol.getCard().getManufacturer().getOfficialName());
mNotifications.OnReadProgress(protocol, 30);
if (isCancelled) return;
//
// if (mCard.getBlockchain() == Blockchain.Ethereum) {
// SignETH_TX(protocol);
// } else {
// SignBTC_TX(protocol);
// }
CoinEngine engine = CoinEngineFactory.Create(mCard.getBlockchain());
if (engine != null) {
if (mCard.getPauseBeforePIN2() > 0) {
mNotifications.OnReadWait(mCard.getPauseBeforePIN2());
}
byte[] tx;
// try {
tx = engine.Sign(txFee, txAmount, txOutAddress, mCard, protocol);
// }
// finally {
// mNotifications.OnReadWait(0);
// }
if (tx != null) {
String txStr = BTCUtils.toHex(tx);
if (mCard.getBlockchain() == Blockchain.Ethereum || mCard.getBlockchain() == Blockchain.EthereumTestNet || mCard.getBlockchain() == Blockchain.Token) {
txStr = String.format("0x%s", txStr);
}
LastSignStorage.setLastTX(mCard.getWallet(), txStr);
Intent intent = new Intent(getBaseContext(), SendTransactionActivity.class);
intent.putExtra("UID", mCard.getUID());
intent.putExtra("Card", mCard.getAsBundle());
intent.putExtra("TX", txStr);
startActivityForResult(intent, REQUEST_CODE_SEND_PAYMENT);
}
}
mNotifications.OnReadProgress(protocol, 100);
if (isCancelled) return;
} finally {
mNfcManager.ignoreTag(mIsoDep.getTag());
}
} catch (CardProtocol.TangemException_InvalidPIN e) {
e.printStackTrace();
protocol.setError(e);
} catch (Exception e) {
e.printStackTrace();
protocol.setError(e);
} finally {
Log.i("SignPaymentTask", "[-- Finish sign payment --]");
mNotifications.OnReadFinish(protocol);
}
}
public void cancel(Boolean AllowInterrupt) {
try {
if (this.isAlive()) {
isCancelled = true;
join(500);
}
if (this.isAlive() && AllowInterrupt) {
interrupt();
mNotifications.OnReadCancel();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void OnReadStart(CardProtocol cardProtocol) {
progressBar.post(new Runnable() {
@Override
public void run() {
progressBar.setVisibility(View.VISIBLE);
progressBar.setProgress(5);
}
});
}
public void OnReadFinish(final CardProtocol cardProtocol) {
signPaymentTask = null;
if (cardProtocol != null) {
if (cardProtocol.getError() == null) {
progressBar.post(new Runnable() {
@Override
public void run() {
progressBar.setProgress(100);
progressBar.setProgressTintList(ColorStateList.valueOf(Color.GREEN));
}
});
} else {
lastReadSuccess = false;
if (cardProtocol.getError().getClass().equals(CardProtocol.TangemException_InvalidPIN.class)) {
progressBar.post(new Runnable() {
@Override
public void run() {
progressBar.setProgress(100);
progressBar.setProgressTintList(ColorStateList.valueOf(Color.RED));
}
});
progressBar.postDelayed(new Runnable() {
@Override
public void run() {
try {
progressBar.setProgress(0);
progressBar.setProgressTintList(ColorStateList.valueOf(Color.DKGRAY));
progressBar.setVisibility(View.INVISIBLE);
Intent intent = new Intent();
intent.putExtra("message", "Cannot sign transaction. Make sure you enter correct PIN2!");
intent.putExtra("UID", cardProtocol.getCard().getUID());
intent.putExtra("Card", cardProtocol.getCard().getAsBundle());
setResult(RESULT_INVALID_PIN, intent);
finish();
} catch (Exception e) {
e.printStackTrace();
}
}
}, 500);
return;
} else {
progressBar.post(new Runnable() {
@Override
public void run() {
if (cardProtocol.getError() instanceof CardProtocol.TangemException_ExtendedLengthNotSupported) {
if (!NoExtendedLengthSupportDialog.allreadyShowed) {
new NoExtendedLengthSupportDialog().show(getFragmentManager(), "NoExtendedLengthSupportDialog");
}
} else {
Toast.makeText(getBaseContext(), "Try to scan again", Toast.LENGTH_LONG).show();
}
progressBar.setProgress(100);
progressBar.setProgressTintList(ColorStateList.valueOf(Color.RED));
}
});
}
}
}
progressBar.postDelayed(new Runnable() {
@Override
public void run() {
try {
progressBar.setProgress(0);
progressBar.setProgressTintList(ColorStateList.valueOf(Color.DKGRAY));
progressBar.setVisibility(View.INVISIBLE);
} catch (Exception e) {
e.printStackTrace();
}
}
}, 500);
}
public void OnReadProgress(CardProtocol protocol, final int progress) {
progressBar.post(new Runnable() {
@Override
public void run() {
progressBar.setProgress(progress);
}
});
}
public void OnReadCancel() {
signPaymentTask = null;
progressBar.postDelayed(new Runnable() {
@Override
public void run() {
try {
progressBar.setProgress(0);
progressBar.setProgressTintList(ColorStateList.valueOf(Color.DKGRAY));
progressBar.setVisibility(View.INVISIBLE);
} catch (Exception e) {
e.printStackTrace();
}
}
}, 500);
}
@Override
public void OnReadWait(final int msec) {
WaitSecurityDelayDialog.OnReadWait(this, msec);
}
@Override
public void OnReadBeforeRequest(int timeout) {
WaitSecurityDelayDialog.onReadBeforeRequest(this, timeout);
}
@Override
public void OnReadAfterRequest() {
WaitSecurityDelayDialog.onReadAfterRequest(this);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
Intent intent = new Intent();
intent.putExtra("message", "Operation canceled by user");
setResult(Activity.RESULT_CANCELED, intent);
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_SEND_PAYMENT) {
setResult(resultCode, data);
finish();
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/tangem/presentation/activity/SwapPINActivity.java b/app/src/main/java/com/tangem/presentation/activity/SwapPINActivity.java
index 1e55df0011..57c4010616 100644
--- a/app/src/main/java/com/tangem/presentation/activity/SwapPINActivity.java
+++ b/app/src/main/java/com/tangem/presentation/activity/SwapPINActivity.java
@@ -76,7 +76,7 @@ public class SwapPINActivity extends AppCompatActivity implements NfcAdapter.Rea
swapPinTask.start();
} else {
Log.d(logTag, "Mismatch card UID (" + sUID + " instead of " + mCard.getUID() + ")");
- mNfcManager.IgnoreTag(isoDep.getTag());
+ mNfcManager.ignoreTag(isoDep.getTag());
}
} catch (Exception e) {
@@ -166,7 +166,7 @@ public class SwapPINActivity extends AppCompatActivity implements NfcAdapter.Rea
mNotifications.OnReadProgress(protocol, 100);
} finally {
- mNfcManager.IgnoreTag(mIsoDep.getTag());
+ mNfcManager.ignoreTag(mIsoDep.getTag());
}
} catch (Exception e) {
e.printStackTrace();
diff --git a/app/src/main/java/com/tangem/presentation/adapter/CardUnspentListAdapter.java b/app/src/main/java/com/tangem/presentation/adapter/CardUnspentListAdapter.java
index 83921279aa..634da5ebca 100644
--- a/app/src/main/java/com/tangem/presentation/adapter/CardUnspentListAdapter.java
+++ b/app/src/main/java/com/tangem/presentation/adapter/CardUnspentListAdapter.java
@@ -60,7 +60,7 @@ public class CardUnspentListAdapter extends BaseAdapter {
TangemCard.UnspentTransaction unspentTransaction = (TangemCard.UnspentTransaction) getItem(position);
- String html=String.format("%d mBTC
%s", unspentTransaction.Amount, unspentTransaction.txID);
+ String html = String.format("%d mBTC
%s", unspentTransaction.Amount, unspentTransaction.txID);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
tvItem.setText(Html.fromHtml(html, FROM_HTML_MODE_COMPACT));
@@ -76,11 +76,12 @@ public class CardUnspentListAdapter extends BaseAdapter {
}
public void UpdateUnspent(String tx_hash, int value, int height) {
- TangemCard.UnspentTransaction newUT=new TangemCard.UnspentTransaction();
- newUT.txID=tx_hash;
- newUT.Amount=value;
- newUT.Height=height;
+ TangemCard.UnspentTransaction newUT = new TangemCard.UnspentTransaction();
+ newUT.txID = tx_hash;
+ newUT.Amount = value;
+ newUT.Height = height;
mCard.getUnspentTransactions().add(newUT);
notifyDataSetChanged();
}
-}
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/tangem/presentation/dialog/NFCEnableDialog.java b/app/src/main/java/com/tangem/presentation/dialog/NFCEnableDialog.java
index caca5b59cb..317a4bfe22 100644
--- a/app/src/main/java/com/tangem/presentation/dialog/NFCEnableDialog.java
+++ b/app/src/main/java/com/tangem/presentation/dialog/NFCEnableDialog.java
@@ -2,7 +2,6 @@ package com.tangem.presentation.dialog;
import android.app.Dialog;
import android.app.DialogFragment;
-import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.provider.Settings;
@@ -15,6 +14,7 @@ import com.tangem.wallet.R;
*/
public class NFCEnableDialog extends DialogFragment {
+ public static final String TAG = NFCEnableDialog.class.getSimpleName();
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
@@ -25,21 +25,16 @@ public class NFCEnableDialog extends DialogFragment {
.setTitle(R.string.nfc_disabled)
.setMessage(R.string.enable_nfc)
.setPositiveButton(R.string.dialog_ok,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int id) {
- // take user to wireless settings
- getActivity().startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
- }
+ (dialog, id) -> {
+ // take user to wireless settings
+ getActivity().startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
})
.setNegativeButton(R.string.dialog_quit,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int id) {
- dialog.cancel();
- getActivity().finish();
- }
+ (dialog, id) -> {
+ dialog.cancel();
+ getActivity().finish();
});
return builder.create();
}
+
}
diff --git a/app/src/main/java/com/tangem/presentation/dialog/RootFoundDialog.java b/app/src/main/java/com/tangem/presentation/dialog/RootFoundDialog.java
index a100c2762f..b21e2ad791 100644
--- a/app/src/main/java/com/tangem/presentation/dialog/RootFoundDialog.java
+++ b/app/src/main/java/com/tangem/presentation/dialog/RootFoundDialog.java
@@ -20,4 +20,4 @@ public class RootFoundDialog extends DialogFragment {
.create();
}
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/tangem/presentation/fragment/LoadedWalletFragment.java b/app/src/main/java/com/tangem/presentation/fragment/LoadedWalletFragment.java
index f07617a54b..e59d35b94f 100644
--- a/app/src/main/java/com/tangem/presentation/fragment/LoadedWalletFragment.java
+++ b/app/src/main/java/com/tangem/presentation/fragment/LoadedWalletFragment.java
@@ -24,7 +24,6 @@ import android.text.Spanned;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuInflater;
-import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
@@ -40,34 +39,34 @@ import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.tangem.data.network.request.ElectrumRequest;
+import com.tangem.data.network.request.ExchangeRequest;
+import com.tangem.data.network.request.InfuraRequest;
+import com.tangem.data.network.task.ElectrumTask;
+import com.tangem.data.network.task.ExchangeTask;
+import com.tangem.data.network.task.InfuraTask;
+import com.tangem.data.network.task.VerifyCardTask;
import com.tangem.domain.cardReader.CardProtocol;
import com.tangem.domain.cardReader.NfcManager;
+import com.tangem.domain.wallet.BitcoinException;
+import com.tangem.domain.wallet.Blockchain;
+import com.tangem.domain.wallet.CoinEngine;
+import com.tangem.domain.wallet.CoinEngineFactory;
+import com.tangem.domain.wallet.LastSignStorage;
+import com.tangem.domain.wallet.PINStorage;
+import com.tangem.domain.wallet.SharedData;
import com.tangem.domain.wallet.TangemCard;
-import com.tangem.util.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 com.tangem.util.BTCUtils;
-import com.tangem.domain.wallet.BitcoinException;
-import com.tangem.domain.wallet.Blockchain;
-import com.tangem.domain.wallet.CoinEngine;
-import com.tangem.domain.wallet.CoinEngineFactory;
-import com.tangem.data.network.task.ElectrumTask;
-import com.tangem.data.network.request.ExchangeRequest;
-import com.tangem.data.network.task.ExchangeTask;
-import com.tangem.data.network.request.InfuraRequest;
-import com.tangem.data.network.task.InfuraTask;
-import com.tangem.domain.wallet.LastSignStorage;
import com.tangem.presentation.dialog.NoExtendedLengthSupportDialog;
-import com.tangem.domain.wallet.PINStorage;
+import com.tangem.presentation.dialog.WaitSecurityDelayDialog;
+import com.tangem.util.BTCUtils;
+import com.tangem.util.Util;
import com.tangem.wallet.BuildConfig;
import com.tangem.wallet.R;
-import com.tangem.domain.wallet.SharedData;
-import com.tangem.data.network.task.VerifyCardTask;
-import com.tangem.presentation.dialog.WaitSecurityDelayDialog;
import org.json.JSONArray;
import org.json.JSONException;
@@ -1022,7 +1021,7 @@ public class LoadedWalletFragment extends Fragment implements SwipeRefreshLayout
String sUID = Util.byteArrayToHexString(UID);
if (!mCard.getUID().equals(sUID)) {
Log.d(logTag, "Invalid UID: " + sUID);
- mNfcManager.IgnoreTag(isoDep.getTag());
+ mNfcManager.ignoreTag(isoDep.getTag());
return;
} else {
Log.v(logTag, "UID: " + sUID);
diff --git a/app/src/main/java/com/tangem/presentation/fragment/MainFragment.java b/app/src/main/java/com/tangem/presentation/fragment/MainFragment.java
index 9b70795024..068ff29e02 100644
--- a/app/src/main/java/com/tangem/presentation/fragment/MainFragment.java
+++ b/app/src/main/java/com/tangem/presentation/fragment/MainFragment.java
@@ -164,7 +164,6 @@ public class MainFragment extends Fragment implements NfcAdapter.ReaderCallback,
if (getActivity() instanceof MainActivity) {
((MainActivity) getActivity()).setOnCardsClean(this);
-// ((MainActivity) getActivity()).setOnCreateNFCDialog(this);
((MainActivity) getActivity()).setNfcAdapterReaderCallback(this);
}
@@ -195,7 +194,7 @@ public class MainFragment extends Fragment implements NfcAdapter.ReaderCallback,
String sUID = Util.byteArrayToHexString(UID);
if (slCardUIDs.indexOf(sUID) != -1) {
Log.d(logTag, "Repeat UID: " + sUID);
- mNfcManager.IgnoreTag(isoDep.getTag());
+ mNfcManager.ignoreTag(isoDep.getTag());
return;
} else {
Log.v(logTag, "UID: " + sUID);
@@ -631,7 +630,7 @@ public class MainFragment extends Fragment implements NfcAdapter.ReaderCallback,
mNotifications.OnReadFinish(protocol);
}
} finally {
- mNfcManager.IgnoreTag(mIsoDep.getTag());
+ mNfcManager.ignoreTag(mIsoDep.getTag());
}
} catch (Exception e) {
e.printStackTrace();
diff --git a/app/src/main/java/com/tangem/presentation/fragment/VerifyCardFragment.java b/app/src/main/java/com/tangem/presentation/fragment/VerifyCardFragment.java
index 022b2323f6..a76b6501c6 100644
--- a/app/src/main/java/com/tangem/presentation/fragment/VerifyCardFragment.java
+++ b/app/src/main/java/com/tangem/presentation/fragment/VerifyCardFragment.java
@@ -353,7 +353,7 @@ public class VerifyCardFragment extends Fragment implements SwipeRefreshLayout.O
public void onTagDiscovered(Tag tag) {
try {
Log.w(getClass().getName(), "Ignore discovered tag!");
- mNfcManager.IgnoreTag(tag);
+ mNfcManager.ignoreTag(tag);
} catch (IOException e) {
e.printStackTrace();
}