aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui
diff options
context:
space:
mode:
authorAdithya Abraham Philip <adithyaphilip@gmail.com>2015-11-25 01:35:41 +0530
committerAdithya Abraham Philip <adithyaphilip@gmail.com>2015-12-06 00:46:52 +0530
commitf29280bbb268d112426c6662e1227118819fb904 (patch)
tree117ca2b3282fca1e10340e95f4bb07026eac7507 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui
parenta0b46b0d3b7dd201568d1f236cb25b0a794fc2c2 (diff)
downloadopen-keychain-f29280bbb268d112426c6662e1227118819fb904.tar.gz
open-keychain-f29280bbb268d112426c6662e1227118819fb904.tar.bz2
open-keychain-f29280bbb268d112426c6662e1227118819fb904.zip
added Facebook links support, reworked Preferences
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateYubiKeyImportResetFragment.java9
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFragment.java9
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptListFragment.java10
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java94
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysCloudFragment.java37
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java45
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysProxyActivity.java11
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java9
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java228
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java10
10 files changed, 168 insertions, 294 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateYubiKeyImportResetFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateYubiKeyImportResetFragment.java
index 0a2d52617..5712f4452 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateYubiKeyImportResetFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateYubiKeyImportResetFragment.java
@@ -218,15 +218,10 @@ public class CreateYubiKeyImportResetFragment
public void importKey() {
ArrayList<ParcelableKeyRing> keyList = new ArrayList<>();
- keyList.add(new ParcelableKeyRing(mNfcFingerprint, null, null));
+ keyList.add(new ParcelableKeyRing(mNfcFingerprint, null));
mKeyList = keyList;
- {
- Preferences prefs = Preferences.getPreferences(getActivity());
- Preferences.CloudSearchPrefs cloudPrefs =
- new Preferences.CloudSearchPrefs(true, true, prefs.getPreferredKeyserver());
- mKeyserver = cloudPrefs.keyserver;
- }
+ mKeyserver = Preferences.getPreferences(getActivity()).getPreferredKeyserver();
super.setProgressMessageResource(R.string.progress_importing);
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFragment.java
index 37dd6afad..351b62ba7 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFragment.java
@@ -138,16 +138,11 @@ public abstract class DecryptFragment extends Fragment implements LoaderManager.
final String keyserver;
// search config
- {
- Preferences prefs = Preferences.getPreferences(getActivity());
- Preferences.CloudSearchPrefs cloudPrefs =
- new Preferences.CloudSearchPrefs(true, true, prefs.getPreferredKeyserver());
- keyserver = cloudPrefs.keyserver;
- }
+ keyserver = Preferences.getPreferences(getActivity()).getPreferredKeyserver();
{
ParcelableKeyRing keyEntry = new ParcelableKeyRing(null,
- KeyFormattingUtils.convertKeyIdToHex(unknownKeyId), null);
+ KeyFormattingUtils.convertKeyIdToHex(unknownKeyId));
ArrayList<ParcelableKeyRing> selectedEntries = new ArrayList<>();
selectedEntries.add(keyEntry);
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptListFragment.java
index 922dd7307..9419cf8ce 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptListFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptListFragment.java
@@ -18,7 +18,6 @@
package org.sufficientlysecure.keychain.ui;
-import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
@@ -746,16 +745,11 @@ public class DecryptListFragment
final String keyserver;
// search config
- {
- Preferences prefs = Preferences.getPreferences(getActivity());
- Preferences.CloudSearchPrefs cloudPrefs =
- new Preferences.CloudSearchPrefs(true, true, prefs.getPreferredKeyserver());
- keyserver = cloudPrefs.keyserver;
- }
+ keyserver = Preferences.getPreferences(getActivity()).getPreferredKeyserver();
{
ParcelableKeyRing keyEntry = new ParcelableKeyRing(null,
- KeyFormattingUtils.convertKeyIdToHex(unknownKeyId), null);
+ KeyFormattingUtils.convertKeyIdToHex(unknownKeyId));
ArrayList<ParcelableKeyRing> selectedEntries = new ArrayList<>();
selectedEntries.add(keyEntry);
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 7f7532ddf..c54f55b6f 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java
@@ -30,6 +30,7 @@ import android.view.ViewGroup;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.intents.OpenKeychainIntents;
+import org.sufficientlysecure.keychain.keyimport.FacebookKeyserver;
import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry;
import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing;
import org.sufficientlysecure.keychain.operations.results.ImportKeyResult;
@@ -41,6 +42,7 @@ import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableFileCache;
import org.sufficientlysecure.keychain.util.ParcelableFileCache.IteratorWithSize;
+import org.sufficientlysecure.keychain.util.Preferences;
import java.io.IOException;
import java.util.ArrayList;
@@ -50,6 +52,8 @@ public class ImportKeysActivity extends BaseNfcActivity
public static final String ACTION_IMPORT_KEY = OpenKeychainIntents.IMPORT_KEY;
public static final String ACTION_IMPORT_KEY_FROM_KEYSERVER = OpenKeychainIntents.IMPORT_KEY_FROM_KEYSERVER;
+ public static final String ACTION_IMPORT_KEY_FROM_FACEBOOK
+ = Constants.INTENT_PREFIX + "IMPORT_KEY_FROM_FACEBOOK";
public static final String ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN_RESULT =
Constants.INTENT_PREFIX + "IMPORT_KEY_FROM_KEY_SERVER_AND_RETURN_RESULT";
public static final String ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN_TO_SERVICE = Constants.INTENT_PREFIX
@@ -101,11 +105,6 @@ public class ImportKeysActivity extends BaseNfcActivity
if (getIntent().hasExtra(EXTRA_PENDING_INTENT_DATA)) {
mPendingIntentData = getIntent().getParcelableExtra(EXTRA_PENDING_INTENT_DATA);
}
-
- // if we aren't being restored, initialize fragments
- if (savedInstanceState == null) {
- handleActions(getIntent());
- }
}
@Override
@@ -113,6 +112,18 @@ public class ImportKeysActivity extends BaseNfcActivity
setContentView(R.layout.import_keys_activity);
}
+ @Override
+ public void onNewIntent(Intent intent) {
+ super.onNewIntent(intent);
+ setIntent(intent);
+ }
+
+ @Override
+ protected void onResumeFragments() {
+ super.onResumeFragments();
+ handleActions(getIntent());
+ }
+
protected void handleActions(Intent intent) {
String action = intent.getAction();
Bundle extras = intent.getExtras();
@@ -124,7 +135,9 @@ public class ImportKeysActivity extends BaseNfcActivity
}
if (Intent.ACTION_VIEW.equals(action)) {
- if ("http".equals(scheme) || "https".equals(scheme)) {
+ if (FacebookKeyserver.isFacebookHost(dataUri)) {
+ action = ACTION_IMPORT_KEY_FROM_FACEBOOK;
+ } else if ("http".equals(scheme) || "https".equals(scheme)) {
action = ACTION_SEARCH_KEYSERVER_FROM_URL;
} else {
// Android's Action when opening file associated to Keychain (see AndroidManifest.xml)
@@ -205,26 +218,31 @@ public class ImportKeysActivity extends BaseNfcActivity
}
break;
}
+ case ACTION_IMPORT_KEY_FROM_FACEBOOK: {
+ String fbUsername = FacebookKeyserver.getUsernameFromUri(dataUri);
+
+ Preferences.CloudSearchPrefs cloudSearchPrefs =
+ new Preferences.CloudSearchPrefs(false, true, true, null);
+ // we allow our users to edit the query if they wish
+ startTopCloudFragment(fbUsername, false, cloudSearchPrefs);
+ // search immediately
+ startListFragment(null, null, fbUsername, cloudSearchPrefs);
+ break;
+ }
case ACTION_SEARCH_KEYSERVER_FROM_URL: {
// need to process URL to get search query and keyserver authority
String query = dataUri.getQueryParameter("search");
- String keyserver = dataUri.getAuthority();
// if query not specified, we still allow users to search the keyserver in the link
if (query == null) {
Notify.create(this, R.string.import_url_warn_no_search_parameter, Notify.LENGTH_INDEFINITE,
Notify.Style.WARN).show();
- // we just set the keyserver
- startTopCloudFragment(null, false, keyserver);
- // we don't set the keyserver for ImportKeysListFragment since
- // it'll be set in the cloudSearchPrefs of ImportKeysCloudFragment
- // which is used when the user clicks on the search button
- startListFragment(null, null, null, null);
- } else {
- // we allow our users to edit the query if they wish
- startTopCloudFragment(query, false, keyserver);
- // search immediately
- startListFragment(null, null, query, keyserver);
}
+ Preferences.CloudSearchPrefs cloudSearchPrefs = new Preferences.CloudSearchPrefs(
+ true, true, true, dataUri.getAuthority());
+ // we allow our users to edit the query if they wish
+ startTopCloudFragment(query, false, cloudSearchPrefs);
+ // search immediately (if query is not null)
+ startListFragment(null, null, query, cloudSearchPrefs);
break;
}
case ACTION_IMPORT_KEY_FROM_FILE:
@@ -254,18 +272,21 @@ public class ImportKeysActivity extends BaseNfcActivity
}
/**
- * if the fragment is started with non-null bytes/dataUri/serverQuery, it will immediately
- * load content
+ * Shows the list of keys to be imported.
+ * If the fragment is started with non-null bytes/dataUri/serverQuery, it will immediately
+ * load content.
*
- * @param bytes bytes containing list of keyrings to import
- * @param dataUri uri to file to import keyrings from
- * @param serverQuery query to search for on the keyserver
- * @param keyserver keyserver authority to search on. If null will use keyserver from
- * user preferences
+ * @param bytes bytes containing list of keyrings to import
+ * @param dataUri uri to file to import keyrings from
+ * @param serverQuery query to search for on the keyserver
+ * @param cloudSearchPrefs search specifications to use. If null will retrieve from user's
+ * preferences.
*/
- private void startListFragment(byte[] bytes, Uri dataUri, String serverQuery, String keyserver) {
+ private void startListFragment(byte[] bytes, Uri dataUri, String serverQuery,
+ Preferences.CloudSearchPrefs cloudSearchPrefs) {
Fragment listFragment =
- ImportKeysListFragment.newInstance(bytes, dataUri, serverQuery, false, keyserver);
+ ImportKeysListFragment.newInstance(bytes, dataUri, serverQuery, false,
+ cloudSearchPrefs);
getSupportFragmentManager().beginTransaction()
.replace(R.id.import_keys_list_container, listFragment, TAG_FRAG_LIST)
.commit();
@@ -283,14 +304,16 @@ public class ImportKeysActivity extends BaseNfcActivity
* loads the CloudFragment, which consists of the search bar, search button and settings icon
* visually.
*
- * @param query search query
- * @param disableQueryEdit if true, user will not be able to edit the search query
- * @param keyserver keyserver authority to use for search, if null will use keyserver
- * specified in user preferences
+ * @param query search query
+ * @param disableQueryEdit if true, user will not be able to edit the search query
+ * @param cloudSearchPrefs keyserver authority to use for search, if null will use keyserver
+ * specified in user preferences
*/
- private void startTopCloudFragment(String query, boolean disableQueryEdit, String keyserver) {
+ private void startTopCloudFragment(String query, boolean disableQueryEdit,
+ Preferences.CloudSearchPrefs cloudSearchPrefs) {
findViewById(R.id.import_keys_top_layout).setVisibility(View.VISIBLE);
- Fragment importCloudFragment = ImportKeysCloudFragment.newInstance(query, disableQueryEdit, keyserver);
+ Fragment importCloudFragment = ImportKeysCloudFragment.newInstance(query, disableQueryEdit,
+ cloudSearchPrefs);
getSupportFragmentManager().beginTransaction()
.replace(R.id.import_keys_top_container, importCloudFragment, TAG_FRAG_TOP)
.commit();
@@ -363,9 +386,8 @@ public class ImportKeysActivity extends BaseNfcActivity
// change the format into ParcelableKeyRing
ArrayList<ImportKeysListEntry> entries = keyListFragment.getSelectedEntries();
for (ImportKeysListEntry entry : entries) {
- keys.add(new ParcelableKeyRing(
- entry.getFingerprintHex(), entry.getKeyIdHex(), entry.getExtraData())
- );
+ keys.add(new ParcelableKeyRing(entry.getFingerprintHex(),
+ entry.getKeyIdHex(), entry.getKeybaseName(), entry.getFbUsername()));
}
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysCloudFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysCloudFragment.java
index 1cd5c24f3..0701dbb91 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysCloudFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysCloudFragment.java
@@ -42,33 +42,35 @@ import org.sufficientlysecure.keychain.util.Preferences;
import java.util.List;
+/**
+ * Consists of the search bar, search button, and search settings button
+ */
public class ImportKeysCloudFragment extends Fragment {
public static final String ARG_QUERY = "query";
public static final String ARG_DISABLE_QUERY_EDIT = "disable_query_edit";
- public static final String ARG_KEYSERVER = "keyserver";
+ public static final String ARG_CLOUD_SEARCH_PREFS = "cloud_search_prefs";
private ImportKeysActivity mImportActivity;
- private View mSearchButton;
private AutoCompleteTextView mQueryEditText;
- private View mConfigButton;
/**
* Creates new instance of this fragment
*
* @param query query to search for
* @param disableQueryEdit if true, user cannot edit query
- * @param keyserver specified keyserver authority to use. If null, will use keyserver
- * specified in user preferences
+ * @param cloudSearchPrefs search parameters to use. If null will retrieve from user's
+ * preferences.
*/
public static ImportKeysCloudFragment newInstance(String query, boolean disableQueryEdit,
- String keyserver) {
+ Preferences.CloudSearchPrefs
+ cloudSearchPrefs) {
ImportKeysCloudFragment frag = new ImportKeysCloudFragment();
Bundle args = new Bundle();
args.putString(ARG_QUERY, query);
args.putBoolean(ARG_DISABLE_QUERY_EDIT, disableQueryEdit);
- args.putString(ARG_KEYSERVER, keyserver);
+ args.putParcelable(ARG_CLOUD_SEARCH_PREFS, cloudSearchPrefs);
frag.setArguments(args);
@@ -82,9 +84,7 @@ public class ImportKeysCloudFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.import_keys_cloud_fragment, container, false);
- mSearchButton = view.findViewById(R.id.cloud_import_server_search);
mQueryEditText = (AutoCompleteTextView) view.findViewById(R.id.cloud_import_server_query);
- mConfigButton = view.findViewById(R.id.cloud_import_server_config_button);
List<String> namesAndEmails = ContactHelper.getContactNames(getActivity());
namesAndEmails.addAll(ContactHelper.getContactMails(getActivity()));
@@ -96,7 +96,8 @@ public class ImportKeysCloudFragment extends Fragment {
)
);
- mSearchButton.setOnClickListener(new OnClickListener() {
+ View searchButton = view.findViewById(R.id.cloud_import_server_search);
+ searchButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
search(mQueryEditText.getText().toString());
@@ -116,7 +117,8 @@ public class ImportKeysCloudFragment extends Fragment {
}
});
- mConfigButton.setOnClickListener(new OnClickListener() {
+ View configButton = view.findViewById(R.id.cloud_import_server_config_button);
+ configButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mImportActivity, SettingsActivity.class);
@@ -159,15 +161,14 @@ public class ImportKeysCloudFragment extends Fragment {
}
private void search(String query) {
- Preferences.CloudSearchPrefs cloudSearchPrefs;
- String explicitKeyserver = getArguments().getString(ARG_KEYSERVER);
- // no explicit keyserver passed
- if (explicitKeyserver == null) {
+ Preferences.CloudSearchPrefs cloudSearchPrefs
+ = getArguments().getParcelable(ARG_CLOUD_SEARCH_PREFS);
+
+ // no explicit search preferences passed
+ if (cloudSearchPrefs == null) {
cloudSearchPrefs = Preferences.getPreferences(getActivity()).getCloudSearchPrefs();
- } else {
- // assume we are also meant to search keybase.io
- cloudSearchPrefs = new Preferences.CloudSearchPrefs(true, true, explicitKeyserver);
}
+
mImportActivity.loadCallback(
new ImportKeysListFragment.CloudLoaderState(query, cloudSearchPrefs));
toggleKeyboard(false);
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 4955bad6e..b399af950 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java
@@ -65,7 +65,7 @@ public class ImportKeysListFragment extends ListFragment implements
private static final String ARG_BYTES = "bytes";
public static final String ARG_SERVER_QUERY = "query";
public static final String ARG_NON_INTERACTIVE = "non_interactive";
- public static final String ARG_KEYSERVER_URL = "keyserver_url";
+ public static final String ARG_CLOUD_SEARCH_PREFS = "cloud_search_prefs";
private static final int REQUEST_PERMISSION_READ_EXTERNAL_STORAGE = 12;
@@ -140,32 +140,35 @@ public class ImportKeysListFragment extends ListFragment implements
* by dataUri, or searches a keyserver for serverQuery, if parameter is not null, in that order
* Will immediately load data if non-null bytes/dataUri/serverQuery
*
- * @param bytes byte data containing list of keyrings to be imported
- * @param dataUri file from which keyrings are to be imported
- * @param serverQuery query to search for on keyserver
- * @param keyserver if not null, will perform search on specified keyserver. Else, uses
- * keyserver specified in user preferences
+ * @param bytes byte data containing list of keyrings to be imported
+ * @param dataUri file from which keyrings are to be imported
+ * @param serverQuery query to search for on keyserver
+ * @param cloudSearchPrefs search parameters to use. If null will retrieve from user's
+ * preferences.
* @return fragment with arguments set based on passed parameters
*/
public static ImportKeysListFragment newInstance(byte[] bytes, Uri dataUri, String serverQuery,
- String keyserver) {
- return newInstance(bytes, dataUri, serverQuery, false, keyserver);
+ Preferences.CloudSearchPrefs cloudSearchPrefs) {
+ return newInstance(bytes, dataUri, serverQuery, false, cloudSearchPrefs);
}
/**
* Visually consists of a list of keyrings with checkboxes to specify which are to be imported
* Will immediately load data if non-null bytes/dataUri/serverQuery is supplied
*
- * @param bytes byte data containing list of keyrings to be imported
- * @param dataUri file from which keyrings are to be imported
- * @param serverQuery query to search for on keyserver
- * @param nonInteractive if true, users will not be able to check/uncheck items in the list
- * @param keyserver if set, will perform search on specified keyserver. If null, falls back
- * to keyserver specified in user preferences
+ * @param bytes byte data containing list of keyrings to be imported
+ * @param dataUri file from which keyrings are to be imported
+ * @param serverQuery query to search for on keyserver
+ * @param nonInteractive if true, users will not be able to check/uncheck items in the list
+ * @param cloudSearchPrefs search parameters to use. If null will retrieve from user's
+ * preferences.
* @return fragment with arguments set based on passed parameters
*/
- public static ImportKeysListFragment newInstance(byte[] bytes, Uri dataUri, String serverQuery,
- boolean nonInteractive, String keyserver) {
+ public static ImportKeysListFragment newInstance(byte[] bytes,
+ Uri dataUri,
+ String serverQuery,
+ boolean nonInteractive,
+ Preferences.CloudSearchPrefs cloudSearchPrefs) {
ImportKeysListFragment frag = new ImportKeysListFragment();
Bundle args = new Bundle();
@@ -173,7 +176,7 @@ public class ImportKeysListFragment extends ListFragment implements
args.putParcelable(ARG_DATA_URI, dataUri);
args.putString(ARG_SERVER_QUERY, serverQuery);
args.putBoolean(ARG_NON_INTERACTIVE, nonInteractive);
- args.putString(ARG_KEYSERVER_URL, keyserver);
+ args.putParcelable(ARG_CLOUD_SEARCH_PREFS, cloudSearchPrefs);
frag.setArguments(args);
@@ -223,7 +226,6 @@ public class ImportKeysListFragment extends ListFragment implements
Uri dataUri = args.getParcelable(ARG_DATA_URI);
byte[] bytes = args.getByteArray(ARG_BYTES);
String query = args.getString(ARG_SERVER_QUERY);
- String keyserver = args.getString(ARG_KEYSERVER_URL);
mNonInteractive = args.getBoolean(ARG_NON_INTERACTIVE, false);
getListView().setOnTouchListener(new OnTouchListener() {
@@ -241,11 +243,10 @@ public class ImportKeysListFragment extends ListFragment implements
if (dataUri != null || bytes != null) {
mLoaderState = new BytesLoaderState(bytes, dataUri);
} else if (query != null) {
- Preferences.CloudSearchPrefs cloudSearchPrefs;
- if (keyserver == null) {
+ Preferences.CloudSearchPrefs cloudSearchPrefs
+ = args.getParcelable(ARG_CLOUD_SEARCH_PREFS);
+ if (cloudSearchPrefs == null) {
cloudSearchPrefs = Preferences.getPreferences(getActivity()).getCloudSearchPrefs();
- } else {
- cloudSearchPrefs = new Preferences.CloudSearchPrefs(true, true, keyserver);
}
mLoaderState = new CloudLoaderState(query, cloudSearchPrefs);
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysProxyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysProxyActivity.java
index 45ce604c3..3969f4039 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysProxyActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysProxyActivity.java
@@ -19,7 +19,6 @@ package org.sufficientlysecure.keychain.ui;
import android.annotation.TargetApi;
import android.content.Intent;
-import android.content.pm.ActivityInfo;
import android.net.Uri;
import android.nfc.NdefMessage;
import android.nfc.NfcAdapter;
@@ -130,7 +129,6 @@ public class ImportKeysProxyActivity extends FragmentActivity
String scannedContent = scanResult.getContents();
processScannedContent(scannedContent);
- return;
}
}
@@ -199,7 +197,7 @@ public class ImportKeysProxyActivity extends FragmentActivity
}
public void importKeys(String fingerprint) {
- ParcelableKeyRing keyEntry = new ParcelableKeyRing(fingerprint, null, null);
+ ParcelableKeyRing keyEntry = new ParcelableKeyRing(fingerprint, null);
ArrayList<ParcelableKeyRing> selectedEntries = new ArrayList<>();
selectedEntries.add(keyEntry);
@@ -209,12 +207,7 @@ public class ImportKeysProxyActivity extends FragmentActivity
private void startImportService(ArrayList<ParcelableKeyRing> keyRings) {
// search config
- {
- Preferences prefs = Preferences.getPreferences(this);
- Preferences.CloudSearchPrefs cloudPrefs =
- new Preferences.CloudSearchPrefs(true, true, prefs.getPreferredKeyserver());
- mKeyserver = cloudPrefs.keyserver;
- }
+ mKeyserver = Preferences.getPreferences(this).getPreferredKeyserver();
mKeyList = keyRings;
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java
index db31bd0a1..dd8107304 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java
@@ -588,7 +588,7 @@ public class KeyListFragment extends LoaderFragment
while (cursor.moveToNext()) {
byte[] blob = cursor.getBlob(0);//fingerprint column is 0
String fingerprint = KeyFormattingUtils.convertFingerprintToHex(blob);
- ParcelableKeyRing keyEntry = new ParcelableKeyRing(fingerprint, null, null);
+ ParcelableKeyRing keyEntry = new ParcelableKeyRing(fingerprint, null);
keyList.add(keyEntry);
}
mKeyList = keyList;
@@ -597,12 +597,7 @@ public class KeyListFragment extends LoaderFragment
}
// search config
- {
- Preferences prefs = Preferences.getPreferences(getActivity());
- Preferences.CloudSearchPrefs cloudPrefs =
- new Preferences.CloudSearchPrefs(true, true, prefs.getPreferredKeyserver());
- mKeyserver = cloudPrefs.keyserver;
- }
+ mKeyserver = Preferences.getPreferences(getActivity()).getPreferredKeyserver();
mImportOpHelper = new CryptoOperationHelper<>(1, this, this, R.string.progress_updating);
mImportOpHelper.setProgressCancellable(true);
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java
index 9e962fa0d..2b994e11c 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java
@@ -29,11 +29,9 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
-import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
-import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import android.preference.SwitchPreference;
@@ -115,6 +113,15 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
});
}
+ public static abstract class PresetPreferenceFragment extends PreferenceFragment {
+ @Override
+ public void addPreferencesFromResource(int preferencesResId) {
+ // so that preferences are written to our preference file, not the default
+ Preferences.setPreferenceManagerFileAndMode(this.getPreferenceManager());
+ super.addPreferencesFromResource(preferencesResId);
+ }
+ }
+
@Override
public void onBuildHeaders(List<Header> target) {
super.onBuildHeaders(target);
@@ -124,7 +131,7 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
/**
* This fragment shows the Cloud Search preferences
*/
- public static class CloudSearchPrefsFragment extends PreferenceFragment {
+ public static class CloudSearchPrefsFragment extends PresetPreferenceFragment {
private PreferenceScreen mKeyServerPreference = null;
@@ -149,12 +156,6 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
return false;
}
});
- initializeSearchKeyserver(
- (SwitchPreference) findPreference(Constants.Pref.SEARCH_KEYSERVER)
- );
- initializeSearchKeybase(
- (SwitchPreference) findPreference(Constants.Pref.SEARCH_KEYBASE)
- );
}
@Override
@@ -172,12 +173,20 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
}
}
}
+
+ public static String keyserverSummary(Context context) {
+ String[] servers = sPreferences.getKeyServers();
+ String serverSummary = context.getResources().getQuantityString(
+ R.plurals.n_keyservers, servers.length, servers.length);
+ return serverSummary + "; " + context.getString(R.string.label_preferred) + ": " + sPreferences
+ .getPreferredKeyserver();
+ }
}
/**
* This fragment shows the PIN/password preferences
*/
- public static class PassphrasePrefsFragment extends PreferenceFragment {
+ public static class PassphrasePrefsFragment extends PresetPreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -186,18 +195,27 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.passphrase_preferences);
- initializePassphraseCacheSubs(
- (CheckBoxPreference) findPreference(Constants.Pref.PASSPHRASE_CACHE_SUBS));
-
initializePassphraseCacheTtl(
(IntegerListPreference) findPreference(Constants.Pref.PASSPHRASE_CACHE_TTL));
+ }
- initializeUseNumKeypadForYubiKeyPin(
- (CheckBoxPreference) findPreference(Constants.Pref.USE_NUMKEYPAD_FOR_YUBIKEY_PIN));
+ private static void initializePassphraseCacheTtl(
+ final IntegerListPreference passphraseCacheTtl) {
+ passphraseCacheTtl.setValue("" + sPreferences.getPassphraseCacheTtl());
+ passphraseCacheTtl.setSummary(passphraseCacheTtl.getEntry());
+ passphraseCacheTtl
+ .setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ passphraseCacheTtl.setValue(newValue.toString());
+ passphraseCacheTtl.setSummary(passphraseCacheTtl.getEntry());
+ sPreferences.setPassphraseCacheTtl(Integer.parseInt(newValue.toString()));
+ return false;
+ }
+ });
}
}
- public static class ProxyPrefsFragment extends PreferenceFragment {
+ public static class ProxyPrefsFragment extends PresetPreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -213,37 +231,18 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
private EditTextPreference mProxyHost;
private EditTextPreference mProxyPort;
private ListPreference mProxyType;
- private PreferenceActivity mActivity;
- private PreferenceFragment mFragment;
+ private PresetPreferenceFragment mFragment;
- public Initializer(PreferenceFragment fragment) {
+ public Initializer(PresetPreferenceFragment fragment) {
mFragment = fragment;
}
- public Initializer(PreferenceActivity activity) {
- mActivity = activity;
- }
-
public Preference automaticallyFindPreference(String key) {
- if (mFragment != null) {
- return mFragment.findPreference(key);
- } else {
- return mActivity.findPreference(key);
- }
+ return mFragment.findPreference(key);
}
public void initialize() {
- // makes android's preference framework write to our file instead of default
- // This allows us to use the "persistent" attribute to simplify code
- if (mFragment != null) {
- Preferences.setPreferenceManagerFileAndMode(mFragment.getPreferenceManager());
- // Load the preferences from an XML resource
- mFragment.addPreferencesFromResource(R.xml.proxy_preferences);
- } else {
- Preferences.setPreferenceManagerFileAndMode(mActivity.getPreferenceManager());
- // Load the preferences from an XML resource
- mActivity.addPreferencesFromResource(R.xml.proxy_preferences);
- }
+ mFragment.addPreferencesFromResource(R.xml.proxy_preferences);
mUseTor = (SwitchPreference) automaticallyFindPreference(Constants.Pref.USE_TOR_PROXY);
mUseNormalProxy = (SwitchPreference) automaticallyFindPreference(Constants.Pref.USE_NORMAL_PROXY);
@@ -268,7 +267,7 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
mUseTor.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
- Activity activity = mFragment != null ? mFragment.getActivity() : mActivity;
+ Activity activity = mFragment.getActivity();
if ((Boolean) newValue) {
boolean installed = OrbotHelper.isOrbotInstalled(activity);
if (!installed) {
@@ -314,7 +313,7 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
mProxyHost.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
- Activity activity = mFragment != null ? mFragment.getActivity() : mActivity;
+ Activity activity = mFragment.getActivity();
if (TextUtils.isEmpty((String) newValue)) {
Notify.create(
activity,
@@ -332,7 +331,7 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
mProxyPort.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
- Activity activity = mFragment != null ? mFragment.getActivity() : mActivity;
+ Activity activity = mFragment.getActivity();
try {
int port = Integer.parseInt((String) newValue);
if (port < 0 || port > 65535) {
@@ -407,7 +406,7 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
/**
* This fragment shows the keyserver/contacts sync preferences
*/
- public static class SyncPrefsFragment extends PreferenceFragment {
+ public static class SyncPrefsFragment extends PresetPreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -542,7 +541,7 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
/**
* This fragment shows experimental features
*/
- public static class ExperimentalPrefsFragment extends PreferenceFragment {
+ public static class ExperimentalPrefsFragment extends PresetPreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -551,17 +550,23 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.experimental_preferences);
- initializeExperimentalEnableWordConfirm(
- (SwitchPreference) findPreference(Constants.Pref.EXPERIMENTAL_ENABLE_WORD_CONFIRM));
+ initializeTheme((ListPreference) findPreference(Constants.Pref.THEME));
- initializeExperimentalEnableLinkedIdentities(
- (SwitchPreference) findPreference(Constants.Pref.EXPERIMENTAL_ENABLE_LINKED_IDENTITIES));
+ }
- initializeExperimentalEnableKeybase(
- (SwitchPreference) findPreference(Constants.Pref.EXPERIMENTAL_ENABLE_KEYBASE));
+ private static void initializeTheme(final ListPreference themePref) {
+ themePref.setSummary(themePref.getEntry() + "\n"
+ + themePref.getContext().getString(R.string.label_experimental_settings_theme_summary));
+ themePref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ themePref.setSummary(newValue + "\n"
+ + themePref.getContext().getString(R.string.label_experimental_settings_theme_summary));
- initializeTheme((ListPreference) findPreference(Constants.Pref.THEME));
+ ((SettingsActivity) themePref.getContext()).recreate();
+ return true;
+ }
+ });
}
}
@@ -573,125 +578,4 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
|| ExperimentalPrefsFragment.class.getName().equals(fragmentName)
|| super.isValidFragment(fragmentName);
}
-
- private static void initializePassphraseCacheSubs(final CheckBoxPreference mPassphraseCacheSubs) {
- mPassphraseCacheSubs.setChecked(sPreferences.getPassphraseCacheSubs());
- mPassphraseCacheSubs.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- mPassphraseCacheSubs.setChecked((Boolean) newValue);
- sPreferences.setPassphraseCacheSubs((Boolean) newValue);
- return false;
- }
- });
- }
-
- private static void initializePassphraseCacheTtl(final IntegerListPreference mPassphraseCacheTtl) {
- mPassphraseCacheTtl.setValue("" + sPreferences.getPassphraseCacheTtl());
- mPassphraseCacheTtl.setSummary(mPassphraseCacheTtl.getEntry());
- mPassphraseCacheTtl
- .setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- mPassphraseCacheTtl.setValue(newValue.toString());
- mPassphraseCacheTtl.setSummary(mPassphraseCacheTtl.getEntry());
- sPreferences.setPassphraseCacheTtl(Integer.parseInt(newValue.toString()));
- return false;
- }
- });
- }
-
- private static void initializeTheme(final ListPreference mTheme) {
- mTheme.setValue(sPreferences.getTheme());
- mTheme.setSummary(mTheme.getEntry() + "\n"
- + mTheme.getContext().getString(R.string.label_experimental_settings_theme_summary));
- mTheme.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- mTheme.setValue((String) newValue);
- mTheme.setSummary(mTheme.getEntry() + "\n"
- + mTheme.getContext().getString(R.string.label_experimental_settings_theme_summary));
- sPreferences.setTheme((String) newValue);
-
- ((SettingsActivity) mTheme.getContext()).recreate();
-
- return false;
- }
- });
- }
-
- private static void initializeSearchKeyserver(final SwitchPreference mSearchKeyserver) {
- Preferences.CloudSearchPrefs prefs = sPreferences.getCloudSearchPrefs();
- mSearchKeyserver.setChecked(prefs.searchKeyserver);
- mSearchKeyserver.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- mSearchKeyserver.setChecked((Boolean) newValue);
- sPreferences.setSearchKeyserver((Boolean) newValue);
- return false;
- }
- });
- }
-
- private static void initializeSearchKeybase(final SwitchPreference mSearchKeybase) {
- Preferences.CloudSearchPrefs prefs = sPreferences.getCloudSearchPrefs();
- mSearchKeybase.setChecked(prefs.searchKeybase);
- mSearchKeybase.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- mSearchKeybase.setChecked((Boolean) newValue);
- sPreferences.setSearchKeybase((Boolean) newValue);
- return false;
- }
- });
- }
-
- public static String keyserverSummary(Context context) {
- String[] servers = sPreferences.getKeyServers();
- String serverSummary = context.getResources().getQuantityString(
- R.plurals.n_keyservers, servers.length, servers.length);
- return serverSummary + "; " + context.getString(R.string.label_preferred) + ": " + sPreferences
- .getPreferredKeyserver();
- }
-
- private static void initializeUseNumKeypadForYubiKeyPin(final CheckBoxPreference mUseNumKeypadForYubiKeyPin) {
- mUseNumKeypadForYubiKeyPin.setChecked(sPreferences.useNumKeypadForYubiKeyPin());
- mUseNumKeypadForYubiKeyPin.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- mUseNumKeypadForYubiKeyPin.setChecked((Boolean) newValue);
- sPreferences.setUseNumKeypadForYubiKeyPin((Boolean) newValue);
- return false;
- }
- });
- }
-
- private static void initializeExperimentalEnableWordConfirm(final SwitchPreference mExperimentalEnableWordConfirm) {
- mExperimentalEnableWordConfirm.setChecked(sPreferences.getExperimentalEnableWordConfirm());
- mExperimentalEnableWordConfirm.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- mExperimentalEnableWordConfirm.setChecked((Boolean) newValue);
- sPreferences.setExperimentalEnableWordConfirm((Boolean) newValue);
- return false;
- }
- });
- }
-
- private static void initializeExperimentalEnableLinkedIdentities(final SwitchPreference mExperimentalEnableLinkedIdentities) {
- mExperimentalEnableLinkedIdentities.setChecked(sPreferences.getExperimentalEnableLinkedIdentities());
- mExperimentalEnableLinkedIdentities.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- mExperimentalEnableLinkedIdentities.setChecked((Boolean) newValue);
- sPreferences.setExperimentalEnableLinkedIdentities((Boolean) newValue);
- return false;
- }
- });
- }
-
- private static void initializeExperimentalEnableKeybase(final SwitchPreference mExperimentalKeybase) {
- mExperimentalKeybase.setChecked(sPreferences.getExperimentalEnableKeybase());
- mExperimentalKeybase.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- mExperimentalKeybase.setChecked((Boolean) newValue);
- sPreferences.setExperimentalEnableKeybase((Boolean) newValue);
- return false;
- }
- });
- }
}
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 e1b796f38..ea87aa113 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java
@@ -1038,18 +1038,12 @@ public class ViewKeyActivity extends BaseNfcActivity implements
KeychainContract.Keys.FINGERPRINT, ProviderHelper.FIELD_TYPE_BLOB);
String fingerprint = KeyFormattingUtils.convertFingerprintToHex(blob);
- ParcelableKeyRing keyEntry = new ParcelableKeyRing(fingerprint, null, null);
+ ParcelableKeyRing keyEntry = new ParcelableKeyRing(fingerprint, null);
ArrayList<ParcelableKeyRing> entries = new ArrayList<>();
entries.add(keyEntry);
mKeyList = entries;
- // search config
- {
- Preferences prefs = Preferences.getPreferences(this);
- Preferences.CloudSearchPrefs cloudPrefs =
- new Preferences.CloudSearchPrefs(true, true, prefs.getPreferredKeyserver());
- mKeyserver = cloudPrefs.keyserver;
- }
+ mKeyserver = Preferences.getPreferences(this).getPreferredKeyserver();
mOperationHelper.cryptoOperation();
}