From 7fc188dbd60fde7c37a20b551d5f728019d0986c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Thu, 19 Jun 2014 00:38:36 +0200 Subject: New callback model for ImportKeysActivity --- .../keychain/keyimport/KeybaseKeyserver.java | 19 +-- .../keychain/ui/ImportKeysActivity.java | 23 ++-- .../keychain/ui/ImportKeysFileFragment.java | 4 +- .../keychain/ui/ImportKeysKeybaseFragment.java | 2 +- .../keychain/ui/ImportKeysListFragment.java | 147 ++++++++++----------- .../keychain/ui/ImportKeysQrCodeFragment.java | 4 +- .../keychain/ui/ImportKeysServerFragment.java | 4 +- 7 files changed, 95 insertions(+), 108 deletions(-) (limited to 'OpenKeychain/src/main') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/KeybaseKeyserver.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/KeybaseKeyserver.java index 43557279f..2f14d77a8 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/KeybaseKeyserver.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/KeybaseKeyserver.java @@ -53,15 +53,16 @@ public class KeybaseKeyserver extends Keyserver { // only list them if they have a key if (JWalk.optObject(match, "components", "key_fingerprint") != null) { - String keybaseId = JWalk.getString(match, "components", "username", "val"); - String fingerprint = JWalk.getString(match, "components", "key_fingerprint", "val"); - fingerprint = fingerprint.replace(" ", "").toUpperCase(); - - if (keybaseId.equals(query) || fingerprint.startsWith(query.toUpperCase())) { - results.add(makeEntry(match)); - } else { - results.add(makeEntry(match)); - } + // TODO: needed anymore? +// String keybaseId = JWalk.getString(match, "components", "username", "val"); +// String fingerprint = JWalk.getString(match, "components", "key_fingerprint", "val"); +// fingerprint = fingerprint.replace(" ", "").toUpperCase(); +// if (keybaseId.equals(query) || fingerprint.startsWith(query.toUpperCase())) { +// results.add(makeEntry(match)); +// } else { +// results.add(makeEntry(match)); +// } + results.add(makeEntry(match)); } } } catch (Exception e) { 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 298772e7d..70fb3b3d6 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java @@ -18,9 +18,7 @@ package org.sufficientlysecure.keychain.ui; import android.annotation.TargetApi; -import android.app.Activity; import android.app.ProgressDialog; -import android.content.Context; import android.content.Intent; import android.net.Uri; import android.nfc.NdefMessage; @@ -31,17 +29,12 @@ import android.os.Message; import android.os.Messenger; import android.os.Parcelable; import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; import android.support.v4.view.ViewPager; -import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarActivity; -import android.util.DisplayMetrics; -import android.util.TypedValue; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; -import android.widget.ArrayAdapter; import com.github.johnpersano.supertoasts.SuperCardToast; import com.github.johnpersano.supertoasts.SuperToast; @@ -52,7 +45,6 @@ import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.helper.OtherHelper; import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry; -import org.sufficientlysecure.keychain.keyimport.KeybaseKeyserver; import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing; import org.sufficientlysecure.keychain.pgp.PgpKeyHelper; import org.sufficientlysecure.keychain.service.KeychainIntentService; @@ -378,8 +370,8 @@ public class ImportKeysActivity extends ActionBarActivity { startListFragment(savedInstanceState, null, null, query); } - public void loadCallback(byte[] importData, Uri dataUri, String serverQuery, String keyServer, String keybaseQuery) { - mListFragment.loadNew(importData, dataUri, serverQuery, keyServer, keybaseQuery); + public void loadCallback(ImportKeysListFragment.LoaderState loaderState) { + mListFragment.loadNew(loaderState); } /** @@ -490,7 +482,8 @@ public class ImportKeysActivity extends ActionBarActivity { } }; - if (mListFragment.getKeyBytes() != null || mListFragment.getDataUri() != null) { + ImportKeysListFragment.LoaderState ls = mListFragment.getLoaderState(); + if (ls instanceof ImportKeysListFragment.BytesLoaderState) { Log.d(Constants.TAG, "importKeys started"); // Send all information needed to service to import key in other thread @@ -516,7 +509,9 @@ public class ImportKeysActivity extends ActionBarActivity { // start service with intent startService(intent); - } else if (mListFragment.getServerQuery() != null) { + } else if (ls instanceof ImportKeysListFragment.KeyserverLoaderState) { + ImportKeysListFragment.KeyserverLoaderState sls = (ImportKeysListFragment.KeyserverLoaderState) ls; + // Send all information needed to service to query keys in other thread Intent intent = new Intent(this, KeychainIntentService.class); @@ -525,7 +520,7 @@ public class ImportKeysActivity extends ActionBarActivity { // fill values for this action Bundle data = new Bundle(); - data.putString(KeychainIntentService.DOWNLOAD_KEY_SERVER, mListFragment.getKeyServer()); + data.putString(KeychainIntentService.DOWNLOAD_KEY_SERVER, sls.keyserver); // get selected key entries ArrayList selectedEntries = mListFragment.getSelectedEntries(); @@ -542,7 +537,7 @@ public class ImportKeysActivity extends ActionBarActivity { // start service with intent startService(intent); - } else if (mListFragment.getKeybaseQuery() != null) { + } else if (ls instanceof ImportKeysListFragment.KeybaseLoaderState) { // Send all information needed to service to query keys in other thread Intent intent = new Intent(this, KeychainIntentService.class); 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 060e9bab2..60e5324c5 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysFileFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysFileFragment.java @@ -85,7 +85,7 @@ public class ImportKeysFileFragment extends Fragment { return; } } - mImportActivity.loadCallback(sendText.getBytes(), null, null, null, null); + mImportActivity.loadCallback(new ImportKeysListFragment.BytesLoaderState(sendText.getBytes(), null)); } }); @@ -107,7 +107,7 @@ public class ImportKeysFileFragment extends Fragment { if (resultCode == Activity.RESULT_OK && data != null) { // load data - mImportActivity.loadCallback(null, data.getData(), null, null, null); + mImportActivity.loadCallback(new ImportKeysListFragment.BytesLoaderState(null, data.getData())); } break; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysKeybaseFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysKeybaseFragment.java index 9264829ea..3a82bdc32 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysKeybaseFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysKeybaseFragment.java @@ -117,6 +117,6 @@ public class ImportKeysKeybaseFragment extends Fragment { } private void search(String query) { - mImportActivity.loadCallback(null, null, null, null, query); + mImportActivity.loadCallback(new ImportKeysListFragment.KeybaseLoaderState(query)); } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java index 7d8dc4a6c..cba6dd78f 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java @@ -27,8 +27,6 @@ import android.support.v4.util.LongSparseArray; import android.view.View; import android.widget.ListView; -import com.devspark.appmsg.AppMsg; - import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.helper.Preferences; @@ -60,11 +58,7 @@ public class ImportKeysListFragment extends ListFragment implements private Activity mActivity; private ImportKeysAdapter mAdapter; - private byte[] mKeyBytes; - private Uri mDataUri; - private String mServerQuery; - private String mKeyServer; - private String mKeybaseQuery; + private LoaderState mLoaderState; private static final int LOADER_ID_BYTES = 0; private static final int LOADER_ID_SERVER_QUERY = 1; @@ -72,24 +66,8 @@ public class ImportKeysListFragment extends ListFragment implements private LongSparseArray mCachedKeyData; - public byte[] getKeyBytes() { - return mKeyBytes; - } - - public Uri getDataUri() { - return mDataUri; - } - - public String getServerQuery() { - return mServerQuery; - } - - public String getKeybaseQuery() { - return mKeybaseQuery; - } - - public String getKeyServer() { - return mKeyServer; + public LoaderState getLoaderState() { + return mLoaderState; } public List getData() { @@ -124,6 +102,37 @@ public class ImportKeysListFragment extends ListFragment implements return frag; } + static public class LoaderState { + } + + static public class BytesLoaderState extends LoaderState { + byte[] keyBytes; + Uri dataUri; + + BytesLoaderState(byte[] keyBytes, Uri dataUri) { + this.keyBytes = keyBytes; + this.dataUri = dataUri; + } + } + + static public class KeyserverLoaderState extends LoaderState { + String serverQuery; + String keyserver; + + KeyserverLoaderState(String serverQuery, String keyserver) { + this.serverQuery = serverQuery; + this.keyserver = keyserver; + } + } + + static public class KeybaseLoaderState extends LoaderState { + String keybaseQuery; + + KeybaseLoaderState(String keybaseQuery) { + this.keybaseQuery = keybaseQuery; + } + } + /** * Define Adapter and Loader on create of Activity */ @@ -140,43 +149,20 @@ public class ImportKeysListFragment extends ListFragment implements mAdapter = new ImportKeysAdapter(mActivity); setListAdapter(mAdapter); - mDataUri = getArguments().getParcelable(ARG_DATA_URI); - mKeyBytes = getArguments().getByteArray(ARG_BYTES); - mServerQuery = getArguments().getString(ARG_SERVER_QUERY); - - // TODO: this is used when scanning QR Code. Currently it simply uses keyserver nr 0 - mKeyServer = Preferences.getPreferences(getActivity()) - .getKeyServers()[0]; - - if (mDataUri != null || mKeyBytes != null) { - // Start out with a progress indicator. - setListShown(false); - - // Prepare the loader. Either re-connect with an existing one, - // or start a new one. - // give arguments to onCreateLoader() - getLoaderManager().initLoader(LOADER_ID_BYTES, null, this); - } - - if (mServerQuery != null && mKeyServer != null) { - // Start out with a progress indicator. - setListShown(false); - - // Prepare the loader. Either re-connect with an existing one, - // or start a new one. - // give arguments to onCreateLoader() - getLoaderManager().initLoader(LOADER_ID_SERVER_QUERY, null, this); + if (getArguments().containsKey(ARG_DATA_URI) || getArguments().containsKey(ARG_BYTES)) { + Uri dataUri = getArguments().getParcelable(ARG_DATA_URI); + byte[] bytes = getArguments().getByteArray(ARG_BYTES); + mLoaderState = new BytesLoaderState(bytes, dataUri); + } else if (getArguments().containsKey(ARG_SERVER_QUERY)) { + String query = getArguments().getString(ARG_SERVER_QUERY); + // TODO: this is used when scanning QR Code or updating a key. + // Currently it simply uses keyserver nr 0 + String keyserver = Preferences.getPreferences(getActivity()) + .getKeyServers()[0]; + mLoaderState = new KeyserverLoaderState(query, keyserver); } - if (mKeybaseQuery != null) { - // Start out with a progress indicator. - setListShown(false); - - // Prepare the loader. Either re-connect with an existing one, - // or start a new one. - // give arguments to onCreateLoader() - getLoaderManager().initLoader(LOADER_ID_KEYBASE, null, this); - } + restartLoaders(); } @Override @@ -192,31 +178,33 @@ public class ImportKeysListFragment extends ListFragment implements mAdapter.notifyDataSetChanged(); } - public void loadNew(byte[] keyBytes, Uri dataUri, String serverQuery, String keyServer, String keybaseQuery) { - mKeyBytes = keyBytes; - mDataUri = dataUri; - mServerQuery = serverQuery; - mKeyServer = keyServer; - mKeybaseQuery = keybaseQuery; + public void loadNew(LoaderState loaderState) { + mLoaderState = loaderState; + + restartLoaders(); + } - if (mKeyBytes != null || mDataUri != null) { + private void restartLoaders() { + if (mLoaderState instanceof BytesLoaderState) { // Start out with a progress indicator. setListShown(false); getLoaderManager().restartLoader(LOADER_ID_BYTES, null, this); - } - - if (mServerQuery != null && mKeyServer != null) { + getLoaderManager().destroyLoader(LOADER_ID_SERVER_QUERY); + getLoaderManager().destroyLoader(LOADER_ID_KEYBASE); + } else if (mLoaderState instanceof KeyserverLoaderState) { // Start out with a progress indicator. setListShown(false); + getLoaderManager().destroyLoader(LOADER_ID_BYTES); getLoaderManager().restartLoader(LOADER_ID_SERVER_QUERY, null, this); - } - - if (mKeybaseQuery != null) { + getLoaderManager().destroyLoader(LOADER_ID_KEYBASE); + } else if (mLoaderState instanceof KeybaseLoaderState) { // Start out with a progress indicator. setListShown(false); + getLoaderManager().destroyLoader(LOADER_ID_BYTES); + getLoaderManager().destroyLoader(LOADER_ID_SERVER_QUERY); getLoaderManager().restartLoader(LOADER_ID_KEYBASE, null, this); } } @@ -226,14 +214,17 @@ public class ImportKeysListFragment extends ListFragment implements onCreateLoader(int id, Bundle args) { switch (id) { case LOADER_ID_BYTES: { - InputData inputData = getInputData(mKeyBytes, mDataUri); + BytesLoaderState ls = (BytesLoaderState) mLoaderState; + InputData inputData = getInputData(ls.keyBytes, ls.dataUri); return new ImportKeysListLoader(mActivity, inputData); } case LOADER_ID_SERVER_QUERY: { - return new ImportKeysListServerLoader(getActivity(), mServerQuery, mKeyServer); + KeyserverLoaderState ls = (KeyserverLoaderState) mLoaderState; + return new ImportKeysListServerLoader(getActivity(), ls.serverQuery, ls.keyserver); } case LOADER_ID_KEYBASE: { - return new ImportKeysListKeybaseLoader(getActivity(), mKeybaseQuery); + KeybaseLoaderState ls = (KeybaseLoaderState) mLoaderState; + return new ImportKeysListKeybaseLoader(getActivity(), ls.keybaseQuery); } default: @@ -280,7 +271,8 @@ public class ImportKeysListFragment extends ListFragment implements ((ImportKeysListLoader.NonPgpPart) error).getCount() + " " + getResources(). getQuantityString(R.plurals.error_import_non_pgp_part, ((ImportKeysListLoader.NonPgpPart) error).getCount()), - Notify.Style.OK); + Notify.Style.OK + ); } else { Notify.showNotify(getActivity(), R.string.error_generic_report_bug, Notify.Style.ERROR); } @@ -289,7 +281,6 @@ public class ImportKeysListFragment extends ListFragment implements case LOADER_ID_SERVER_QUERY: case LOADER_ID_KEYBASE: - // TODO: possibly fine-tune message building for these two cases if (error == null) { // No error } else if (error instanceof Keyserver.QueryTooShortException) { 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 0cbb51c77..b7ffef0ed 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysQrCodeFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysQrCodeFragment.java @@ -129,7 +129,7 @@ public class ImportKeysQrCodeFragment extends Fragment { // is this a full key encoded as qr code? if (scannedContent.startsWith("-----BEGIN PGP")) { - mImportActivity.loadCallback(scannedContent.getBytes(), null, null, null, null); + mImportActivity.loadCallback(new ImportKeysListFragment.BytesLoaderState(scannedContent.getBytes(), null)); return; } @@ -208,7 +208,7 @@ public class ImportKeysQrCodeFragment extends Fragment { for (String in : mQrCodeContent) { result += in; } - mImportActivity.loadCallback(result.getBytes(), null, null, null, null); + mImportActivity.loadCallback(new ImportKeysListFragment.BytesLoaderState(result.getBytes(), null)); } } } 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 eabc8348c..c7467d789 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysServerFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysServerFragment.java @@ -170,8 +170,8 @@ public class ImportKeysServerFragment extends Fragment { mImportActivity = (ImportKeysActivity) activity; } - private void search(String query, String keyServer) { - mImportActivity.loadCallback(null, null, query, keyServer, null); + private void search(String query, String keyserver) { + mImportActivity.loadCallback(new ImportKeysListFragment.KeyserverLoaderState(query, keyserver)); } } -- cgit v1.2.3