From a1525bffe23fd0f86e77250f894eacbc481aed77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Fri, 20 Jun 2014 23:01:35 +0200 Subject: Fix qr code finally --- .../keychain/ui/ImportKeysActivity.java | 43 ++++++++++++++-------- .../keychain/ui/ImportKeysFileFragment.java | 2 +- .../keychain/ui/ImportKeysQrCodeFragment.java | 2 +- .../keychain/ui/ImportKeysServerFragment.java | 3 +- 4 files changed, 31 insertions(+), 19 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java index 6d3b7c340..f7455905d 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java @@ -135,16 +135,21 @@ public class ImportKeysActivity extends ActionBarActivity { if (Intent.ACTION_VIEW.equals(action)) { // Android's Action when opening file associated to Keychain (see AndroidManifest.xml) - // override action to delegate it to Keychain's ACTION_IMPORT_KEY + // delegate action to ACTION_IMPORT_KEY action = ACTION_IMPORT_KEY; } - Bundle serverBundle = null; - boolean serverOnly = false; if (scheme != null && scheme.toLowerCase(Locale.ENGLISH).equals(Constants.FINGERPRINT_SCHEME)) { /* Scanning a fingerprint directly with Barcode Scanner */ - loadFromFingerprintUri(savedInstanceState, dataUri); - } else if (ACTION_IMPORT_KEY.equals(action)) { + // delegate action to ACTION_IMPORT_KEY_FROM_KEYSERVER + String fingerprint = getFingerprintFromUri(dataUri); + action = ACTION_IMPORT_KEY_FROM_KEYSERVER; + extras.putString(EXTRA_FINGERPRINT, fingerprint); + } + + Bundle serverBundle = null; + boolean serverOnly = false; + if (ACTION_IMPORT_KEY.equals(action)) { /* Keychain's own Actions */ // display file fragment @@ -154,7 +159,7 @@ public class ImportKeysActivity extends ActionBarActivity { // action: directly load data startListFragment(savedInstanceState, null, dataUri, null); } else if (extras.containsKey(EXTRA_KEY_BYTES)) { - byte[] importData = intent.getByteArrayExtra(EXTRA_KEY_BYTES); + byte[] importData = extras.getByteArray(EXTRA_KEY_BYTES); // action: directly load data startListFragment(savedInstanceState, importData, null, null); @@ -173,7 +178,7 @@ public class ImportKeysActivity extends ActionBarActivity { if (extras.containsKey(EXTRA_QUERY)) { query = extras.getString(EXTRA_QUERY); } else if (extras.containsKey(EXTRA_KEY_ID)) { - long keyId = intent.getLongExtra(EXTRA_KEY_ID, 0); + long keyId = extras.getLong(EXTRA_KEY_ID, 0); if (keyId != 0) { query = PgpKeyHelper.convertKeyIdToHex(keyId); } @@ -197,7 +202,7 @@ public class ImportKeysActivity extends ActionBarActivity { * if the right key has been downloaded */ - String fingerprint = intent.getStringExtra(EXTRA_FINGERPRINT); + String fingerprint = extras.getString(EXTRA_FINGERPRINT); if (isFingerprintValid(fingerprint)) { String query = "0x" + fingerprint; @@ -325,18 +330,23 @@ public class ImportKeysActivity extends ActionBarActivity { return OtherHelper.pxToDp(this, params.height); } - public void loadFromFingerprintUri(Bundle savedInstanceState, Uri dataUri) { + private String getFingerprintFromUri(Uri dataUri) { String fingerprint = dataUri.toString().split(":")[1].toLowerCase(Locale.ENGLISH); - Log.d(Constants.TAG, "fingerprint: " + fingerprint); + return fingerprint; + } - final String query = "0x" + fingerprint; + public void loadFromFingerprintUri(Uri dataUri) { + String query = "0x" + getFingerprintFromUri(dataUri); + // setCurrentItem does not work directly after onResume (from qr code scanner) + // see http://stackoverflow.com/q/19316729 + // so, reset adapter completely! + if (mViewPager.getAdapter() != null) + mViewPager.setAdapter(null); + mViewPager.setAdapter(mTabsAdapter); mViewPager.setCurrentItem(TAB_KEYSERVER); - // update layout after operations - mSlidingTabLayout.setViewPager(mViewPager); - ImportKeysServerFragment f = (ImportKeysServerFragment) getActiveFragment(mViewPager, TAB_KEYSERVER); @@ -344,7 +354,10 @@ public class ImportKeysActivity extends ActionBarActivity { String keyserver = Preferences.getPreferences(ImportKeysActivity.this) .getKeyServers()[0]; - f.searchCallback(query, keyserver); + // set fields of ImportKeysServerFragment + f.setQueryAndKeyserver(query, keyserver); + // search directly + loadCallback(new ImportKeysListFragment.KeyserverLoaderState(query, keyserver)); } // http://stackoverflow.com/a/9293207 diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysFileFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysFileFragment.java index 60e5324c5..ce885c419 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysFileFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysFileFragment.java @@ -81,7 +81,7 @@ public class ImportKeysFileFragment extends Fragment { if (clipboardText != null) { sendText = clipboardText.toString(); if (sendText.toLowerCase(Locale.ENGLISH).startsWith(Constants.FINGERPRINT_SCHEME)) { - mImportActivity.loadFromFingerprintUri(null, Uri.parse(sendText)); + mImportActivity.loadFromFingerprintUri(Uri.parse(sendText)); return; } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysQrCodeFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysQrCodeFragment.java index 5766fc189..5f54daa3c 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysQrCodeFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysQrCodeFragment.java @@ -132,7 +132,7 @@ public class ImportKeysQrCodeFragment extends Fragment { } public void importFingerprint(Uri dataUri) { - mImportActivity.loadFromFingerprintUri(null, dataUri); + mImportActivity.loadFromFingerprintUri(dataUri); } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysServerFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysServerFragment.java index ff694cb4f..d339bc132 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysServerFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysServerFragment.java @@ -174,11 +174,10 @@ public class ImportKeysServerFragment extends Fragment { mImportActivity.loadCallback(new ImportKeysListFragment.KeyserverLoaderState(query, keyserver)); } - public void searchCallback(String query, String keyserver) { + public void setQueryAndKeyserver(String query, String keyserver) { mQueryEditText.setText(query, TextView.BufferType.EDITABLE); int keyServerPos = mServerAdapter.getPosition(keyserver); mServerSpinner.setSelection(keyServerPos); - search(query, keyserver); } } -- cgit v1.2.3