diff --git a/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.java b/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.java deleted file mode 100644 index d23c490adc..0000000000 --- a/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.java +++ /dev/null @@ -1,215 +0,0 @@ -package com.tangem.presentation.activity; - -import android.app.Activity; -import android.content.Intent; -import android.content.pm.ActivityInfo; -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.PurgeTask; -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 PurgeActivity extends AppCompatActivity implements NfcAdapter.ReaderCallback, CardProtocol.Notifications { - public static final String TAG = PurgeActivity.class.getSimpleName(); - - public static final int RESULT_INVALID_PIN = Activity.RESULT_FIRST_USER; - - private TangemCard mCard; - private NfcManager mNfcManager; - private ProgressBar progressBar; - private PurgeTask purgeTask; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_purge); - - setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); - - mNfcManager = new NfcManager(this, this); - - MainActivity.Companion.commonInit(getApplicationContext()); - - mCard = new TangemCard(getIntent().getStringExtra("UID")); - mCard.LoadFromBundle(getIntent().getExtras().getBundle("Card")); - - TextView tvCardID = findViewById(R.id.tvCardID); - progressBar = findViewById(R.id.progressBar); - - tvCardID.setText(mCard.getCIDDescription()); - progressBar.setProgressTintList(ColorStateList.valueOf(Color.DKGRAY)); - progressBar.setVisibility(View.INVISIBLE); - } - - @Override - public void onResume() { - super.onResume(); - mNfcManager.onResume(); - } - - @Override - public void onPause() { - mNfcManager.onPause(); - if (purgeTask != null) { - purgeTask.cancel(true); - } - super.onPause(); - } - - @Override - public void onStop() { - // dismiss enable NFC dialog - mNfcManager.onStop(); - if (purgeTask != null) { - purgeTask.cancel(true); - } - super.onStop(); - } - - @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(TAG, "UID: " + sUID); - - if (sUID.equals(mCard.getUID())) { - isoDep.setTimeout(mCard.getPauseBeforePIN2() + 65000); - purgeTask = new PurgeTask(this, mCard, mNfcManager, isoDep, this); - purgeTask.start(); - } else { -// Log.d(TAG, "Mismatch card UID (" + sUID + " instead of " + mCard.getUID() + ")"); - mNfcManager.ignoreTag(isoDep.getTag()); - } - - } catch (Exception e) { - e.printStackTrace(); - } - - } - - @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); - } - - public void OnReadStart(CardProtocol cardProtocol) { - progressBar.post(() -> { - progressBar.setVisibility(View.VISIBLE); - progressBar.setProgress(5); - }); - } - - public void OnReadFinish(final CardProtocol cardProtocol) { - - purgeTask = 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("UID", cardProtocol.getCard().getUID()); - intent.putExtra("Card", cardProtocol.getCard().getAsBundle()); - intent.putExtra("message", getString(R.string.cannot_erase_wallet)); - 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_LONG).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() { - purgeTask = null; - progressBar.postDelayed(() -> { - try { - progressBar.setProgress(0); - progressBar.setProgressTintList(ColorStateList.valueOf(Color.DKGRAY)); - progressBar.setVisibility(View.INVISIBLE); - } catch (Exception e) { - e.printStackTrace(); - } - }, 500); - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt new file mode 100644 index 0000000000..c72c0a3b18 --- /dev/null +++ b/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt @@ -0,0 +1,196 @@ +package com.tangem.presentation.activity + +import android.app.Activity +import android.content.Intent +import android.content.pm.ActivityInfo +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.Toast +import com.tangem.data.nfc.PurgeTask +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_purge.* + +class PurgeActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtocol.Notifications { + + companion object { + val TAG: String = PurgeActivity::class.java.simpleName + const val RESULT_INVALID_PIN = Activity.RESULT_FIRST_USER + } + + private var mCard: TangemCard? = null + private var mNfcManager: NfcManager? = null + private var purgeTask: PurgeTask? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_purge) + + requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT + + mNfcManager = NfcManager(this, this) + + MainActivity.commonInit(applicationContext) + + mCard = TangemCard(intent.getStringExtra("UID")) + mCard!!.LoadFromBundle(intent.extras!!.getBundle("Card")) + + tvCardID.text = mCard!!.cidDescription + progressBar.progressTintList = ColorStateList.valueOf(Color.DKGRAY) + progressBar.visibility = View.INVISIBLE + } + + public override fun onResume() { + super.onResume() + mNfcManager!!.onResume() + } + + public override fun onPause() { + mNfcManager!!.onPause() + if (purgeTask != null) { + purgeTask!!.cancel(true) + } + super.onPause() + } + + public override fun onStop() { + // dismiss enable NFC dialog + mNfcManager!!.onStop() + if (purgeTask != null) { + purgeTask!!.cancel(true) + } + super.onStop() + } + + 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 == mCard!!.uid) { + isoDep.timeout = mCard!!.pauseBeforePIN2 + 65000 + purgeTask = PurgeTask(this, mCard, mNfcManager, isoDep, this) + purgeTask!!.start() + } else { + // this Log.d(TAG, "Mismatch card UID (" + sUID + " instead of " + mCard.getUID() + ")"); + mNfcManager!!.ignoreTag(isoDep.tag) + } + + } catch (e: Exception) { + e.printStackTrace() + } + } + + override fun OnReadWait(msec: Int) { + WaitSecurityDelayDialog.OnReadWait(this, msec) + } + + override fun OnReadBeforeRequest(timeout: Int) { + WaitSecurityDelayDialog.onReadBeforeRequest(this, timeout) + } + + override fun OnReadAfterRequest() { + WaitSecurityDelayDialog.onReadAfterRequest(this) + } + + override fun OnReadStart(cardProtocol: CardProtocol) { + progressBar!!.post { + progressBar!!.visibility = View.VISIBLE + progressBar!!.progress = 5 + } + } + + override fun OnReadFinish(cardProtocol: CardProtocol?) { + purgeTask = null + + if (cardProtocol != null) { + if (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() + } + } else { + if (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("UID", cardProtocol.card.uid) + intent.putExtra("Card", cardProtocol.card.asBundle) + intent.putExtra("message", getString(R.string.cannot_erase_wallet)) + 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_LONG).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() { + purgeTask = null + progressBar!!.postDelayed({ + try { + progressBar!!.progress = 0 + progressBar!!.progressTintList = ColorStateList.valueOf(Color.DKGRAY) + progressBar!!.visibility = View.INVISIBLE + } catch (e: Exception) { + e.printStackTrace() + } + }, 500) + } + +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_purge.xml b/app/src/main/res/layout/activity_purge.xml index b8fa5d8205..6b21e9d9b9 100644 --- a/app/src/main/res/layout/activity_purge.xml +++ b/app/src/main/res/layout/activity_purge.xml @@ -1,6 +1,5 @@ - + android:textSize="@dimen/text_size_medium" /> + tools:text="CB02 0000 0002 5000" /> + android:textSize="@dimen/text_size_medium" /> + android:textSize="@dimen/text_size_medium" /> @@ -61,6 +60,6 @@ android:layout_alignParentBottom="true" android:alpha="0.5" android:elevation="1dp" - app:layout_constraintBottom_toBottomOf="parent"/> + app:layout_constraintBottom_toBottomOf="parent" /> - + \ No newline at end of file