diff --git a/app/src/main/java/com/tangem/presentation/activity/SwapPINActivity.java b/app/src/main/java/com/tangem/presentation/activity/SwapPINActivity.java deleted file mode 100644 index a2d62af23f..0000000000 --- a/app/src/main/java/com/tangem/presentation/activity/SwapPINActivity.java +++ /dev/null @@ -1,217 +0,0 @@ -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.View; -import android.widget.ProgressBar; -import android.widget.TextView; -import android.widget.Toast; - -import com.tangem.data.nfc.SwapPINTask; -import com.tangem.domain.cardReader.CardProtocol; -import com.tangem.domain.cardReader.NfcManager; -import com.tangem.domain.wallet.TangemCard; -import com.tangem.presentation.dialog.NoExtendedLengthSupportDialog; -import com.tangem.presentation.dialog.WaitSecurityDelayDialog; -import com.tangem.util.Util; -import com.tangem.wallet.R; - -public class SwapPINActivity extends AppCompatActivity implements NfcAdapter.ReaderCallback, CardProtocol.Notifications { - - public static final int RESULT_INVALID_PIN = Activity.RESULT_FIRST_USER; - private TangemCard mCard; - private NfcManager mNfcManager; - private static final String logTag = "SwapPIN"; - private ProgressBar progressBar; - private SwapPINTask swapPinTask; - - private String newPIN, newPIN2; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_swap_pin); - - MainActivity.Companion.commonInit(getApplicationContext()); - - mCard = new TangemCard(getIntent().getStringExtra("UID")); - mCard.LoadFromBundle(getIntent().getExtras().getBundle("Card")); - - newPIN = getIntent().getStringExtra("newPIN"); - newPIN2 = getIntent().getStringExtra("newPIN2"); - - TextView 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())) { - isoDep.setTimeout(mCard.getPauseBeforePIN2() + 65000); - swapPinTask = new SwapPINTask(this, mCard, mNfcManager, newPIN, newPIN2, isoDep, this); - swapPinTask.start(); - } else { - Log.d(logTag, "Mismatch card UID (" + sUID + " instead of " + mCard.getUID() + ")"); - mNfcManager.ignoreTag(isoDep.getTag()); - } - - } catch (Exception e) { - e.printStackTrace(); - } - - } - - @Override - public void onResume() { - super.onResume(); - mNfcManager.onResume(); - } - - @Override - public void onPause() { - mNfcManager.onPause(); - if (swapPinTask != null) { - swapPinTask.cancel(true); - } - super.onPause(); - } - - @Override - public void onStop() { - // dismiss enable NFC dialog - mNfcManager.onStop(); - if (swapPinTask != null) { - swapPinTask.cancel(true); - } - super.onStop(); - } - - public void OnReadStart(CardProtocol cardProtocol) { - progressBar.post(() -> { - progressBar.setVisibility(View.VISIBLE); - progressBar.setProgress(5); - }); - } - - public void OnReadFinish(final CardProtocol cardProtocol) { - - swapPinTask = null; - - if (cardProtocol != null) { - if (cardProtocol.getError() == null) { - progressBar.post(() -> { - progressBar.setProgress(100); - progressBar.setProgressTintList(ColorStateList.valueOf(Color.GREEN)); - Intent intent = new Intent(); - intent.putExtra("UID", cardProtocol.getCard().getUID()); - intent.putExtra("Card", cardProtocol.getCard().getAsBundle()); - setResult(Activity.RESULT_OK, intent); - finish(); - }); - } else if (cardProtocol.getError() instanceof CardProtocol.TangemException_InvalidPIN) { - progressBar.post(() -> { - progressBar.setProgress(100); - progressBar.setProgressTintList(ColorStateList.valueOf(Color.RED)); - }); - progressBar.postDelayed(() -> { - try { - progressBar.setProgress(0); - progressBar.setProgressTintList(ColorStateList.valueOf(Color.DKGRAY)); - progressBar.setVisibility(View.INVISIBLE); - Intent intent = new Intent(); - intent.putExtra("message", "Cannot change PIN(s). 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(() -> { - if (cardProtocol.getError() instanceof CardProtocol.TangemException_ExtendedLengthNotSupported) { - if (!NoExtendedLengthSupportDialog.Companion.getAllReadyShowed()) { - new NoExtendedLengthSupportDialog().show(getFragmentManager(), NoExtendedLengthSupportDialog.Companion.getTAG()); - } - } else { - Toast.makeText(getBaseContext(), R.string.try_to_scan_again, Toast.LENGTH_SHORT).show(); - } - progressBar.setProgress(100); - progressBar.setProgressTintList(ColorStateList.valueOf(Color.RED)); - }); - - } - - progressBar.postDelayed(() -> { - 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(() -> progressBar.setProgress(progress)); - } - - public void OnReadCancel() { - swapPinTask = null; - - progressBar.postDelayed(() -> { - 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); - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/presentation/activity/SwapPINActivity.kt b/app/src/main/java/com/tangem/presentation/activity/SwapPINActivity.kt new file mode 100644 index 0000000000..5bda02e2af --- /dev/null +++ b/app/src/main/java/com/tangem/presentation/activity/SwapPINActivity.kt @@ -0,0 +1,206 @@ +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.view.View +import android.widget.ProgressBar +import android.widget.Toast +import com.tangem.data.nfc.SwapPINTask +import com.tangem.domain.cardReader.CardProtocol +import com.tangem.domain.cardReader.NfcManager +import com.tangem.domain.wallet.TangemCard +import com.tangem.presentation.dialog.NoExtendedLengthSupportDialog +import com.tangem.presentation.dialog.WaitSecurityDelayDialog +import com.tangem.util.Util +import com.tangem.wallet.R +import kotlinx.android.synthetic.main.activity_swap_pin.* + +class SwapPINActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtocol.Notifications { + + companion object { + val TAG: String = SwapPINActivity::class.java.simpleName + + const val RESULT_INVALID_PIN = Activity.RESULT_FIRST_USER + } + + private var nfcManager: NfcManager? = null + private var card: TangemCard? = null + + private var newPIN: String? = null + private var newPIN2: String? = null + + private var progressBar: ProgressBar? = null + + private var swapPinTask: SwapPINTask? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_swap_pin) + + MainActivity.commonInit(applicationContext) + + nfcManager = NfcManager(this, this) + + card = TangemCard(intent.getStringExtra("UID")) + card!!.LoadFromBundle(intent.extras!!.getBundle("Card")) + + newPIN = intent.getStringExtra("newPIN") + newPIN2 = intent.getStringExtra("newPIN2") + + tvCardID.text = card!!.cidDescription + + progressBar = findViewById(R.id.progressBar) + progressBar!!.progressTintList = ColorStateList.valueOf(Color.DKGRAY) + progressBar!!.visibility = View.INVISIBLE + } + + override fun onTagDiscovered(tag: Tag) { + try { + // get IsoDep handle and run cardReader thread + val isoDep = IsoDep.get(tag) + ?: throw CardProtocol.TangemException(getString(R.string.wrong_tag_err)) + val uid = tag.id + val sUID = Util.byteArrayToHexString(uid) +// Log.v(TAG, "UID: $sUID") + + if (sUID == card!!.uid) { + isoDep.timeout = card!!.pauseBeforePIN2 + 65000 + swapPinTask = SwapPINTask(this, card, nfcManager, newPIN, newPIN2, isoDep, this) + swapPinTask!!.start() + } else { +// Log.d(TAG, "Mismatch card UID (" + sUID + " instead of " + mCard!!.uid + ")") + nfcManager!!.ignoreTag(isoDep.tag) + } + + } catch (e: Exception) { + e.printStackTrace() + } + } + + public override fun onResume() { + super.onResume() + nfcManager!!.onResume() + } + + public override fun onPause() { + nfcManager!!.onPause() + if (swapPinTask != null) { + swapPinTask!!.cancel(true) + } + super.onPause() + } + + public override fun onStop() { + // dismiss enable NFC dialog + nfcManager!!.onStop() + if (swapPinTask != null) { + swapPinTask!!.cancel(true) + } + super.onStop() + } + + override fun OnReadStart(cardProtocol: CardProtocol) { + progressBar!!.post { + progressBar!!.visibility = View.VISIBLE + progressBar!!.progress = 5 + } + } + + override fun OnReadFinish(cardProtocol: CardProtocol?) { + swapPinTask = null + + if (cardProtocol != null) { + when { + cardProtocol.error == null -> progressBar!!.post { + progressBar!!.progress = 100 + progressBar!!.progressTintList = ColorStateList.valueOf(Color.GREEN) + val intent = Intent() + intent.putExtra("UID", cardProtocol.card.uid) + intent.putExtra("Card", cardProtocol.card.asBundle) + setResult(Activity.RESULT_OK, intent) + finish() + } + cardProtocol.error is CardProtocol.TangemException_InvalidPIN -> { + progressBar!!.post { + progressBar!!.progress = 100 + progressBar!!.progressTintList = ColorStateList.valueOf(Color.RED) + } + progressBar!!.postDelayed({ + try { + progressBar!!.progress = 0 + progressBar!!.progressTintList = ColorStateList.valueOf(Color.DKGRAY) + progressBar!!.visibility = View.INVISIBLE + val intent = Intent() + intent.putExtra("message", "Cannot change PIN(s). Make sure you enter correct PIN2!") + intent.putExtra("UID", cardProtocol.card.uid) + intent.putExtra("Card", cardProtocol.card.asBundle) + setResult(RESULT_INVALID_PIN, intent) + finish() + } catch (e: Exception) { + e.printStackTrace() + } + }, 500) + } + else -> progressBar!!.post { + if (cardProtocol.error is CardProtocol.TangemException_ExtendedLengthNotSupported) { + if (!NoExtendedLengthSupportDialog.allReadyShowed) { + NoExtendedLengthSupportDialog().show(fragmentManager, NoExtendedLengthSupportDialog.TAG) + } + } else { + Toast.makeText(baseContext, R.string.try_to_scan_again, Toast.LENGTH_SHORT).show() + } + progressBar!!.progress = 100 + progressBar!!.progressTintList = ColorStateList.valueOf(Color.RED) + } + } + + progressBar!!.postDelayed({ + try { + progressBar!!.progress = 0 + progressBar!!.progressTintList = ColorStateList.valueOf(Color.DKGRAY) + progressBar!!.visibility = View.INVISIBLE + } catch (e: Exception) { + e.printStackTrace() + } + }, 500) + } + } + + override fun OnReadProgress(protocol: CardProtocol, progress: Int) { + progressBar!!.post { progressBar!!.progress = progress } + } + + override fun OnReadCancel() { + swapPinTask = null + + progressBar!!.postDelayed({ + try { + progressBar!!.progress = 0 + progressBar!!.progressTintList = ColorStateList.valueOf(Color.DKGRAY) + progressBar!!.visibility = View.INVISIBLE + } catch (e: Exception) { + e.printStackTrace() + } + }, 500) + } + + override fun OnReadWait(msec: Int) { + WaitSecurityDelayDialog.OnReadWait(this, msec) + } + + override fun OnReadBeforeRequest(timeout: Int) { + WaitSecurityDelayDialog.onReadBeforeRequest(this, timeout) + } + + override fun OnReadAfterRequest() { + WaitSecurityDelayDialog.onReadAfterRequest(this) + } + +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_swap_pin.xml b/app/src/main/res/layout/activity_swap_pin.xml index 9af504c454..6bcf63d809 100644 --- a/app/src/main/res/layout/activity_swap_pin.xml +++ b/app/src/main/res/layout/activity_swap_pin.xml @@ -1,6 +1,5 @@ - + android:textSize="@dimen/text_size_medium" /> + tools:text="CB02 0000 0002 5000" /> + android:textSize="@dimen/text_size_medium" /> - + \ No newline at end of file diff --git a/build.gradle b/build.gradle index b9cec846c9..0a1f33f360 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.3' + classpath 'com.android.tools.build:gradle:3.1.4' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }