Updated on 2026-08-14

This commit is contained in:
Tangem 2018-06-05 23:20:42 +03:00
parent 0bc2d0a1d1
commit 49c3ff4427
18 changed files with 78 additions and 90 deletions

Binary file not shown.

View file

@ -86,7 +86,7 @@ public class VerifyCardTask extends Thread {
mNotifications.OnReadFinish(protocol); mNotifications.OnReadFinish(protocol);
} }
} finally { } finally {
mNfcManager.IgnoreTag(mIsoDep.getTag()); mNfcManager.ignoreTag(mIsoDep.getTag());
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();

View file

@ -21,8 +21,7 @@ import com.tangem.presentation.dialog.NFCEnableDialog;
import java.io.IOException; import java.io.IOException;
public class NfcManager { public class NfcManager {
public static final String TAG = NfcManager.class.getSimpleName();
private static final String TAG = "NfcManager";
// reader mode flags: listen for type A (not B), skipping ndef check // 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; 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) { public NfcManager(Activity activity, NfcAdapter.ReaderCallback readerCallback) {
mActivity = activity; mActivity = activity;
mReaderCallback = readerCallback; mReaderCallback = readerCallback;
@ -53,18 +52,13 @@ public class NfcManager {
mActivity.registerReceiver(mBroadcastReceiver, filter); mActivity.registerReceiver(mBroadcastReceiver, filter);
if (mNfcAdapter == null || !mNfcAdapter.isEnabled()) { if (mNfcAdapter == null || !mNfcAdapter.isEnabled()) {
ShowNFCEnableDialog(); showNFCEnableDialog();
} else { } else {
enableReaderMode(); enableReaderMode();
} }
} }
public void ShowNFCEnableDialog() {
mEnableNfcDialog = new NFCEnableDialog();
mEnableNfcDialog.show(mActivity.getFragmentManager(), "NFCEnableDialog");
}
public void onPause() { public void onPause() {
mActivity.unregisterReceiver(mBroadcastReceiver); mActivity.unregisterReceiver(mBroadcastReceiver);
disableReaderMode(); 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) { // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// mNfcAdapter.ignore(tag, 500, null, null); // mNfcAdapter.ignore(tag, 500, null, null);
// }else{ // }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() { private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
@Override @Override
@ -95,12 +94,9 @@ public class NfcManager {
if (action == null) if (action == null)
return; return;
if (action.equals(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED)) { if (action.equals(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED)) {
int state = intent.getIntExtra(NfcAdapter.EXTRA_ADAPTER_STATE, int state = intent.getIntExtra(NfcAdapter.EXTRA_ADAPTER_STATE, NfcAdapter.STATE_ON);
NfcAdapter.STATE_ON); if (state == NfcAdapter.STATE_ON || state == NfcAdapter.STATE_TURNING_ON) {
if (state == NfcAdapter.STATE_ON Log.d(TAG, "state: " + state + " , dialog: " + mEnableNfcDialog);
|| state == NfcAdapter.STATE_TURNING_ON) {
Log.d(TAG, "state: " + state + " , dialog: "
+ mEnableNfcDialog);
if (mEnableNfcDialog != null) { if (mEnableNfcDialog != null) {
mEnableNfcDialog.dismiss(); mEnableNfcDialog.dismiss();
} }
@ -109,7 +105,7 @@ public class NfcManager {
} }
} else { } else {
if (mEnableNfcDialog == null || !mEnableNfcDialog.isVisible()) { if (mEnableNfcDialog == null || !mEnableNfcDialog.isVisible()) {
ShowNFCEnableDialog(); showNFCEnableDialog();
} }
} }
} }

View file

@ -364,7 +364,7 @@ public class ConfirmPaymentActivity extends AppCompatActivity implements NfcAdap
public void onTagDiscovered(Tag tag) { public void onTagDiscovered(Tag tag) {
try { try {
Log.w(getClass().getName(), "Ignore discovered tag!"); Log.w(getClass().getName(), "Ignore discovered tag!");
mNfcManager.IgnoreTag(tag); mNfcManager.ignoreTag(tag);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }

View file

@ -76,7 +76,7 @@ public class CreateNewWalletActivity extends AppCompatActivity implements NfcAda
createNewWalletTask.start(); createNewWalletTask.start();
} else { } else {
Log.d(logTag, "Mismatch card UID (" + sUID + " instead of " + mCard.getUID() + ")"); Log.d(logTag, "Mismatch card UID (" + sUID + " instead of " + mCard.getUID() + ")");
mNfcManager.IgnoreTag(isoDep.getTag()); mNfcManager.ignoreTag(isoDep.getTag());
return; return;
} }
@ -169,7 +169,7 @@ public class CreateNewWalletActivity extends AppCompatActivity implements NfcAda
protocol.run_Read(); protocol.run_Read();
} finally { } finally {
mNfcManager.IgnoreTag(mIsoDep.getTag()); mNfcManager.ignoreTag(mIsoDep.getTag());
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();

View file

@ -216,7 +216,7 @@ public class EmptyWalletActivity extends AppCompatActivity implements NfcAdapter
String sUID = Util.byteArrayToHexString(UID); String sUID = Util.byteArrayToHexString(UID);
if (!mCard.getUID().equals(sUID)) { if (!mCard.getUID().equals(sUID)) {
Log.d(logTag, "Invalid UID: " + sUID); Log.d(logTag, "Invalid UID: " + sUID);
mNfcManager.IgnoreTag(isoDep.getTag()); mNfcManager.ignoreTag(isoDep.getTag());
return; return;
} else { } else {
Log.v(logTag, "UID: " + sUID); Log.v(logTag, "UID: " + sUID);

View file

@ -4,7 +4,6 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.nfc.NfcAdapter; import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.os.Bundle; import android.os.Bundle;
import android.support.design.widget.FloatingActionButton; import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity; 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)); lp.topMargin = (int) (dp * (-100 + antenna.Y * 250));
lp2.topMargin = (int) (dp * (-125 + antenna.Y * 250)); lp2.topMargin = (int) (dp * (-125 + antenna.Y * 250));
nfc.setLayoutParams(lp2); nfc.setLayoutParams(lp2);
Animation a = new Animation() { Animation a = new Animation() {
@Override @Override
protected void applyTransformation(float interpolatedTime, Transformation t) { protected void applyTransformation(float interpolatedTime, Transformation t) {
@ -115,13 +113,13 @@ public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuI
hideCleanButton(); hideCleanButton();
// NFC // NFC
Intent intent = getIntent(); // Intent intent = getIntent();
if (intent != null && (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction()) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction()))) { // if (intent != null && (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction()) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction()))) {
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); // Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (tag != null && onNFCReaderCallback != null) { // if (tag != null && onNFCReaderCallback != null) {
onNFCReaderCallback.onTagDiscovered(tag); // onNFCReaderCallback.onTagDiscovered(tag);
} // }
} // }
// check if device root // check if device root
RootBeer rootBeer = new RootBeer(this); RootBeer rootBeer = new RootBeer(this);
@ -129,16 +127,16 @@ public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuI
new RootFoundDialog().show(getFragmentManager(), RootFoundDialog.TAG); new RootFoundDialog().show(getFragmentManager(), RootFoundDialog.TAG);
} }
@Override // @Override
protected void onNewIntent(Intent intent) { // protected void onNewIntent(Intent intent) {
super.onNewIntent(intent); // super.onNewIntent(intent);
if (intent != null && (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction()) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction()))) { // if (intent != null && (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction()) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction()))) {
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); // Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (tag != null && onNFCReaderCallback != null) { // if (tag != null && onNFCReaderCallback != null) {
onNFCReaderCallback.onTagDiscovered(tag); // onNFCReaderCallback.onTagDiscovered(tag);
} // }
} // }
} // }
@Override @Override
public boolean onKeyDown(int keycode, KeyEvent e) { public boolean onKeyDown(int keycode, KeyEvent e) {

View file

@ -201,7 +201,7 @@ public class PreparePaymentActivity extends AppCompatActivity implements NfcAdap
public void onTagDiscovered(Tag tag) { public void onTagDiscovered(Tag tag) {
try { try {
Log.w(getClass().getName(), "Ignore discovered tag!"); Log.w(getClass().getName(), "Ignore discovered tag!");
mNfcManager.IgnoreTag(tag); mNfcManager.ignoreTag(tag);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }

View file

@ -74,7 +74,7 @@ public class PurgeActivity extends AppCompatActivity implements NfcAdapter.Reade
purgeTask.start(); purgeTask.start();
} else { } else {
Log.d(logTag, "Mismatch card UID (" + sUID + " instead of " + mCard.getUID() + ")"); Log.d(logTag, "Mismatch card UID (" + sUID + " instead of " + mCard.getUID() + ")");
mNfcManager.IgnoreTag(isoDep.getTag()); mNfcManager.ignoreTag(isoDep.getTag());
return; return;
} }
@ -173,7 +173,7 @@ public class PurgeActivity extends AppCompatActivity implements NfcAdapter.Reade
if (isCancelled) return; if (isCancelled) return;
} finally { } finally {
mNfcManager.IgnoreTag(mIsoDep.getTag()); mNfcManager.ignoreTag(mIsoDep.getTag());
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();

View file

@ -333,7 +333,7 @@ public class RequestPINActivity extends AppCompatActivity implements NfcAdapter.
public void onTagDiscovered(Tag tag) { public void onTagDiscovered(Tag tag) {
try { try {
Log.w(getClass().getName(), "Ignore discovered tag!"); Log.w(getClass().getName(), "Ignore discovered tag!");
mNfcManager.IgnoreTag(tag); mNfcManager.ignoreTag(tag);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }

File diff suppressed because one or more lines are too long

View file

@ -76,7 +76,7 @@ public class SwapPINActivity extends AppCompatActivity implements NfcAdapter.Rea
swapPinTask.start(); swapPinTask.start();
} else { } else {
Log.d(logTag, "Mismatch card UID (" + sUID + " instead of " + mCard.getUID() + ")"); Log.d(logTag, "Mismatch card UID (" + sUID + " instead of " + mCard.getUID() + ")");
mNfcManager.IgnoreTag(isoDep.getTag()); mNfcManager.ignoreTag(isoDep.getTag());
} }
} catch (Exception e) { } catch (Exception e) {
@ -166,7 +166,7 @@ public class SwapPINActivity extends AppCompatActivity implements NfcAdapter.Rea
mNotifications.OnReadProgress(protocol, 100); mNotifications.OnReadProgress(protocol, 100);
} finally { } finally {
mNfcManager.IgnoreTag(mIsoDep.getTag()); mNfcManager.ignoreTag(mIsoDep.getTag());
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();

View file

@ -60,7 +60,7 @@ public class CardUnspentListAdapter extends BaseAdapter {
TangemCard.UnspentTransaction unspentTransaction = (TangemCard.UnspentTransaction) getItem(position); TangemCard.UnspentTransaction unspentTransaction = (TangemCard.UnspentTransaction) getItem(position);
String html=String.format("<b>%d mBTC</b><br>%s", unspentTransaction.Amount, unspentTransaction.txID); String html = String.format("<b>%d mBTC</b><br>%s", unspentTransaction.Amount, unspentTransaction.txID);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
tvItem.setText(Html.fromHtml(html, FROM_HTML_MODE_COMPACT)); 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) { public void UpdateUnspent(String tx_hash, int value, int height) {
TangemCard.UnspentTransaction newUT=new TangemCard.UnspentTransaction(); TangemCard.UnspentTransaction newUT = new TangemCard.UnspentTransaction();
newUT.txID=tx_hash; newUT.txID = tx_hash;
newUT.Amount=value; newUT.Amount = value;
newUT.Height=height; newUT.Height = height;
mCard.getUnspentTransactions().add(newUT); mCard.getUnspentTransactions().add(newUT);
notifyDataSetChanged(); notifyDataSetChanged();
} }
} }

View file

@ -2,7 +2,6 @@ package com.tangem.presentation.dialog;
import android.app.Dialog; import android.app.Dialog;
import android.app.DialogFragment; import android.app.DialogFragment;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings; import android.provider.Settings;
@ -15,6 +14,7 @@ import com.tangem.wallet.R;
*/ */
public class NFCEnableDialog extends DialogFragment { public class NFCEnableDialog extends DialogFragment {
public static final String TAG = NFCEnableDialog.class.getSimpleName();
@Override @Override
public Dialog onCreateDialog(Bundle savedInstanceState) { public Dialog onCreateDialog(Bundle savedInstanceState) {
@ -25,21 +25,16 @@ public class NFCEnableDialog extends DialogFragment {
.setTitle(R.string.nfc_disabled) .setTitle(R.string.nfc_disabled)
.setMessage(R.string.enable_nfc) .setMessage(R.string.enable_nfc)
.setPositiveButton(R.string.dialog_ok, .setPositiveButton(R.string.dialog_ok,
new DialogInterface.OnClickListener() { (dialog, id) -> {
public void onClick(DialogInterface dialog, // take user to wireless settings
int id) { getActivity().startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
// take user to wireless settings
getActivity().startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
}
}) })
.setNegativeButton(R.string.dialog_quit, .setNegativeButton(R.string.dialog_quit,
new DialogInterface.OnClickListener() { (dialog, id) -> {
public void onClick(DialogInterface dialog, dialog.cancel();
int id) { getActivity().finish();
dialog.cancel();
getActivity().finish();
}
}); });
return builder.create(); return builder.create();
} }
} }

View file

@ -24,7 +24,6 @@ import android.text.Spanned;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MenuInflater; import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageView; 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.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.tangem.data.network.request.ElectrumRequest; 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.CardProtocol;
import com.tangem.domain.cardReader.NfcManager; 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.domain.wallet.TangemCard;
import com.tangem.util.Util;
import com.tangem.presentation.activity.CreateNewWalletActivity; import com.tangem.presentation.activity.CreateNewWalletActivity;
import com.tangem.presentation.activity.PreparePaymentActivity; import com.tangem.presentation.activity.PreparePaymentActivity;
import com.tangem.presentation.activity.PurgeActivity; import com.tangem.presentation.activity.PurgeActivity;
import com.tangem.presentation.activity.RequestPINActivity; import com.tangem.presentation.activity.RequestPINActivity;
import com.tangem.presentation.activity.SwapPINActivity; import com.tangem.presentation.activity.SwapPINActivity;
import com.tangem.presentation.activity.VerifyCardActivity; 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.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.BuildConfig;
import com.tangem.wallet.R; 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.JSONArray;
import org.json.JSONException; import org.json.JSONException;
@ -1022,7 +1021,7 @@ public class LoadedWalletFragment extends Fragment implements SwipeRefreshLayout
String sUID = Util.byteArrayToHexString(UID); String sUID = Util.byteArrayToHexString(UID);
if (!mCard.getUID().equals(sUID)) { if (!mCard.getUID().equals(sUID)) {
Log.d(logTag, "Invalid UID: " + sUID); Log.d(logTag, "Invalid UID: " + sUID);
mNfcManager.IgnoreTag(isoDep.getTag()); mNfcManager.ignoreTag(isoDep.getTag());
return; return;
} else { } else {
Log.v(logTag, "UID: " + sUID); Log.v(logTag, "UID: " + sUID);

View file

@ -164,7 +164,6 @@ public class MainFragment extends Fragment implements NfcAdapter.ReaderCallback,
if (getActivity() instanceof MainActivity) { if (getActivity() instanceof MainActivity) {
((MainActivity) getActivity()).setOnCardsClean(this); ((MainActivity) getActivity()).setOnCardsClean(this);
// ((MainActivity) getActivity()).setOnCreateNFCDialog(this);
((MainActivity) getActivity()).setNfcAdapterReaderCallback(this); ((MainActivity) getActivity()).setNfcAdapterReaderCallback(this);
} }
@ -195,7 +194,7 @@ public class MainFragment extends Fragment implements NfcAdapter.ReaderCallback,
String sUID = Util.byteArrayToHexString(UID); String sUID = Util.byteArrayToHexString(UID);
if (slCardUIDs.indexOf(sUID) != -1) { if (slCardUIDs.indexOf(sUID) != -1) {
Log.d(logTag, "Repeat UID: " + sUID); Log.d(logTag, "Repeat UID: " + sUID);
mNfcManager.IgnoreTag(isoDep.getTag()); mNfcManager.ignoreTag(isoDep.getTag());
return; return;
} else { } else {
Log.v(logTag, "UID: " + sUID); Log.v(logTag, "UID: " + sUID);
@ -631,7 +630,7 @@ public class MainFragment extends Fragment implements NfcAdapter.ReaderCallback,
mNotifications.OnReadFinish(protocol); mNotifications.OnReadFinish(protocol);
} }
} finally { } finally {
mNfcManager.IgnoreTag(mIsoDep.getTag()); mNfcManager.ignoreTag(mIsoDep.getTag());
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();

View file

@ -353,7 +353,7 @@ public class VerifyCardFragment extends Fragment implements SwipeRefreshLayout.O
public void onTagDiscovered(Tag tag) { public void onTagDiscovered(Tag tag) {
try { try {
Log.w(getClass().getName(), "Ignore discovered tag!"); Log.w(getClass().getName(), "Ignore discovered tag!");
mNfcManager.IgnoreTag(tag); mNfcManager.ignoreTag(tag);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }