From f29280bbb268d112426c6662e1227118819fb904 Mon Sep 17 00:00:00 2001 From: Adithya Abraham Philip Date: Wed, 25 Nov 2015 01:35:41 +0530 Subject: added Facebook links support, reworked Preferences --- .../ui/CreateYubiKeyImportResetFragment.java | 9 +- .../keychain/ui/DecryptFragment.java | 9 +- .../keychain/ui/DecryptListFragment.java | 10 +- .../keychain/ui/ImportKeysActivity.java | 94 +++++---- .../keychain/ui/ImportKeysCloudFragment.java | 37 ++-- .../keychain/ui/ImportKeysListFragment.java | 45 ++-- .../keychain/ui/ImportKeysProxyActivity.java | 11 +- .../keychain/ui/KeyListFragment.java | 9 +- .../keychain/ui/SettingsActivity.java | 228 +++++---------------- .../keychain/ui/ViewKeyActivity.java | 10 +- 10 files changed, 168 insertions(+), 294 deletions(-) (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui') 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 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 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 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 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 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 selectedEntries = new ArrayList<>(); selectedEntries.add(keyEntry); @@ -209,12 +207,7 @@ public class ImportKeysProxyActivity extends FragmentActivity private void startImportService(ArrayList 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
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 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(); } -- cgit v1.2.3