aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'OpenKeychain/src/main')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java50
1 files changed, 33 insertions, 17 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java
index 023483193..4237deff0 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java
@@ -131,6 +131,8 @@ public class ViewKeyActivity extends BaseNfcActivity implements
private boolean mIsRevoked = false;
private boolean mIsExpired = false;
+ private boolean mShowYubikeyAfterCreation = false;
+
private MenuItem mRefreshItem;
private boolean mIsRefreshing;
private Animation mRotate, mRotateSpin;
@@ -286,13 +288,9 @@ public class ViewKeyActivity extends BaseNfcActivity implements
.replace(R.id.view_key_fragment, frag)
.commit();
- if (getIntent().hasExtra(EXTRA_NFC_AID)) {
- Intent intent = getIntent();
- byte[] nfcFingerprints = intent.getByteArrayExtra(EXTRA_NFC_FINGERPRINTS);
- String nfcUserId = intent.getStringExtra(EXTRA_NFC_USER_ID);
- byte[] nfcAid = intent.getByteArrayExtra(EXTRA_NFC_AID);
- showYubiKeyFragment(nfcFingerprints, nfcUserId, nfcAid);
- }
+ // need to postpone loading of the yubikey fragment until after mMasterKeyId
+ // is available, but we mark here that this should be done
+ mShowYubikeyAfterCreation = true;
}
@@ -586,18 +584,26 @@ public class ViewKeyActivity extends BaseNfcActivity implements
}
- public void showYubiKeyFragment(byte[] nfcFingerprints, String nfcUserId, byte[] nfcAid) {
- ViewKeyYubiKeyFragment frag = ViewKeyYubiKeyFragment.newInstance(
- mMasterKeyId, nfcFingerprints, nfcUserId, nfcAid);
+ public void showYubiKeyFragment(
+ final byte[] nfcFingerprints, final String nfcUserId, final byte[] nfcAid) {
- FragmentManager manager = getSupportFragmentManager();
+ new Handler().post(new Runnable() {
+ @Override
+ public void run() {
+ ViewKeyYubiKeyFragment frag = ViewKeyYubiKeyFragment.newInstance(
+ mMasterKeyId, nfcFingerprints, nfcUserId, nfcAid);
+
+ FragmentManager manager = getSupportFragmentManager();
+
+ manager.popBackStack("yubikey", FragmentManager.POP_BACK_STACK_INCLUSIVE);
+ manager.beginTransaction()
+ .addToBackStack("yubikey")
+ .replace(R.id.view_key_fragment, frag)
+ // if this is called while the activity wasn't resumed, just forget it happened
+ .commitAllowingStateLoss();
+ }
+ });
- manager.popBackStack("yubikey", FragmentManager.POP_BACK_STACK_INCLUSIVE);
- manager.beginTransaction()
- .addToBackStack("yubikey")
- .replace(R.id.view_key_fragment, frag)
- // if this is called while the activity wasn't resumed, just forget it happened
- .commitAllowingStateLoss();
}
private void encrypt(Uri dataUri, boolean text) {
@@ -813,6 +819,16 @@ public class ViewKeyActivity extends BaseNfcActivity implements
mMasterKeyId = data.getLong(INDEX_MASTER_KEY_ID);
mFingerprint = KeyFormattingUtils.convertFingerprintToHex(data.getBlob(INDEX_FINGERPRINT));
+ // if it wasn't shown yet, display yubikey fragment
+ if (mShowYubikeyAfterCreation && getIntent().hasExtra(EXTRA_NFC_AID)) {
+ mShowYubikeyAfterCreation = false;
+ Intent intent = getIntent();
+ byte[] nfcFingerprints = intent.getByteArrayExtra(EXTRA_NFC_FINGERPRINTS);
+ String nfcUserId = intent.getStringExtra(EXTRA_NFC_USER_ID);
+ byte[] nfcAid = intent.getByteArrayExtra(EXTRA_NFC_AID);
+ showYubiKeyFragment(nfcFingerprints, nfcUserId, nfcAid);
+ }
+
mIsSecret = data.getInt(INDEX_HAS_ANY_SECRET) != 0;
mHasEncrypt = data.getInt(INDEX_HAS_ENCRYPT) != 0;
mIsRevoked = data.getInt(INDEX_IS_REVOKED) > 0;