aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base
diff options
context:
space:
mode:
authorDominik Schürmann <dominik@dominikschuermann.de>2015-07-06 16:21:48 +0200
committerDominik Schürmann <dominik@dominikschuermann.de>2015-07-06 16:21:48 +0200
commit1eb438576d862df8bf8c7221a6bebee7e8dd85f3 (patch)
tree689853089f80748e3861f17379a5fedc7a378bf9 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base
parent0c6ef6aed45130b3958fd351558df52738979dae (diff)
downloadopen-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.java23
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;
}