diff options
author | Dominik Schürmann <dominik@dominikschuermann.de> | 2015-07-06 16:21:48 +0200 |
---|---|---|
committer | Dominik Schürmann <dominik@dominikschuermann.de> | 2015-07-06 16:21:48 +0200 |
commit | 1eb438576d862df8bf8c7221a6bebee7e8dd85f3 (patch) | |
tree | 689853089f80748e3861f17379a5fedc7a378bf9 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base | |
parent | 0c6ef6aed45130b3958fd351558df52738979dae (diff) | |
download | open-keychain-1eb438576d862df8bf8c7221a6bebee7e8dd85f3.tar.gz open-keychain-1eb438576d862df8bf8c7221a6bebee7e8dd85f3.tar.bz2 open-keychain-1eb438576d862df8bf8c7221a6bebee7e8dd85f3.zip |
Better YubiKey UX flow for error handling
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base')
-rw-r--r-- | OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java index 02e8271cb..65f8a451c 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java @@ -29,6 +29,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.nfc.NfcAdapter; import android.nfc.Tag; +import android.nfc.TagLostException; import android.nfc.tech.IsoDep; import android.os.AsyncTask; import android.os.Bundle; @@ -72,6 +73,7 @@ public abstract class BaseNfcActivity extends BaseActivity { protected boolean mPw3Validated; private NfcAdapter mNfcAdapter; private IsoDep mIsoDep; + private boolean mTagHandlingEnabled; private static final int TIMEOUT = 100000; @@ -168,10 +170,20 @@ public abstract class BaseNfcActivity extends BaseActivity { }.execute(); } + protected void pauseTagHandling() { + mTagHandlingEnabled = false; + } + + protected void resumeTagHandling() { + mTagHandlingEnabled = true; + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + mTagHandlingEnabled = true; + Intent intent = getIntent(); String action = intent.getAction(); if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)) { @@ -186,7 +198,8 @@ public abstract class BaseNfcActivity extends BaseActivity { */ @Override public void onNewIntent(final Intent intent) { - if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) { + if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction()) + && mTagHandlingEnabled) { handleIntentInBackground(intent); } } @@ -194,6 +207,11 @@ public abstract class BaseNfcActivity extends BaseActivity { private void handleNfcError(Exception e) { Log.e(Constants.TAG, "nfc error", e); + if (e instanceof TagLostException) { + onNfcError(getString(R.string.error_nfc_tag_lost)); + return; + } + short status; if (e instanceof CardException) { status = ((CardException) e).getResponseCode(); @@ -202,7 +220,8 @@ public abstract class BaseNfcActivity extends BaseActivity { } // When entering a PIN, a status of 63CX indicates X attempts remaining. if ((status & (short)0xFFF0) == 0x63C0) { - onNfcError(getString(R.string.error_pin, status & 0x000F)); + int tries = status & 0x000F; + onNfcError(getResources().getQuantityString(R.plurals.error_pin, tries, tries)); return; } |