aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2014-09-15 14:00:17 +0200
committerVincent Breitmoser <valodim@mugenguild.com>2014-09-15 14:00:17 +0200
commite457d4c9097cb3f2e1c6305609cfacff1c5c38c2 (patch)
tree9d6410b554b68aca6aa49539e045e9db5d703cbf /OpenKeychain/src
parent9a3a032d99064cd16ca065a214d8f7fd09d54088 (diff)
parent40751bceb586d12da671966c1ad5661223819c5b (diff)
downloadopen-keychain-e457d4c9097cb3f2e1c6305609cfacff1c5c38c2.tar.gz
open-keychain-e457d4c9097cb3f2e1c6305609cfacff1c5c38c2.tar.bz2
open-keychain-e457d4c9097cb3f2e1c6305609cfacff1c5c38c2.zip
Merge remote-tracking branch 'origin/master'
Conflicts: OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedKeyRing.java OpenKeychain/src/main/res/values-de/strings.xml
Diffstat (limited to 'OpenKeychain/src')
-rw-r--r--OpenKeychain/src/main/AndroidManifest.xml47
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java2
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/helper/EmailKeyHelper.java6
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/helper/KeyUpdateHelper.java2
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/helper/Preferences.java32
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/CloudSearch.java90
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/HkpKeyserver.java2
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysList.java95
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java23
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/KeybaseKeyserver.java4
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/Keyserver.java16
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedKeyRing.java5
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedPublicKey.java8
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java4
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java44
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java2
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptActivity.java147
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesActivity.java113
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesFragment.java (renamed from OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFileFragment.java)34
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextActivity.java158
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextFragment.java (renamed from OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptMessageFragment.java)101
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java89
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysCloudFragment.java (renamed from OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysServerFragment.java)75
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysKeybaseFragment.java122
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java66
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PreferencesActivity.java88
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PreferencesKeyServerActivity.java34
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java2
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysListCloudLoader.java (renamed from OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysListServerLoader.java)29
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysListKeybaseLoader.java103
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Utf8Util.java53
-rw-r--r--OpenKeychain/src/main/res/drawable/button_rounded_blue.xml37
-rw-r--r--OpenKeychain/src/main/res/layout-large/decrypt_activity_old.xml18
-rw-r--r--OpenKeychain/src/main/res/layout/decrypt_activity_old.xml11
-rw-r--r--OpenKeychain/src/main/res/layout/decrypt_content.xml70
-rw-r--r--OpenKeychain/src/main/res/layout/decrypt_content_old.xml24
-rw-r--r--OpenKeychain/src/main/res/layout/decrypt_files_activity.xml14
-rw-r--r--OpenKeychain/src/main/res/layout/decrypt_text_activity.xml14
-rw-r--r--OpenKeychain/src/main/res/layout/decrypt_text_fragment.xml (renamed from OpenKeychain/src/main/res/layout/decrypt_message_fragment.xml)23
-rw-r--r--OpenKeychain/src/main/res/layout/encrypt_file_content.xml2
-rw-r--r--OpenKeychain/src/main/res/layout/encrypt_text_content.xml2
-rw-r--r--OpenKeychain/src/main/res/layout/import_keys_cloud_fragment.xml (renamed from OpenKeychain/src/main/res/layout/import_keys_server_fragment.xml)27
-rw-r--r--OpenKeychain/src/main/res/layout/import_keys_keybase_fragment.xml32
-rw-r--r--OpenKeychain/src/main/res/layout/import_keys_list_entry.xml2
-rw-r--r--OpenKeychain/src/main/res/layout/key_server_preference.xml23
-rw-r--r--OpenKeychain/src/main/res/raw-cs/help_about.html2
-rw-r--r--OpenKeychain/src/main/res/raw-cs/help_changelog.html35
-rw-r--r--OpenKeychain/src/main/res/raw-cs/help_nfc_beam.html2
-rw-r--r--OpenKeychain/src/main/res/raw-cs/help_start.html10
-rw-r--r--OpenKeychain/src/main/res/raw-cs/help_wot.html10
-rw-r--r--OpenKeychain/src/main/res/raw-cs/nfc_beam_share.html6
-rw-r--r--OpenKeychain/src/main/res/raw-de/help_changelog.html7
-rw-r--r--OpenKeychain/src/main/res/raw-es/help_changelog.html27
-rw-r--r--OpenKeychain/src/main/res/raw-et/help_changelog.html7
-rw-r--r--OpenKeychain/src/main/res/raw-fi/help_changelog.html7
-rw-r--r--OpenKeychain/src/main/res/raw-fr/help_changelog.html43
-rw-r--r--OpenKeychain/src/main/res/raw-is/help_changelog.html7
-rw-r--r--OpenKeychain/src/main/res/raw-it/help_changelog.html7
-rw-r--r--OpenKeychain/src/main/res/raw-ja/help_changelog.html27
-rw-r--r--OpenKeychain/src/main/res/raw-nl/help_changelog.html7
-rw-r--r--OpenKeychain/src/main/res/raw-pl/help_changelog.html7
-rw-r--r--OpenKeychain/src/main/res/raw-pt/help_changelog.html7
-rw-r--r--OpenKeychain/src/main/res/raw-ru/help_changelog.html7
-rw-r--r--OpenKeychain/src/main/res/raw-sl/help_about.html2
-rw-r--r--OpenKeychain/src/main/res/raw-sl/help_changelog.html15
-rw-r--r--OpenKeychain/src/main/res/raw-tr/help_about.html28
-rw-r--r--OpenKeychain/src/main/res/raw-tr/help_changelog.html7
-rw-r--r--OpenKeychain/src/main/res/raw-tr/help_start.html8
-rw-r--r--OpenKeychain/src/main/res/raw-uk/help_changelog.html7
-rw-r--r--OpenKeychain/src/main/res/raw-zh/help_changelog.html7
-rw-r--r--OpenKeychain/src/main/res/values-cs/strings.xml127
-rw-r--r--OpenKeychain/src/main/res/values-de/strings.xml115
-rw-r--r--OpenKeychain/src/main/res/values-es/strings.xml86
-rw-r--r--OpenKeychain/src/main/res/values-et/strings.xml3
-rw-r--r--OpenKeychain/src/main/res/values-fi/strings.xml3
-rw-r--r--OpenKeychain/src/main/res/values-fr/strings.xml14
-rw-r--r--OpenKeychain/src/main/res/values-is/strings.xml3
-rw-r--r--OpenKeychain/src/main/res/values-it/strings.xml8
-rw-r--r--OpenKeychain/src/main/res/values-ja/strings.xml15
-rw-r--r--OpenKeychain/src/main/res/values-nl/strings.xml5
-rw-r--r--OpenKeychain/src/main/res/values-pl/strings.xml4
-rw-r--r--OpenKeychain/src/main/res/values-pt/strings.xml3
-rw-r--r--OpenKeychain/src/main/res/values-ru/strings.xml7
-rw-r--r--OpenKeychain/src/main/res/values-sl/strings.xml36
-rw-r--r--OpenKeychain/src/main/res/values-tr/strings.xml153
-rw-r--r--OpenKeychain/src/main/res/values-uk/strings.xml8
-rw-r--r--OpenKeychain/src/main/res/values-zh/strings.xml4
-rw-r--r--OpenKeychain/src/main/res/values/strings.xml9
-rw-r--r--OpenKeychain/src/main/res/xml/adv_preferences.xml6
-rw-r--r--OpenKeychain/src/main/res/xml/cloud_search_prefs.xml20
-rw-r--r--OpenKeychain/src/main/res/xml/gen_preferences.xml15
-rw-r--r--OpenKeychain/src/main/res/xml/preference_headers.xml4
92 files changed, 1900 insertions, 942 deletions
diff --git a/OpenKeychain/src/main/AndroidManifest.xml b/OpenKeychain/src/main/AndroidManifest.xml
index a83992d09..fcdbe6bce 100644
--- a/OpenKeychain/src/main/AndroidManifest.xml
+++ b/OpenKeychain/src/main/AndroidManifest.xml
@@ -58,7 +58,6 @@
<uses-permission android:name="org.sufficientlysecure.keychain.WRITE_TEMPORARY_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
@@ -139,11 +138,6 @@
android:label="@string/title_select_recipients"
android:launchMode="singleTop" />
<activity
- android:name=".ui.SelectSecretKeyActivity"
- android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
- android:label="@string/title_select_secret_key"
- android:launchMode="singleTop" />
- <activity
android:name=".ui.EncryptFileActivity"
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
android:label="@string/title_encrypt_files"
@@ -199,6 +193,34 @@
android:name=".ui.DecryptActivity"
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
android:label="@string/title_decrypt"
+ android:windowSoftInputMode="stateHidden" />
+ <activity
+ android:name=".ui.DecryptTextActivity"
+ android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
+ android:label="@string/title_decrypt"
+ android:windowSoftInputMode="stateHidden">
+
+ <!-- Keychain's own Actions -->
+ <!-- DECRYPT with text as extra -->
+ <intent-filter>
+ <action android:name="org.sufficientlysecure.keychain.action.DECRYPT_TEXT" />
+
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ <!-- Android's Send Action -->
+ <intent-filter android:label="@string/intent_send_decrypt">
+ <action android:name="android.intent.action.SEND" />
+
+ <category android:name="android.intent.category.DEFAULT" />
+
+ <data android:mimeType="text/*" />
+ <data android:mimeType="message/*" />
+ </intent-filter>
+ </activity>
+ <activity
+ android:name=".ui.DecryptFilesActivity"
+ android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
+ android:label="@string/title_decrypt"
android:windowSoftInputMode="stateHidden">
<!-- VIEW with mimeType application/octet-stream, application/pgp and text/pgp -->
@@ -214,12 +236,6 @@
<data android:mimeType="text/pgp" />
</intent-filter>
<!-- Keychain's own Actions -->
- <!-- DECRYPT with text as extra -->
- <intent-filter>
- <action android:name="org.sufficientlysecure.keychain.action.DECRYPT" />
-
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
<!-- DECRYPT with data Uri -->
<intent-filter>
<action android:name="org.sufficientlysecure.keychain.action.DECRYPT" />
@@ -235,7 +251,12 @@
<category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="*/*" />
+ <!-- everything except text/* and message/* -->
+ <data android:mimeType="image/*" />
+ <data android:mimeType="audio/*" />
+ <data android:mimeType="video/*" />
+ <data android:mimeType="application/*" />
+ <data android:mimeType="multipart/*" />
</intent-filter>
<!-- Linking "Decrypt" to file types -->
<intent-filter android:label="@string/intent_decrypt_file">
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java
index db78a36c1..8ee769fdf 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java
@@ -81,6 +81,8 @@ public final class Constants {
public static final String CACHED_CONSOLIDATE = "cachedConsolidate";
public static final String CACHED_CONSOLIDATE_SECRETS = "cachedConsolidateSecrets";
public static final String CACHED_CONSOLIDATE_PUBLICS = "cachedConsolidatePublics";
+ public static final String SEARCH_KEYSERVER = "search_keyserver_pref";
+ public static final String SEARCH_KEYBASE = "search_keybase_pref";
public static final String USE_DEFAULT_YUBIKEY_PIN = "useDefaultYubikeyPin";
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/helper/EmailKeyHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/helper/EmailKeyHelper.java
index d8efdc480..91325ca1f 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/helper/EmailKeyHelper.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/helper/EmailKeyHelper.java
@@ -61,9 +61,9 @@ public class EmailKeyHelper {
if (keys.isEmpty()) {
// Most users don't have the SRV record, so ask a default server as well
- String[] servers = Preferences.getPreferences(context).getKeyServers();
- if (servers != null && servers.length != 0) {
- HkpKeyserver hkp = new HkpKeyserver(servers[0]);
+ String server = Preferences.getPreferences(context).getPreferredKeyserver();
+ if (server != null) {
+ HkpKeyserver hkp = new HkpKeyserver(server);
keys.addAll(getEmailKeys(mail, hkp));
}
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/helper/KeyUpdateHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/helper/KeyUpdateHelper.java
index 9ca6d5c5b..0a804fa64 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/helper/KeyUpdateHelper.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/helper/KeyUpdateHelper.java
@@ -63,7 +63,7 @@ public class KeyUpdateHelper {
ImportKeysListEntry key = new ImportKeysListEntry();
key.setFingerprintHex(fprint);
key.setBitStrength(1337);
- key.setOrigin(servers[0]);
+ key.addOrigin(servers[0]);
keys.add(key);
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/helper/Preferences.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/helper/Preferences.java
index aa4621893..bf09997a0 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/helper/Preferences.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/helper/Preferences.java
@@ -220,6 +220,9 @@ public class Preferences {
}
return servers.toArray(chunks);
}
+ public String getPreferredKeyserver() {
+ return getKeyServers()[0];
+ }
public void setKeyServers(String[] value) {
SharedPreferences.Editor editor = mSharedPreferences.edit();
@@ -248,6 +251,35 @@ public class Preferences {
return mSharedPreferences.getBoolean(Constants.Pref.WRITE_VERSION_HEADER, false);
}
+ public void setSearchKeyserver(boolean searchKeyserver) {
+ SharedPreferences.Editor editor = mSharedPreferences.edit();
+ editor.putBoolean(Pref.SEARCH_KEYSERVER, searchKeyserver);
+ editor.commit();
+ }
+ public void setSearchKeybase(boolean searchKeybase) {
+ SharedPreferences.Editor editor = mSharedPreferences.edit();
+ editor.putBoolean(Pref.SEARCH_KEYBASE, searchKeybase);
+ editor.commit();
+ }
+
+ public CloudSearchPrefs getCloudSearchPrefs() {
+ return new CloudSearchPrefs(mSharedPreferences.getBoolean(Pref.SEARCH_KEYSERVER, true),
+ mSharedPreferences.getBoolean(Pref.SEARCH_KEYBASE, true),
+ getPreferredKeyserver());
+ }
+
+ public static class CloudSearchPrefs {
+ public final boolean searchKeyserver;
+ public final boolean searchKeybase;
+ public final String keyserver;
+
+ public CloudSearchPrefs(boolean searchKeyserver, boolean searchKeybase, String keyserver) {
+ this.searchKeyserver = searchKeyserver;
+ this.searchKeybase = searchKeybase;
+ this.keyserver = keyserver;
+ }
+ }
+
public void updatePreferences() {
if (mSharedPreferences.getInt(Constants.Pref.PREF_DEFAULT_VERSION, 0) !=
Constants.Defaults.PREF_VERSION) {
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/CloudSearch.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/CloudSearch.java
new file mode 100644
index 000000000..27d826c59
--- /dev/null
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/CloudSearch.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2014 Tim Bray <tbray@textuality.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.sufficientlysecure.keychain.keyimport;
+
+import org.sufficientlysecure.keychain.Constants;
+import org.sufficientlysecure.keychain.helper.Preferences;
+import org.sufficientlysecure.keychain.util.Log;
+
+import java.util.ArrayList;
+import java.util.Vector;
+
+/**
+ * Search two or more types of server for online keys.
+ */
+public class CloudSearch {
+
+ private final static long SECONDS = 1000;
+
+ public static ArrayList<ImportKeysListEntry> search(final String query, Preferences.CloudSearchPrefs cloudPrefs)
+ throws Keyserver.CloudSearchFailureException {
+ final ArrayList<Keyserver> servers = new ArrayList<Keyserver>();
+
+ // it's a Vector for sync, multiple threads might report problems
+ final Vector<Keyserver.CloudSearchFailureException> problems = new Vector<Keyserver.CloudSearchFailureException>();
+
+ if (cloudPrefs.searchKeyserver) {
+ servers.add(new HkpKeyserver(cloudPrefs.keyserver));
+ }
+ if (cloudPrefs.searchKeybase) {
+ servers.add(new KeybaseKeyserver());
+ }
+ final ImportKeysList results = new ImportKeysList(servers.size());
+
+ for (final Keyserver keyserver : servers) {
+ Runnable r = new Runnable() {
+ @Override
+ public void run() {
+ try {
+ results.addAll(keyserver.search(query));
+ } catch (Keyserver.CloudSearchFailureException e) {
+ problems.add(e);
+ }
+ results.finishedAdding(); // notifies if all searchers done
+ }
+ };
+ new Thread(r).start();
+ }
+
+ // wait for either all the searches to come back, or 10 seconds
+ synchronized(results) {
+ try {
+ results.wait(10 * SECONDS);
+ } catch (InterruptedException e) {
+ }
+ }
+
+ if (results.outstandingSuppliers() > 0) {
+ String message = "Launched " + servers.size() + " cloud searchers, but" +
+ results.outstandingSuppliers() + "failed to complete.";
+ problems.add(new Keyserver.QueryFailedException(message));
+ }
+
+ if (!problems.isEmpty()) {
+ for (Keyserver.CloudSearchFailureException e : problems) {
+ Log.d(Constants.TAG, "Cloud search exception: " + e.getLocalizedMessage());
+ }
+
+ // only throw exception if we didn’t get any results
+ if (results.isEmpty()) {
+ throw problems.get(0);
+ }
+ }
+
+ return results;
+ }
+}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/HkpKeyserver.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/HkpKeyserver.java
index c4c12cd3a..a6f1334ea 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/HkpKeyserver.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/HkpKeyserver.java
@@ -278,7 +278,7 @@ public class HkpKeyserver extends Keyserver {
while (matcher.find()) {
final ImportKeysListEntry entry = new ImportKeysListEntry();
entry.setQuery(query);
- entry.setOrigin(getUrlPrefix() + mHost + ":" + mPort);
+ entry.addOrigin(getUrlPrefix() + mHost + ":" + mPort);
int bitSize = Integer.parseInt(matcher.group(3));
entry.setBitStrength(bitSize);
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysList.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysList.java
new file mode 100644
index 000000000..15bcd8576
--- /dev/null
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysList.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2014 Tim Bray <tbray@textuality.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.sufficientlysecure.keychain.keyimport;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * Just an ArrayList, only with a synchronized dupe-merging add/addAll, and a sign-off method
+ */
+public class ImportKeysList extends ArrayList<ImportKeysListEntry> {
+
+ private int mSupplierCount;
+
+ public ImportKeysList(int supplierCount) {
+ mSupplierCount = supplierCount;
+ }
+
+ @Override
+ public boolean add(ImportKeysListEntry toAdd) {
+ addOrMerge(toAdd);
+ return true; // that’s what the ArrayList#add contract says
+ }
+
+ @Override
+ public boolean addAll(Collection<? extends ImportKeysListEntry> addThese) {
+ boolean modified = false;
+ for (ImportKeysListEntry toAdd : addThese) {
+ modified = addOrMerge(toAdd) || modified;
+ }
+ return modified;
+ }
+
+ // NOTE: side-effects
+ // NOTE: synchronized
+ private synchronized boolean addOrMerge(ImportKeysListEntry toAdd) {
+ for (ImportKeysListEntry existing : this) {
+ if (toAdd.hasSameKeyAs(existing)) {
+ return mergeDupes(toAdd, existing);
+ }
+ }
+ return super.add(toAdd);
+ }
+
+ // being a little anal about the ArrayList#addAll contract here
+ private boolean mergeDupes(ImportKeysListEntry incoming, ImportKeysListEntry existing) {
+ boolean modified = false;
+ if (incoming.isRevoked()) {
+ existing.setRevoked(true);
+ modified = true;
+ }
+ if (incoming.isExpired()) {
+ existing.setExpired(true);
+ modified = true;
+ }
+ for (String origin : incoming.getOrigins()) {
+ existing.addOrigin(origin);
+ }
+ ArrayList<String> incomingIDs = incoming.getUserIds();
+ ArrayList<String> existingIDs = existing.getUserIds();
+ for (String incomingID : incomingIDs) {
+ if (!existingIDs.contains(incomingID)) {
+ existingIDs.add(incomingID);
+ modified = true;
+ }
+ }
+ return modified;
+ }
+
+ // NOTE: synchronized
+ public synchronized void finishedAdding() {
+ mSupplierCount--;
+ if (mSupplierCount == 0) {
+ this.notify();
+ }
+ }
+
+ public int outstandingSuppliers() {
+ return mSupplierCount;
+ }
+}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java
index da70f1505..b3df67c0c 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java
@@ -46,7 +46,7 @@ public class ImportKeysListEntry implements Serializable, Parcelable {
private String mPrimaryUserId;
private String mExtraData;
private String mQuery;
- private String mOrigin;
+ private ArrayList<String> mOrigins;
private Integer mHashCode = null;
private boolean mSelected;
@@ -70,7 +70,7 @@ public class ImportKeysListEntry implements Serializable, Parcelable {
dest.writeByte((byte) (mSecretKey ? 1 : 0));
dest.writeByte((byte) (mSelected ? 1 : 0));
dest.writeString(mExtraData);
- dest.writeString(mOrigin);
+ dest.writeStringList(mOrigins);
}
public static final Creator<ImportKeysListEntry> CREATOR = new Creator<ImportKeysListEntry>() {
@@ -90,7 +90,8 @@ public class ImportKeysListEntry implements Serializable, Parcelable {
vr.mSecretKey = source.readByte() == 1;
vr.mSelected = source.readByte() == 1;
vr.mExtraData = source.readString();
- vr.mOrigin = source.readString();
+ vr.mOrigins = new ArrayList<String>();
+ source.readStringList(vr.mOrigins);
return vr;
}
@@ -107,6 +108,13 @@ public class ImportKeysListEntry implements Serializable, Parcelable {
return super.hashCode();
}
+ public boolean hasSameKeyAs(Object o) {
+ if (mFingerprintHex == null || o == null || !(o instanceof ImportKeysListEntry)) {
+ return false;
+ }
+ return mFingerprintHex.equals(((ImportKeysListEntry) o).mFingerprintHex);
+ }
+
public String getKeyIdHex() {
return mKeyIdHex;
}
@@ -223,12 +231,12 @@ public class ImportKeysListEntry implements Serializable, Parcelable {
mQuery = query;
}
- public String getOrigin() {
- return mOrigin;
+ public ArrayList<String> getOrigins() {
+ return mOrigins;
}
- public void setOrigin(String origin) {
- mOrigin = origin;
+ public void addOrigin(String origin) {
+ mOrigins.add(origin);
}
/**
@@ -240,6 +248,7 @@ public class ImportKeysListEntry implements Serializable, Parcelable {
// do not select by default
mSelected = false;
mUserIds = new ArrayList<String>();
+ mOrigins = new ArrayList<String>();
}
/**
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 cbd06da90..0a55fccc8 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/KeybaseKeyserver.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/KeybaseKeyserver.java
@@ -63,7 +63,9 @@ public class KeybaseKeyserver extends Keyserver {
private ImportKeysListEntry makeEntry(Match match) throws KeybaseException {
final ImportKeysListEntry entry = new ImportKeysListEntry();
entry.setQuery(mQuery);
- entry.setOrigin(ORIGIN);
+ entry.addOrigin(ORIGIN);
+
+ entry.setRevoked(false); // keybase doesn’t say anything about revoked keys
String username = match.getUsername();
String fullName = match.getFullName();
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/Keyserver.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/Keyserver.java
index b726529f8..5e4bd0b70 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/Keyserver.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/Keyserver.java
@@ -24,7 +24,19 @@ import java.io.InputStream;
import java.util.List;
public abstract class Keyserver {
- public static class QueryFailedException extends Exception {
+
+ public static class CloudSearchFailureException extends Exception {
+ private static final long serialVersionUID = 2703768928624654515L;
+
+ public CloudSearchFailureException(String message) {
+ super(message);
+ }
+ public CloudSearchFailureException() {
+ super();
+ }
+ }
+
+ public static class QueryFailedException extends CloudSearchFailureException {
private static final long serialVersionUID = 2703768928624654512L;
public QueryFailedException(String message) {
@@ -32,7 +44,7 @@ public abstract class Keyserver {
}
}
- public static class QueryNeedsRepairException extends Exception {
+ public static class QueryNeedsRepairException extends CloudSearchFailureException {
private static final long serialVersionUID = 2693768928624654512L;
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedKeyRing.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedKeyRing.java
index b745aec38..612077e34 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedKeyRing.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedKeyRing.java
@@ -40,6 +40,7 @@ import org.sufficientlysecure.keychain.service.results.OperationResult.LogType;
import org.sufficientlysecure.keychain.service.results.OperationResult.OperationLog;
import org.sufficientlysecure.keychain.util.IterableIterator;
import org.sufficientlysecure.keychain.util.Log;
+import org.sufficientlysecure.keychain.util.Utf8Util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -363,7 +364,7 @@ public class UncachedKeyRing {
ArrayList<byte[]> processedUserIds = new ArrayList<byte[]>();
for (byte[] rawUserId : new IterableIterator<byte[]>(masterKey.getRawUserIDs())) {
- String userId = Strings.fromUTF8ByteArray(rawUserId);
+ String userId = Utf8Util.fromUTF8ByteArrayReplaceBadEncoding(rawUserId);
// check for duplicate user ids
if (processedUserIds.contains(rawUserId)) {
@@ -437,7 +438,7 @@ public class UncachedKeyRing {
continue;
}
// warn user if the signature was made with bad encoding
- if (!cert.verifySignature(masterKey, userId)) {
+ if (!Utf8Util.isValidUTF8(rawUserId)) {
log.add(LogType.MSG_KC_UID_WARN_ENCODING, indent);
}
} catch (PgpGeneralException e) {
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedPublicKey.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedPublicKey.java
index e27190bc7..7f08d121e 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedPublicKey.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedPublicKey.java
@@ -32,6 +32,7 @@ import org.spongycastle.util.Strings;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.util.IterableIterator;
import org.sufficientlysecure.keychain.util.Log;
+import org.sufficientlysecure.keychain.util.Utf8Util;
import java.util.ArrayList;
import java.util.Arrays;
@@ -185,7 +186,7 @@ public class UncachedPublicKey {
}
}
if (found != null) {
- return Strings.fromUTF8ByteArray(found);
+ return Utf8Util.fromUTF8ByteArrayReplaceBadEncoding(found);
} else {
return null;
}
@@ -204,8 +205,9 @@ public class UncachedPublicKey {
public ArrayList<String> getUnorderedUserIds() {
ArrayList<String> userIds = new ArrayList<String>();
- for (String userId : new IterableIterator<String>(mPublicKey.getUserIDs())) {
- userIds.add(userId);
+ for (byte[] rawUserId : new IterableIterator<byte[]>(mPublicKey.getRawUserIDs())) {
+ // use our decoding method
+ userIds.add(Utf8Util.fromUTF8ByteArrayReplaceBadEncoding(rawUserId));
}
return userIds;
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java
index 0706edb2b..702da275a 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java
@@ -65,6 +65,7 @@ import org.sufficientlysecure.keychain.util.IterableIterator;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ProgressFixedScaler;
import org.sufficientlysecure.keychain.util.ProgressScaler;
+import org.sufficientlysecure.keychain.util.Utf8Util;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -437,8 +438,7 @@ public class ProviderHelper {
List<UserIdItem> uids = new ArrayList<UserIdItem>();
for (byte[] rawUserId : new IterableIterator<byte[]>(
masterKey.getUnorderedRawUserIds().iterator())) {
- String userId = Strings.fromUTF8ByteArray(rawUserId);
- Log.d(Constants.TAG, "userId: "+userId);
+ String userId = Utf8Util.fromUTF8ByteArrayReplaceBadEncoding(rawUserId);
UserIdItem item = new UserIdItem();
uids.add(item);
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java
index 2c2c9f488..19248dfa3 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java
@@ -651,27 +651,35 @@ public class KeychainIntentService extends IntentService implements Progressable
for (ImportKeysListEntry entry : entries) {
try {
Keyserver server;
- if (entry.getOrigin() == null) {
- server = new HkpKeyserver(keyServer);
- } else if (KeybaseKeyserver.ORIGIN.equals(entry.getOrigin())) {
- server = new KeybaseKeyserver();
- } else {
- server = new HkpKeyserver(entry.getOrigin());
+ ArrayList<String> origins = entry.getOrigins();
+ if (origins == null) {
+ origins = new ArrayList<String>();
}
-
- // if available use complete fingerprint for get request
- byte[] downloadedKeyBytes;
- if (KeybaseKeyserver.ORIGIN.equals(entry.getOrigin())) {
- downloadedKeyBytes = server.get(entry.getExtraData()).getBytes();
- } else if (entry.getFingerprintHex() != null) {
- downloadedKeyBytes = server.get("0x" + entry.getFingerprintHex()).getBytes();
- } else {
- downloadedKeyBytes = server.get(entry.getKeyIdHex()).getBytes();
+ if (origins.isEmpty()) {
+ origins.add(keyServer);
}
+ for (String origin : origins) {
+ if (KeybaseKeyserver.ORIGIN.equals(origin)) {
+ server = new KeybaseKeyserver();
+ } else {
+ server = new HkpKeyserver(origin);
+ }
+ Log.d(Constants.TAG, "IMPORTING " + entry.getKeyIdHex() + " FROM: " + server);
+
+ // if available use complete fingerprint for get request
+ byte[] downloadedKeyBytes;
+ if (KeybaseKeyserver.ORIGIN.equals(origin)) {
+ downloadedKeyBytes = server.get(entry.getExtraData()).getBytes();
+ } else if (entry.getFingerprintHex() != null) {
+ downloadedKeyBytes = server.get("0x" + entry.getFingerprintHex()).getBytes();
+ } else {
+ downloadedKeyBytes = server.get(entry.getKeyIdHex()).getBytes();
+ }
- // save key bytes in entry object for doing the
- // actual import afterwards
- keyRings.add(new ParcelableKeyRing(downloadedKeyBytes, entry.getFingerprintHex()));
+ // save key bytes in entry object for doing the
+ // actual import afterwards
+ keyRings.add(new ParcelableKeyRing(downloadedKeyBytes, entry.getFingerprintHex()));
+ }
} catch (Exception e) {
sendErrorToHandler(e);
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java
index dc9fa78e5..c6edc47a1 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java
@@ -204,7 +204,7 @@ public class CreateKeyFinalFragment extends Fragment {
Bundle data = new Bundle();
// upload to favorite keyserver
- String keyserver = Preferences.getPreferences(getActivity()).getKeyServers()[0];
+ String keyserver = Preferences.getPreferences(getActivity()).getPreferredKeyserver();
data.putString(KeychainIntentService.UPLOAD_KEY_SERVER, keyserver);
intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptActivity.java
index 998ed34cd..37382051b 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptActivity.java
@@ -1,6 +1,5 @@
/*
- * Copyright (C) 2012-2014 Dominik Schürmann <dominik@dominikschuermann.de>
- * Copyright (C) 2010-2014 Thialfihar <thi@thialfihar.org>
+ * Copyright (C) 2014 Dominik Schürmann <dominik@dominikschuermann.de>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -19,148 +18,40 @@
package org.sufficientlysecure.keychain.ui;
import android.content.Intent;
-import android.net.Uri;
import android.os.Bundle;
-import android.support.v4.view.PagerTabStrip;
-import android.support.v4.view.ViewPager;
+import android.view.View;
-import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
-import org.sufficientlysecure.keychain.api.OpenKeychainIntents;
-import org.sufficientlysecure.keychain.pgp.PgpHelper;
-import org.sufficientlysecure.keychain.ui.adapter.PagerTabStripAdapter;
-import org.sufficientlysecure.keychain.util.Log;
-
-import java.util.regex.Matcher;
public class DecryptActivity extends DrawerActivity {
- /* Intents */
- public static final String ACTION_DECRYPT = OpenKeychainIntents.DECRYPT;
-
- /* EXTRA keys for input */
- public static final String EXTRA_TEXT = OpenKeychainIntents.DECRYPT_EXTRA_TEXT;
-
- ViewPager mViewPager;
- PagerTabStrip mPagerTabStrip;
- PagerTabStripAdapter mTabsAdapter;
-
- Bundle mMessageFragmentBundle = new Bundle();
- Bundle mFileFragmentBundle = new Bundle();
- int mSwitchToTab = PAGER_TAB_MESSAGE;
-
- private static final int PAGER_TAB_MESSAGE = 0;
- private static final int PAGER_TAB_FILE = 1;
-
- private void initView() {
- mViewPager = (ViewPager) findViewById(R.id.decrypt_pager);
- mPagerTabStrip = (PagerTabStrip) findViewById(R.id.decrypt_pager_tab_strip);
-
- mTabsAdapter = new PagerTabStripAdapter(this);
- mViewPager.setAdapter(mTabsAdapter);
- }
-
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.decrypt_activity);
- initView();
-
activateDrawerNavigation(savedInstanceState);
- // Handle intent actions, maybe changes the bundles
- handleActions(getIntent());
+ View actionFile = findViewById(R.id.decrypt_files);
+ View actionFromClipboard = findViewById(R.id.decrypt_from_clipboard);
- mTabsAdapter.addTab(DecryptMessageFragment.class,
- mMessageFragmentBundle, getString(R.string.label_message));
- mTabsAdapter.addTab(DecryptFileFragment.class,
- mFileFragmentBundle, getString(R.string.label_file));
- mViewPager.setCurrentItem(mSwitchToTab);
- }
-
-
- /**
- * Handles all actions with this intent
- *
- * @param intent
- */
- private void handleActions(Intent intent) {
- String action = intent.getAction();
- Bundle extras = intent.getExtras();
- String type = intent.getType();
- Uri uri = intent.getData();
-
- if (extras == null) {
- extras = new Bundle();
- }
-
- /*
- * Android's Action
- */
- if (Intent.ACTION_SEND.equals(action) && type != null) {
- // When sending to Keychain Decrypt via share menu
- if ("text/plain".equals(type)) {
- // Plain text
- String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
- if (sharedText != null) {
- // handle like normal text decryption, override action and extras to later
- // executeServiceMethod ACTION_DECRYPT in main actions
- extras.putString(EXTRA_TEXT, sharedText);
- action = ACTION_DECRYPT;
- }
- } else {
- // Binary via content provider (could also be files)
- // override uri to get stream from send
- uri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
- action = ACTION_DECRYPT;
+ actionFile.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent filesDecrypt = new Intent(DecryptActivity.this, DecryptFilesActivity.class);
+ filesDecrypt.setAction(DecryptFilesActivity.ACTION_DECRYPT_DATA_OPEN);
+ startActivity(filesDecrypt);
}
- } else if (Intent.ACTION_VIEW.equals(action)) {
- // Android's Action when opening file associated to Keychain (see AndroidManifest.xml)
-
- // override action
- action = ACTION_DECRYPT;
- mFileFragmentBundle.putBoolean(DecryptFileFragment.ARG_FROM_VIEW_INTENT, true);
- }
-
- String textData = extras.getString(EXTRA_TEXT);
-
- /**
- * Main Actions
- */
- if (ACTION_DECRYPT.equals(action) && textData != null) {
- Log.d(Constants.TAG, "textData not null, matching text ...");
- Matcher matcher = PgpHelper.PGP_MESSAGE.matcher(textData);
- if (matcher.matches()) {
- Log.d(Constants.TAG, "PGP_MESSAGE matched");
- textData = matcher.group(1);
- // replace non breakable spaces
- textData = textData.replaceAll("\\xa0", " ");
-
- mMessageFragmentBundle.putString(DecryptMessageFragment.ARG_CIPHERTEXT, textData);
- mSwitchToTab = PAGER_TAB_MESSAGE;
- } else {
- matcher = PgpHelper.PGP_CLEARTEXT_SIGNATURE.matcher(textData);
- if (matcher.matches()) {
- Log.d(Constants.TAG, "PGP_CLEARTEXT_SIGNATURE matched");
- textData = matcher.group(1);
- // replace non breakable spaces
- textData = textData.replaceAll("\\xa0", " ");
-
- mMessageFragmentBundle.putString(DecryptMessageFragment.ARG_CIPHERTEXT, textData);
- mSwitchToTab = PAGER_TAB_MESSAGE;
- } else {
- Log.d(Constants.TAG, "Nothing matched!");
- }
+ });
+
+ actionFromClipboard.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent clipboardDecrypt = new Intent(DecryptActivity.this, DecryptTextActivity.class);
+ clipboardDecrypt.setAction(DecryptTextActivity.ACTION_DECRYPT_FROM_CLIPBOARD);
+ startActivity(clipboardDecrypt);
}
- } else if (ACTION_DECRYPT.equals(action) && uri != null) {
- mFileFragmentBundle.putParcelable(DecryptFileFragment.ARG_URI, uri);
- mSwitchToTab = PAGER_TAB_FILE;
- } else if (ACTION_DECRYPT.equals(action)) {
- Log.e(Constants.TAG,
- "Include the extra 'text' or an Uri with setData() in your Intent!");
- }
+ });
}
-
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesActivity.java
new file mode 100644
index 000000000..9d972d8c0
--- /dev/null
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesActivity.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2014 Dominik Schürmann <dominik@dominikschuermann.de>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.sufficientlysecure.keychain.ui;
+
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.v7.app.ActionBarActivity;
+
+import org.sufficientlysecure.keychain.Constants;
+import org.sufficientlysecure.keychain.R;
+import org.sufficientlysecure.keychain.api.OpenKeychainIntents;
+import org.sufficientlysecure.keychain.util.Log;
+
+public class DecryptFilesActivity extends ActionBarActivity {
+
+ /* Intents */
+ public static final String ACTION_DECRYPT_DATA = OpenKeychainIntents.DECRYPT_DATA;
+
+ // intern
+ public static final String ACTION_DECRYPT_DATA_OPEN = Constants.INTENT_PREFIX + "DECRYPT_DATA_OPEN";
+
+ DecryptFilesFragment mFragment;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.decrypt_files_activity);
+
+ // Handle intent actions
+ handleActions(savedInstanceState, getIntent());
+ }
+
+ /**
+ * Handles all actions with this intent
+ *
+ * @param intent
+ */
+ private void handleActions(Bundle savedInstanceState, Intent intent) {
+ String action = intent.getAction();
+ String type = intent.getType();
+ Uri uri = intent.getData();
+
+ Bundle mFileFragmentBundle = new Bundle();
+
+ /*
+ * Android's Action
+ */
+ if (Intent.ACTION_SEND.equals(action) && type != null) {
+ // When sending to Keychain Decrypt via share menu
+ // Binary via content provider (could also be files)
+ // override uri to get stream from send
+ uri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
+ action = ACTION_DECRYPT_DATA;
+ } else if (Intent.ACTION_VIEW.equals(action)) {
+ // Android's Action when opening file associated to Keychain (see AndroidManifest.xml)
+
+ // override action
+ action = ACTION_DECRYPT_DATA;
+ }
+
+ /**
+ * Main Actions
+ */
+ if (ACTION_DECRYPT_DATA.equals(action) && uri != null) {
+ mFileFragmentBundle.putParcelable(DecryptFilesFragment.ARG_URI, uri);
+
+ loadFragment(savedInstanceState, uri, false);
+ } else if (ACTION_DECRYPT_DATA_OPEN.equals(action)) {
+ loadFragment(savedInstanceState, null, true);
+ } else if (ACTION_DECRYPT_DATA.equals(action)) {
+ Log.e(Constants.TAG,
+ "Include an Uri with setData() in your Intent!");
+ }
+ }
+
+ private void loadFragment(Bundle savedInstanceState, Uri uri, boolean openDialog) {
+ // However, if we're being restored from a previous state,
+ // then we don't need to do anything and should return or else
+ // we could end up with overlapping fragments.
+ if (savedInstanceState != null) {
+ return;
+ }
+
+ // Create an instance of the fragment
+ mFragment = DecryptFilesFragment.newInstance(uri, openDialog);
+
+ // Add the fragment to the 'fragment_container' FrameLayout
+ // NOTE: We use commitAllowingStateLoss() to prevent weird crashes!
+ getSupportFragmentManager().beginTransaction()
+ .replace(R.id.decrypt_files_fragment_container, mFragment)
+ .commitAllowingStateLoss();
+ // do it immediately!
+ getSupportFragmentManager().executePendingTransactions();
+ }
+
+}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFileFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesFragment.java
index 924c5bec2..f5d6eba1b 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFileFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesFragment.java
@@ -46,9 +46,10 @@ import org.sufficientlysecure.keychain.util.Notify;
import java.io.File;
-public class DecryptFileFragment extends DecryptFragment {
+public class DecryptFilesFragment extends DecryptFragment {
public static final String ARG_URI = "uri";
- public static final String ARG_FROM_VIEW_INTENT = "view_intent";
+// public static final String ARG_FROM_VIEW_INTENT = "view_intent";
+ public static final String ARG_OPEN_DIRECTLY = "open_directly";
private static final int REQUEST_CODE_INPUT = 0x00007003;
private static final int REQUEST_CODE_OUTPUT = 0x00007007;
@@ -63,6 +64,22 @@ public class DecryptFileFragment extends DecryptFragment {
private Uri mOutputUri = null;
/**
+ * Creates new instance of this fragment
+ */
+ public static DecryptFilesFragment newInstance(Uri uri, boolean openDirectly) {
+ DecryptFilesFragment frag = new DecryptFilesFragment();
+
+ Bundle args = new Bundle();
+ args.putParcelable(ARG_URI, uri);
+// args.putBoolean(ARG_FROM_VIEW_INTENT, fromViewIntent);
+ args.putBoolean(ARG_OPEN_DIRECTLY, openDirectly);
+
+ frag.setArguments(args);
+
+ return frag;
+ }
+
+ /**
* Inflate the layout for this fragment
*/
@Override
@@ -75,9 +92,9 @@ public class DecryptFileFragment extends DecryptFragment {
view.findViewById(R.id.decrypt_file_browse).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- FileHelper.openDocument(DecryptFileFragment.this, "*/*", REQUEST_CODE_INPUT);
+ FileHelper.openDocument(DecryptFilesFragment.this, "*/*", REQUEST_CODE_INPUT);
} else {
- FileHelper.openFile(DecryptFileFragment.this, mInputUri, "*/*",
+ FileHelper.openFile(DecryptFilesFragment.this, mInputUri, "*/*",
REQUEST_CODE_INPUT);
}
}
@@ -97,6 +114,15 @@ public class DecryptFileFragment extends DecryptFragment {
super.onActivityCreated(savedInstanceState);
setInputUri(getArguments().<Uri>getParcelable(ARG_URI));
+
+ if (getArguments().getBoolean(ARG_OPEN_DIRECTLY, false)) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ FileHelper.openDocument(DecryptFilesFragment.this, "*/*", REQUEST_CODE_INPUT);
+ } else {
+ FileHelper.openFile(DecryptFilesFragment.this, mInputUri, "*/*",
+ REQUEST_CODE_INPUT);
+ }
+ }
}
private void setInputUri(Uri inputUri) {
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextActivity.java
new file mode 100644
index 000000000..5d46b351b
--- /dev/null
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextActivity.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2012-2014 Dominik Schürmann <dominik@dominikschuermann.de>
+ * Copyright (C) 2010-2014 Thialfihar <thi@thialfihar.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.sufficientlysecure.keychain.ui;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.app.ActionBarActivity;
+
+import org.sufficientlysecure.keychain.Constants;
+import org.sufficientlysecure.keychain.R;
+import org.sufficientlysecure.keychain.api.OpenKeychainIntents;
+import org.sufficientlysecure.keychain.compatibility.ClipboardReflection;
+import org.sufficientlysecure.keychain.pgp.PgpHelper;
+import org.sufficientlysecure.keychain.util.Log;
+import org.sufficientlysecure.keychain.util.Notify;
+
+import java.util.regex.Matcher;
+
+public class DecryptTextActivity extends ActionBarActivity {
+
+ /* Intents */
+ public static final String ACTION_DECRYPT_TEXT = OpenKeychainIntents.DECRYPT_TEXT;
+ public static final String EXTRA_TEXT = OpenKeychainIntents.DECRYPT_EXTRA_TEXT;
+
+ // intern
+ public static final String ACTION_DECRYPT_FROM_CLIPBOARD = Constants.INTENT_PREFIX + "DECRYPT_TEXT_FROM_CLIPBOARD";
+
+ DecryptTextFragment mFragment;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.decrypt_text_activity);
+
+ // Handle intent actions
+ handleActions(savedInstanceState, getIntent());
+ }
+
+ /**
+ * Handles all actions with this intent
+ *
+ * @param intent
+ */
+ private void handleActions(Bundle savedInstanceState, Intent intent) {
+ String action = intent.getAction();
+ Bundle extras = intent.getExtras();
+ String type = intent.getType();
+
+ if (extras == null) {
+ extras = new Bundle();
+ }
+
+ String textData = null;
+
+ /*
+ * Android's Action
+ */
+ if (Intent.ACTION_SEND.equals(action) && type != null) {
+ // When sending to Keychain Decrypt via share menu
+ if ("text/plain".equals(type)) {
+ // Plain text
+ String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
+ if (sharedText != null) {
+ // handle like normal text decryption, override action and extras to later
+ // executeServiceMethod ACTION_DECRYPT_TEXT in main actions
+ textData = sharedText;
+ }
+ }
+ }
+
+ /**
+ * Main Actions
+ */
+ textData = extras.getString(EXTRA_TEXT);
+ if (ACTION_DECRYPT_TEXT.equals(action) && textData != null) {
+ Log.d(Constants.TAG, "textData not null, matching text ...");
+ Matcher matcher = PgpHelper.PGP_MESSAGE.matcher(textData);
+ if (matcher.matches()) {
+ Log.d(Constants.TAG, "PGP_MESSAGE matched");
+ textData = matcher.group(1);
+ // replace non breakable spaces
+ textData = textData.replaceAll("\\xa0", " ");
+ } else {
+ matcher = PgpHelper.PGP_CLEARTEXT_SIGNATURE.matcher(textData);
+ if (matcher.matches()) {
+ Log.d(Constants.TAG, "PGP_CLEARTEXT_SIGNATURE matched");
+ textData = matcher.group(1);
+ // replace non breakable spaces
+ textData = textData.replaceAll("\\xa0", " ");
+ } else {
+ Notify.showNotify(this, R.string.error_invalid_data, Notify.Style.ERROR);
+ Log.d(Constants.TAG, "Nothing matched!");
+ }
+ }
+ } else if (ACTION_DECRYPT_FROM_CLIPBOARD.equals(action)) {
+ CharSequence clipboardText = ClipboardReflection.getClipboardText(this);
+
+ // only decrypt if clipboard content is available and a pgp message or cleartext signature
+ if (clipboardText != null) {
+ Matcher matcher = PgpHelper.PGP_MESSAGE.matcher(clipboardText);
+ if (!matcher.matches()) {
+ matcher = PgpHelper.PGP_CLEARTEXT_SIGNATURE.matcher(clipboardText);
+ }
+ if (matcher.matches()) {
+ textData = matcher.group(1);
+ } else {
+ Notify.showNotify(this, R.string.error_invalid_data, Notify.Style.ERROR);
+ }
+ } else {
+ Notify.showNotify(this, R.string.error_invalid_data, Notify.Style.ERROR);
+ }
+ } else if (ACTION_DECRYPT_TEXT.equals(action)) {
+ Log.e(Constants.TAG,
+ "Include the extra 'text' in your Intent!");
+ }
+
+ loadFragment(savedInstanceState, textData);
+ }
+
+
+ private void loadFragment(Bundle savedInstanceState, String ciphertext) {
+ // However, if we're being restored from a previous state,
+ // then we don't need to do anything and should return or else
+ // we could end up with overlapping fragments.
+ if (savedInstanceState != null) {
+ return;
+ }
+
+ // Create an instance of the fragment
+ mFragment = DecryptTextFragment.newInstance(ciphertext);
+
+ // Add the fragment to the 'fragment_container' FrameLayout
+ // NOTE: We use commitAllowingStateLoss() to prevent weird crashes!
+ getSupportFragmentManager().beginTransaction()
+ .replace(R.id.decrypt_text_fragment_container, mFragment)
+ .commitAllowingStateLoss();
+ // do it immediately!
+ getSupportFragmentManager().executePendingTransactions();
+ }
+
+}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptMessageFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextFragment.java
index 66ed563d9..c1bc563f8 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptMessageFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextFragment.java
@@ -24,62 +24,70 @@ import android.os.Message;
import android.os.Messenger;
import android.view.LayoutInflater;
import android.view.View;
-import android.view.View.OnClickListener;
import android.view.ViewGroup;
-import android.widget.EditText;
+import android.widget.TextView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
-import org.sufficientlysecure.keychain.compatibility.ClipboardReflection;
-import org.sufficientlysecure.keychain.service.results.DecryptVerifyResult;
-import org.sufficientlysecure.keychain.pgp.PgpHelper;
import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
+import org.sufficientlysecure.keychain.service.results.DecryptVerifyResult;
import org.sufficientlysecure.keychain.util.Log;
-import org.sufficientlysecure.keychain.util.Notify;
-
-import java.util.regex.Matcher;
-public class DecryptMessageFragment extends DecryptFragment {
+public class DecryptTextFragment extends DecryptFragment {
public static final String ARG_CIPHERTEXT = "ciphertext";
- // view
- private EditText mMessage;
- private View mDecryptButton;
- private View mDecryptFromCLipboardButton;
-
- // model
+// // view
+ private TextView mMessage;
+// private View mDecryptButton;
+// private View mDecryptFromCLipboardButton;
+//
+// // model
private String mCiphertext;
/**
+ * Creates new instance of this fragment
+ */
+ public static DecryptTextFragment newInstance(String ciphertext) {
+ DecryptTextFragment frag = new DecryptTextFragment();
+
+ Bundle args = new Bundle();
+ args.putString(ARG_CIPHERTEXT, ciphertext);
+
+ frag.setArguments(args);
+
+ return frag;
+ }
+
+ /**
* Inflate the layout for this fragment
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.decrypt_message_fragment, container, false);
-
- mMessage = (EditText) view.findViewById(R.id.message);
- mDecryptButton = view.findViewById(R.id.action_decrypt);
- mDecryptFromCLipboardButton = view.findViewById(R.id.action_decrypt_from_clipboard);
- mDecryptButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- decryptClicked();
- }
- });
- mDecryptFromCLipboardButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- decryptFromClipboardClicked();
- }
- });
+ View view = inflater.inflate(R.layout.decrypt_text_fragment, container, false);
+
+ mMessage = (TextView) view.findViewById(R.id.decrypt_text_plaintext);
+// mDecryptButton = view.findViewById(R.id.action_decrypt);
+// mDecryptFromCLipboardButton = view.findViewById(R.id.action_decrypt_from_clipboard);
+// mDecryptButton.setOnClickListener(new OnClickListener() {
+// @Override
+// public void onClick(View v) {
+// decryptClicked();
+// }
+// });
+// mDecryptFromCLipboardButton.setOnClickListener(new OnClickListener() {
+// @Override
+// public void onClick(View v) {
+// decryptFromClipboardClicked();
+// }
+// });
return view;
}
@Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
String ciphertext = getArguments().getString(ARG_CIPHERTEXT);
if (ciphertext != null) {
@@ -88,31 +96,6 @@ public class DecryptMessageFragment extends DecryptFragment {
}
}
- private void decryptClicked() {
- mCiphertext = mMessage.getText().toString();
- decryptStart(null);
- }
-
- private void decryptFromClipboardClicked() {
- CharSequence clipboardText = ClipboardReflection.getClipboardText(getActivity());
-
- // only decrypt if clipboard content is available and a pgp message or cleartext signature
- if (clipboardText != null) {
- Matcher matcher = PgpHelper.PGP_MESSAGE.matcher(clipboardText);
- if (!matcher.matches()) {
- matcher = PgpHelper.PGP_CLEARTEXT_SIGNATURE.matcher(clipboardText);
- }
- if (matcher.matches()) {
- mCiphertext = matcher.group(1);
- decryptStart(null);
- } else {
- Notify.showNotify(getActivity(), R.string.error_invalid_data, Notify.Style.ERROR);
- }
- } else {
- Notify.showNotify(getActivity(), R.string.error_invalid_data, Notify.Style.ERROR);
- }
- }
-
@Override
protected void decryptStart(String passphrase) {
Log.d(Constants.TAG, "decryptStart");
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 d644dabc2..518a8046a 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java
@@ -68,8 +68,6 @@ public class ImportKeysActivity extends ActionBarActivity {
+ "IMPORT_KEY_FROM_KEY_SERVER_AND_RETURN";
public static final String ACTION_IMPORT_KEY_FROM_FILE_AND_RETURN = Constants.INTENT_PREFIX
+ "IMPORT_KEY_FROM_FILE_AND_RETURN";
- public static final String ACTION_IMPORT_KEY_FROM_KEYBASE = Constants.INTENT_PREFIX
- + "IMPORT_KEY_FROM_KEYBASE";
// Actions for internal use only:
public static final String ACTION_IMPORT_KEY_FROM_FILE = Constants.INTENT_PREFIX
@@ -101,12 +99,11 @@ public class ImportKeysActivity extends ActionBarActivity {
public static final int VIEW_PAGER_HEIGHT = 64; // dp
private static final int ALL_TABS = -1;
- private static final int TAB_KEYSERVER = 0;
+ private static final int TAB_CLOUD = 0;
private static final int TAB_QR_CODE = 1;
private static final int TAB_FILE = 2;
- private static final int TAB_KEYBASE = 3;
- private int mSwitchToTab = TAB_KEYSERVER;
+ private int mSwitchToTab = TAB_CLOUD;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -193,8 +190,8 @@ public class ImportKeysActivity extends ActionBarActivity {
if (query != null && query.length() > 0) {
// display keyserver fragment with query
serverBundle = new Bundle();
- serverBundle.putString(ImportKeysServerFragment.ARG_QUERY, query);
- mSwitchToTab = TAB_KEYSERVER;
+ serverBundle.putString(ImportKeysCloudFragment.ARG_QUERY, query);
+ mSwitchToTab = TAB_CLOUD;
// action: search immediately
startListFragment(savedInstanceState, null, null, query);
@@ -214,11 +211,11 @@ public class ImportKeysActivity extends ActionBarActivity {
// display keyserver fragment with query
serverBundle = new Bundle();
- serverBundle.putString(ImportKeysServerFragment.ARG_QUERY, query);
- serverBundle.putBoolean(ImportKeysServerFragment.ARG_DISABLE_QUERY_EDIT, true);
+ serverBundle.putString(ImportKeysCloudFragment.ARG_QUERY, query);
+ serverBundle.putBoolean(ImportKeysCloudFragment.ARG_DISABLE_QUERY_EDIT, true);
// display server tab only
- showTabOnly = TAB_KEYSERVER;
- mSwitchToTab = TAB_KEYSERVER;
+ showTabOnly = TAB_CLOUD;
+ mSwitchToTab = TAB_CLOUD;
// action: search immediately
startListFragment(savedInstanceState, null, null, query);
@@ -259,12 +256,6 @@ public class ImportKeysActivity extends ActionBarActivity {
// no immediate actions!
startListFragment(savedInstanceState, null, null, null);
- } else if (ACTION_IMPORT_KEY_FROM_KEYBASE.equals(action)) {
- // NOTE: this only displays the appropriate fragment, no actions are taken
- mSwitchToTab = TAB_KEYBASE;
-
- // no immediate actions!
- startListFragment(savedInstanceState, null, null, null);
} else {
startListFragment(savedInstanceState, null, null, null);
}
@@ -299,19 +290,17 @@ public class ImportKeysActivity extends ActionBarActivity {
switch (showTabOnly) {
case ALL_TABS:
- // show all tabs
- mTabsAdapter.addTab(ImportKeysServerFragment.class,
- serverBundle, getString(R.string.import_tab_keyserver));
+ // show default tabs
+ mTabsAdapter.addTab(ImportKeysCloudFragment.class,
+ serverBundle, getString(R.string.import_tab_cloud));
mTabsAdapter.addTab(ImportKeysQrCodeFragment.class,
null, getString(R.string.import_tab_qr_code));
mTabsAdapter.addTab(ImportKeysFileFragment.class,
null, getString(R.string.import_tab_direct));
- mTabsAdapter.addTab(ImportKeysKeybaseFragment.class,
- null, getString(R.string.import_tab_keybase));
break;
- case TAB_KEYSERVER:
- mTabsAdapter.addTab(ImportKeysServerFragment.class,
- serverBundle, getString(R.string.import_tab_keyserver));
+ case TAB_CLOUD:
+ mTabsAdapter.addTab(ImportKeysCloudFragment.class,
+ serverBundle, getString(R.string.import_tab_cloud));
break;
case TAB_QR_CODE:
mTabsAdapter.addTab(ImportKeysQrCodeFragment.class,
@@ -321,10 +310,6 @@ public class ImportKeysActivity extends ActionBarActivity {
mTabsAdapter.addTab(ImportKeysFileFragment.class,
null, getString(R.string.import_tab_direct));
break;
- case TAB_KEYBASE:
- mTabsAdapter.addTab(ImportKeysKeybaseFragment.class,
- null, getString(R.string.import_tab_keybase));
- break;
}
// update layout after operations
@@ -380,18 +365,17 @@ public class ImportKeysActivity extends ActionBarActivity {
if (mViewPager.getAdapter() != null)
mViewPager.setAdapter(null);
mViewPager.setAdapter(mTabsAdapter);
- mViewPager.setCurrentItem(TAB_KEYSERVER);
+ mViewPager.setCurrentItem(TAB_CLOUD);
- ImportKeysServerFragment f = (ImportKeysServerFragment)
- getActiveFragment(mViewPager, TAB_KEYSERVER);
+ ImportKeysCloudFragment f = (ImportKeysCloudFragment)
+ getActiveFragment(mViewPager, TAB_CLOUD);
- // ask favorite keyserver
- String keyserver = Preferences.getPreferences(ImportKeysActivity.this).getKeyServers()[0];
+ // search config
+ Preferences prefs = Preferences.getPreferences(ImportKeysActivity.this);
+ Preferences.CloudSearchPrefs cloudPrefs = new Preferences.CloudSearchPrefs(true, true, prefs.getPreferredKeyserver());
- // set fields of ImportKeysServerFragment
- f.setQueryAndKeyserver(query, keyserver);
// search directly
- loadCallback(new ImportKeysListFragment.KeyserverLoaderState(query, keyserver));
+ loadCallback(new ImportKeysListFragment.CloudLoaderState(query, cloudPrefs));
}
// http://stackoverflow.com/a/9293207
@@ -522,8 +506,8 @@ public class ImportKeysActivity extends ActionBarActivity {
Log.e(Constants.TAG, "Problem writing cache file", e);
Notify.showNotify(this, "Problem writing cache file!", Notify.Style.ERROR);
}
- } else if (ls instanceof ImportKeysListFragment.KeyserverLoaderState) {
- ImportKeysListFragment.KeyserverLoaderState sls = (ImportKeysListFragment.KeyserverLoaderState) ls;
+ } else if (ls instanceof ImportKeysListFragment.CloudLoaderState) {
+ ImportKeysListFragment.CloudLoaderState sls = (ImportKeysListFragment.CloudLoaderState) ls;
// Send all information needed to service to query keys in other thread
Intent intent = new Intent(this, KeychainIntentService.class);
@@ -533,31 +517,7 @@ public class ImportKeysActivity extends ActionBarActivity {
// fill values for this action
Bundle data = new Bundle();
- data.putString(KeychainIntentService.DOWNLOAD_KEY_SERVER, sls.keyserver);
-
- // get selected key entries
- ArrayList<ImportKeysListEntry> selectedEntries = mListFragment.getSelectedEntries();
- data.putParcelableArrayList(KeychainIntentService.DOWNLOAD_KEY_LIST, selectedEntries);
-
- intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
-
- // Create a new Messenger for the communication back
- Messenger messenger = new Messenger(saveHandler);
- intent.putExtra(KeychainIntentService.EXTRA_MESSENGER, messenger);
-
- // show progress dialog
- saveHandler.showProgressDialog(this);
-
- // start service with intent
- startService(intent);
- } 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);
-
- intent.setAction(KeychainIntentService.ACTION_IMPORT_KEYBASE_KEYS);
-
- // fill values for this action
- Bundle data = new Bundle();
+ data.putString(KeychainIntentService.DOWNLOAD_KEY_SERVER, sls.mCloudPrefs.keyserver);
// get selected key entries
ArrayList<ImportKeysListEntry> selectedEntries = mListFragment.getSelectedEntries();
@@ -574,7 +534,6 @@ public class ImportKeysActivity extends ActionBarActivity {
// start service with intent
startService(intent);
-
} else {
Notify.showNotify(this, R.string.error_nothing_import, Notify.Style.ERROR);
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysServerFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysCloudFragment.java
index 88caebc32..6b4b833c6 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysServerFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysCloudFragment.java
@@ -19,6 +19,7 @@ package org.sufficientlysecure.keychain.ui;
import android.app.Activity;
import android.content.Context;
+import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.KeyEvent;
@@ -30,8 +31,6 @@ import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
-import android.widget.EditText;
-import android.widget.Spinner;
import android.widget.TextView;
import org.sufficientlysecure.keychain.Constants;
@@ -42,9 +41,8 @@ import org.sufficientlysecure.keychain.util.Log;
import java.util.List;
-public class ImportKeysServerFragment extends Fragment {
+public class ImportKeysCloudFragment extends Fragment {
public static final String ARG_QUERY = "query";
- public static final String ARG_KEYSERVER = "keyserver";
public static final String ARG_DISABLE_QUERY_EDIT = "disable_query_edit";
private ImportKeysActivity mImportActivity;
@@ -52,19 +50,16 @@ public class ImportKeysServerFragment extends Fragment {
private View mSearchButton;
private AutoCompleteTextView mQueryEditText;
private View mConfigButton;
- private View mConfigLayout;
- private Spinner mServerSpinner;
private ArrayAdapter<String> mServerAdapter;
/**
* Creates new instance of this fragment
*/
- public static ImportKeysServerFragment newInstance(String query, String keyserver) {
- ImportKeysServerFragment frag = new ImportKeysServerFragment();
+ public static ImportKeysCloudFragment newInstance(String query, String keyserver, boolean doKeyserver, boolean doKeybase) {
+ ImportKeysCloudFragment frag = new ImportKeysCloudFragment();
Bundle args = new Bundle();
args.putString(ARG_QUERY, query);
- args.putString(ARG_KEYSERVER, keyserver);
frag.setArguments(args);
@@ -76,26 +71,11 @@ public class ImportKeysServerFragment extends Fragment {
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.import_keys_server_fragment, container, false);
-
- mSearchButton = view.findViewById(R.id.import_server_search);
- mQueryEditText = (AutoCompleteTextView) view.findViewById(R.id.import_server_query);
- mConfigButton = view.findViewById(R.id.import_server_config_button);
- mConfigLayout = view.findViewById(R.id.import_server_config);
- mServerSpinner = (Spinner) view.findViewById(R.id.import_server_spinner);
-
- // add keyservers to spinner
- mServerAdapter = new ArrayAdapter<String>(getActivity(),
- android.R.layout.simple_spinner_item, Preferences.getPreferences(getActivity())
- .getKeyServers()
- );
- mServerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- mServerSpinner.setAdapter(mServerAdapter);
- if (mServerAdapter.getCount() > 0) {
- mServerSpinner.setSelection(0);
- } else {
- mSearchButton.setEnabled(false);
- }
+ 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()));
@@ -110,9 +90,7 @@ public class ImportKeysServerFragment extends Fragment {
mSearchButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
- String query = mQueryEditText.getText().toString();
- String keyServer = (String) mServerSpinner.getSelectedItem();
- search(query, keyServer);
+ search(mQueryEditText.getText().toString());
// close keyboard after pressing search
InputMethodManager imm =
@@ -125,9 +103,7 @@ public class ImportKeysServerFragment extends Fragment {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
- String query = mQueryEditText.getText().toString();
- String keyServer = (String) mServerSpinner.getSelectedItem();
- search(query, keyServer);
+ search(mQueryEditText.getText().toString());
// Don't return true to let the keyboard close itself after pressing search
return false;
@@ -139,11 +115,11 @@ public class ImportKeysServerFragment extends Fragment {
mConfigButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
- if (mImportActivity.getViewPagerHeight() > ImportKeysActivity.VIEW_PAGER_HEIGHT) {
- mImportActivity.resizeViewPager(ImportKeysActivity.VIEW_PAGER_HEIGHT);
- } else {
- mImportActivity.resizeViewPager(ImportKeysActivity.VIEW_PAGER_HEIGHT + 41);
- }
+ Intent i = new Intent(mImportActivity, PreferencesActivity.class);
+ // GRR, for some reason I can’t set the Action or I get an incomprehensible
+ // exception about “modern two-pane layouts”
+ // i.setAction(PreferencesActivity.ACTION_PREFS_CLOUD);
+ startActivity(i);
}
});
@@ -163,14 +139,6 @@ public class ImportKeysServerFragment extends Fragment {
Log.d(Constants.TAG, "query: " + query);
}
- if (getArguments().containsKey(ARG_KEYSERVER)) {
- String keyserver = getArguments().getString(ARG_KEYSERVER);
- int keyserverPos = mServerAdapter.getPosition(keyserver);
- mServerSpinner.setSelection(keyserverPos);
-
- Log.d(Constants.TAG, "keyserver: " + keyserver);
- }
-
if (getArguments().getBoolean(ARG_DISABLE_QUERY_EDIT, false)) {
mQueryEditText.setEnabled(false);
}
@@ -184,14 +152,9 @@ public class ImportKeysServerFragment extends Fragment {
mImportActivity = (ImportKeysActivity) activity;
}
- private void search(String query, String keyserver) {
- mImportActivity.loadCallback(new ImportKeysListFragment.KeyserverLoaderState(query, keyserver));
- }
-
- public void setQueryAndKeyserver(String query, String keyserver) {
- mQueryEditText.setText(query, TextView.BufferType.EDITABLE);
- int keyServerPos = mServerAdapter.getPosition(keyserver);
- mServerSpinner.setSelection(keyServerPos);
+ private void search(String query) {
+ Preferences prefs = Preferences.getPreferences(getActivity());
+ mImportActivity.loadCallback(new ImportKeysListFragment.CloudLoaderState(query, prefs.getCloudSearchPrefs()));
}
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysKeybaseFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysKeybaseFragment.java
deleted file mode 100644
index 3a82bdc32..000000000
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysKeybaseFragment.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2014 Dominik Schürmann <dominik@dominikschuermann.de>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package org.sufficientlysecure.keychain.ui;
-
-import android.app.Activity;
-import android.content.Context;
-import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.inputmethod.EditorInfo;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.EditText;
-import android.widget.TextView;
-
-import org.sufficientlysecure.keychain.R;
-
-/**
- * Import public keys from the Keybase.io directory. First cut: just raw search.
- * TODO: make a pick list of the people you’re following on keybase
- */
-public class ImportKeysKeybaseFragment extends Fragment {
-
- private ImportKeysActivity mImportActivity;
- private View mSearchButton;
- private EditText mQueryEditText;
-
- public static final String ARG_QUERY = "query";
-
- /**
- * Creates new instance of this fragment
- */
- public static ImportKeysKeybaseFragment newInstance() {
- ImportKeysKeybaseFragment frag = new ImportKeysKeybaseFragment();
-
- Bundle args = new Bundle();
- frag.setArguments(args);
-
- return frag;
- }
-
- /**
- * Inflate the layout for this fragment
- */
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.import_keys_keybase_fragment, container, false);
-
- mQueryEditText = (EditText) view.findViewById(R.id.import_keybase_query);
-
- mSearchButton = view.findViewById(R.id.import_keybase_search);
- mSearchButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- String query = mQueryEditText.getText().toString();
- search(query);
-
- // close keyboard after pressing search
- InputMethodManager imm =
- (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.hideSoftInputFromWindow(mQueryEditText.getWindowToken(), 0);
- }
- });
-
- mQueryEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
- @Override
- public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
- if (actionId == EditorInfo.IME_ACTION_SEARCH) {
- String query = mQueryEditText.getText().toString();
- search(query);
-
- // Don't return true to let the keyboard close itself after pressing search
- return false;
- }
- return false;
- }
- });
-
- return view;
- }
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
-
- // set displayed values
- if (getArguments() != null) {
- if (getArguments().containsKey(ARG_QUERY)) {
- String query = getArguments().getString(ARG_QUERY);
- mQueryEditText.setText(query, TextView.BufferType.EDITABLE);
- }
- }
- }
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
-
- mImportActivity = (ImportKeysActivity) activity;
- }
-
- private void search(String 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 fde0f5f23..f1f234461 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java
@@ -37,9 +37,8 @@ import org.sufficientlysecure.keychain.keyimport.Keyserver;
import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing;
import org.sufficientlysecure.keychain.ui.adapter.AsyncTaskResultWrapper;
import org.sufficientlysecure.keychain.ui.adapter.ImportKeysAdapter;
-import org.sufficientlysecure.keychain.ui.adapter.ImportKeysListKeybaseLoader;
+import org.sufficientlysecure.keychain.ui.adapter.ImportKeysListCloudLoader;
import org.sufficientlysecure.keychain.ui.adapter.ImportKeysListLoader;
-import org.sufficientlysecure.keychain.ui.adapter.ImportKeysListServerLoader;
import org.sufficientlysecure.keychain.util.InputData;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Notify;
@@ -63,8 +62,7 @@ public class ImportKeysListFragment extends ListFragment implements
private LoaderState mLoaderState;
private static final int LOADER_ID_BYTES = 0;
- private static final int LOADER_ID_SERVER_QUERY = 1;
- private static final int LOADER_ID_KEYBASE = 2;
+ private static final int LOADER_ID_CLOUD = 1;
private LongSparseArray<ParcelableKeyRing> mCachedKeyData;
@@ -118,21 +116,13 @@ public class ImportKeysListFragment extends ListFragment implements
}
}
- static public class KeyserverLoaderState extends LoaderState {
- String serverQuery;
- String keyserver;
+ static public class CloudLoaderState extends LoaderState {
+ Preferences.CloudSearchPrefs mCloudPrefs;
+ String mServerQuery;
- 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;
+ CloudLoaderState(String serverQuery, Preferences.CloudSearchPrefs cloudPrefs) {
+ mServerQuery = serverQuery;
+ mCloudPrefs = cloudPrefs;
}
}
@@ -161,9 +151,8 @@ public class ImportKeysListFragment extends ListFragment implements
} else if (query != null) {
// TODO: this is used when updating a key.
// Currently it simply uses keyserver nr 0
- String keyserver = Preferences.getPreferences(getActivity())
- .getKeyServers()[0];
- mLoaderState = new KeyserverLoaderState(query, keyserver);
+ Preferences prefs = Preferences.getPreferences(getActivity());
+ mLoaderState = new CloudLoaderState(query, prefs.getCloudSearchPrefs());
}
getListView().setOnTouchListener(new OnTouchListener() {
@@ -202,11 +191,8 @@ public class ImportKeysListFragment extends ListFragment implements
if (getLoaderManager().getLoader(LOADER_ID_BYTES) != null) {
getLoaderManager().destroyLoader(LOADER_ID_BYTES);
}
- if (getLoaderManager().getLoader(LOADER_ID_SERVER_QUERY) != null) {
- getLoaderManager().destroyLoader(LOADER_ID_SERVER_QUERY);
- }
- if (getLoaderManager().getLoader(LOADER_ID_KEYBASE) != null) {
- getLoaderManager().destroyLoader(LOADER_ID_KEYBASE);
+ if (getLoaderManager().getLoader(LOADER_ID_CLOUD) != null) {
+ getLoaderManager().destroyLoader(LOADER_ID_CLOUD);
}
if (getView() != null) {
setListShown(true);
@@ -219,16 +205,11 @@ public class ImportKeysListFragment extends ListFragment implements
setListShown(false);
getLoaderManager().restartLoader(LOADER_ID_BYTES, null, this);
- } else if (mLoaderState instanceof KeyserverLoaderState) {
- // Start out with a progress indicator.
- setListShown(false);
-
- getLoaderManager().restartLoader(LOADER_ID_SERVER_QUERY, null, this);
- } else if (mLoaderState instanceof KeybaseLoaderState) {
+ } else if (mLoaderState instanceof CloudLoaderState) {
// Start out with a progress indicator.
setListShown(false);
- getLoaderManager().restartLoader(LOADER_ID_KEYBASE, null, this);
+ getLoaderManager().restartLoader(LOADER_ID_CLOUD, null, this);
}
}
@@ -241,13 +222,9 @@ public class ImportKeysListFragment extends ListFragment implements
InputData inputData = getInputData(ls.keyBytes, ls.dataUri);
return new ImportKeysListLoader(mActivity, inputData);
}
- case LOADER_ID_SERVER_QUERY: {
- KeyserverLoaderState ls = (KeyserverLoaderState) mLoaderState;
- return new ImportKeysListServerLoader(getActivity(), ls.serverQuery, ls.keyserver);
- }
- case LOADER_ID_KEYBASE: {
- KeybaseLoaderState ls = (KeybaseLoaderState) mLoaderState;
- return new ImportKeysListKeybaseLoader(getActivity(), ls.keybaseQuery);
+ case LOADER_ID_CLOUD: {
+ CloudLoaderState ls = (CloudLoaderState) mLoaderState;
+ return new ImportKeysListCloudLoader(getActivity(), ls.mServerQuery, ls.mCloudPrefs);
}
default:
@@ -301,8 +278,7 @@ public class ImportKeysListFragment extends ListFragment implements
}
break;
- case LOADER_ID_SERVER_QUERY:
- case LOADER_ID_KEYBASE:
+ case LOADER_ID_CLOUD:
if (error == null) {
// No error
@@ -333,11 +309,7 @@ public class ImportKeysListFragment extends ListFragment implements
// Clear the data in the adapter.
mAdapter.clear();
break;
- case LOADER_ID_SERVER_QUERY:
- // Clear the data in the adapter.
- mAdapter.clear();
- break;
- case LOADER_ID_KEYBASE:
+ case LOADER_ID_CLOUD:
// Clear the data in the adapter.
mAdapter.clear();
break;
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PreferencesActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PreferencesActivity.java
index 1221966e1..dd4fedf9d 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PreferencesActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PreferencesActivity.java
@@ -18,6 +18,7 @@
package org.sufficientlysecure.keychain.ui;
import android.annotation.SuppressLint;
+import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
@@ -40,7 +41,7 @@ import java.util.List;
@SuppressLint("NewApi")
public class PreferencesActivity extends PreferenceActivity {
- public static final String ACTION_PREFS_GEN = "org.sufficientlysecure.keychain.ui.PREFS_GEN";
+ public static final String ACTION_PREFS_CLOUD = "org.sufficientlysecure.keychain.ui.PREFS_CLOUD";
public static final String ACTION_PREFS_ADV = "org.sufficientlysecure.keychain.ui.PREFS_ADV";
public static final int REQUEST_CODE_KEYSERVER_PREF = 0x00007005;
@@ -55,16 +56,11 @@ public class PreferencesActivity extends PreferenceActivity {
String action = getIntent().getAction();
- if (action != null && action.equals(ACTION_PREFS_GEN)) {
- addPreferencesFromResource(R.xml.gen_preferences);
-
- initializePassPassphraceCacheTtl(
- (IntegerListPreference) findPreference(Constants.Pref.PASSPHRASE_CACHE_TTL));
+ if (action != null && action.equals(ACTION_PREFS_CLOUD)) {
+ addPreferencesFromResource(R.xml.cloud_search_prefs);
mKeyServerPreference = (PreferenceScreen) findPreference(Constants.Pref.KEY_SERVERS);
- String servers[] = sPreferences.getKeyServers();
- mKeyServerPreference.setSummary(getResources().getQuantityString(R.plurals.n_keyservers,
- servers.length, servers.length));
+ mKeyServerPreference.setSummary(keyserverSummary(this));
mKeyServerPreference
.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
@@ -76,10 +72,19 @@ public class PreferencesActivity extends PreferenceActivity {
return false;
}
});
+ initializeSearchKeyserver(
+ (CheckBoxPreference) findPreference(Constants.Pref.SEARCH_KEYSERVER)
+ );
+ initializeSearchKeybase(
+ (CheckBoxPreference) findPreference(Constants.Pref.SEARCH_KEYBASE)
+ );
} else if (action != null && action.equals(ACTION_PREFS_ADV)) {
addPreferencesFromResource(R.xml.adv_preferences);
+ initializePassPassphraceCacheTtl(
+ (IntegerListPreference) findPreference(Constants.Pref.PASSPHRASE_CACHE_TTL));
+
initializeEncryptionAlgorithm(
(IntegerListPreference) findPreference(Constants.Pref.DEFAULT_ENCRYPTION_ALGORITHM));
@@ -136,8 +141,7 @@ public class PreferencesActivity extends PreferenceActivity {
String servers[] = data
.getStringArrayExtra(PreferencesKeyServerActivity.EXTRA_KEY_SERVERS);
sPreferences.setKeyServers(servers);
- mKeyServerPreference.setSummary(getResources().getQuantityString(
- R.plurals.n_keyservers, servers.length, servers.length));
+ mKeyServerPreference.setSummary(keyserverSummary(this));
break;
}
@@ -156,9 +160,9 @@ public class PreferencesActivity extends PreferenceActivity {
}
/**
- * This fragment shows the general preferences in android 3.0+
+ * This fragment shows the Cloud Search preferences in android 3.0+
*/
- public static class GeneralPrefsFragment extends PreferenceFragment {
+ public static class CloudSearchPrefsFragment extends PreferenceFragment {
private PreferenceScreen mKeyServerPreference = null;
@@ -167,15 +171,11 @@ public class PreferencesActivity extends PreferenceActivity {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
- addPreferencesFromResource(R.xml.gen_preferences);
-
- initializePassPassphraceCacheTtl(
- (IntegerListPreference) findPreference(Constants.Pref.PASSPHRASE_CACHE_TTL));
+ addPreferencesFromResource(R.xml.cloud_search_prefs);
mKeyServerPreference = (PreferenceScreen) findPreference(Constants.Pref.KEY_SERVERS);
- String servers[] = sPreferences.getKeyServers();
- mKeyServerPreference.setSummary(getResources().getQuantityString(R.plurals.n_keyservers,
- servers.length, servers.length));
+ mKeyServerPreference.setSummary(keyserverSummary(getActivity()));
+
mKeyServerPreference
.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
@@ -187,6 +187,12 @@ public class PreferencesActivity extends PreferenceActivity {
return false;
}
});
+ initializeSearchKeyserver(
+ (CheckBoxPreference) findPreference(Constants.Pref.SEARCH_KEYSERVER)
+ );
+ initializeSearchKeybase(
+ (CheckBoxPreference) findPreference(Constants.Pref.SEARCH_KEYBASE)
+ );
}
@Override
@@ -199,8 +205,7 @@ public class PreferencesActivity extends PreferenceActivity {
String servers[] = data
.getStringArrayExtra(PreferencesKeyServerActivity.EXTRA_KEY_SERVERS);
sPreferences.setKeyServers(servers);
- mKeyServerPreference.setSummary(getResources().getQuantityString(
- R.plurals.n_keyservers, servers.length, servers.length));
+ mKeyServerPreference.setSummary(keyserverSummary(getActivity()));
break;
}
@@ -224,6 +229,9 @@ public class PreferencesActivity extends PreferenceActivity {
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.adv_preferences);
+ initializePassPassphraceCacheTtl(
+ (IntegerListPreference) findPreference(Constants.Pref.PASSPHRASE_CACHE_TTL));
+
initializeEncryptionAlgorithm(
(IntegerListPreference) findPreference(Constants.Pref.DEFAULT_ENCRYPTION_ALGORITHM));
@@ -271,7 +279,7 @@ public class PreferencesActivity extends PreferenceActivity {
protected boolean isValidFragment(String fragmentName) {
return AdvancedPrefsFragment.class.getName().equals(fragmentName)
- || GeneralPrefsFragment.class.getName().equals(fragmentName)
+ || CloudSearchPrefsFragment.class.getName().equals(fragmentName)
|| super.isValidFragment(fragmentName);
}
@@ -398,6 +406,39 @@ public class PreferencesActivity extends PreferenceActivity {
});
}
+ private static void initializeSearchKeyserver(final CheckBoxPreference 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 CheckBoxPreference 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 initializeUseDefaultYubikeyPin(final CheckBoxPreference mUseDefaultYubikeyPin) {
mUseDefaultYubikeyPin.setChecked(sPreferences.useDefaultYubikeyPin());
mUseDefaultYubikeyPin.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@@ -408,4 +449,5 @@ public class PreferencesActivity extends PreferenceActivity {
}
});
}
+
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PreferencesKeyServerActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PreferencesKeyServerActivity.java
index 0de675bab..520f0b6a5 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PreferencesKeyServerActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PreferencesKeyServerActivity.java
@@ -43,6 +43,7 @@ public class PreferencesKeyServerActivity extends ActionBarActivity implements O
private LayoutInflater mInflater;
private ViewGroup mEditors;
private View mAdd;
+ private View mRotate;
private TextView mTitle;
private TextView mSummary;
@@ -73,6 +74,7 @@ public class PreferencesKeyServerActivity extends ActionBarActivity implements O
mTitle = (TextView) findViewById(R.id.title);
mSummary = (TextView) findViewById(R.id.summary);
+ mSummary.setText(getText(R.string.label_first_keyserver_is_used));
mTitle.setText(R.string.label_keyservers);
@@ -80,9 +82,29 @@ public class PreferencesKeyServerActivity extends ActionBarActivity implements O
mAdd = findViewById(R.id.add);
mAdd.setOnClickListener(this);
+ mRotate = findViewById(R.id.rotate);
+ mRotate.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Vector<String> servers = serverList();
+ String first = servers.get(0);
+ if (first != null) {
+ servers.remove(0);
+ servers.add(first);
+ String[] dummy = {};
+ makeServerList(servers.toArray(dummy));
+ }
+ }
+ });
+
Intent intent = getIntent();
String servers[] = intent.getStringArrayExtra(EXTRA_KEY_SERVERS);
+ makeServerList(servers);
+ }
+
+ private void makeServerList(String[] servers) {
if (servers != null) {
+ mEditors.removeAllViews();
for (String serv : servers) {
KeyServerEditor view = (KeyServerEditor) mInflater.inflate(
R.layout.key_server_editor, mEditors, false);
@@ -114,6 +136,18 @@ public class PreferencesKeyServerActivity extends ActionBarActivity implements O
finish();
}
+ private Vector<String> serverList() {
+ Vector<String> servers = new Vector<String>();
+ for (int i = 0; i < mEditors.getChildCount(); ++i) {
+ KeyServerEditor editor = (KeyServerEditor) mEditors.getChildAt(i);
+ String tmp = editor.getValue();
+ if (tmp.length() > 0) {
+ servers.add(tmp);
+ }
+ }
+ return servers;
+ }
+
private void okClicked() {
Intent data = new Intent();
Vector<String> servers = new Vector<String>();
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java
index 57bfc7bd5..9d448c1e5 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java
@@ -113,7 +113,7 @@ public class UploadKeyActivity extends ActionBarActivity {
if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {
- Toast.makeText(UploadKeyActivity.this, R.string.key_send_success,
+ Toast.makeText(UploadKeyActivity.this, R.string.msg_crt_upload_success,
Toast.LENGTH_SHORT).show();
finish();
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysListServerLoader.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysListCloudLoader.java
index d62c2db43..d39feda76 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysListServerLoader.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysListCloudLoader.java
@@ -21,28 +21,29 @@ import android.content.Context;
import android.support.v4.content.AsyncTaskLoader;
import org.sufficientlysecure.keychain.Constants;
-import org.sufficientlysecure.keychain.keyimport.HkpKeyserver;
+import org.sufficientlysecure.keychain.helper.Preferences;
+import org.sufficientlysecure.keychain.keyimport.CloudSearch;
import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry;
-import org.sufficientlysecure.keychain.keyimport.Keyserver;
import org.sufficientlysecure.keychain.util.Log;
import java.util.ArrayList;
-public class ImportKeysListServerLoader
+public class ImportKeysListCloudLoader
extends AsyncTaskLoader<AsyncTaskResultWrapper<ArrayList<ImportKeysListEntry>>> {
Context mContext;
+
+ Preferences.CloudSearchPrefs mCloudPrefs;
String mServerQuery;
- String mKeyServer;
private ArrayList<ImportKeysListEntry> mEntryList = new ArrayList<ImportKeysListEntry>();
private AsyncTaskResultWrapper<ArrayList<ImportKeysListEntry>> mEntryListWrapper;
- public ImportKeysListServerLoader(Context context, String serverQuery, String keyServer) {
+ public ImportKeysListCloudLoader(Context context, String serverQuery, Preferences.CloudSearchPrefs cloudPrefs) {
super(context);
mContext = context;
mServerQuery = serverQuery;
- mKeyServer = keyServer;
+ mCloudPrefs = cloudPrefs;
}
@Override
@@ -56,9 +57,9 @@ public class ImportKeysListServerLoader
if (mServerQuery.startsWith("0x") && mServerQuery.length() == 42) {
Log.d(Constants.TAG, "This search is based on a unique fingerprint. Enforce a fingerprint check!");
- queryServer(mServerQuery, mKeyServer, true);
+ queryServer(true);
} else {
- queryServer(mServerQuery, mKeyServer, false);
+ queryServer(false);
}
return mEntryListWrapper;
@@ -90,15 +91,14 @@ public class ImportKeysListServerLoader
/**
* Query keyserver
*/
- private void queryServer(String query, String keyServer, boolean enforceFingerprint) {
- HkpKeyserver server = new HkpKeyserver(keyServer);
+ private void queryServer(boolean enforceFingerprint) {
try {
- ArrayList<ImportKeysListEntry> searchResult = server.search(query);
+ ArrayList<ImportKeysListEntry> searchResult = CloudSearch.search(mServerQuery, mCloudPrefs);
mEntryList.clear();
// add result to data
if (enforceFingerprint) {
- String fingerprint = query.substring(2);
+ String fingerprint = mServerQuery.substring(2);
Log.d(Constants.TAG, "fingerprint: " + fingerprint);
// query must return only one result!
if (searchResult.size() == 1) {
@@ -115,11 +115,8 @@ public class ImportKeysListServerLoader
mEntryList.addAll(searchResult);
}
mEntryListWrapper = new AsyncTaskResultWrapper<ArrayList<ImportKeysListEntry>>(mEntryList, null);
- } catch (Keyserver.QueryFailedException e) {
- mEntryListWrapper = new AsyncTaskResultWrapper<ArrayList<ImportKeysListEntry>>(mEntryList, e);
- } catch (Keyserver.QueryNeedsRepairException e) {
+ } catch (Exception e) {
mEntryListWrapper = new AsyncTaskResultWrapper<ArrayList<ImportKeysListEntry>>(mEntryList, e);
}
}
-
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysListKeybaseLoader.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysListKeybaseLoader.java
deleted file mode 100644
index d2aefc220..000000000
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysListKeybaseLoader.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2014 Dominik Schürmann <dominik@dominikschuermann.de>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package org.sufficientlysecure.keychain.ui.adapter;
-
-import android.content.Context;
-import android.support.v4.content.AsyncTaskLoader;
-
-import org.sufficientlysecure.keychain.Constants;
-import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry;
-import org.sufficientlysecure.keychain.keyimport.KeybaseKeyserver;
-import org.sufficientlysecure.keychain.keyimport.Keyserver;
-import org.sufficientlysecure.keychain.util.Log;
-
-import java.util.ArrayList;
-
-public class ImportKeysListKeybaseLoader
- extends AsyncTaskLoader<AsyncTaskResultWrapper<ArrayList<ImportKeysListEntry>>> {
- Context mContext;
-
- String mKeybaseQuery;
-
- private ArrayList<ImportKeysListEntry> mEntryList = new ArrayList<ImportKeysListEntry>();
- private AsyncTaskResultWrapper<ArrayList<ImportKeysListEntry>> mEntryListWrapper;
-
- public ImportKeysListKeybaseLoader(Context context, String keybaseQuery) {
- super(context);
- mContext = context;
- mKeybaseQuery = keybaseQuery;
- }
-
- @Override
- public AsyncTaskResultWrapper<ArrayList<ImportKeysListEntry>> loadInBackground() {
-
- mEntryListWrapper = new AsyncTaskResultWrapper<ArrayList<ImportKeysListEntry>>(mEntryList, null);
-
- if (mKeybaseQuery == null) {
- Log.e(Constants.TAG, "mKeybaseQery is null!");
- return mEntryListWrapper;
- }
-
- queryServer(mKeybaseQuery);
-
- return mEntryListWrapper;
- }
-
- @Override
- protected void onReset() {
- super.onReset();
-
- // Ensure the loader is stopped
- onStopLoading();
- }
-
- @Override
- protected void onStartLoading() {
- forceLoad();
- }
-
- @Override
- protected void onStopLoading() {
- cancelLoad();
- }
-
- @Override
- public void deliverResult(AsyncTaskResultWrapper<ArrayList<ImportKeysListEntry>> data) {
- super.deliverResult(data);
- }
-
- /**
- * Query keybase
- */
- private void queryServer(String query) {
-
- KeybaseKeyserver server = new KeybaseKeyserver();
- try {
- ArrayList<ImportKeysListEntry> searchResult = server.search(query);
-
- mEntryList.clear();
-
- mEntryList.addAll(searchResult);
- mEntryListWrapper = new AsyncTaskResultWrapper<ArrayList<ImportKeysListEntry>>(mEntryList, null);
- } catch (Keyserver.QueryFailedException e) {
- mEntryListWrapper = new AsyncTaskResultWrapper<ArrayList<ImportKeysListEntry>>(mEntryList, e);
- } catch (Keyserver.QueryNeedsRepairException e) {
- mEntryListWrapper = new AsyncTaskResultWrapper<ArrayList<ImportKeysListEntry>>(mEntryList, e);
- }
- }
-}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Utf8Util.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Utf8Util.java
new file mode 100644
index 000000000..bed3e28ed
--- /dev/null
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Utf8Util.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2014 Dominik Schürmann <dominik@dominikschuermann.de>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.sufficientlysecure.keychain.util;
+
+import org.sufficientlysecure.keychain.Constants;
+
+import java.nio.ByteBuffer;
+import java.nio.charset.CharacterCodingException;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.CodingErrorAction;
+
+public class Utf8Util {
+
+ public static boolean isValidUTF8(byte[] input) {
+ CharsetDecoder cs = Charset.forName("UTF-8").newDecoder();
+
+ try {
+ cs.decode(ByteBuffer.wrap(input));
+ return true;
+ } catch (CharacterCodingException e) {
+ return false;
+ }
+ }
+
+ public static String fromUTF8ByteArrayReplaceBadEncoding(byte[] input) {
+ final CharsetDecoder charsetDecoder = Charset.forName("UTF-8").newDecoder();
+ charsetDecoder.onMalformedInput(CodingErrorAction.REPLACE);
+ charsetDecoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
+
+ try {
+ return charsetDecoder.decode(ByteBuffer.wrap(input)).toString();
+ } catch (CharacterCodingException e) {
+ Log.e(Constants.TAG, "Decoding failed!", e);
+ return charsetDecoder.replacement();
+ }
+ }
+}
diff --git a/OpenKeychain/src/main/res/drawable/button_rounded_blue.xml b/OpenKeychain/src/main/res/drawable/button_rounded_blue.xml
new file mode 100644
index 000000000..2f5009478
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable/button_rounded_blue.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_pressed="true" >
+ <shape android:shape="rectangle" >
+ <padding
+ android:bottom="3dip"
+ android:left="2dip"
+ android:right="2dip"
+ android:top="1dip" />
+ <corners android:radius="6dip" />
+ <solid android:color="#4444cc" />
+ </shape>
+ </item>
+ <item android:state_focused="true">
+ <shape android:shape="rectangle" >
+ <padding
+ android:bottom="3dip"
+ android:left="2dip"
+ android:right="2dip"
+ android:top="1dip" />
+ <corners android:radius="6dip" />
+ <solid android:color="#4444cc"/>
+ </shape>
+ </item>
+ <item >
+ <shape android:shape="rectangle" >
+ <padding
+ android:bottom="3dip"
+ android:left="2dip"
+ android:right="2dip"
+ android:top="1dip" />
+ <corners android:radius="6dip" />
+ <solid android:color="#5555ee" />
+ </shape>
+ </item>
+</selector> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout-large/decrypt_activity_old.xml b/OpenKeychain/src/main/res/layout-large/decrypt_activity_old.xml
new file mode 100644
index 000000000..fb1aaa1e8
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout-large/decrypt_activity_old.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <android.support.v4.widget.FixedDrawerLayout
+ android:id="@+id/drawer_layout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <include layout="@layout/drawer_list" />
+
+ </android.support.v4.widget.FixedDrawerLayout>
+
+ <include layout="@layout/decrypt_content_old" />
+
+</FrameLayout> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/decrypt_activity_old.xml b/OpenKeychain/src/main/res/layout/decrypt_activity_old.xml
new file mode 100644
index 000000000..15216af32
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/decrypt_activity_old.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.v4.widget.FixedDrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/drawer_layout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <include layout="@layout/decrypt_content_old"/>
+
+ <include layout="@layout/drawer_list" />
+
+</android.support.v4.widget.FixedDrawerLayout>
diff --git a/OpenKeychain/src/main/res/layout/decrypt_content.xml b/OpenKeychain/src/main/res/layout/decrypt_content.xml
index f62cf615c..1fa6ea848 100644
--- a/OpenKeychain/src/main/res/layout/decrypt_content.xml
+++ b/OpenKeychain/src/main/res/layout/decrypt_content.xml
@@ -8,17 +8,71 @@
<include layout="@layout/notify_area" />
- <android.support.v4.view.ViewPager
- android:id="@+id/decrypt_pager"
+ <LinearLayout
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent"
+ android:paddingTop="4dp"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
+ android:orientation="vertical">
- <android.support.v4.view.PagerTabStrip
- android:id="@+id/decrypt_pager_tab_strip"
+ <TextView
+ style="@style/SectionHeader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_gravity="top"
- android:textColor="@color/emphasis" />
- </android.support.v4.view.ViewPager>
+ android:layout_marginTop="16dp"
+ android:text="Files" />
+
+
+ <TextView
+ android:id="@+id/decrypt_files"
+ android:paddingLeft="8dp"
+ android:paddingRight="8dp"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:clickable="true"
+ style="@style/SelectableItem"
+ android:text="Decrypt files"
+ android:drawableRight="@drawable/ic_action_collection"
+ android:drawablePadding="8dp"
+ android:gravity="center_vertical" />
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dip"
+ android:background="?android:attr/listDivider"
+ android:layout_marginBottom="8dp" />
+
+ <TextView
+ style="@style/SectionHeader"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="32dp"
+ android:text="Text" />
+
+ <TextView
+ android:id="@+id/decrypt_from_clipboard"
+ android:paddingLeft="8dp"
+ android:paddingRight="8dp"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:clickable="true"
+ style="@style/SelectableItem"
+ android:text="Decrypt from clipboard"
+ android:drawableRight="@drawable/ic_action_paste"
+ android:drawablePadding="8dp"
+ android:gravity="center_vertical" />
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dip"
+ android:background="?android:attr/listDivider"
+ android:layout_marginBottom="8dp" />
+
+ </LinearLayout>
</LinearLayout> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/decrypt_content_old.xml b/OpenKeychain/src/main/res/layout/decrypt_content_old.xml
new file mode 100644
index 000000000..f62cf615c
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/decrypt_content_old.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/content_frame"
+ android:layout_marginLeft="@dimen/drawer_content_padding"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <include layout="@layout/notify_area" />
+
+ <android.support.v4.view.ViewPager
+ android:id="@+id/decrypt_pager"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <android.support.v4.view.PagerTabStrip
+ android:id="@+id/decrypt_pager_tab_strip"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="top"
+ android:textColor="@color/emphasis" />
+ </android.support.v4.view.ViewPager>
+
+</LinearLayout> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/decrypt_files_activity.xml b/OpenKeychain/src/main/res/layout/decrypt_files_activity.xml
new file mode 100644
index 000000000..0380787db
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/decrypt_files_activity.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <include layout="@layout/notify_area" />
+
+ <FrameLayout
+ android:id="@+id/decrypt_files_fragment_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+
+</LinearLayout> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/decrypt_text_activity.xml b/OpenKeychain/src/main/res/layout/decrypt_text_activity.xml
new file mode 100644
index 000000000..e08ecb39e
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/decrypt_text_activity.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <include layout="@layout/notify_area" />
+
+ <FrameLayout
+ android:id="@+id/decrypt_text_fragment_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+
+</LinearLayout> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/decrypt_message_fragment.xml b/OpenKeychain/src/main/res/layout/decrypt_text_fragment.xml
index 3b4eba3ef..5e9189fd3 100644
--- a/OpenKeychain/src/main/res/layout/decrypt_message_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/decrypt_text_fragment.xml
@@ -25,24 +25,25 @@
android:paddingRight="16dp"
android:orientation="vertical">
-
- <EditText
- android:id="@+id/message"
+ <TextView
+ android:id="@+id/decrypt_text_plaintext"
+ android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="match_parent"
android:layout_height="0dip"
android:gravity="top"
- android:hint="@string/decrypt_content_edit_text_hint"
- android:inputType="text|textCapSentences|textMultiLine|textLongMessage|textNoSuggestions"
+ android:hint=""
android:scrollHorizontally="true"
- android:layout_weight="1" />
+ android:layout_weight="1"
+ android:textIsSelectable="true" />
<View
android:layout_width="match_parent"
android:layout_height="1dip"
android:background="?android:attr/listDivider" />
+
<LinearLayout
- android:id="@+id/action_decrypt"
+ android:id="@+id/action_encrypt_share_plaintext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
@@ -57,7 +58,9 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
- android:text="@string/btn_decrypt_verify_message"
+ android:text="Share plaintext"
+ android:drawableRight="@drawable/ic_action_share"
+ android:drawablePadding="8dp"
android:gravity="center_vertical"
android:layout_weight="1" />
@@ -70,11 +73,11 @@
android:background="?android:attr/listDivider" />
<ImageButton
- android:id="@+id/action_decrypt_from_clipboard"
+ android:id="@+id/action_copy_plaintext"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:padding="8dp"
- android:src="@drawable/ic_action_paste"
+ android:src="@drawable/ic_action_copy"
android:layout_gravity="center_vertical"
style="@style/SelectableItem" />
diff --git a/OpenKeychain/src/main/res/layout/encrypt_file_content.xml b/OpenKeychain/src/main/res/layout/encrypt_file_content.xml
index 34f6eadda..5bf652780 100644
--- a/OpenKeychain/src/main/res/layout/encrypt_file_content.xml
+++ b/OpenKeychain/src/main/res/layout/encrypt_file_content.xml
@@ -16,7 +16,7 @@
android:orientation="vertical" />
<fragment
- android:id="@+id/certify_key_fragment"
+ android:id="@+id/encrypt_file_fragment"
android:name="org.sufficientlysecure.keychain.ui.EncryptFileFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
diff --git a/OpenKeychain/src/main/res/layout/encrypt_text_content.xml b/OpenKeychain/src/main/res/layout/encrypt_text_content.xml
index ee87b8a7e..809f00204 100644
--- a/OpenKeychain/src/main/res/layout/encrypt_text_content.xml
+++ b/OpenKeychain/src/main/res/layout/encrypt_text_content.xml
@@ -16,7 +16,7 @@
android:orientation="vertical" />
<fragment
- android:id="@+id/certify_key_fragment"
+ android:id="@+id/encrypt_text_fragment"
android:name="org.sufficientlysecure.keychain.ui.EncryptTextFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
diff --git a/OpenKeychain/src/main/res/layout/import_keys_server_fragment.xml b/OpenKeychain/src/main/res/layout/import_keys_cloud_fragment.xml
index 62e7d740c..46ec736ca 100644
--- a/OpenKeychain/src/main/res/layout/import_keys_server_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/import_keys_cloud_fragment.xml
@@ -11,12 +11,12 @@
android:orientation="horizontal">
<AutoCompleteTextView
- android:id="@+id/import_server_query"
+ android:id="@+id/cloud_import_server_query"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="top|left"
- android:hint="@string/hint_keyserver_search_hint"
+ android:hint="@string/hint_cloud_search_hint"
android:imeOptions="actionSearch"
android:inputType="textNoSuggestions"
android:singleLine="true"
@@ -26,7 +26,7 @@
android:layout_gravity="center_vertical" />
<ImageButton
- android:id="@+id/import_server_search"
+ android:id="@+id/cloud_import_server_search"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:padding="8dp"
@@ -43,7 +43,7 @@
android:background="?android:attr/listDivider" />
<ImageButton
- android:id="@+id/import_server_config_button"
+ android:id="@+id/cloud_import_server_config_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:padding="8dp"
@@ -53,24 +53,5 @@
</LinearLayout>
- <LinearLayout
- android:id="@+id/import_server_config"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="?android:attr/listDivider" />
-
- <Spinner
- android:id="@+id/import_server_spinner"
- android:layout_marginLeft="8dp"
- android:layout_marginRight="8dp"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
-
- </LinearLayout>
</LinearLayout> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/import_keys_keybase_fragment.xml b/OpenKeychain/src/main/res/layout/import_keys_keybase_fragment.xml
deleted file mode 100644
index c70236e07..000000000
--- a/OpenKeychain/src/main/res/layout/import_keys_keybase_fragment.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
-
- <EditText
- android:id="@+id/import_keybase_query"
- android:layout_marginLeft="8dp"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:gravity="top|left"
- android:hint="@string/hint_keybase_search_hint"
- android:imeOptions="actionSearch"
- android:inputType="textNoSuggestions"
- android:singleLine="true"
- android:lines="1"
- android:maxLines="1"
- android:minLines="1"
- android:layout_gravity="center_vertical" />
-
- <ImageButton
- android:id="@+id/import_keybase_search"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:padding="8dp"
- android:src="@drawable/ic_action_search"
- android:layout_gravity="center_vertical"
- style="@style/SelectableItem" />
-
-</LinearLayout> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/import_keys_list_entry.xml b/OpenKeychain/src/main/res/layout/import_keys_list_entry.xml
index 773250dc6..74de77172 100644
--- a/OpenKeychain/src/main/res/layout/import_keys_list_entry.xml
+++ b/OpenKeychain/src/main/res/layout/import_keys_list_entry.xml
@@ -30,6 +30,8 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:paddingRight="8dp"
+ android:paddingTop="2dp"
+ android:gravity="top|center"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false" />
diff --git a/OpenKeychain/src/main/res/layout/key_server_preference.xml b/OpenKeychain/src/main/res/layout/key_server_preference.xml
index baf7111af..33866f746 100644
--- a/OpenKeychain/src/main/res/layout/key_server_preference.xml
+++ b/OpenKeychain/src/main/res/layout/key_server_preference.xml
@@ -12,7 +12,7 @@
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="horizontal" >
- <RelativeLayout
+ <LinearLayout
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_marginBottom="6sp"
@@ -21,6 +21,7 @@
android:layout_marginTop="6sp"
android:layout_weight="1"
android:background="@android:drawable/menuitem_background"
+ android:orientation="vertical"
android:focusable="true" >
<TextView
@@ -35,20 +36,26 @@
android:id="@+id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_alignLeft="@android:id/title"
- android:layout_below="@android:id/title"
- android:maxLines="2"
android:textAppearance="?android:attr/textAppearanceSmall" />
- </RelativeLayout>
-
+ </LinearLayout>
+ <Button
+ android:id="@+id/rotate"
+ android:layout_width="wrap_content"
+ android:layout_height="31dp"
+ android:layout_gravity="center_vertical"
+ android:layout_marginLeft="4dip"
+ android:layout_marginRight="6dip"
+ android:text="rotate"
+ android:textColor="#ffffffff"
+ android:textStyle="bold"
+ android:background="@drawable/button_rounded_blue"
+ />
<ImageButton
android:id="@+id/add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_margin="10dp"
- android:layout_marginLeft="4dip"
- android:layout_marginRight="6dip"
android:src="@drawable/plus"
android:background="@drawable/button_rounded_green"/>
</LinearLayout>
diff --git a/OpenKeychain/src/main/res/raw-cs/help_about.html b/OpenKeychain/src/main/res/raw-cs/help_about.html
index cef21e752..0b9cfa582 100644
--- a/OpenKeychain/src/main/res/raw-cs/help_about.html
+++ b/OpenKeychain/src/main/res/raw-cs/help_about.html
@@ -2,7 +2,7 @@
<head></head>
<body>
<p><a href="http://www.openkeychain.org">http://www.openkeychain.org</a></p>
-<p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p>
+<p><a href="http://www.openkeychain.org">OpenKeychain</a> je OpenPGP implementace pro Android.</p>
<p>Licence: GPLv3+</p>
<h2>Vývojáři</h2>
diff --git a/OpenKeychain/src/main/res/raw-cs/help_changelog.html b/OpenKeychain/src/main/res/raw-cs/help_changelog.html
index f18b7917b..96c32c8fb 100644
--- a/OpenKeychain/src/main/res/raw-cs/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw-cs/help_changelog.html
@@ -1,12 +1,17 @@
<html>
<head></head>
<body>
-<h2>2.10</h2>
+<h2>2.9.2</h2>
+<ul>
+<li>Fix keys broken in 2.9.1</li>
+<li>Yubikey decryption now working via API</li>
+</ul>
+<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
-<li>Improved passphrase handling</li>
-<li>Key sharing via SafeSlinger</li>
+<li>Vylepšené zacházení s hesly</li>
+<li>Sdílení klíčů přes SafeSlinger</li>
<li>Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain</li>
<li>Fix usage of stripped keys</li>
<li>SHA256 as default for compatibility</li>
@@ -16,7 +21,7 @@
<h2>2.9</h2>
<ul>
<li>Fixing crashes introduced in v2.8</li>
-<li>Experimental ECC support</li>
+<li>Experimentální podpora ECC</li>
<li>Experimental Yubikey support (signing-only with imported keys)</li>
</ul>
<h2>2.8</h2>
@@ -24,13 +29,13 @@
<li>So many bugs have been fixed in this release that we focus on the main new features</li>
<li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
-<li>New first time screen</li>
+<li>Nová úvodní obrazovka</li>
<li>New key creation screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li>
<li>Notification showing cached passphrases</li>
-<li>Keys are connected to Android's contacts</li>
+<li>Klíče jsou připojeny ke kontaktům v Androidu</li>
</ul>
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
@@ -120,19 +125,19 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
<ul>
<li>Complete redesign</li>
<li>Share public keys via qr codes, nfc beam</li>
-<li>Sign keys</li>
-<li>Upload keys to server</li>
+<li>Podepsat klíče</li>
+<li>Nahrát klíče na server</li>
<li>Fixes import issues</li>
<li>New AIDL API</li>
</ul>
<h2>1.0.8</h2>
<ul>
-<li>Basic keyserver support</li>
+<li>Základní podpora keyserverů</li>
<li>App2sd</li>
<li>More choices for passphrase cache: 1, 2, 4, 8, hours</li>
<li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
-<li>Bugfixes</li>
-<li>Optimizations</li>
+<li>Opravy chyb</li>
+<li>Optimalizace</li>
</ul>
<h2>1.0.7</h2>
<ul>
@@ -142,16 +147,16 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
<h2>1.0.6</h2>
<ul>
<li>Account adding crash on Froyo fixed</li>
-<li>Secure file deletion</li>
+<li>Bezpečné mazání souborů</li>
<li>Option to delete key file after import</li>
<li>Stream encryption/decryption (gallery, etc.)</li>
<li>New options (language, force v3 signatures)</li>
<li>Interface changes</li>
-<li>Bugfixes</li>
+<li>Opravy chyb</li>
</ul>
<h2>1.0.5</h2>
<ul>
-<li>German and Italian translation</li>
+<li>Německý a Italský překlad</li>
<li>Much smaller package, due to reduced BC sources</li>
<li>New preferences GUI</li>
<li>Layout adjustment for localization</li>
@@ -183,7 +188,7 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
<li>Slovenian translation</li>
<li>New database, much faster, less memory usage</li>
<li>Defined Intents and content provider for other apps</li>
-<li>Bugfixes</li>
+<li>Opravy chyb</li>
</ul>
</body>
</html>
diff --git a/OpenKeychain/src/main/res/raw-cs/help_nfc_beam.html b/OpenKeychain/src/main/res/raw-cs/help_nfc_beam.html
index d691df871..61226894d 100644
--- a/OpenKeychain/src/main/res/raw-cs/help_nfc_beam.html
+++ b/OpenKeychain/src/main/res/raw-cs/help_nfc_beam.html
@@ -6,7 +6,7 @@
<li>Navigujte na kontakt vašeho partnera a otevřete ten který chcete sdílet.</li>
<li>Podržte dvě zařízení zády k sobě (musí se téměř dotýkat) a ucítíte vibraci.</li>
<li>Po tom co ucítíte vibraci, uvidíte že se obsah na displeji zařízení vašeho partnera změní na objekt typu karta s animací na pozadí připomínající rychlost warpu ze Star Treku.</li>
-<li>Tapněte na kartu a obsach se nahraje do zařízení.</li>
+<li>Tapněte na kartu a obsah se nahraje do zařízení.</li>
</ol>
</body>
</html>
diff --git a/OpenKeychain/src/main/res/raw-cs/help_start.html b/OpenKeychain/src/main/res/raw-cs/help_start.html
index eaffc2389..d6055c06b 100644
--- a/OpenKeychain/src/main/res/raw-cs/help_start.html
+++ b/OpenKeychain/src/main/res/raw-cs/help_start.html
@@ -7,16 +7,16 @@
<p>Doporučujeme instalaci <a href="market://details?id=org.openintents.filemanager">OI File Manager</a> pro zlepšení práce se soubory a <a href="market://details?id=com.google.zxing.client.android">Barcode Scanner</a> pro skenování generovaných QR kódů. Kliknutí na odkazy otevře Google Play Store nebo F-Droid odkud můžete začít installovat.</p>
<h2>Aplikace</h2>
-<p>Několik aplikací umožňuje šifrovat/podepsat privátní komunikaci pomocí OpenKeychain:<br><img src="apps_k9"><br>K-9 Mail: podpora OpenKeychain v aktualní verzi <a href="https://github.com/k9mail/k-9/releases/tag/4.904">alpha build</a>!<br><a href="market://details?id=eu.siacs.conversations"><img src="apps_conversations"><br>Konverzace</a>: Jabber/XMPP client<br><a href="market://details?id=org.lf_net.pgpunlocker"><img src="apps_pgpauth"><br>PGPAuth</a>: Appka sloužící k odesílání požadavků podepsaných PGP na servery pro otevření nebo zavření něčeho, třeba dveří</p>
+<p>Několik aplikací umožňuje šifrovat/podepsat privátní komunikaci pomocí OpenKeychain:<br><img src="apps_k9"><br>K-9 Mail: podpora OpenKeychain v aktualní verzi <a href="https://github.com/k9mail/k-9/releases/tag/4.904">alpha build</a>!<br><a href="market://details?id=eu.siacs.conversations"><img src="apps_conversations"><br>Conversations</a>: Jabber/XMPP client<br><a href="market://details?id=org.lf_net.pgpunlocker"><img src="apps_pgpauth"><br>PGPAuth</a>: Appka sloužící k odesílání požadavků podepsaných PGP na servery pro otevření nebo zavření něčeho, třeba dveří</p>
-<h2>Našel jsem bug v OpenChain!</h2>
-<p>Reportujte chyby pomocí <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">issue trackeru OpenKeychain</a>.</p>
+<h2>Našel jsem chybu v OpenKeychain!</h2>
+<p>Nahlašte prosím chybu na <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">bug trackeru OpenKeychain</a>.</p>
<h2>Přispět</h2>
-<p>Pokud chcete pomoci vyvýjet OpenKeychain tak, že přispějete svými kodérskými schopnostmi <a href="https://github.com/openpgp-keychain/openpgp-keychain#contribute-code">přečtěte si naší malou příručku na Githubu</a>.</p>
+<p>Pokud chcete pomoci vyvíjet OpenKeychain tak, že přispějete svými kodérskými schopnostmi <a href="https://github.com/openpgp-keychain/openpgp-keychain#contribute-code">přečtěte si naší malou příručku na Githubu</a>.</p>
<h2>Překlady</h2>
-<p>Pomozte s překladem OpenKeychain! Každý může participovat na <a href="https://www.transifex.com/projects/p/openpgp-keychain/">OpenKeychain na Transifexu</a></p>
+<p>Pomozte s překladem OpenKeychain! Každý se může zapojit na <a href="https://www.transifex.com/projects/p/openpgp-keychain/">Transifexu</a>.</p>
</body>
</html>
diff --git a/OpenKeychain/src/main/res/raw-cs/help_wot.html b/OpenKeychain/src/main/res/raw-cs/help_wot.html
index 30288f2bb..5b8186009 100644
--- a/OpenKeychain/src/main/res/raw-cs/help_wot.html
+++ b/OpenKeychain/src/main/res/raw-cs/help_wot.html
@@ -4,14 +4,14 @@
<h2>Síť důvěry</h2>
<p>The Web of Trust describes the part of PGP which deals with creation and bookkeeping of certifications. It provides mechanisms to help the user keep track of who a public key belongs to, and share this information with others; To ensure the privacy of encrypted communication, it is essential to know that the public key you encrypt to belongs to the person you think it does.</p>
-<h2>Support in OpenKeychain</h2>
-<p>There is only basic support for Web of Trust in OpenKeychain. This is a heavy work in progress and subject to changes in upcoming releases.</p>
+<h2>Podpora v OpenKeychain</h2>
+<p>Podpora pro síť důvěry v OpenKeychain je teprve ve svých začátcích. Tento stav se bude velmi měnit v dalších verzích aplikace.</p>
-<h2>Trust Model</h2>
+<h2>Model důvěry</h2>
<p>Trust evaluation is based on the simple assumption that all keys which have secret keys available are trusted. Public keys which contain at least one user id certified by a trusted key will be marked with a green dot in the key listings. It is not (yet) possible to specify trust levels for certificates of other known public keys.</p>
-<h2>Certifying keys</h2>
-<p>Support for key certification is available, and user ids can be certified individually. It is not yet possible to specify the level of trust or create local and other special types of certificates.</p>
+<h2>Certifikace klíčů</h2>
+<p>Podpora pro certifikaci klíčů je dostupná a uživatelská ID mohou být certifikována jednotlivě. Ještě není možné určovat úroveň důvěryhodnosti nebo vytvářet lokální a jiné speciální typy certifikátů.</p>
</body>
</html>
diff --git a/OpenKeychain/src/main/res/raw-cs/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-cs/nfc_beam_share.html
index 09128be62..3998444d0 100644
--- a/OpenKeychain/src/main/res/raw-cs/nfc_beam_share.html
+++ b/OpenKeychain/src/main/res/raw-cs/nfc_beam_share.html
@@ -2,10 +2,10 @@
<head></head>
<body>
<ol>
-<li>Ujistěte se, že NFC je zapnuto v Nastavení &gt; Další &gt; NFC a ujistěte se, že Android Beam ve stejné sekci je také zapnutý.</li>
+<li>Ujistěte se, že je NFC zapnuto v Nastavení &gt; Další &gt; NFC a ověřte, že Android Beam je ve stejné sekci také zapnutý.</li>
<li>Podržte dvě zařízení zády k sobě (musí se téměř dotýkat) a ucítíte vibraci.</li>
-<li>Po tom co ucítíte vibraci, uvidíte že se obsah na displeji zařízení vašeho partnera změní na objekt typu karta s animací na pozadí připomínající rychlost warpu ze Star Treku.</li>
-<li>Tapněte na kartu a obsach se nahraje do zařízení.</li>
+<li>Po tom co ucítíte vibraci, uvidíte že se obsah na displeji zařízení vašeho partnera změní na obrázek s animací připomínající rychlost warpu ze Star Treku.</li>
+<li>Tapněte na kartu a obsah se nahraje do zařízení.</li>
</ol>
</body>
</html>
diff --git a/OpenKeychain/src/main/res/raw-de/help_changelog.html b/OpenKeychain/src/main/res/raw-de/help_changelog.html
index fa8d2d81d..e0b3610f4 100644
--- a/OpenKeychain/src/main/res/raw-de/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw-de/help_changelog.html
@@ -1,7 +1,12 @@
<html>
<head></head>
<body>
-<h2>2.10</h2>
+<h2>2.9.2</h2>
+<ul>
+<li>Fix keys broken in 2.9.1</li>
+<li>Yubikey decryption now working via API</li>
+</ul>
+<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
diff --git a/OpenKeychain/src/main/res/raw-es/help_changelog.html b/OpenKeychain/src/main/res/raw-es/help_changelog.html
index 0b05f7153..411aeed27 100644
--- a/OpenKeychain/src/main/res/raw-es/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw-es/help_changelog.html
@@ -1,17 +1,22 @@
<html>
<head></head>
<body>
-<h2>2.10</h2>
-<ul>
-<li>Split encrypt screen into two</li>
-<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
-<li>Improved passphrase handling</li>
-<li>Key sharing via SafeSlinger</li>
-<li>Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain</li>
-<li>Fix usage of stripped keys</li>
-<li>SHA256 as default for compatibility</li>
-<li>Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API</li>
-<li>OpenPGP API now handles revoked/expired keys and returns all user ids</li>
+<h2>2.9.2</h2>
+<ul>
+<li>Repara claves dañadas en 2.9.1</li>
+<li>El descifrado de Yubikey funcionando ahora vía API</li>
+</ul>
+<h2>2.9.1</h2>
+<ul>
+<li>Dividir pantalla de cifrado en dos</li>
+<li>Reparación del manejado de indicadores de clave (ahora soportando claves de Mailvelope 0.7)</li>
+<li>Manejado mejorado de frase-contraseña</li>
+<li>Compartición de clave mediante SafeSlinger</li>
+<li>Yubikey: opción para permitir otros PINs, actualmente sólo funciona firmando a través de la API OpenPGP, no dentro de OpenKeychain</li>
+<li>Reparación del uso de claves desnudas</li>
+<li>SHA256 se usa como predeterminado para compatibilidad</li>
+<li>La API de Intent ha cambiado, vea https://github.com/open-keychain/open-keychain/wiki/Intent-API</li>
+<li>La API de OpenPGP ahora maneja claves revocadas/expiradas y devuelve todas las identidades de usario</li>
</ul>
<h2>2.9</h2>
<ul>
diff --git a/OpenKeychain/src/main/res/raw-et/help_changelog.html b/OpenKeychain/src/main/res/raw-et/help_changelog.html
index f18b7917b..65842f6cc 100644
--- a/OpenKeychain/src/main/res/raw-et/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw-et/help_changelog.html
@@ -1,7 +1,12 @@
<html>
<head></head>
<body>
-<h2>2.10</h2>
+<h2>2.9.2</h2>
+<ul>
+<li>Fix keys broken in 2.9.1</li>
+<li>Yubikey decryption now working via API</li>
+</ul>
+<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
diff --git a/OpenKeychain/src/main/res/raw-fi/help_changelog.html b/OpenKeychain/src/main/res/raw-fi/help_changelog.html
index f18b7917b..65842f6cc 100644
--- a/OpenKeychain/src/main/res/raw-fi/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw-fi/help_changelog.html
@@ -1,7 +1,12 @@
<html>
<head></head>
<body>
-<h2>2.10</h2>
+<h2>2.9.2</h2>
+<ul>
+<li>Fix keys broken in 2.9.1</li>
+<li>Yubikey decryption now working via API</li>
+</ul>
+<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
diff --git a/OpenKeychain/src/main/res/raw-fr/help_changelog.html b/OpenKeychain/src/main/res/raw-fr/help_changelog.html
index 9fdd47caf..73edbb642 100644
--- a/OpenKeychain/src/main/res/raw-fr/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw-fr/help_changelog.html
@@ -1,17 +1,22 @@
<html>
<head></head>
<body>
-<h2>2.10</h2>
-<ul>
-<li>Split encrypt screen into two</li>
-<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
-<li>Improved passphrase handling</li>
-<li>Key sharing via SafeSlinger</li>
-<li>Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain</li>
-<li>Fix usage of stripped keys</li>
-<li>SHA256 as default for compatibility</li>
-<li>Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API</li>
-<li>OpenPGP API now handles revoked/expired keys and returns all user ids</li>
+<h2>2.9.2</h2>
+<ul>
+<li>Correctif - Clefs brisées dans 2.9.1</li>
+<li>Le déchiffrement des Yukukeys par l'API fonctionne maintenant</li>
+</ul>
+<h2>2.9.1</h2>
+<ul>
+<li>Partage de l'écran de chiffrement en deux</li>
+<li>Correctif - Gestion des drapeaux de clefs (prend maintenant en charge les clefs Mailvelope 0.7)</li>
+<li>Gestion des phrases de passe améliorée</li>
+<li>Partage de clefs par SafeSlinger</li>
+<li>Yubikey : préférence pour permette d'autre NIP, seule la signature par l'API OpenPGP fonctionne présentement, mais pas à l'intérieur d'OpenKeychain</li>
+<li>Correctif - Utilisation de clefs dépouillées</li>
+<li>SHA256 par défaut pour la compatibilité</li>
+<li>L'API des intentions a changé, voir https://github.com/open-keychain/open-keychain/wiki/Intent-API</li>
+<li>L'API d'OpenPGP gère maintenant les clefs révoquées/expirées et retourne tous les ID d'utilisateurs</li>
</ul>
<h2>2.9</h2>
<ul>
@@ -52,11 +57,11 @@
<li>Prise en charge clefs secrètes partielles de GnuPG (merci à Vincent Breitmoser)</li>
<li>Nouvelle conception de la vérification de signatures</li>
<li>Longueur de clef personnalisée (merci à Greg Witczak)</li>
-<li>Correctif - fonctionnalités partagées d'autres applis</li>
+<li>Correctif - Fonctionnalités partagées d'autres applis</li>
</ul>
<h2>2.5</h2>
<ul>
-<li>Correctif - déchiffrement de messages/fichiers pgp symétriques</li>
+<li>Correctif -Déchiffrement de messages/fichiers pgp symétriques</li>
<li>Écran de modification des clefs remanié (merci à Ash Hughes)</li>
<li>Nouvelle conception moderne pour les écrans de chiffrement/déchiffrement</li>
<li>API OpenPGP version 3 (comptes multiples d'api, correctifs internes, recherche de clefs)</li>
@@ -85,14 +90,14 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
<h2>2.3</h2>
<ul>
<li>Suppressions de l'exportation non nécessaire des clefs publiques lors de l'exportation de clefs secrètes (merci à Ash Hughes)</li>
-<li>Correctif - définition de la date de péremption des clefs (merci à Ash Hughes)</li>
+<li>Correctif - Définition de la date de péremption des clefs (merci à Ash Hughes)</li>
<li>Plus de correctifs internes affectant la modifications des clefs (merci à Ash hughes)</li>
<li>Interrogation des serveurs de clefs directement depuis l'écran d'importation</li>
-<li>Correctif - mise en page et du style des fenêtres de dialogue sur Android 2.2-3.0</li>
-<li>Correctif - plantage pour les clefs avec des ID d'utilisateur vides</li>
-<li>Correctif - plantage et listes vides en revenant de l'écran de signature</li>
+<li>Correctif - Mise en page et du style des fenêtres de dialogue sur Android 2.2-3.0</li>
+<li>Correctif - Plantage pour les clefs avec des ID d'utilisateur vides</li>
+<li>Correctif - Plantage et listes vides en revenant de l'écran de signature</li>
<li>Bouncy Castle (bibliothèque cryptographique) mise à jour de 1.47 à 1.50 et compilée depuis la source</li>
-<li>Correctif - téléversement d'une clef depuis l'écran de signature</li>
+<li>Correctif - Téléversement d'une clef depuis l'écran de signature</li>
</ul>
<h2>2.2</h2>
<ul>
@@ -141,7 +146,7 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa
</ul>
<h2>1.0.6</h2>
<ul>
-<li>Correctif - plantage lors de l'ajout de compte sur Froyo</li>
+<li>Correctif - Plantage lors de l'ajout de compte sur Froyo</li>
<li>Suppression sécurisée de fichiers</li>
<li>Option de suppression du fichier de clef après l'importation</li>
<li>Chiffrement/déchiffrement de flux (galerie, etc.)</li>
diff --git a/OpenKeychain/src/main/res/raw-is/help_changelog.html b/OpenKeychain/src/main/res/raw-is/help_changelog.html
index f18b7917b..65842f6cc 100644
--- a/OpenKeychain/src/main/res/raw-is/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw-is/help_changelog.html
@@ -1,7 +1,12 @@
<html>
<head></head>
<body>
-<h2>2.10</h2>
+<h2>2.9.2</h2>
+<ul>
+<li>Fix keys broken in 2.9.1</li>
+<li>Yubikey decryption now working via API</li>
+</ul>
+<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
diff --git a/OpenKeychain/src/main/res/raw-it/help_changelog.html b/OpenKeychain/src/main/res/raw-it/help_changelog.html
index f18b7917b..65842f6cc 100644
--- a/OpenKeychain/src/main/res/raw-it/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw-it/help_changelog.html
@@ -1,7 +1,12 @@
<html>
<head></head>
<body>
-<h2>2.10</h2>
+<h2>2.9.2</h2>
+<ul>
+<li>Fix keys broken in 2.9.1</li>
+<li>Yubikey decryption now working via API</li>
+</ul>
+<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
diff --git a/OpenKeychain/src/main/res/raw-ja/help_changelog.html b/OpenKeychain/src/main/res/raw-ja/help_changelog.html
index 3234a49ae..51c21d8fc 100644
--- a/OpenKeychain/src/main/res/raw-ja/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw-ja/help_changelog.html
@@ -1,17 +1,22 @@
<html>
<head></head>
<body>
-<h2>2.10</h2>
-<ul>
-<li>Split encrypt screen into two</li>
-<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
-<li>Improved passphrase handling</li>
-<li>Key sharing via SafeSlinger</li>
-<li>Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain</li>
-<li>Fix usage of stripped keys</li>
-<li>SHA256 as default for compatibility</li>
-<li>Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API</li>
-<li>OpenPGP API now handles revoked/expired keys and returns all user ids</li>
+<h2>2.9.2</h2>
+<ul>
+<li>2.9.1での鍵破壊問題修正</li>
+<li>API経由でYubikeyの復号処理が動くようになった</li>
+</ul>
+<h2>2.9.1</h2>
+<ul>
+<li>暗号化スクリーンを2つに分割</li>
+<li>鍵のフラグ管理を修正 (現在Mailvelope 0.7 鍵をサポート)</li>
+<li>パスフレーズの取り回しを改善</li>
+<li>SafeSlingerでの鍵の共有</li>
+<li>Yubikey: 設定で他のPINを受け付け、現在OpenPGP API経由での署名しか動きません、OpenKeychainの内部ではないため</li>
+<li>ストリップした鍵の利用法を修正</li>
+<li>互換性のためデフォルトをSHA256に</li>
+<li>インテント API を変更しました、以下参照 https://github.com/open-keychain/open-keychain/wiki/Intent-API</li>
+<li>OpenPGP API は現在破棄/期限切れの鍵を扱えるようになり、またすべてのユーザIDを返すようになりました</li>
</ul>
<h2>2.9</h2>
<ul>
diff --git a/OpenKeychain/src/main/res/raw-nl/help_changelog.html b/OpenKeychain/src/main/res/raw-nl/help_changelog.html
index f18b7917b..65842f6cc 100644
--- a/OpenKeychain/src/main/res/raw-nl/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw-nl/help_changelog.html
@@ -1,7 +1,12 @@
<html>
<head></head>
<body>
-<h2>2.10</h2>
+<h2>2.9.2</h2>
+<ul>
+<li>Fix keys broken in 2.9.1</li>
+<li>Yubikey decryption now working via API</li>
+</ul>
+<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
diff --git a/OpenKeychain/src/main/res/raw-pl/help_changelog.html b/OpenKeychain/src/main/res/raw-pl/help_changelog.html
index f18b7917b..65842f6cc 100644
--- a/OpenKeychain/src/main/res/raw-pl/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw-pl/help_changelog.html
@@ -1,7 +1,12 @@
<html>
<head></head>
<body>
-<h2>2.10</h2>
+<h2>2.9.2</h2>
+<ul>
+<li>Fix keys broken in 2.9.1</li>
+<li>Yubikey decryption now working via API</li>
+</ul>
+<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
diff --git a/OpenKeychain/src/main/res/raw-pt/help_changelog.html b/OpenKeychain/src/main/res/raw-pt/help_changelog.html
index f18b7917b..65842f6cc 100644
--- a/OpenKeychain/src/main/res/raw-pt/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw-pt/help_changelog.html
@@ -1,7 +1,12 @@
<html>
<head></head>
<body>
-<h2>2.10</h2>
+<h2>2.9.2</h2>
+<ul>
+<li>Fix keys broken in 2.9.1</li>
+<li>Yubikey decryption now working via API</li>
+</ul>
+<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
diff --git a/OpenKeychain/src/main/res/raw-ru/help_changelog.html b/OpenKeychain/src/main/res/raw-ru/help_changelog.html
index f18b7917b..65842f6cc 100644
--- a/OpenKeychain/src/main/res/raw-ru/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw-ru/help_changelog.html
@@ -1,7 +1,12 @@
<html>
<head></head>
<body>
-<h2>2.10</h2>
+<h2>2.9.2</h2>
+<ul>
+<li>Fix keys broken in 2.9.1</li>
+<li>Yubikey decryption now working via API</li>
+</ul>
+<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
diff --git a/OpenKeychain/src/main/res/raw-sl/help_about.html b/OpenKeychain/src/main/res/raw-sl/help_about.html
index a97ce04a0..a34746c51 100644
--- a/OpenKeychain/src/main/res/raw-sl/help_about.html
+++ b/OpenKeychain/src/main/res/raw-sl/help_about.html
@@ -51,7 +51,7 @@
<li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (licenca Apache v2)</li>
<li>
-<a href="https://github.com/SafeSlingerProject/exchange-android">SafeSlinger Exchange library</a> (MIT License)</li>
+<a href="https://github.com/SafeSlingerProject/exchange-android">SafeSlinger Exchange library</a> (licenca MIT)</li>
</ul>
</body>
</html>
diff --git a/OpenKeychain/src/main/res/raw-sl/help_changelog.html b/OpenKeychain/src/main/res/raw-sl/help_changelog.html
index da12fec8e..7328172cd 100644
--- a/OpenKeychain/src/main/res/raw-sl/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw-sl/help_changelog.html
@@ -1,16 +1,21 @@
<html>
<head></head>
<body>
-<h2>2.10</h2>
+<h2>2.9.2</h2>
<ul>
-<li>Split encrypt screen into two</li>
+<li>Popravek ključev, pokvarjenih v verziji 2.9.1</li>
+<li>Dešifriranje z Yubikey ključem sedaj deluje prek API-ja</li>
+</ul>
+<h2>2.9.1</h2>
+<ul>
+<li>Ekran za šifriranje razdeljen na dva ekrana</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
-<li>Improved passphrase handling</li>
+<li>Izboljšano delo z gesli</li>
<li>Key sharing via SafeSlinger</li>
<li>Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain</li>
<li>Fix usage of stripped keys</li>
-<li>SHA256 as default for compatibility</li>
-<li>Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API</li>
+<li>SHA256 je privzet za večjo združljivost</li>
+<li>Intent API je bil spremenjen, glej https://github.com/open-keychain/open-keychain/wiki/Intent-API</li>
<li>OpenPGP API now handles revoked/expired keys and returns all user ids</li>
</ul>
<h2>2.9</h2>
diff --git a/OpenKeychain/src/main/res/raw-tr/help_about.html b/OpenKeychain/src/main/res/raw-tr/help_about.html
index faae49190..0c7d40dca 100644
--- a/OpenKeychain/src/main/res/raw-tr/help_about.html
+++ b/OpenKeychain/src/main/res/raw-tr/help_about.html
@@ -2,12 +2,12 @@
<head></head>
<body>
<p><a href="http://www.openkeychain.org">http://www.openkeychain.org</a></p>
-<p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p>
+<p><a href="http://www.openkeychain.org">OpenKeychain</a> Android için bir OpenPGP implementasyonudur.</p>
<p>Lisans: GPLv3+</p>
-<h2>Developers</h2>
+<h2>Geliştiriciler</h2>
<ul>
-<li>Dominik Schürmann (Maintainer)</li>
+<li>Dominik Schürmann (Sorumlu)</li>
<li>Art O Cathain</li>
<li>Ash Hughes</li>
<li>Brian C. Barnes</li>
@@ -31,27 +31,27 @@
<h2>Kütüphaneler</h2>
<ul>
<li>
-<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v4</a> (Apache License v2)</li>
+<a href="http://developer.android.com/tools/support-library/index.html">Android Destek Kütüphanesi v4</a> (Apache Lisans v2)</li>
<li>
-<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li>
+<a href="http://developer.android.com/tools/support-library/index.html">Android Destek Kütüphanesi v7 'appcompat'</a> (Apache Lisans v2)</li>
<li>
-<a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache License v2)</li>
+<a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache Lisans v2)</li>
<li>
-<a href="https://github.com/JohnPersano/SuperToasts">SuperToasts</a> (Apache License v2)</li>
+<a href="https://github.com/JohnPersano/SuperToasts">SuperToasts</a> (Apache Lisans v2)</li>
<li>
-<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache License v2)</li>
+<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache Lisans v2)</li>
<li>
-<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache License v2)</li>
+<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache Lisans v2)</li>
<li>
-<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
+<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache Lisans v2)</li>
<li>
-<a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li>
+<a href="http://code.google.com/p/zxing/">ZXing</a> (Apache Lisans v2)</li>
<li>
-<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
+<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 Lisans)</li>
<li>
-<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
+<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache Lisans v2)</li>
<li>
-<a href="https://github.com/SafeSlingerProject/exchange-android">SafeSlinger Exchange library</a> (MIT License)</li>
+<a href="https://github.com/SafeSlingerProject/exchange-android">SafeSlinger Takas kütüphanesi</a> (MIT Lisans)</li>
</ul>
</body>
</html>
diff --git a/OpenKeychain/src/main/res/raw-tr/help_changelog.html b/OpenKeychain/src/main/res/raw-tr/help_changelog.html
index f18b7917b..65842f6cc 100644
--- a/OpenKeychain/src/main/res/raw-tr/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw-tr/help_changelog.html
@@ -1,7 +1,12 @@
<html>
<head></head>
<body>
-<h2>2.10</h2>
+<h2>2.9.2</h2>
+<ul>
+<li>Fix keys broken in 2.9.1</li>
+<li>Yubikey decryption now working via API</li>
+</ul>
+<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
diff --git a/OpenKeychain/src/main/res/raw-tr/help_start.html b/OpenKeychain/src/main/res/raw-tr/help_start.html
index 51a76c01e..c606b81ea 100644
--- a/OpenKeychain/src/main/res/raw-tr/help_start.html
+++ b/OpenKeychain/src/main/res/raw-tr/help_start.html
@@ -6,16 +6,16 @@
<p>It is recommended that you install <a href="market://details?id=org.openintents.filemanager">OI File Manager</a> for enhanced file selection and <a href="market://details?id=com.google.zxing.client.android">Barcode Scanner</a> to scan generated QR Codes. Clicking on the links will open Google Play Store or F-Droid for installation.</p>
-<h2>Applications</h2>
+<h2>Uygulamalar</h2>
<p>Several applications support OpenKeychain to encrypt/sign your private communication:<br><img src="apps_k9"><br>K-9 Mail: OpenKeychain support available in current <a href="https://github.com/k9mail/k-9/releases/tag/4.904">alpha build</a>!<br><a href="market://details?id=eu.siacs.conversations"><img src="apps_conversations"><br>Conversations</a>: Jabber/XMPP client<br><a href="market://details?id=org.lf_net.pgpunlocker"><img src="apps_pgpauth"><br>PGPAuth</a>: App to send a PGP-signed request to a server to open or close something, e.g. a door</p>
-<h2>I found a bug in OpenKeychain!</h2>
+<h2>OpenKeychain'de bir bug buldum!</h2>
<p>Please report the bug using the <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">issue tracker of OpenKeychain</a>.</p>
-<h2>Contribute</h2>
+<h2>Katkı</h2>
<p>If you want to help us developing OpenKeychain by contributing code <a href="https://github.com/openpgp-keychain/openpgp-keychain#contribute-code">follow our small guide on Github</a>.</p>
-<h2>Translations</h2>
+<h2>Çeviriler</h2>
<p>Help translating OpenKeychain! Everybody can participate at <a href="https://www.transifex.com/projects/p/openpgp-keychain/">OpenKeychain on Transifex</a>.</p>
</body>
diff --git a/OpenKeychain/src/main/res/raw-uk/help_changelog.html b/OpenKeychain/src/main/res/raw-uk/help_changelog.html
index f18b7917b..65842f6cc 100644
--- a/OpenKeychain/src/main/res/raw-uk/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw-uk/help_changelog.html
@@ -1,7 +1,12 @@
<html>
<head></head>
<body>
-<h2>2.10</h2>
+<h2>2.9.2</h2>
+<ul>
+<li>Fix keys broken in 2.9.1</li>
+<li>Yubikey decryption now working via API</li>
+</ul>
+<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
diff --git a/OpenKeychain/src/main/res/raw-zh/help_changelog.html b/OpenKeychain/src/main/res/raw-zh/help_changelog.html
index f18b7917b..65842f6cc 100644
--- a/OpenKeychain/src/main/res/raw-zh/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw-zh/help_changelog.html
@@ -1,7 +1,12 @@
<html>
<head></head>
<body>
-<h2>2.10</h2>
+<h2>2.9.2</h2>
+<ul>
+<li>Fix keys broken in 2.9.1</li>
+<li>Yubikey decryption now working via API</li>
+</ul>
+<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
diff --git a/OpenKeychain/src/main/res/values-cs/strings.xml b/OpenKeychain/src/main/res/values-cs/strings.xml
index 01348917a..bceaf69d1 100644
--- a/OpenKeychain/src/main/res/values-cs/strings.xml
+++ b/OpenKeychain/src/main/res/values-cs/strings.xml
@@ -5,12 +5,14 @@
<!--title-->
<string name="title_select_recipients">Vybrat klíče</string>
<string name="title_select_secret_key">Vybrat svůj klíč</string>
+ <string name="title_encrypt_text">Zašifrovat text</string>
+ <string name="title_encrypt_files">Zašifrovat soubory</string>
<string name="title_decrypt">Rozšifrovat</string>
<string name="title_authentication">Heslo</string>
<string name="title_add_subkey">Přidat podklíč</string>
<string name="title_edit_key">Editovat klíč</string>
<string name="title_preferences">Možnosti</string>
- <string name="title_api_registered_apps">Appky</string>
+ <string name="title_api_registered_apps">Aplikace</string>
<string name="title_key_server_preference">Nastavení keyservrů</string>
<string name="title_change_passphrase">Změnit heslo</string>
<string name="title_share_fingerprint_with">Sdílet otisk s...</string>
@@ -82,15 +84,31 @@
<string name="label_file_colon">Soubor:</string>
<string name="label_no_passphrase">Bez hesla</string>
<string name="label_passphrase">Heslo</string>
+ <string name="label_unlock">Odemykám...</string>
<string name="label_passphrase_again">Opakovat heslo</string>
<string name="label_algorithm">Algoritmus</string>
<string name="label_ascii_armor">Soubor ASCII armor</string>
+ <string name="label_file_ascii_armor">Povolit ASCII armor</string>
+ <string name="label_write_version_header">Dát ostatním vědět, že používáte OpenKeychain</string>
+ <string name="label_use_default_yubikey_pin">Použít výchozí Yubikey PIN</string>
+ <string name="label_label_use_default_yubikey_pin_summary">Používá základní PIN (123456) pro přístup k Yubikey přes NFC</string>
+ <string name="label_asymmetric_from">Podepsáno:</string>
+ <string name="label_to">Zašifrovat pro:</string>
+ <string name="label_delete_after_encryption">Smazat soubor po zašifrování</string>
+ <string name="label_delete_after_decryption">Smazat po rozšifrování</string>
+ <string name="label_encryption_algorithm">Šifrovací algoritmus</string>
+ <string name="label_hash_algorithm">Hashovací algoritmus</string>
+ <string name="label_symmetric">Zašifrovat heslem</string>
+ <string name="label_passphrase_cache_ttl">Cache hesel</string>
+ <string name="label_message_compression">Komprimovat zprávu</string>
+ <string name="label_file_compression">Komprimovat soubor</string>
<string name="label_keyservers">Keyservery</string>
<string name="label_key_id">ID klíče</string>
<string name="label_creation">Vytvořeno</string>
<string name="label_expiry">Expirace</string>
<string name="label_usage">Použití</string>
<string name="label_key_size">Délka klíče</string>
+ <string name="label_ecc_curve">Eliptická křivka</string>
<string name="label_main_user_id">Hlavní identita</string>
<string name="label_name">Jméno</string>
<string name="label_comment">Komentář</string>
@@ -98,6 +116,7 @@
<string name="label_send_key">Po vytvoření nahrt na vybraný keyserver</string>
<string name="label_fingerprint">Otisk</string>
<string name="expiry_date_dialog_title">Nastavit datum expirace</string>
+ <string name="label_preferred">upřednostněno</string>
<string name="user_id_no_name">&lt;beze jména&gt;</string>
<string name="none">&lt;žádný&gt;</string>
<string name="no_key">&lt;žádný klíč&gt;</string>
@@ -107,6 +126,16 @@
<string name="can_certify_not">nemůže ověřit</string>
<string name="expired">po epiraci</string>
<string name="revoked">revokovat</string>
+ <plurals name="n_keys">
+ <item quantity="one">1 klíč</item>
+ <item quantity="few">%d klíče</item>
+ <item quantity="other">%d klíčů</item>
+ </plurals>
+ <plurals name="n_keyservers">
+ <item quantity="one">%d keyserver</item>
+ <item quantity="few">%d keyservery</item>
+ <item quantity="other">%d keyserverů</item>
+ </plurals>
<string name="secret_key">Tajný klíč:</string>
<!--choice-->
<string name="choice_none">Žádný</string>
@@ -125,6 +154,8 @@
<string name="dsa">DSA</string>
<string name="elgamal">ElGamal</string>
<string name="rsa">RSA</string>
+ <string name="ecdh">ECDH</string>
+ <string name="ecdsa">ECDSA</string>
<string name="filemanager_title_open">Otevřít...</string>
<string name="warning">Varovnání</string>
<string name="error">Chyba</string>
@@ -141,6 +172,8 @@
<string name="passphrase_must_not_be_empty">Prosím zadejte heslo.</string>
<string name="passphrase_for_symmetric_encryption">Symetrická šifra.</string>
<string name="passphrase_for">Zadejte heslo pro \'%s\'</string>
+ <string name="yubikey_pin">Zadejte PIN pro přístup k Yubikey pro \'%s\'</string>
+ <string name="file_delete_confirmation">Chcete opravdu smazat\n%s?</string>
<string name="file_delete_successful">Úspěšně smazáno.</string>
<string name="no_file_selected">Nejprve vyberte soubor.</string>
<string name="encrypt_sign_successful">Úspěšně podepsáno a/nebo zašifrováno.</string>
@@ -154,8 +187,6 @@
<string name="no_keys_exported">Žádný kláč pro export.</string>
<string name="key_creation_el_gamal_info">Žádný: pouze podklíče podporují ElGamal.</string>
<string name="key_not_found">Nemohu najít klíč %08X.</string>
- <string name="key_send_success">Úspěšně nahráno na keyserver.</string>
- <string name="key_certify_success">Úspěšně ověřené identity</string>
<string name="list_empty">Seznam je prázný!</string>
<string name="nfc_successful">Úspěšně odeslaný klíč pomocí NFC Beam!</string>
<string name="key_copied_to_clipboard">Klíč byl zkopírován do schránky!</string>
@@ -201,6 +232,7 @@
<!--progress dialogs, usually ending in '…'-->
<string name="progress_done">Hotovo.</string>
<string name="progress_cancel">Zrušit</string>
+ <string name="progress_cancelling">ukončuji...</string>
<string name="progress_saving">ukládám...</string>
<string name="progress_importing">importuji...</string>
<string name="progress_exporting">exportuji...</string>
@@ -210,6 +242,8 @@
<string name="progress_generating_rsa">generuji nový RSA klíč...</string>
<string name="progress_generating_dsa">generuji nový DSA klíč...</string>
<string name="progress_generating_elgamal">generuji nový ElGamal klíč...</string>
+ <string name="progress_generating_ecdsa">generuji nový EDCSA klíč...</string>
+ <string name="progress_generating_ecdh">generuji nový EDCH klíč...</string>
<string name="progress_modify">modifikuji klíčenku...</string>
<string name="progress_modify_unlock">odemykám klíčenku...</string>
<string name="progress_modify_adduid">přidávám uživatelské IDčka...</string>
@@ -219,6 +253,11 @@
<string name="progress_modify_subkeyrevoke">revokuji podklíče...</string>
<string name="progress_modify_subkeyadd">přidávám podklíče...</string>
<string name="progress_modify_passphrase">mněním heslo...</string>
+ <plurals name="progress_exporting_key">
+ <item quantity="one">exportuji klíč...</item>
+ <item quantity="few">exportuji klíče...</item>
+ <item quantity="other">exportuji klíče...</item>
+ </plurals>
<string name="progress_extracting_signature_key">extrahuji podpisový klíč...</string>
<string name="progress_extracting_key">extrahuji klíč...</string>
<string name="progress_preparing_streams">připravuji streamy...</string>
@@ -235,7 +274,9 @@
<string name="progress_decompressing_data">rozbaluji data...</string>
<string name="progress_verifying_integrity">verifikuji integritu...</string>
<string name="progress_deleting_securely">mažu \'%s\' bezpečně...</string>
+ <string name="progress_deleting">mažu klíče...</string>
<!--action strings-->
+ <string name="hint_keyserver_search_hint">Jméno/Email/ID klíče</string>
<!--key bit length selections-->
<string name="key_size_512">512</string>
<string name="key_size_768">768</string>
@@ -250,6 +291,9 @@
<string name="key_size_custom_info_rsa">Délka RSA klíče musí být větší než 1024 a alespoň 16384. Zároveň musí být dělitelná 8mi.</string>
<string name="key_size_custom_info_dsa">Délka DSA klíče musí být alespoň 512 a nejvýše 1024. Zároveň musí být dělitelná 64.</string>
<!--elliptic curve names-->
+ <string name="key_curve_nist_p256">NIST P-256</string>
+ <string name="key_curve_nist_p384">NIST P-384</string>
+ <string name="key_curve_nist_p521">NIST P-521</string>
<!--not in for now, see SaveKeyringParcel
<string name="key_curve_bp_p256">"Brainpool P-256"</string>
<string name="key_curve_bp_p384">"Brainpool P-384"</string>
@@ -267,9 +311,9 @@
<string name="help_about_version">Verze:</string>
<!--Import-->
<string name="import_tab_keyserver">Keyserver</string>
+ <string name="import_tab_cloud">Hledat v cloudu</string>
<string name="import_tab_direct">Soubor/schránka</string>
<string name="import_tab_qr_code">QR kód/NFC</string>
- <string name="import_tab_keybase">Keybase.io</string>
<string name="import_import">Importovat vybrané klíče</string>
<string name="import_qr_code_wrong">QR kód nerozpoznán! Zkuste to znovu prosím!</string>
<string name="import_qr_code_too_short_fingerprint">Fingerprint je příliš krátký (&lt; 16 znaků)</string>
@@ -277,6 +321,7 @@
<!--Import result toast-->
<string name="view_log">Zobrazit log</string>
<string name="import_error_nothing">Nic k importu</string>
+ <string name="import_error_nothing_cancelled">Import zrušen.</string>
<string name="import_error">Chyba importu klíčů!</string>
<string name="import_with_warnings">, s varováními</string>
<!--Intent labels-->
@@ -300,16 +345,26 @@
<string name="api_settings_package_name">Jméno balíčku</string>
<string name="api_settings_package_signature">SHA-256 z podpisu balíčku</string>
<string name="api_settings_accounts">Účty</string>
+ <string name="api_settings_settings">Nastavení</string>
+ <string name="api_settings_key">Klíč účtu:</string>
<string name="api_settings_accounts_empty">Žádné účty nejsou specifikovány pro tuto appku.</string>
<string name="api_register_allow">Povolit přístup</string>
<string name="api_register_disallow">Zamítnout přístup</string>
<string name="api_register_error_select_key">Prosím vyberte klíč!</string>
+ <string name="api_select_pub_keys_missing_text">Nebyly nalezeny žádné klíče pro tyto identity:</string>
+ <string name="api_select_pub_keys_dublicates_text">Existuje více jak jeden klíč pro tyto identity:</string>
<string name="api_select_pub_keys_text">Zkontrolujte prosím seznam příjemců!</string>
- <string name="api_error_wrong_signature">Selhala kontrola podpisu! Instalovali jste tuto appku z jiného zdroje? Pokud jste si jistí, že toto není útok, zneplatněte registraci této appky v OpenKeychain a poté ji znovu zaregistrujte.</string>
+ <string name="api_select_pub_keys_text_no_user_ids">Vyberte prosím příjemce!</string>
+ <string name="api_error_wrong_signature">Selhala kontrola podpisu! Instalovali jste tuto aplikaci z jiného zdroje? Pokud jste si jistí, že toto není útok, zneplatněte registraci této aplikace v OpenKeychain a poté ji znovu zaregistrujte.</string>
<!--Share-->
<string name="share_qr_code_dialog_title">Sdílet pomocí QR kódu</string>
<string name="share_nfc_dialog">Sdílet pomocí NFC</string>
<!--Key list-->
+ <plurals name="key_list_selected_keys">
+ <item quantity="one">1 kíč vybrán</item>
+ <item quantity="few">%d klíče vybrány.</item>
+ <item quantity="other">%d klíčů vybráno.</item>
+ </plurals>
<string name="key_list_empty_text1">Žádné klíče nejsou zatím k dispozici...</string>
<string name="key_list_empty_text2">Můžete začít pomocí</string>
<string name="key_list_empty_text3">nebo</string>
@@ -317,18 +372,37 @@
<string name="key_list_empty_button_import">Importuji existující klíč.</string>
<!--Key view-->
<string name="key_view_action_edit">Editovat klíč</string>
+ <string name="key_view_action_encrypt">Zašifrovat text</string>
+ <string name="key_view_action_encrypt_files">soubory</string>
<string name="key_view_action_certify">Certifikovat identity</string>
<string name="key_view_action_update">Aktualizuji z keyserveru</string>
<string name="key_view_action_share_with">Sdílet pomocí...</string>
+ <string name="key_view_action_share_nfc">Sdílet přes NFC</string>
+ <string name="key_view_action_upload">Nahrát na keyserver</string>
<string name="key_view_tab_main">Hlavní info</string>
<string name="key_view_tab_share">Sdílet</string>
<string name="key_view_tab_keys">Podklíče</string>
<string name="key_view_tab_certs">Certifikáty</string>
+ <string name="user_id_info_revoked_title">Zneplatněno</string>
+ <string name="user_id_info_revoked_text">Tato identity byla zneplatněna vlastníkem klíče. Klíč již není platný.</string>
+ <string name="user_id_info_verified_title">Ověřeno</string>
+ <string name="user_id_info_verified_text">Tato identita byla ověřena.</string>
+ <string name="user_id_info_not_verified_title">Neověřeno</string>
+ <string name="user_id_info_not_verified_text">Tato identita nebyla ještě ověřena. Nemůžete si být jisti, jestli identita opravdu odpovídá určité osobě.</string>
+ <string name="user_id_info_invalid_title">Neplatná</string>
+ <string name="user_id_info_invalid_text">S touto identitou je něco v nepořádku!</string>
<!--Edit key-->
<string name="edit_key_action_change_passphrase">Změnit heslo</string>
<string name="edit_key_action_add_identity">Přidat identitu</string>
<string name="edit_key_action_add_subkey">Přidat podklíč</string>
<string name="edit_key_edit_user_id_title">Vyberte akci!</string>
+ <string-array name="edit_key_edit_user_id">
+ <item>Změnit na hlavní identitu</item>
+ <item>Zneplatnit identitu</item>
+ </string-array>
+ <string-array name="edit_key_edit_user_id_revert_revocation">
+ <item>Zrušit zneplatnění</item>
+ </string-array>
<string name="edit_key_edit_user_id_revoked">Tato identity byla zneplatněna. Toto není možné vzít zpět.</string>
<string name="edit_key_edit_subkey_title">Vyberte akci!</string>
<string name="edit_key_new_subkey">nový</string>
@@ -344,11 +418,15 @@
<string name="view_key_expired">Tento klíč vyexpiroval!</string>
<!--Navigation Drawer-->
<string name="nav_keys">Klíče</string>
- <string name="nav_apps">Appky</string>
+ <string name="nav_encrypt_text">Zašifrovat text</string>
+ <string name="nav_encrypt_files">Zašifrovat soubory</string>
+ <string name="nav_decrypt">Rozšifrovat</string>
+ <string name="nav_apps">Aplikace</string>
<string name="drawer_open">Otevřít navigační panel</string>
<string name="drawer_close">Zavří navigační panel</string>
<string name="my_keys">Moje Klíče</string>
<!--hints-->
+ <string name="encrypt_content_edit_text_hint">Napsat text</string>
<string name="decrypt_content_edit_text_hint">Vložte zašifrovaný text pro jeho rozšifrování a/nebo ověření...</string>
<!--certs-->
<string name="cert_default">výchozí</string>
@@ -361,20 +439,57 @@
<string name="cert_verify_error">chyba!</string>
<string name="cert_verify_unavailable">klíč není k dispozici</string>
<!--LogType log messages. Errors should have _ERROR_ in their name and end with a !-->
+ <string name="msg_internal_error">Vnitřní chyba!</string>
+ <string name="msg_cancelled">Operace ukončena.</string>
<!--Import Public log entries-->
+ <string name="msg_ip_encode_fail">Operace selhala kvůli chybě kódování</string>
+ <string name="msg_ip_fail_io_exc">Operace selhala kvůli chybě vstupu/výstupu</string>
+ <string name="msg_ip_fail_op_exc">Operace selhala kvůli chybě databáze</string>
+ <string name="msg_ip_fail_remote_ex">Operace selhala kvůli interní chybě </string>
+ <string name="msg_ip">Importuje se veřejná klíčenka %s</string>
+ <string name="msg_ip_uid_revoked">Uživatelské ID je zneplatněné</string>
<!--Import Secret log entries-->
+ <string name="msg_is_db_exception">Chyba databáze!</string>
<!--Keyring Canonicalization log entries-->
<!--Keyring merging log entries-->
+ <string name="msg_mg_unchanged">Žádné nové certifikáty</string>
<!--createSecretKeyRing-->
+ <string name="msg_cr">Generuji nový hlavní klíč</string>
+ <string name="msg_cr_error_no_keysize">Nebyla specifikována eliptická křivka! Toto je chyba v programování a je třeba ji nahlásit!</string>
+ <string name="msg_cr_error_internal_pgp">Vnitřní chyba PGP!</string>
<!--modifySecretKeyRing-->
+ <string name="msg_mr">Upravuji klíčenku %s</string>
+ <string name="msg_mf_uid_error_empty">Uživatelské ID nesmí být prázdné!</string>
<!--Consolidate-->
+ <string name="msg_con_error_db">Chyba otevírání databáze!</string>
+ <!--Other messages used in OperationLogs-->
+ <string name="msg_ek_error_not_found">Klíč nenalezen!</string>
+ <!--Messages for DecryptVerify operation-->
+ <!--Messages for SignEncrypt operation-->
<!--PassphraseCache-->
+ <string name="passp_cache_notif_clear">Smazat cache</string>
+ <string name="passp_cache_notif_pwd">Heslo</string>
<!--unsorted-->
+ <string name="section_cert">Detaily certifikátu</string>
<string name="label_user_id">Identita</string>
<string name="unknown_uid">&lt;neznámý&gt;</string>
<string name="empty_certs">Žádné certifikáty pro tento klíč</string>
<string name="label_revocation">Důvod revokace</string>
<string name="label_verify_status">Stav ověření</string>
<string name="label_cert_type">Typ</string>
+ <string name="error_key_not_found">Klíč nenalezen!</string>
+ <string name="error_key_processing">Chyba zpracování klíče!</string>
+ <string name="key_no_passphrase">bez hesla</string>
+ <string name="key_unavailable">nedostupný</string>
+ <string name="secret_cannot_multiple">Vaše vlastní klíče lze mazat pouze jednotlivě!</string>
+ <string name="title_view_cert">Zobrazit detaily certifikátu</string>
+ <string name="unknown_algorithm">neznámý</string>
+ <string name="can_sign_not">nelze podepsat</string>
+ <string name="error_no_encrypt_subkey">Není dostupný šifrovací podklíč!</string>
+ <string name="contact_show_key">Zobrazit klíč (%s)</string>
<!--First Time-->
+ <string name="first_time_text1">Převezměte opět kontrolu nad svým soukromím s OpenKeychain!</string>
+ <string name="first_time_create_key">Vytvořit vlastní klíč</string>
+ <string name="first_time_import_key">Importovat existující klíč</string>
+ <string name="first_time_skip">Přeskočit nastavení</string>
</resources>
diff --git a/OpenKeychain/src/main/res/values-de/strings.xml b/OpenKeychain/src/main/res/values-de/strings.xml
index edb25ad55..ba374320d 100644
--- a/OpenKeychain/src/main/res/values-de/strings.xml
+++ b/OpenKeychain/src/main/res/values-de/strings.xml
@@ -84,20 +84,32 @@
<string name="label_file_colon">Datei:</string>
<string name="label_no_passphrase">Kein Passwort</string>
<string name="label_passphrase">Passwort</string>
+ <string name="label_unlock">Wird entsperrt...</string>
<string name="label_passphrase_again">Passwort wiederholen</string>
<string name="label_algorithm">Algorithmus</string>
<string name="label_ascii_armor">Datei: ASCII Armor</string>
+ <string name="label_file_ascii_armor">Aktiviere ASCII Armor</string>
<string name="label_write_version_header">Lass andere wissen dass du OpenKeychain nutzt</string>
- <string name="label_write_version_header_summary">Fügt \'OpenKeychain v2.7\' zu OpenPGP Signaturen, DAten und exportierten Schlüsseln hinzu</string>
+ <string name="label_write_version_header_summary">Fügt \'OpenKeychain v2.7\' zu OpenPGP-Signaturen, Daten und exportierten Schlüsseln hinzu</string>
+ <string name="label_use_default_yubikey_pin">Standard Yubikey PIN verwenden</string>
+ <string name="label_label_use_default_yubikey_pin_summary">Verwendet Standard PIN (123456) um auf Yubikeys via NFC zuzugreifen</string>
<string name="label_asymmetric_from">Signiert von:</string>
<string name="label_to">Verschlüsselt an:</string>
+ <string name="label_delete_after_encryption">Datei nach Verschlüsselung löschen</string>
+ <string name="label_delete_after_decryption">Nach Entschlüsselung löschen</string>
+ <string name="label_encryption_algorithm">Verschlüsselungsalgorithmus</string>
+ <string name="label_hash_algorithm">Hash-Algorithmus</string>
+ <string name="label_symmetric">Mit Passwort verschlüsseln</string>
+ <string name="label_passphrase_cache_ttl">Passwort-Cache</string>
+ <string name="label_message_compression">Nachrichten Kompression</string>
+ <string name="label_file_compression">Datei Kompression</string>
<string name="label_keyservers">Schlüsselserver</string>
<string name="label_key_id">Schlüssel-ID</string>
<string name="label_creation">Erstellungsdatum</string>
<string name="label_expiry">Ablaufdatum</string>
<string name="label_usage">Verwendungszweck</string>
<string name="label_key_size">Schlüssellänge</string>
- <string name="label_ecc_curve">Eliptische Kurve</string>
+ <string name="label_ecc_curve">Elliptische Kurve</string>
<string name="label_main_user_id">Hauptidentität</string>
<string name="label_name">Name</string>
<string name="label_comment">Kommentar</string>
@@ -158,6 +170,7 @@
<string name="passphrase_must_not_be_empty">Bitte ein Passwort eingeben.</string>
<string name="passphrase_for_symmetric_encryption">Symmetrische Verschlüsselung.</string>
<string name="passphrase_for">Passwort für \'%s\' eingeben</string>
+ <string name="yubikey_pin">PIN für Zugriff auf Yubikey für \'%s\' eingeben</string>
<string name="file_delete_confirmation">%s wirklich löschen?</string>
<string name="file_delete_successful">Erfolgreich gelöscht.</string>
<string name="no_file_selected">Zuerst eine Datei auswählen.</string>
@@ -167,7 +180,11 @@
<string name="select_encryption_key">Mindestens einen Schlüssel zum Verschlüsseln auswählen.</string>
<string name="select_encryption_or_signature_key">Mindestens einen Schlüssel zum Verschlüsseln oder einen zum Signieren auswählen.</string>
<string name="specify_file_to_encrypt_to">Bitte angeben in welche Datei verschlüsselt werden soll.\nWARNUNG: Datei wird überschrieben, wenn sie bereits existiert.</string>
+ <string name="specify_file_to_decrypt_to">Bitte angeben in welche Datei entschlüsselt werden soll.\nWARNUNG: Datei wird überschrieben, wenn sie bereits existiert. </string>
<string name="specify_file_to_export_to">Bitte angeben in welche Datei exportiert werden soll.\nWARNUNG: Datei wird überschrieben, wenn sie bereits existiert. </string>
+ <string name="key_deletion_confirmation_multi">Möchtest du wirklich alle ausgewählten öffentlichen Schlüssel löschen?\nDies kann nicht rückgängig gemacht werden!</string>
+ <string name="secret_key_deletion_confirmation">Soll der PRIVATE Schlüssel \'%s\' wirklich gelöscht werden?\nDies kann nicht rückgängig gemacht werden!</string>
+ <string name="public_key_deletetion_confirmation">Soll der öffentliche Schlüssel \'%s\' wirklich gelöscht werden?\nDies kann nicht rückgängig gemacht werden! </string>
<string name="also_export_secret_keys">Exportiere auch private Schlüssel</string>
<string name="reinstall_openkeychain">Sie sind auf einen Fehler in Android gestoßen. Installieren Sie OpenKeychain erneut, wenn Sie Ihre Kontakte mit Schlüsseln verbinden wollen.</string>
<string name="key_exported">1 Schlüssel erfolgreich exportiert.</string>
@@ -175,8 +192,10 @@
<string name="no_keys_exported">Keine Schlüssel exportiert.</string>
<string name="key_creation_el_gamal_info">Beachte: Nur Unterschlüssel unterstützen ElGamal.</string>
<string name="key_not_found">Schlüssel %08X konnte nicht gefunden werden.</string>
- <string name="key_send_success">Schlüssel wurde erfolgreich hochgeladen.</string>
- <string name="key_certify_success">Identitäten erfolgreich beglaubigt</string>
+ <plurals name="bad_keys_encountered">
+ <item quantity="one">%d kaputter privater Schlüssel ignoriert. Evtl. wurde er mit folgender Option exportiert:\n --export-secret-subkeys\nUnbedingt mit der Option\n --export-secret-keys\n exportieren.</item>
+ <item quantity="other">%d kaputte private Schlüssel ignoriert. Evtl. wurden sie mit folgender Option exportiert:\n --export-secret-subkeys\nUnbedingt mit der Option\n --export-secret-keys\n exportieren.</item>
+ </plurals>
<string name="list_empty">Diese Liste ist leer!</string>
<string name="nfc_successful">Schlüssel erfolgreich mit NFC-Beam gesendet!</string>
<string name="key_copied_to_clipboard">Schlüssel wurde in die Zwischenablage kopiert!</string>
@@ -204,7 +223,7 @@
<string name="error_jelly_bean_needed">Android 4.1 wird benötigt um Androids NFC Beam nutzen zu können!</string>
<string name="error_nfc_needed">NFC steht auf diesem Gerät nicht zur Verfügung!</string>
<string name="error_nothing_import">Keine Schlüssel gefunden!</string>
- <string name="error_query_too_short">Suchanfrage zu kurz. Bitte ändere deine Andrage!</string>
+ <string name="error_query_too_short">Suchanfrage zu kurz. Bitte ändere deine Anfrage!</string>
<string name="error_searching_keys">Ein Fehler ist beim Suchen der Schlüssel aufgetreten.</string>
<string name="error_too_many_responses">Die Schlüsselsuche ergab zu viele Treffer. Bitte präzisiere deine Anfrage!</string>
<string name="error_too_short_or_too_many_responses">Keine oder zu viele Schlüssel wurden gefunden. Bitte verbessere deine Anfrage!</string>
@@ -261,7 +280,7 @@
<string name="progress_processing_signature">Signatur wird verarbeitet…</string>
<string name="progress_verifying_signature">Signatur wird verifiziert…</string>
<string name="progress_signing">Wird signiert…</string>
- <string name="progress_certifying">Wird beglaubige...</string>
+ <string name="progress_certifying">Wird beglaubigt...</string>
<string name="progress_reading_data">Daten werden gelesen…</string>
<string name="progress_finding_key">Schlüssel wird gesucht…</string>
<string name="progress_decompressing_data">Daten werden entpackt…</string>
@@ -284,6 +303,9 @@
<string name="key_size_custom_info_rsa">Die RSA-Schlüssellänge muss grösser als 1024 und höchstens 16384 sein. Sie muss auch ein Mehrfaches von 8 sein.</string>
<string name="key_size_custom_info_dsa">Die DSA-Schlüssellänge muss mindestens 512 und höchstens 1024 sein. Auch muss sie ein Mehrfaches von 64 sein.</string>
<!--elliptic curve names-->
+ <string name="key_curve_nist_p256">NIST P-256</string>
+ <string name="key_curve_nist_p384">NIST P-384</string>
+ <string name="key_curve_nist_p521">NIST P-521</string>
<!--not in for now, see SaveKeyringParcel
<string name="key_curve_bp_p256">"Brainpool P-256"</string>
<string name="key_curve_bp_p384">"Brainpool P-384"</string>
@@ -303,7 +325,6 @@
<string name="import_tab_keyserver">Schlüsselserver</string>
<string name="import_tab_direct">Datei/Zwischenablage</string>
<string name="import_tab_qr_code">QR-Code/NFC</string>
- <string name="import_tab_keybase">Keybase.io</string>
<string name="import_import">Ausgewählte Schlüssel importieren</string>
<string name="import_qr_code_wrong">Falsch formatierter QR-Code! Bitte erneut versuchen!</string>
<string name="import_qr_code_too_short_fingerprint">Der Fingerabdruck ist zu kurz (&lt; 16 Zeichen)</string>
@@ -337,6 +358,7 @@
<string name="intent_send_encrypt">Verschlüsseln mit OpenKeychain </string>
<string name="intent_send_decrypt">Entschlüsseln mit OpenKeychain </string>
<!--Remote API-->
+ <string name="api_no_apps">Keine registrierten Apps!\n\nEine Liste der unterstützten Anwendungen ist in der \'Hilfe\' verfügbar.</string>
<string name="api_settings_show_info">Erweiterte Informationen anzeigen</string>
<string name="api_settings_hide_info">Erweiterte Informationen ausblenden</string>
<string name="api_settings_show_advanced">Erweiterte Einstellungen anzeigen</string>
@@ -353,8 +375,11 @@
<string name="api_settings_package_signature">SHA-256 der Paketsignatur</string>
<string name="api_settings_accounts">Konten</string>
<string name="api_settings_settings">Einstellungen</string>
+ <string name="api_settings_key">Account Schlüssel:</string>
<string name="api_settings_accounts_empty">Keine Konten mit dieser Anwendung verknüpft.</string>
<string name="api_create_account_text">Die App verlangt die Erstellung eines neuen Accounts. Bitte wähle einen deiner existierenden Schlüssel aus oder erstelle einen neuen.\nApps können nur hier ausgewählte Schlüssel nutzen.</string>
+ <string name="api_update_account_text">Der Schlüssel für diesen Account wurde gelöscht. Bitte wähle einen anderen aus!\nApps können nur hier ausgewählte Schlüssel nutzen.</string>
+ <string name="api_register_text">Folgende Anwendung möchte Nachrichten ver-/entschlüsseln und in Ihrem Namen signieren. Zugriff erlauben?\n\nVORSICHT: Sollten Sie nicht wissen warum dieses Fenster erscheint, sollten Sie den Zugriff verbieten! Sie können Zugriffe später über das Menü \'Apps\' widerrufen.</string>
<string name="api_register_allow">Zugriff erlauben</string>
<string name="api_register_disallow">Zugriff verbieten</string>
<string name="api_register_error_select_key">Bitte einen Schlüssel auswählen!</string>
@@ -378,10 +403,13 @@
<string name="key_list_empty_button_import">Importiere einen existierenden Schlüssel.</string>
<!--Key view-->
<string name="key_view_action_edit">Schlüssel bearbeiten</string>
+ <string name="key_view_action_encrypt">Text Verschlüsseln</string>
+ <string name="key_view_action_encrypt_files">Dateien</string>
<string name="key_view_action_certify">Identitäten beglaubigen</string>
<string name="key_view_action_update">Von Schlüsselserver aktualisieren</string>
<string name="key_view_action_share_with">Teilen über...</string>
<string name="key_view_action_share_nfc">Über NFC teilen</string>
+ <string name="key_view_action_upload">Auf Schlüsselserver hochladen</string>
<string name="key_view_tab_main">Informationen</string>
<string name="key_view_tab_share">Teilen</string>
<string name="key_view_tab_keys">Unterschlüssel</string>
@@ -391,6 +419,7 @@
<string name="user_id_info_verified_title">Überprüft</string>
<string name="user_id_info_verified_text">Diese Identität wurde überprüft.</string>
<string name="user_id_info_not_verified_title">Nicht überprüft</string>
+ <string name="user_id_info_not_verified_text">Diese Identität wurde noch nicht verifiziert. Du kannst nicht sicher sein, ob diese Identität wirklich zu einer bestimmten Person gehört.</string>
<string name="user_id_info_invalid_title">Ungültig</string>
<string name="user_id_info_invalid_text">Irgend etwas ist mit dieser Identität nicht in Ordnung!</string>
<!--Edit key-->
@@ -398,12 +427,20 @@
<string name="edit_key_action_add_identity">Identität hinzufügen</string>
<string name="edit_key_action_add_subkey">Unterschlüssel hinzufügen</string>
<string name="edit_key_edit_user_id_title">Eine Aktion auswählen</string>
+ <string-array name="edit_key_edit_user_id">
+ <item>Als primäre Identität definieren</item>
+ <item>Identität widerrufen</item>
+ </string-array>
+ <string name="edit_key_edit_user_id_revoked">Diese Identität wurde widerrufen. Dies kann nicht rückgängig gemacht werden.</string>
<string name="edit_key_edit_subkey_title">Aktion auswählen!</string>
<string name="edit_key_new_subkey">neu</string>
+ <string name="edit_key_select_flag">Mindestens ein Attribut wählen!</string>
<!--Create key-->
<string name="create_key_upload">Schlüssel auf Schlüsselserver hochladen</string>
<string name="create_key_empty">Dieses Feld wird benötigt</string>
<string name="create_key_passphrases_not_equal">Passwörter stimmen nicht überein</string>
+ <string name="create_key_final_text">Du hast folgende Identität eingegeben:</string>
+ <string name="create_key_final_robot_text">Einen Schlüssel zu erzeugen braucht eine Weile, trink in der Zeit einen Kaffee...\n(3 Unterschlüssel, RSA 4096 bit)</string>
<string name="create_key_text">Vollen Namen und Emailadresse angeben und Passwort wählen.</string>
<string name="create_key_hint_full_name">Vollständiger Name, z.B. Max Mustermann</string>
<!--View key-->
@@ -411,12 +448,15 @@
<string name="view_key_expired">Dieser Schlüssel ist nicht mehr gültig!</string>
<!--Navigation Drawer-->
<string name="nav_keys">Schlüssel</string>
+ <string name="nav_encrypt_text">Text Verschlüsseln</string>
+ <string name="nav_encrypt_files">Dateien Verschlüsseln</string>
<string name="nav_decrypt">Entschlüsseln</string>
<string name="nav_apps">Apps</string>
<string name="drawer_open">Menü öffnen</string>
<string name="drawer_close">Menü schließen</string>
<string name="my_keys">Meine Schlüssel</string>
<!--hints-->
+ <string name="encrypt_content_edit_text_hint">Text eingeben</string>
<string name="decrypt_content_edit_text_hint">Hier die verschlüsselte Nachricht eingeben um sie zu entschlüsseln und/oder zu verifizieren…</string>
<!--certs-->
<string name="cert_default">normal</string>
@@ -430,33 +470,87 @@
<string name="cert_verify_unavailable">Schlüssel nicht verfügbar</string>
<!--LogType log messages. Errors should have _ERROR_ in their name and end with a !-->
<string name="msg_internal_error">Interner Fehler!</string>
+ <string name="msg_cancelled">Vorgang abgebrochen.</string>
<!--Import Public log entries-->
+ <string name="msg_ip_bad_type_secret">Es wurde versucht einen geheimen Schlüsselbund als Öffentlich zu importieren. Das ist ein Fehler, bitte reiche einen Bericht ein.</string>
+ <string name="msg_ip_delete_old_fail">Kein alter Schlüssel gelöscht (Einen neuen erzeugen?)</string>
<string name="msg_ip_delete_old_ok">Alte Schlüssel aus der Datenbank löschen</string>
<string name="msg_ip_encode_fail">Die Anwendung ist wegen Kodierungsfehler fehlgeschlagen</string>
<string name="msg_ip_error_io_exc">Die Anwendung ist wegen eines Eingabe/Ausgabe-Fehlers fehlgeschlagen</string>
+ <string name="msg_ip_error_op_exc">Vorgang ist wegen eines Datenbankfehlers fehlgeschlagen</string>
<string name="msg_ip_error_remote_ex">Die Anwendung ist wegen internen Fehler fehlgeschlagen</string>
<string name="msg_ip">Importiere öffentlichen Schlüsselbund %s</string>
<string name="msg_ip_insert_keyring">Schlüsselbund-daten werden kodiert</string>
<string name="msg_ip_insert_keys">Analysiere Schlüssel</string>
<string name="msg_ip_prepare">Datenbank-Transaktionen werden vorbereitet</string>
<string name="msg_ip_master">Hauptschlüssel %s wird verarbeitet</string>
+ <string name="msg_ip_master_expired">Schlüsselbund abgelaufen am %s</string>
+ <string name="msg_ip_master_expires">Schlüsselbund läuft ab am %s</string>
+ <string name="msg_ip_master_flags_ces">Hauptschlüssel Attribute: beglaubigen, verschlüsseln, signieren</string>
+ <string name="msg_ip_master_flags_cex">Hauptschlüssel Attribute: beglaubigen, verschlüsseln</string>
+ <string name="msg_ip_master_flags_cxs">Hauptschlüssel Attribute: beglaubigen, signieren</string>
+ <string name="msg_ip_master_flags_xes">Hauptschlüssel Attribute: verschlüsseln, signieren</string>
+ <string name="msg_ip_master_flags_cxx">Hauptschlüssel Attribute: beglaubigen</string>
+ <string name="msg_ip_master_flags_xex">Hauptschlüssel Attribute: verschlüsseln</string>
+ <string name="msg_ip_master_flags_xxs">Hauptschlüssel Attribute: signieren</string>
+ <string name="msg_ip_master_flags_xxx">Hauptschlüssel Attribute: Keine</string>
<string name="msg_ip_subkey">Unterschlüssel %s wird bearbeitet</string>
+ <string name="msg_ip_subkey_flags_ces">Unterschlüssel Attribute: beglaubigen, verschlüsseln, signieren</string>
+ <string name="msg_ip_subkey_flags_cex">Unterschlüssel Attribute: beglaubigen, verschlüsseln</string>
+ <string name="msg_ip_subkey_flags_cxs">Unterschlüssel Attribute: beglaubigen, signieren</string>
+ <string name="msg_ip_subkey_flags_xes">Unterschlüssel Attribute: verschlüsseln, signieren</string>
+ <string name="msg_ip_subkey_flags_cxx">Unterschlüssel Attribute: beglaubigen</string>
+ <string name="msg_ip_subkey_flags_xex">Unterschlüssel Attribute: verschlüsseln</string>
+ <string name="msg_ip_subkey_flags_xxs">Unterschlüssel Attribute: signieren</string>
+ <string name="msg_ip_subkey_flags_xxx">Unterschlüssel Attribute: Keine</string>
+ <string name="msg_ip_success">Öffentlicher Schlüsselbund erfolgreich importiert</string>
+ <string name="msg_ip_success_identical">Schlüsselbund enthält keine neuen Daten, es gibt nichts zu tun.</string>
+ <string name="msg_ip_uid_cert_bad">Fehlerhafte Beglaubigung aufgetreten!</string>
+ <string name="msg_ip_uid_cert_error">Fehler beim Verarbeiten der Beglaubigung!</string>
+ <plurals name="msg_ip_uid_certs_unknown">
+ <item quantity="one">Ignoriere eine Beglaubigung, ausgestellt von unbekanntm öffentlichen Schlüssel</item>
+ <item quantity="other">Ignoriere %s Beglaubigungen, ausgestellt von unbekannten öffentlichen Schlüsseln</item>
+ </plurals>
<string name="msg_ip_uid_revoked">Benutzerkennung wurde widerrufen</string>
+ <string name="msg_is_bad_type_public">Es wurde versucht einen öffentlichen Schlüsselbund als Geheim zu importieren. Das ist ein Fehler, bitte reiche einen Bericht ein.</string>
<!--Import Secret log entries-->
+ <string name="msg_is">Importiere geheimen Schlüssel %s</string>
<string name="msg_is_db_exception">Datenbankfehler!</string>
<string name="msg_is_importing_subkeys">Geheime Unterschlüssel werden bearbeitet</string>
+ <string name="msg_is_io_exc">Kodierungsfehler Schlüsselbund</string>
+ <string name="msg_is_pubring_generate">Generiere öffentlichen Schlüsselbund aus geheimem Schlüsselbund</string>
<string name="msg_is_success_identical">Schlüsselbund enthält keine neuen Daten, es gibt nichts zu tun.</string>
<string name="msg_is_success">Geheimer Schlüsselbund erfolgreich importiert</string>
<!--Keyring Canonicalization log entries-->
+ <string name="msg_kc_revoke_bad_err">Entferne fehlerhaftes Schlüsselbund Widerrufszertifikat</string>
<string name="msg_kc_sub">Verarbeite Unterschlüssel %s</string>
<!--Keyring merging log entries-->
<!--createSecretKeyRing-->
+ <string name="msg_cr_error_no_certify">Hauptschlüssel benötigt das Attribut beglaubigen!</string>
+ <string name="msg_cr_error_no_curve">Keine Schlüsselgröße angegeben. Das ist ein Progammierfehler, bitte reiche einen Fehlerbericht ein!</string>
+ <string name="msg_cr_error_no_keysize">Keine Elliptische Kurve angegeben. Das ist ein Progammierfehler, bitte reiche einen Fehlerbericht ein!</string>
+ <string name="msg_cr_error_internal_pgp">Interner PGP Fehler!</string>
+ <string name="msg_cr_error_unknown_algo">Unbekannter Algorithmus ausgewählt. Das ist ein Progammierfehler, bitte reiche einen Fehlerbericht ein!</string>
+ <string name="msg_cr_error_flags_dsa">Falsche Schlüsselattribute gewählt, DSA kann nicht zum verschlüsseln verwendet werden!</string>
+ <string name="msg_cr_error_flags_elgamal">Falsche Schlüsselattribute gewählt, ElGamal kann nicht zum signieren verwendet werden!</string>
+ <string name="msg_cr_error_flags_ecdsa">Falsche Schlüsselattribute gewählt, ECDSA kann nicht zum verschlüsseln verwendet werden!</string>
+ <string name="msg_cr_error_flags_ecdh">Falsche Schlüsselattribute gewählt, ECDH kann nicht zum signieren verwendet werden!</string>
<!--modifySecretKeyRing-->
+ <string name="msg_mf_error_keyid">Keine Schlüssel ID. Dies ist ein interner Fehler, bitte reiche einen Fehlerbericht ein.</string>
+ <string name="msg_mf_error_noexist_primary">Falsche primäre User-ID definiert!</string>
+ <string name="msg_mf_error_noexist_revoke">Falsche User-ID für Widerruf definiert!</string>
<string name="msg_mf_uid_primary">Ändere primäre Benutzerkenung auf %s</string>
<string name="msg_mf_uid_revoke">Widerrufe Benutzerkennung %s</string>
<string name="msg_mf_uid_error_empty">Benutzerkennung darf nicht leer sein!</string>
+ <string name="msg_mf_unlock_error">Fehler beim entsperren des Schlüsselbunds</string>
+ <string name="msg_mf_unlock">Schlüsselbund wird entsperrt</string>
<!--Consolidate-->
+ <!--Other messages used in OperationLogs-->
+ <string name="msg_ek_error_not_found">Schlüssel nicht gefunden!</string>
+ <!--Messages for DecryptVerify operation-->
+ <!--Messages for SignEncrypt operation-->
<!--PassphraseCache-->
+ <string name="passp_cache_notif_pwd">Passwort</string>
<!--unsorted-->
<string name="section_certifier_id">Beglaubiger</string>
<string name="section_cert">Zertifikatdetails</string>
@@ -470,10 +564,17 @@
<string name="error_key_not_found">Schlüssel nicht gefunden!</string>
<string name="error_key_processing">Fehler bei der Verarbeitung des Schlüssels!</string>
<string name="key_stripped">nicht verfügbar</string>
+ <string name="key_no_passphrase">Kein Passwort</string>
+ <string name="key_unavailable">nicht verfügbar</string>
+ <string name="secret_cannot_multiple">Deine eigenen Schlüssel können nur einzeln gelöscht werden!</string>
<string name="title_view_cert">Zertifikatdetails anzeigen</string>
<string name="unknown_algorithm">unbekannt</string>
<string name="can_sign_not">Kann nicht unterschreiben</string>
<string name="error_no_encrypt_subkey">Kein Unterschlüssel zum Verschlüsseln verfügbar!</string>
+ <string name="info_no_manual_account_creation">Erstelle keine OpenKeychain-Accounts manuell.\n Für mehr Informationen sieh in die Hilfe.</string>
<string name="contact_show_key">Schlüssel anzeigen (%s)</string>
<!--First Time-->
+ <string name="first_time_create_key">Erzeuge meinen Schlüssel</string>
+ <string name="first_time_import_key">Importiere existierenden Schlüssel</string>
+ <string name="first_time_skip">Setup überspringen</string>
</resources>
diff --git a/OpenKeychain/src/main/res/values-es/strings.xml b/OpenKeychain/src/main/res/values-es/strings.xml
index 9e96fb1af..a7485bb92 100644
--- a/OpenKeychain/src/main/res/values-es/strings.xml
+++ b/OpenKeychain/src/main/res/values-es/strings.xml
@@ -12,6 +12,7 @@
<string name="title_add_subkey">Añadir subclave</string>
<string name="title_edit_key"> Editar clave</string>
<string name="title_preferences"> Preferencias</string>
+ <string name="title_cloud_search_preferences">Preferencias de búsqueda en la nube</string>
<string name="title_api_registered_apps">Aplicaciones</string>
<string name="title_key_server_preference">Prioridad del servidor de claves</string>
<string name="title_change_passphrase">Cambiar frase de contraseña</string>
@@ -34,6 +35,7 @@
<!--section-->
<string name="section_user_ids">Identidades</string>
<string name="section_keys">Subclaves</string>
+ <string name="section_cloud_search">Búsqueda en la nube</string>
<string name="section_general">General</string>
<string name="section_defaults">Predeterminados</string>
<string name="section_advanced">Avanzado</string>
@@ -117,6 +119,8 @@
<string name="label_send_key">Cargar clave al servidor de claves seleccionado después de la certificación</string>
<string name="label_fingerprint">Huella digital</string>
<string name="expiry_date_dialog_title">Establer la fecha de vencimiento</string>
+ <string name="label_first_keyserver_is_used">(Se prefiere el primer servidor de claves listado)</string>
+ <string name="label_preferred">preferido</string>
<string name="user_id_no_name">&lt;sin nombre&gt;</string>
<string name="none">&lt;ninguna&gt;</string>
<string name="no_key">&lt;sin clave&gt;</string>
@@ -196,8 +200,6 @@
<item quantity="one">%d clave secreta (privada) defectuosa ignorada. Quizá exportó con la opción\n --export-secret-subkeys\nAsegúrese de que exporta con\n --export-secret-keys\nen su lugar.\"</item>
<item quantity="other">%d claves secretas (privadas) defectuosas ignoradas. Quizá exportó con la opción\n --export-secret-subkeys\nAsegúrese de que exporta con\n --export-secret-keys\nen su lugar.\"</item>
</plurals>
- <string name="key_send_success">Clave cargada al servidor satisfactoriamente</string>
- <string name="key_certify_success">Identidades certificadas con éxito</string>
<string name="list_empty">¡Esta lista está vacía!</string>
<string name="nfc_successful">¡Clave enviada con éxito vía NFC Beam (haz NFC)!</string>
<string name="key_copied_to_clipboard">¡La clave ha sido copiada al portapapeles!</string>
@@ -266,6 +268,7 @@
<string name="progress_modify_primaryuid">cambiando identidad primaria de usuario...</string>
<string name="progress_modify_subkeychange">modificando subclaves...</string>
<string name="progress_modify_subkeyrevoke">revocando subclaves...</string>
+ <string name="progress_modify_subkeystrip">desnudando claves...</string>
<string name="progress_modify_subkeyadd">añadiendo subclaves...</string>
<string name="progress_modify_passphrase">cambiando frase-contraseña...</string>
<plurals name="progress_exporting_key">
@@ -293,7 +296,7 @@
<string name="progress_con_reimport">consolidación: reimportando</string>
<!--action strings-->
<string name="hint_keyserver_search_hint">Nombre/Correo electrónico/Identidad de clave...</string>
- <string name="hint_keybase_search_hint">Nombre/Correo electrónico/Prueba/Clave...</string>
+ <string name="hint_cloud_search_hint">Nombre/Correo/Prueba/Clave...</string>
<!--key bit length selections-->
<string name="key_size_512">512</string>
<string name="key_size_768">768</string>
@@ -328,9 +331,9 @@
<string name="help_about_version">Versión:</string>
<!--Import-->
<string name="import_tab_keyserver">Servidor de claves</string>
+ <string name="import_tab_cloud">Buscar en la nube</string>
<string name="import_tab_direct">Fichero/Portapapeles</string>
<string name="import_tab_qr_code">Código QR/NFC</string>
- <string name="import_tab_keybase">Keybase.io</string>
<string name="import_import">Importar las claves seleccionadas</string>
<string name="import_qr_code_wrong">¡El código QR está deformado! ¡Por favor, prueba de nuevo!</string>
<string name="import_qr_code_too_short_fingerprint">La huella de validación (fingerprint) de clave es demasiado corta (&lt; 16 caracteres)</string>
@@ -443,8 +446,9 @@
<string name="edit_key_edit_user_id_revoked">Esta identidad se ha revocado. Esto no puede deshacerse.</string>
<string name="edit_key_edit_subkey_title">¡Seleccione una acción!</string>
<string-array name="edit_key_edit_subkey">
- <item>Cambiar periodo hasta expiración</item>
+ <item>Cambiar expiración</item>
<item>Revocar subclave</item>
+ <item>Desnudar subclave</item>
</string-array>
<string name="edit_key_new_subkey">nueva</string>
<string name="edit_key_select_flag">¡Por favor, seleccione al menos un indicador!</string>
@@ -604,6 +608,7 @@
<string name="msg_kc_uid_no_cert">No se encontró auto-certificado válido para la identidad de usuario \'%s\', eliminando del juego de claves</string>
<string name="msg_kc_uid_remove">Eliminando identidad de usuario no válida \'%s\'</string>
<string name="msg_kc_uid_dup">Eliminando identidad de usuario duplicada \'%s\'. La clave secreta (privada) contenía dos de ellas. ¡Esto puede resultar en certificados perdidos!</string>
+ <string name="msg_kc_uid_warn_encoding">¡La identidad de usuario no se verifica como UTF-8!</string>
<!--Keyring merging log entries-->
<string name="msg_mg_error_secret_dummy">Nueva subclave pública encontrada, ¡pero la generación de subclaves secretas (privadas) ficticias no está soportada!</string>
<string name="msg_mg_error_heterogeneous">¡Se intentaron fusionar juegos de claves con diferentes huellas de validación!</string>
@@ -640,7 +645,7 @@
<string name="msg_mf_error_revoked_primary">¡Las identidades de usuario revocadas no pueden ser primarias!</string>
<string name="msg_mf_error_null_expiry">El periodo hasta la expiración no puede ser \"el mismo que antes\" al crear subclave. Esto es un error de programación, por favor ¡rellene un informe de fallo!</string>
<string name="msg_mf_error_passphrase_master">¡Error fatal descrifrando la clave maestra! Probablemente esto se daba a un error de programación, por favor ¡rellene un informe de fallo!</string>
- <string name="msg_mf_error_pgp">¡Excepción interna de PGP!</string>
+ <string name="msg_mf_error_pgp">¡Error interno de PGP!</string>
<string name="msg_mf_error_sig">¡Excepción con la firma!</string>
<string name="msg_mf_master">Modificando certificaciones maestras</string>
<string name="msg_mf_passphrase">Cambiando frase-contraseña para el juego de claves (keyring)...</string>
@@ -655,6 +660,7 @@
<string name="msg_mf_subkey_new_id">Nueva identidad de subclave: %s</string>
<string name="msg_mf_error_past_expiry">¡La fecha de expiración no puede ser del pasado!</string>
<string name="msg_mf_subkey_revoke">Revocando subclave %s</string>
+ <string name="msg_mf_subkey_strip">Desnudando subclave %s</string>
<string name="msg_mf_success">Juego de claves modificado con éxito</string>
<string name="msg_mf_uid_add">Añadiendo identidad de usuario %s</string>
<string name="msg_mf_uid_primary">Cambiando identidad de usuario (uid) primaria a %s</string>
@@ -696,6 +702,73 @@
<string name="msg_con_reimport_secret_skip">No hay claves públicas a reimportar, omitiendo...</string>
<string name="msg_con_warn_delete_public">Excepción borrando fichero de caché de claves públicas</string>
<string name="msg_con_warn_delete_secret">Excepción al borrar fichero de caché de claves secretas (privadas)</string>
+ <!--Other messages used in OperationLogs-->
+ <string name="msg_ek_error_divert">¡La edición de claves NFC (aún) no está soportada!</string>
+ <string name="msg_ek_error_dummy">¡No se pudo editar el juego de claves (keyring) con la clave maestra desnuda!</string>
+ <string name="msg_ek_error_not_found">¡Clave no encontrada!</string>
+ <!--Messages for DecryptVerify operation-->
+ <string name="msg_dc_askip_no_key">Datos no cifrados con clave conocida, omitiendo...</string>
+ <string name="msg_dc_askip_not_allowed">Datos no cifrados con clave permitida, omitiendo...</string>
+ <string name="msg_dc_asym">Se encontró un bloque de datos cifrados asimétricamente para la clave %s</string>
+ <string name="msg_dc_clear_data">Procesando datos literales</string>
+ <string name="msg_dc_clear_decompress">Desempaquetando datos comprimidos</string>
+ <string name="msg_dc_clear_meta_file">Nombre de fichero: %s</string>
+ <string name="msg_dc_clear_meta_mime">Tipo MIME: %s</string>
+ <string name="msg_dc_clear_meta_size">Tamaño de fichero: %s</string>
+ <string name="msg_dc_clear_meta_time">Hora de la modificación: %s</string>
+ <string name="msg_dc_clear_signature_bad">¡Comprobación de firma NO CORRECTA!</string>
+ <string name="msg_dc_clear_signature_check">Verificando datos de firma</string>
+ <string name="msg_dc_clear_signature_ok">Comprobación de firma CORRECTA</string>
+ <string name="msg_dc_clear_signature">Guardando datos de firma para más tarde</string>
+ <string name="msg_dc_clear">Procesando datos de texto no cifrado (`cleartext`)</string>
+ <string name="msg_dc_error_bad_passphrase">Error al desbloquear clave, ¡frase-contraseña errónea!</string>
+ <string name="msg_dc_error_extract_key">¡Error desconocido al desbloquear clave!</string>
+ <string name="msg_dc_error_integrity_check">¡Error de comprobación de integridad!</string>
+ <string name="msg_dc_error_invalid_siglist">¡No se encontraron datos de firma válidos!</string>
+ <string name="msg_dc_error_io">¡Se encontró Excepción de E/S durante la operación!</string>
+ <string name="msg_dc_error_no_data">¡No se encontraron datos cifrados en el flujo de datos (`stream`)!</string>
+ <string name="msg_dc_error_no_key">¡No se encontraron datos cifrados con clave secreta (privada) conocida en el flujo de datos (`stream`)!</string>
+ <string name="msg_dc_error_pgp_exception">¡Se encontró una Excepción PGP durante la operación!</string>
+ <string name="msg_dc_integrity_check_ok">¡Comprobación de integridad correcta!</string>
+ <string name="msg_dc_ok_meta_only">Sólo fueron solicitados los metadatos, omitiendo descifrado</string>
+ <string name="msg_dc_ok">CORRECTO</string>
+ <string name="msg_dc_pass_cached">Usando frase-contraseña desde caché</string>
+ <string name="msg_dc_pending_nfc">Se requiere credencial NFC, solicitando su introducción por el usuario...</string>
+ <string name="msg_dc_pending_passphrase">Se requiere frase-contraseña, solicitando su introducción por el usuario...</string>
+ <string name="msg_dc_prep_streams">Preparando flujos de datos (`streams`) para descifrado</string>
+ <string name="msg_dc">Comenzando la operación de descifrado...</string>
+ <string name="msg_dc_sym_skip">Datos simétricos no permitidos, omitiendo...</string>
+ <string name="msg_dc_sym">Se encontró bloque de datos cifrados simétricamente</string>
+ <string name="msg_dc_trail_asym">Se encontró huella, datos cifrados asimétricamente para la clave %s</string>
+ <string name="msg_dc_trail_sym">Se encontró huella, datos cifrados simétricamente</string>
+ <string name="msg_dc_trail_unknown">Se encontró huella, datos de tipo desconocido</string>
+ <string name="msg_dc_unlocking">Desbloqueando clave secreta (privada)</string>
+ <!--Messages for SignEncrypt operation-->
+ <string name="msg_se_asymmetric">Preparando claves públicas para cifrado</string>
+ <string name="msg_se_clearsign_only">¡No está soportado el firmado de la entrada de texto no cifrado (`cleartext`)!</string>
+ <string name="msg_se_compressing">Preparando compresión</string>
+ <string name="msg_se_encrypting">Cifrando datos</string>
+ <string name="msg_se_error_bad_passphrase">¡Frase-contraseña errónea!</string>
+ <string name="msg_se_error_io">¡Se encontró Excepción de E/S durante la operación!</string>
+ <string name="msg_se_error_key_sign">¡La clave de firmado seleccionada no puede firmar datos!</string>
+ <string name="msg_se_error_sign_key">¡Error descargando clave de firmado!</string>
+ <string name="msg_se_error_nfc">¡Error de datos NFC!</string>
+ <string name="msg_se_error_no_passphrase">¡No se proporcionó frase-contraseña!</string>
+ <string name="msg_se_error_pgp">¡Error interno de PGP!</string>
+ <string name="msg_se_error_sig">¡Se encontró excepción de firma PGP!</string>
+ <string name="msg_se_error_unlock">¡Error desconocido desbloqueando clave!</string>
+ <string name="msg_se_key_ok">Cifrando para la clave: %s</string>
+ <string name="msg_se_key_unknown">Clave para cifrado perdida: %s</string>
+ <string name="msg_se_key_warn">Clave para cifrado errónea: %s</string>
+ <string name="msg_se_ok">¡Operación de firmado/cifrado completada!</string>
+ <string name="msg_se_pending_nfc">Se requiere credencial NFC, solicitando su introducción por el usuario...</string>
+ <string name="msg_se_signing">Firmando datos (sin cifrado)</string>
+ <string name="msg_se_sigcrypting">Cifrando datos con firma</string>
+ <string name="msg_se">Iniciando operación de firmado y/o cifrado</string>
+ <string name="msg_se_symmetric">Preparando cifrado simétrico</string>
+ <string name="msg_crt_upload_success">Clave subida al servidor con éxito</string>
+ <string name="msg_crt_success">Identidades certificadas con éxito</string>
+ <string name="msg_acc_saved">Cuenta guardada</string>
<!--PassphraseCache-->
<string name="passp_cache_notif_click_to_clear">Haga clic para eliminar las frases-contraseña almacenadas en caché</string>
<string name="passp_cache_notif_n_keys">OpenKeychain ha almacenado en caché %d frases-contraseña</string>
@@ -726,6 +799,7 @@
<string name="error_no_encrypt_subkey">¡No hay subclave de cifrado disponible!</string>
<string name="info_no_manual_account_creation">No crear Cuentas-OpenKeychain manualmente.\nPara más información, vea la Ayuda.</string>
<string name="contact_show_key">Mostrar clave (%s)</string>
+ <string name="swipe_to_update">Gesto de barrido hacia abajo para actualizar desde el servidor de claves</string>
<!--First Time-->
<string name="first_time_text1">¡Recupere su privacidad con OpenKeychain!</string>
<string name="first_time_create_key">Crear mi clave</string>
diff --git a/OpenKeychain/src/main/res/values-et/strings.xml b/OpenKeychain/src/main/res/values-et/strings.xml
index dac1a5d46..be09f36de 100644
--- a/OpenKeychain/src/main/res/values-et/strings.xml
+++ b/OpenKeychain/src/main/res/values-et/strings.xml
@@ -103,6 +103,9 @@
<!--createSecretKeyRing-->
<!--modifySecretKeyRing-->
<!--Consolidate-->
+ <!--Other messages used in OperationLogs-->
+ <!--Messages for DecryptVerify operation-->
+ <!--Messages for SignEncrypt operation-->
<!--PassphraseCache-->
<!--unsorted-->
<!--First Time-->
diff --git a/OpenKeychain/src/main/res/values-fi/strings.xml b/OpenKeychain/src/main/res/values-fi/strings.xml
index a31d26374..7e1ea2cfd 100644
--- a/OpenKeychain/src/main/res/values-fi/strings.xml
+++ b/OpenKeychain/src/main/res/values-fi/strings.xml
@@ -46,6 +46,9 @@
<!--createSecretKeyRing-->
<!--modifySecretKeyRing-->
<!--Consolidate-->
+ <!--Other messages used in OperationLogs-->
+ <!--Messages for DecryptVerify operation-->
+ <!--Messages for SignEncrypt operation-->
<!--PassphraseCache-->
<!--unsorted-->
<!--First Time-->
diff --git a/OpenKeychain/src/main/res/values-fr/strings.xml b/OpenKeychain/src/main/res/values-fr/strings.xml
index 254f8495e..4fabb0978 100644
--- a/OpenKeychain/src/main/res/values-fr/strings.xml
+++ b/OpenKeychain/src/main/res/values-fr/strings.xml
@@ -196,8 +196,6 @@
<item quantity="one">%d mauvaise clef secrète ignorée. Vous avez peut-être exporté avec l\'option\n --export-secret-subkeys\nAssurez-vous d\'exporter plutôt avec\n --export-secret-keys.</item>
<item quantity="other">%d mauvaises clefs secrètes ignorées. Vous avez peut-être exporté avec l\'option\n --export-secret-subkeys\nAssurez-vous d\'exporter plutôt avec\n --export-secret-keys.</item>
</plurals>
- <string name="key_send_success">Clef téléversée vers le serveur avec succès</string>
- <string name="key_certify_success">Identités certifiées avec succès</string>
<string name="list_empty">Cette liste est vide !</string>
<string name="nfc_successful">Clef envoyée par Beam NFC avec succès |</string>
<string name="key_copied_to_clipboard">La clef a été copié vers le presse-papiers !</string>
@@ -266,6 +264,7 @@
<string name="progress_modify_primaryuid">changement de l\'ID d\'utilisateur principale...</string>
<string name="progress_modify_subkeychange">modification des sous-clefs...</string>
<string name="progress_modify_subkeyrevoke">révocation des sous-clefs...</string>
+ <string name="progress_modify_subkeystrip">dépouillement des sous-clefs...</string>
<string name="progress_modify_subkeyadd">ajout des sous-clefs...</string>
<string name="progress_modify_passphrase">changement de la phrase de passe...</string>
<plurals name="progress_exporting_key">
@@ -293,7 +292,6 @@
<string name="progress_con_reimport">consolider : réimportation...</string>
<!--action strings-->
<string name="hint_keyserver_search_hint">Nom/courriel/ID de clef...</string>
- <string name="hint_keybase_search_hint">Nom/courriel/preuve/clef...</string>
<!--key bit length selections-->
<string name="key_size_512">512</string>
<string name="key_size_768">768</string>
@@ -330,7 +328,6 @@
<string name="import_tab_keyserver">Serveur de clefs</string>
<string name="import_tab_direct">Fichier/presse-papiers</string>
<string name="import_tab_qr_code">Code QR/NFC</string>
- <string name="import_tab_keybase">Keybase.io</string>
<string name="import_import">Importer les clefs choisies</string>
<string name="import_qr_code_wrong">Code QR incorrecte ! Veuillez réessayer !</string>
<string name="import_qr_code_too_short_fingerprint">L\'empreinte est trop courte (&lt; 16 caractères)</string>
@@ -445,6 +442,7 @@
<string-array name="edit_key_edit_subkey">
<item>Changer l\'expiration</item>
<item>Révoquer la sous-clef</item>
+ <item>Dépouiller la sous-clef</item>
</string-array>
<string name="edit_key_new_subkey">nouvelle</string>
<string name="edit_key_select_flag">Veuillez sélectionner au moins un drapeau !</string>
@@ -640,7 +638,6 @@
<string name="msg_mf_error_revoked_primary">Les ID d\'utilisateurs révoqués ne peuvent pas être principaux !</string>
<string name="msg_mf_error_null_expiry">L\'expiration ne peut pas être « pareille qu\'avant » lors de la création de sous-clefs. Ceci est une erreur de programmation, veuillez remplir un rapport de bogue !</string>
<string name="msg_mf_error_passphrase_master">Erreur fatale lors du déchiffrement de la clef maîtresse ! Ceci est probablement une erreur de programmation, veuillez remplir un rapport de bogue !</string>
- <string name="msg_mf_error_pgp">Exception interne PGP !</string>
<string name="msg_mf_error_sig">Exception de signature !</string>
<string name="msg_mf_master">Modification des certifications maîtresses</string>
<string name="msg_mf_passphrase">Changement de la phrase de passe pour le trousseau...</string>
@@ -655,6 +652,7 @@
<string name="msg_mf_subkey_new_id">Nouvelle ID de sous-clef : %s</string>
<string name="msg_mf_error_past_expiry">La date d\'expiration ne peut pas être dans le passé !</string>
<string name="msg_mf_subkey_revoke">Révocation de la sous-clef %s</string>
+ <string name="msg_mf_subkey_strip">Dépouillement de la sous-clef %s</string>
<string name="msg_mf_success">Trousseau modifié avec succès</string>
<string name="msg_mf_uid_add">Ajout de l\'ID d\'utilisateur %s</string>
<string name="msg_mf_uid_primary">Changement de l\'UID principal en %s</string>
@@ -696,6 +694,12 @@
<string name="msg_con_reimport_secret_skip">Aucune clef secrète à réimporter, étape ignorée...</string>
<string name="msg_con_warn_delete_public">Une exception a eu lieu lors de la suppression du fichier de cache public</string>
<string name="msg_con_warn_delete_secret">Une exception a eu lieu lors de la suppression du fichier de cache secret</string>
+ <!--Other messages used in OperationLogs-->
+ <string name="msg_ek_error_divert">La modification des clefs NFC n\'est pas (encore) prise en charge !</string>
+ <string name="msg_ek_error_dummy">Impossible de modifier un trousseau avec une clef maîtresse dépouillée !</string>
+ <string name="msg_ek_error_not_found">Clef introuvable !</string>
+ <!--Messages for DecryptVerify operation-->
+ <!--Messages for SignEncrypt operation-->
<!--PassphraseCache-->
<string name="passp_cache_notif_click_to_clear">Cliquer ici pour effacer les phrases de passe mises en cache</string>
<string name="passp_cache_notif_n_keys">OpenKeychain a mis en cache %d phrases de passe</string>
diff --git a/OpenKeychain/src/main/res/values-is/strings.xml b/OpenKeychain/src/main/res/values-is/strings.xml
index a31d26374..7e1ea2cfd 100644
--- a/OpenKeychain/src/main/res/values-is/strings.xml
+++ b/OpenKeychain/src/main/res/values-is/strings.xml
@@ -46,6 +46,9 @@
<!--createSecretKeyRing-->
<!--modifySecretKeyRing-->
<!--Consolidate-->
+ <!--Other messages used in OperationLogs-->
+ <!--Messages for DecryptVerify operation-->
+ <!--Messages for SignEncrypt operation-->
<!--PassphraseCache-->
<!--unsorted-->
<!--First Time-->
diff --git a/OpenKeychain/src/main/res/values-it/strings.xml b/OpenKeychain/src/main/res/values-it/strings.xml
index 8232b18d9..5f2940748 100644
--- a/OpenKeychain/src/main/res/values-it/strings.xml
+++ b/OpenKeychain/src/main/res/values-it/strings.xml
@@ -164,8 +164,6 @@
<string name="no_keys_exported">Nessuna chiave esportata.</string>
<string name="key_creation_el_gamal_info">Nota: supporto sottochiavi solo per ElGamal.</string>
<string name="key_not_found">Impossibile trovare la chiave %08X.</string>
- <string name="key_send_success">Chiave caricata con successo sul server</string>
- <string name="key_certify_success">Identità certificata correttamente</string>
<string name="list_empty">Lista vuota!</string>
<string name="nfc_successful">Chiave correttamente inviata tramite NFC Beam!</string>
<string name="key_copied_to_clipboard">Chiave copiata negli appunti!</string>
@@ -258,7 +256,6 @@
<string name="progress_con_reimport">consolidazione: reimportazione...</string>
<!--action strings-->
<string name="hint_keyserver_search_hint">Nome/Email/ID Chiave...</string>
- <string name="hint_keybase_search_hint">Nome/Email/Certificato/Chiave...</string>
<!--key bit length selections-->
<string name="key_size_512">512</string>
<string name="key_size_768">768</string>
@@ -295,7 +292,6 @@
<string name="import_tab_keyserver">Server delle chiavi</string>
<string name="import_tab_direct">File/Appunti</string>
<string name="import_tab_qr_code">Codice QR/NFC</string>
- <string name="import_tab_keybase">Keybase.io</string>
<string name="import_import">Importa chiavi selezionate</string>
<string name="import_qr_code_wrong">Codica QR deformato! Prova di nuovo!</string>
<string name="import_qr_code_too_short_fingerprint">Impronta troppo corta (&lt; 16 caratteri)</string>
@@ -544,7 +540,6 @@
<string name="msg_mf_error_revoked_primary">ID utente revocato non può essere primario!</string>
<string name="msg_mf_error_null_expiry">La data di scadenza non può essere \"come prima\" sulla creazione di sottochiavi. Questo è un errore di programmazione, si prega di inviare una segnalazione di bug!</string>
<string name="msg_mf_error_passphrase_master">Errore irreversibile nella decodifica della chiave principale! Questo è probabilmente un errore di programmazione, si prega di inviare una segnalazione di bug!</string>
- <string name="msg_mf_error_pgp">Eccezione interna di PGP!</string>
<string name="msg_mf_error_sig">Eccezione di firma!</string>
<string name="msg_mf_master">Modifica delle certificazioni principali</string>
<string name="msg_mf_passphrase">Cambio frase di accesso del portachiavi...</string>
@@ -599,6 +594,9 @@
<string name="msg_con_reimport_secret_skip">Nessuna chiave privata da reimportare, proseguo...</string>
<string name="msg_con_warn_delete_public">Eccezione durante la eliminazione del file di cache pubblico</string>
<string name="msg_con_warn_delete_secret">Eccezione durante la eliminazione del file di cache privato</string>
+ <!--Other messages used in OperationLogs-->
+ <!--Messages for DecryptVerify operation-->
+ <!--Messages for SignEncrypt operation-->
<!--PassphraseCache-->
<string name="passp_cache_notif_click_to_clear">Clicca per rimuovere la frase di accesso nella cache</string>
<string name="passp_cache_notif_n_keys">OpenKeychain ha memorizzato nella cache %d frasi di accesso</string>
diff --git a/OpenKeychain/src/main/res/values-ja/strings.xml b/OpenKeychain/src/main/res/values-ja/strings.xml
index a5f5da1a6..8e10d443e 100644
--- a/OpenKeychain/src/main/res/values-ja/strings.xml
+++ b/OpenKeychain/src/main/res/values-ja/strings.xml
@@ -204,8 +204,6 @@
--export-secret-keys
に置き換えてください。</item>
</plurals>
- <string name="key_send_success">鍵を鍵サーバにアップロードしました</string>
- <string name="key_certify_success">ユーザIDの検証に成功</string>
<string name="list_empty">このリストは空です!</string>
<string name="nfc_successful">NFCビームで鍵を送信しました!</string>
<string name="key_copied_to_clipboard">鍵はクリプボードにコピーされました!</string>
@@ -299,7 +297,6 @@
<string name="progress_con_reimport">統合: 再インポート中…</string>
<!--action strings-->
<string name="hint_keyserver_search_hint">名前/メール/鍵ID...</string>
- <string name="hint_keybase_search_hint">名前/メール/証明/鍵...</string>
<!--key bit length selections-->
<string name="key_size_512">512</string>
<string name="key_size_768">768</string>
@@ -336,7 +333,6 @@
<string name="import_tab_keyserver">鍵サーバ</string>
<string name="import_tab_direct">ファイル/クリップボード</string>
<string name="import_tab_qr_code">QRコード/NFC</string>
- <string name="import_tab_keybase">Keybase.io</string>
<string name="import_import">選択した鍵のインポート</string>
<string name="import_qr_code_wrong">不適QRコード! もう一度!</string>
<string name="import_qr_code_too_short_fingerprint">指紋が短かすぎます (&lt; 16 文字)</string>
@@ -450,10 +446,6 @@
</string-array>
<string name="edit_key_edit_user_id_revoked">このIDは破棄されています。続けることができません。</string>
<string name="edit_key_edit_subkey_title">アクションを選んでください!</string>
- <string-array name="edit_key_edit_subkey">
- <item>期限を変更</item>
- <item>副鍵を破棄</item>
- </string-array>
<string name="edit_key_new_subkey">新規</string>
<string name="edit_key_select_flag">最低1つフラグを選択してください!</string>
<!--Create key-->
@@ -644,7 +636,6 @@
<string name="msg_mf_error_revoked_primary">主ユーザIDの破棄はできません!</string>
<string name="msg_mf_error_null_expiry">副鍵の生成時に期限を\"過去\"とすることはできません。これはプログラムエラーで、バグレポートとしてファイルを送ってください!</string>
<string name="msg_mf_error_passphrase_master">主鍵の復号で致命的な失敗! これはプログラミングのエラーの場合がありますので、バグレポートの提出をお願いします!</string>
- <string name="msg_mf_error_pgp">PGP内部例外!</string>
<string name="msg_mf_error_sig">署名例外!</string>
<string name="msg_mf_master">マスター認証を変更</string>
<string name="msg_mf_passphrase">鍵輪のパスフレーズの変更中...</string>
@@ -697,6 +688,12 @@
<string name="msg_con_reimport_secret_skip">再インポートで秘密鍵がありません、スキップします...</string>
<string name="msg_con_warn_delete_public">公開鍵キャッシュファイルの削除例外</string>
<string name="msg_con_warn_delete_secret">秘密鍵のキャッシュファイルを削除中に例外発生</string>
+ <!--Other messages used in OperationLogs-->
+ <string name="msg_ek_error_divert">NFCの鍵の編集は(まだ)サポートされていません!</string>
+ <string name="msg_ek_error_dummy">ストリップした主鍵では鍵輪を編集できません!</string>
+ <string name="msg_ek_error_not_found">鍵が見当りません!</string>
+ <!--Messages for DecryptVerify operation-->
+ <!--Messages for SignEncrypt operation-->
<!--PassphraseCache-->
<string name="passp_cache_notif_click_to_clear">クリックしてパスフレーズのキャッシュをクリア</string>
<string name="passp_cache_notif_n_keys">OpenKeychainは %d のパスフレーズをキャッシュしています</string>
diff --git a/OpenKeychain/src/main/res/values-nl/strings.xml b/OpenKeychain/src/main/res/values-nl/strings.xml
index d032dae74..865280060 100644
--- a/OpenKeychain/src/main/res/values-nl/strings.xml
+++ b/OpenKeychain/src/main/res/values-nl/strings.xml
@@ -142,8 +142,6 @@
<string name="no_keys_exported">Geen sleutels geëxporteerd.</string>
<string name="key_creation_el_gamal_info">Opmerking: alleen subsleutels ondersteunen ElGamal.</string>
<string name="key_not_found">Kan de sleutel %08X niet vinden.</string>
- <string name="key_send_success">Succesvol sleutel naar server geüpload</string>
- <string name="key_certify_success">Succesvol identiteiten gecertificeerd</string>
<string name="list_empty">Lijst is leeg</string>
<string name="nfc_successful">Succesvol sleutel verstuurd met NFC Beam!</string>
<string name="key_copied_to_clipboard">Sleutel is gekopieerd naar het klembord!</string>
@@ -318,6 +316,9 @@
<!--createSecretKeyRing-->
<!--modifySecretKeyRing-->
<!--Consolidate-->
+ <!--Other messages used in OperationLogs-->
+ <!--Messages for DecryptVerify operation-->
+ <!--Messages for SignEncrypt operation-->
<!--PassphraseCache-->
<!--unsorted-->
<string name="section_certifier_id">Certificeer</string>
diff --git a/OpenKeychain/src/main/res/values-pl/strings.xml b/OpenKeychain/src/main/res/values-pl/strings.xml
index 7db884284..9d6a508d7 100644
--- a/OpenKeychain/src/main/res/values-pl/strings.xml
+++ b/OpenKeychain/src/main/res/values-pl/strings.xml
@@ -131,7 +131,6 @@
<string name="no_keys_exported">Nie wyeksportowano żadnych kluczy.</string>
<string name="key_creation_el_gamal_info">Informacja: tylko podklucze mogą być tworzone przy użyciu algorytmu ElGamal.</string>
<string name="key_not_found">Nie można znaleźć klucza %08X.</string>
- <string name="key_send_success">Pomyślnie wysłano klucz na serwer</string>
<string name="list_empty">Lista jest pusta!</string>
<string name="nfc_successful">Pomyślnie wysłano klucz przez NFC Beam!</string>
<string name="key_copied_to_clipboard">Klucz został skopiowany do schowka!</string>
@@ -297,6 +296,9 @@
<!--createSecretKeyRing-->
<!--modifySecretKeyRing-->
<!--Consolidate-->
+ <!--Other messages used in OperationLogs-->
+ <!--Messages for DecryptVerify operation-->
+ <!--Messages for SignEncrypt operation-->
<!--PassphraseCache-->
<!--unsorted-->
<string name="section_cert">Szczegóły certyfikatu</string>
diff --git a/OpenKeychain/src/main/res/values-pt/strings.xml b/OpenKeychain/src/main/res/values-pt/strings.xml
index a31d26374..7e1ea2cfd 100644
--- a/OpenKeychain/src/main/res/values-pt/strings.xml
+++ b/OpenKeychain/src/main/res/values-pt/strings.xml
@@ -46,6 +46,9 @@
<!--createSecretKeyRing-->
<!--modifySecretKeyRing-->
<!--Consolidate-->
+ <!--Other messages used in OperationLogs-->
+ <!--Messages for DecryptVerify operation-->
+ <!--Messages for SignEncrypt operation-->
<!--PassphraseCache-->
<!--unsorted-->
<!--First Time-->
diff --git a/OpenKeychain/src/main/res/values-ru/strings.xml b/OpenKeychain/src/main/res/values-ru/strings.xml
index ef0896238..d313070a3 100644
--- a/OpenKeychain/src/main/res/values-ru/strings.xml
+++ b/OpenKeychain/src/main/res/values-ru/strings.xml
@@ -170,8 +170,6 @@
<string name="no_keys_exported">Ключи не были экспортированы.</string>
<string name="key_creation_el_gamal_info">Прим.: только вторичные ключи поддерживают ElGamal.</string>
<string name="key_not_found">Не удается найти ключ %08X.</string>
- <string name="key_send_success">Ключ успешно загружен на сервер</string>
- <string name="key_certify_success">Подписанные идентификаторы</string>
<string name="list_empty">Список пуст!</string>
<string name="nfc_successful">Ключ успешно передан через NFC!</string>
<string name="key_copied_to_clipboard">Ключ скопирован в буфер обмена!</string>
@@ -302,7 +300,6 @@
<string name="import_tab_keyserver">Сервер ключей</string>
<string name="import_tab_direct">Файл/Буфер</string>
<string name="import_tab_qr_code">QR код/NFC</string>
- <string name="import_tab_keybase">Keybase.io</string>
<string name="import_import">Импорт выбранных ключей</string>
<string name="import_qr_code_wrong">Некорректный QR код. Попробуйте снова!</string>
<string name="import_qr_code_too_short_fingerprint">Отпечаток слишком коротнкий (&lt; 16 символов)</string>
@@ -435,7 +432,6 @@
<string name="msg_mf_error_encode">Ошибка кодирования!</string>
<string name="msg_mf_error_integrity">Внутренняя ошибка, сбой проверки целостности!</string>
<string name="msg_mf_error_revoked_primary">Аннулированные идентификаторы не могут быть основными!</string>
- <string name="msg_mf_error_pgp">Внутренняя ошибка PGP!</string>
<string name="msg_mf_error_sig">Ошибка подписи!</string>
<string name="msg_mf_success">Связка успешно изменена</string>
<string name="msg_mf_uid_add">Добавление id %s</string>
@@ -444,6 +440,9 @@
<string name="msg_mf_unlock_error">Ошибка разблокирования связки!</string>
<string name="msg_mf_unlock">Разблокирование связки</string>
<!--Consolidate-->
+ <!--Other messages used in OperationLogs-->
+ <!--Messages for DecryptVerify operation-->
+ <!--Messages for SignEncrypt operation-->
<!--PassphraseCache-->
<!--unsorted-->
<string name="section_certifier_id">Кем подписан</string>
diff --git a/OpenKeychain/src/main/res/values-sl/strings.xml b/OpenKeychain/src/main/res/values-sl/strings.xml
index 437d7beca..ac0364893 100644
--- a/OpenKeychain/src/main/res/values-sl/strings.xml
+++ b/OpenKeychain/src/main/res/values-sl/strings.xml
@@ -84,13 +84,23 @@
<string name="label_file_colon">Datoteka:</string>
<string name="label_no_passphrase">Brez gesla</string>
<string name="label_passphrase">Geslo</string>
+ <string name="label_unlock">Odklepanje...</string>
<string name="label_passphrase_again">Ponovi geslo</string>
<string name="label_algorithm">Algoritem</string>
<string name="label_ascii_armor">ASCII oklep datotek</string>
+ <string name="label_file_ascii_armor">Omogoči ASCII ovoj</string>
<string name="label_write_version_header">Daj drugim vedeti, da uporabljate OpenKeychain</string>
<string name="label_write_version_header_summary">Zapiše \'OpenKeychain v2.7\' v OpenPGP podpis, šifrirano besedilo in izvožene ključe</string>
<string name="label_asymmetric_from">Podpisal:</string>
<string name="label_to">Šifriraj za:</string>
+ <string name="label_delete_after_encryption">Izbriši datoteko po dešifriranju</string>
+ <string name="label_delete_after_decryption">Izbriši po dešifriranju</string>
+ <string name="label_encryption_algorithm">Šifrirni algoritem</string>
+ <string name="label_hash_algorithm">Zgostitveni algoritem</string>
+ <string name="label_symmetric">Šifriranje z geslom</string>
+ <string name="label_passphrase_cache_ttl">Hranjenje gesla v spominu</string>
+ <string name="label_message_compression">Stiskanje sporočil</string>
+ <string name="label_file_compression">Stiskanje datotek</string>
<string name="label_keyservers">Strežniki</string>
<string name="label_key_id">ID ključa</string>
<string name="label_creation">Ustvarjanje</string>
@@ -178,8 +188,6 @@
<string name="no_keys_exported">Noben ključ ni bil izvožen.</string>
<string name="key_creation_el_gamal_info">Pozor: ELGamal podpirajo samo podključi.</string>
<string name="key_not_found">Ne najdem ključa %08X.</string>
- <string name="key_send_success">Ključ je bil uspešno naložen na strežnik.</string>
- <string name="key_certify_success">Uspešno overjene identitete</string>
<string name="list_empty">Lista je prazna!</string>
<string name="nfc_successful">Ključ uspešno poslan preko NFC Beam!</string>
<string name="key_copied_to_clipboard">Ključ je bil prekopiran v odložišče!</string>
@@ -227,6 +235,7 @@
<!--progress dialogs, usually ending in '…'-->
<string name="progress_done">Opravljeno.</string>
<string name="progress_cancel">Prekliči</string>
+ <string name="progress_cancelling">preklic...</string>
<string name="progress_saving">shranjujem...</string>
<string name="progress_importing">uvažam...</string>
<string name="progress_exporting">izvažam...</string>
@@ -258,6 +267,7 @@
<string name="progress_processing_signature">obdelujem podpis...</string>
<string name="progress_verifying_signature">preverjam podpis...</string>
<string name="progress_signing">podpisujem...</string>
+ <string name="progress_certifying">overjanje...</string>
<string name="progress_reading_data">berem podatke...</string>
<string name="progress_finding_key">iščem ključ...</string>
<string name="progress_decompressing_data">razširjam podatke...</string>
@@ -299,8 +309,8 @@
<string name="help_tab_about">O aplikaciji</string>
<string name="help_about_version">Različica:</string>
<!--Import-->
+ <string name="import_tab_keyserver">Strežnik</string>
<string name="import_tab_direct">Datoteka/odložišče</string>
- <string name="import_tab_keybase">Keybase.io</string>
<string name="import_import">Uvozi izbrane ključe</string>
<string name="import_qr_code_wrong">Koda QR je deformirana! Poskusite znova!</string>
<string name="import_qr_code_too_short_fingerprint">Prstni odtis je prekratek (&lt; 16 znakov)</string>
@@ -357,9 +367,13 @@
<string name="key_list_empty_button_import">uvažanje obstoječega ključa.</string>
<!--Key view-->
<string name="key_view_action_edit">Uredi ključ</string>
+ <string name="key_view_action_encrypt">Šifriraj besedilo</string>
+ <string name="key_view_action_encrypt_files">datoteke</string>
<string name="key_view_action_certify">Overi identitete</string>
<string name="key_view_action_update">Posodobi s strežnika</string>
<string name="key_view_action_share_with">Deli z...</string>
+ <string name="key_view_action_share_nfc">Deli preko NFC</string>
+ <string name="key_view_action_upload">Naloži na strežnik</string>
<string name="key_view_tab_main">Glavne informacije</string>
<string name="key_view_tab_share">Deli</string>
<string name="key_view_tab_keys">Podključi</string>
@@ -375,6 +389,9 @@
<string name="edit_key_action_add_identity">Dodaj identiteto</string>
<string name="edit_key_action_add_subkey">Dodaj podključ</string>
<string name="edit_key_edit_user_id_title">Izberite dejanje!</string>
+ <string-array name="edit_key_edit_user_id_revert_revocation">
+ <item>Revert revocation</item>
+ </string-array>
<string name="edit_key_edit_subkey_title">Izberite dejanje!</string>
<string name="edit_key_new_subkey">nov</string>
<!--Create key-->
@@ -386,12 +403,15 @@
<string name="view_key_expired">Ta ključ je pretekel!</string>
<!--Navigation Drawer-->
<string name="nav_keys">Ključi</string>
+ <string name="nav_encrypt_text">Šifriraj besedilo</string>
+ <string name="nav_encrypt_files">Šifriraj datoteke</string>
<string name="nav_decrypt">Dešifriraj</string>
<string name="nav_apps">Aplikacije</string>
<string name="drawer_open">Odprite navigacijski poteznik</string>
<string name="drawer_close">Zaprite navigacijski poteznik</string>
<string name="my_keys">Moji ključi</string>
<!--hints-->
+ <string name="encrypt_content_edit_text_hint">Vpišite besedilo</string>
<string name="decrypt_content_edit_text_hint">Tu vnesite tajnopis za dešifriranje in/ali overbo...</string>
<!--certs-->
<string name="cert_default">privzeto</string>
@@ -404,6 +424,7 @@
<string name="cert_verify_error">napaka!</string>
<string name="cert_verify_unavailable">ključ ni na voljo</string>
<!--LogType log messages. Errors should have _ERROR_ in their name and end with a !-->
+ <string name="msg_cancelled">Dejanje preklicano.</string>
<!--Import Public log entries-->
<string name="msg_ip_apply_batch">Uveljavljam serijsko dodajanje.</string>
<string name="msg_ip_bad_type_secret">Poskus uvoza zasebne zbirke ključev kot javne. Prosimo prijavite dogodek kot \"hrošč\" (napako).</string>
@@ -458,10 +479,16 @@
<string name="msg_mf_subkey_new_id">Nov podključ z ID-jem: %s</string>
<string name="msg_mf_subkey_revoke">Preklic podključa %s</string>
<!--Consolidate-->
+ <string name="msg_con_db_clear">Čiščenje podatkovne baze</string>
+ <!--Other messages used in OperationLogs-->
+ <string name="msg_ek_error_not_found">Ključ ni bil najden!</string>
+ <!--Messages for DecryptVerify operation-->
+ <!--Messages for SignEncrypt operation-->
<!--PassphraseCache-->
<string name="passp_cache_notif_click_to_clear">Kliknite za izbris zapomnjenih gesel</string>
<string name="passp_cache_notif_n_keys">OpenKeychain pomni gesla: %d</string>
<string name="passp_cache_notif_keys">Zapomnjena gesla:</string>
+ <string name="passp_cache_notif_pwd">Geslo</string>
<!--unsorted-->
<string name="section_certifier_id">Overovitelj</string>
<string name="section_cert">Podrobnosti potrdil</string>
@@ -475,6 +502,9 @@
<string name="error_key_not_found">Ključ ni bil najden!</string>
<string name="error_key_processing">Napaka pri obdelavi ključa!</string>
<string name="key_stripped">slečen</string>
+ <string name="key_divert">preusmeri na pametno kartico/NFC</string>
+ <string name="key_no_passphrase">brez gesla</string>
+ <string name="key_unavailable">ni na voljo</string>
<string name="title_view_cert">Preglej podrobosti certifikata</string>
<string name="unknown_algorithm">neznan</string>
<string name="can_sign_not">ne more podpisati</string>
diff --git a/OpenKeychain/src/main/res/values-tr/strings.xml b/OpenKeychain/src/main/res/values-tr/strings.xml
index e7a05f015..669c7b974 100644
--- a/OpenKeychain/src/main/res/values-tr/strings.xml
+++ b/OpenKeychain/src/main/res/values-tr/strings.xml
@@ -3,41 +3,87 @@
<!--GENERAL: Please put all strings inside quotes as described in example 1 on
http://developer.android.com/guide/topics/resources/string-resource.html (scroll down to "Escaping apostrophes and quotes").-->
<!--title-->
+ <string name="title_select_recipients">Anahtarları Seç</string>
+ <string name="title_select_secret_key">Anahtarını Seç</string>
+ <string name="title_encrypt_text">Metni Şifrele</string>
+ <string name="title_encrypt_files">Dosyaları Şifrele</string>
+ <string name="title_decrypt">Çözümle</string>
+ <string name="title_authentication">Parola</string>
+ <string name="title_add_subkey">Alt anahtar ekle</string>
<string name="title_edit_key">Anahtarı düzenle</string>
<string name="title_preferences">Seçenekler</string>
+ <string name="title_api_registered_apps">Uygulamalar</string>
<string name="title_key_server_preference">Anahtar Sunucusu Seçenekleri</string>
+ <string name="title_change_passphrase">Parolayı Değiştir</string>
+ <string name="title_share_fingerprint_with">Parmakizini şu şekilde paylaş...</string>
+ <string name="title_share_key">Anahtarı şu şekilde paylaş...</string>
+ <string name="title_share_file">Dosyayı şu şekilde paylaş...</string>
+ <string name="title_share_message">Mesajı şu şekilde paylaş...</string>
+ <string name="title_encrypt_to_file">Dosyaya Şifrele</string>
+ <string name="title_decrypt_to_file">Dosyaya Çözümle</string>
<string name="title_import_keys">Anahtarları Al</string>
<string name="title_export_key">Anahtarı Ver</string>
<string name="title_export_keys">Anahtarları Ver</string>
<string name="title_key_not_found">Anahtar Bulunamadı</string>
<string name="title_key_details">Anahtar Detayları</string>
<string name="title_help">Yardım</string>
+ <string name="title_log_display">Günlük</string>
+ <string name="title_create_key">Anahtar Oluştur</string>
<!--section-->
+ <string name="section_user_ids">Kimlikler</string>
+ <string name="section_keys">Alt anahtarlar</string>
<string name="section_general">Genel</string>
<string name="section_defaults">Varsayılanlar</string>
<string name="section_advanced">Gelişmiş</string>
+ <string name="section_actions">Eylemler</string>
+ <string name="section_share_key">Bütün anahtar</string>
<string name="section_upload_key">Anahtar Yükle</string>
<string name="section_key_server">Anahtar Sunucusu</string>
+ <string name="section_fingerprint">Parmakizi</string>
<!--button-->
+ <string name="btn_decrypt_verify_message">Mesajı çözümle ve doğrula</string>
+ <string name="btn_encrypt_file">Dosyayı şifrele ve kaydet</string>
+ <string name="btn_encrypt_share_file">Dosyayı şifrele ve paylaş</string>
<string name="btn_save">Kaydet</string>
<string name="btn_do_not_save">İptal</string>
<string name="btn_delete">Sil</string>
<string name="btn_okay">Tamam</string>
<string name="btn_next">İleri</string>
<string name="btn_back">Geri</string>
+ <string name="btn_lookup_key">Anahtarı ara</string>
+ <string name="btn_share_encrypted_signed">Mesajı şifrele ve paylaş</string>
+ <string name="btn_create_key">Anahtar oluştur</string>
+ <string name="btn_add_files">Dosya(ları) ekle</string>
<!--menu-->
<string name="menu_preferences">Ayarlar</string>
<string name="menu_help">Yardım</string>
<string name="menu_export_key">Dosyaya ver</string>
<string name="menu_delete_key">Anahtar sil</string>
+ <string name="menu_create_key">Anahtarımı oluştur</string>
<string name="menu_search">Ara</string>
<string name="menu_key_edit_cancel">İptal</string>
<string name="menu_select_all">Hepsini seç</string>
<string name="menu_add_keys">Anahtar ekle</string>
+ <string name="menu_export_all_keys">Tüm anahtarları ver</string>
+ <string name="menu_advanced">Gelişmiş bilgiyi göster</string>
<!--label-->
<string name="label_message">Mesaj</string>
<string name="label_file">Dosya</string>
+ <string name="label_files">Dosya(lar)</string>
+ <string name="label_file_colon">Dosya:</string>
+ <string name="label_no_passphrase">Parola Yok</string>
+ <string name="label_passphrase">Parola</string>
+ <string name="label_passphrase_again">Parolayı Tekrarla</string>
<string name="label_algorithm">Algoritma</string>
+ <string name="label_use_default_yubikey_pin">Varsayılan Yubikey PIN\'i kullan</string>
+ <string name="label_delete_after_encryption">Şifreleme sonrası dosyayı sil</string>
+ <string name="label_delete_after_decryption">Çözümleme sonrası sil</string>
+ <string name="label_encryption_algorithm">Şifreleme algoritması</string>
+ <string name="label_hash_algorithm">Hash algoritması</string>
+ <string name="label_symmetric">Parolayla şifrele</string>
+ <string name="label_passphrase_cache_ttl">Parola önbelleği</string>
+ <string name="label_message_compression">Mesaj sıkıştırma</string>
+ <string name="label_file_compression">Dosya sıkıştırma</string>
<string name="label_keyservers">Anahtar Sunucuları</string>
<string name="label_key_id">Anahtar ID</string>
<string name="label_creation">Oluşturma</string>
@@ -47,12 +93,14 @@
<string name="label_name">İsim</string>
<string name="label_comment">Yorum</string>
<string name="label_email">Eposta</string>
+ <string name="label_fingerprint">Parmakizi</string>
<plurals name="n_keys">
<item quantity="one">1 anahtar</item>
<item quantity="other">%d anahtar</item>
</plurals>
<string name="secret_key">Özel Anahtar:</string>
<!--choice-->
+ <string name="choice_none">Hiç</string>
<string name="choice_15secs">15 saniye</string>
<string name="choice_1min">1 dakika</string>
<string name="choice_3mins">3 dakika</string>
@@ -64,9 +112,12 @@
<string name="choice_2hours">2 saat</string>
<string name="choice_4hours">4 saat</string>
<string name="choice_8hours">8 saat</string>
+ <string name="choice_forever">daima</string>
<string name="dsa">DSA</string>
<string name="elgamal">ElGamal</string>
<string name="rsa">RSA</string>
+ <string name="ecdh">ECDH</string>
+ <string name="ecdsa">ECDSA</string>
<string name="filemanager_title_open">Aç...</string>
<string name="warning">Uyarı</string>
<string name="error">Hata</string>
@@ -76,30 +127,62 @@
<string name="flag_encrypt">Şifrele</string>
<string name="flag_authenticate">Yetkilendir</string>
<!--sentences-->
+ <string name="wrong_passphrase">Yanlış parola.</string>
+ <string name="no_filemanager_installed">Uyumlu dosya yöneticisi yüklenmedi.</string>
+ <string name="passphrases_do_not_match">Parolalar eşleşmedi.</string>
+ <string name="passphrase_must_not_be_empty">Lütfen bir parola girin.</string>
+ <string name="passphrase_for_symmetric_encryption">Simetrik şifreleme.</string>
+ <string name="passphrase_for">\'%s\' için bir parola girin</string>
+ <string name="file_delete_confirmation">Silmek istediğinize emin misiniz\n%s?</string>
<string name="file_delete_successful">Başarıyla silindi.</string>
<string name="no_file_selected">Önce bir dosya seçin.</string>
+ <string name="encrypt_sign_successful">Başarıyla imzalandı ve/veya şifrelendi.</string>
+ <string name="encrypt_sign_clipboard_successful">Panoya başarıyla imzalandı ve/veya şifrelendi.</string>
+ <string name="enter_passphrase_twice">Parolanızı iki kere girin.</string>
+ <string name="select_encryption_key">En az bir şifreleme anahtarı seçiniz.</string>
+ <string name="select_encryption_or_signature_key">En az bir adet şifreleme anahtarı veya imza anahtarı seçiniz.</string>
+ <string name="key_deletion_confirmation_multi">Seçilen tüm açık anahtarları silmek istiyor musunuz?\nBu işlemi geri alamazsınız!</string>
<string name="key_not_found">Anahtar %08X bulunamadı.</string>
<string name="list_empty">Liste boş!</string>
+ <string name="key_copied_to_clipboard">Anahtar panoya kopyalandı!</string>
+ <string name="fingerprint_copied_to_clipboard">Parmakizi panoya kopyalandı!</string>
<!--errors
no punctuation, all lowercase,
they will be put after "error_message", e.g. "Error: file not found"-->
<string name="error_file_not_found">dosya bulunamadı</string>
<string name="error_key_size_minimum512bit">anahtar uzunluğu en az 512bit olmalı</string>
<string name="error_user_id_no_email">eposta bulunamadı</string>
+ <string name="error_no_signature_passphrase">parola verilmedi</string>
+ <string name="error_no_signature_key">imza anahtarı verilmedi</string>
+ <string name="error_integrity_check_failed">Bütünlük kontrolü başarısız! Veri değiştirilmiş!</string>
+ <string name="error_wrong_passphrase">yanlış parola</string>
<!--errors without preceeding Error:-->
+ <string name="error_nothing_import">Anahtar bulunamadı!</string>
+ <string name="error_import_no_valid_keys">Dosya/Panoda geçerli anahtar bulunamadı!</string>
<!--results shown after decryption/verification-->
<string name="decrypt_result_invalid_signature">Geçersiz imza!</string>
+ <string name="decrypt_result_signature_unknown_pub_key">Bilinmeyen açık anahtar</string>
+ <string name="decrypt_result_signature_uncertified">Geçerli imza (sertifikasız)</string>
+ <string name="decrypt_result_signature_certified">Geçerli imza (sertifalı)</string>
+ <string name="decrypt_result_decrypted">Başarıyla çözümlendi</string>
<!--progress dialogs, usually ending in '…'-->
<string name="progress_done">Bitti.</string>
<string name="progress_cancel">İptal</string>
+ <string name="progress_cancelling">iptal ediliyor...</string>
<string name="progress_saving">kaydediliyor...</string>
<string name="progress_importing">alıyor...</string>
<string name="progress_exporting">veriyor...</string>
+ <string name="progress_uploading">yükleniyor...</string>
<string name="progress_building_key">anahtar oluşturuluyor...</string>
+ <string name="progress_modify_subkeyadd">alt anahtar ekleniyor...</string>
+ <string name="progress_modify_passphrase">parola değiştiriliyor...</string>
<plurals name="progress_exporting_key">
<item quantity="one">anahtar veriliyor...</item>
<item quantity="other">anahtarlar veriliyor...</item>
</plurals>
+ <string name="progress_extracting_key">anahtarlar veriliyor...</string>
+ <string name="progress_encrypting">veri şifreleniyor...</string>
+ <string name="progress_decrypting">veri çözümleniyor...</string>
<string name="progress_preparing_signature">imza hazırlanıyor...</string>
<string name="progress_generating_signature">imza oluşturuluyor...</string>
<string name="progress_processing_signature">imza işleniyor...</string>
@@ -107,6 +190,8 @@
<string name="progress_signing">imzalanıyor...</string>
<string name="progress_reading_data">veri okunuyor...</string>
<string name="progress_finding_key">anahtar bulunuyor...</string>
+ <string name="progress_verifying_integrity">bütünlük doğrulanıyor...</string>
+ <string name="progress_deleting">anahtarlar siliniyor...</string>
<!--action strings-->
<!--key bit length selections-->
<string name="key_size_512">512</string>
@@ -117,6 +202,7 @@
<string name="key_size_3072">3072</string>
<string name="key_size_4096">4096</string>
<string name="key_size_8192">8192</string>
+ <string name="key_size_custom">Özel anahtar boyutu</string>
<!--elliptic curve names-->
<!--not in for now, see SaveKeyringParcel
<string name="key_curve_bp_p256">"Brainpool P-256"</string>
@@ -131,47 +217,114 @@
<string name="help_tab_about">Hakkında</string>
<string name="help_about_version">Sürüm:</string>
<!--Import-->
+ <string name="import_tab_direct">Dosya/Pano</string>
<string name="import_import">Seçili anahtarları al</string>
+ <string name="import_qr_code_button">QR Kod Tara</string>
<!--Import result toast-->
+ <string name="view_log">Günlüğü Görüntüle</string>
<!--Intent labels-->
+ <string name="intent_decrypt_file">OpenKeychain ile Dosya Çözümle</string>
+ <string name="intent_send_encrypt">OpenKeychain ile Şifrele</string>
+ <string name="intent_send_decrypt">OpenKeychain ile Çözümle</string>
<!--Remote API-->
+ <string name="api_settings_show_info">Gelişmiş bilgiyi göster</string>
+ <string name="api_settings_hide_info">Gelişmiş bilgiyi gizle</string>
+ <string name="api_settings_show_advanced">Gelişmiş ayarları göster</string>
+ <string name="api_settings_hide_advanced">Gelişmiş ayarları gizle</string>
<string name="api_settings_no_key">Anahtar seçilmedi</string>
<string name="api_settings_select_key">Anahtar seç</string>
+ <string name="api_settings_create_key">Bu hesap için yeni anahtar oluştur</string>
<string name="api_settings_save">Kaydet</string>
<string name="api_settings_cancel">İptal</string>
+ <string name="api_settings_start">Uygulamayı başlat</string>
<string name="api_settings_delete_account">Hesabı sil</string>
<string name="api_settings_package_name">Paket Adı</string>
<string name="api_settings_accounts">Hesaplar</string>
+ <string name="api_settings_settings">Ayarlar</string>
+ <string name="api_settings_key">Hesap anahtarı:</string>
<string name="api_register_allow">Erişime izin ver</string>
<string name="api_register_disallow">Erişime izin verme</string>
<string name="api_register_error_select_key">Lütfen bir anahtar seçin!</string>
+ <string name="api_select_pub_keys_text_no_user_ids">Lütfen alıcıları seçin!</string>
<!--Share-->
<string name="share_qr_code_dialog_title">QR Kod ile Paylaş</string>
+ <string name="share_nfc_dialog">NFC ile Paylaş</string>
<!--Key list-->
+ <plurals name="key_list_selected_keys">
+ <item quantity="one">1 anahtar seçildi.</item>
+ <item quantity="other">%d anahtar seçildi.</item>
+ </plurals>
<string name="key_list_empty_text3">ya da</string>
<!--Key view-->
+ <string name="key_view_action_edit">Anahtarı düzenle</string>
+ <string name="key_view_action_encrypt">Metni şifrele</string>
+ <string name="key_view_action_encrypt_files">dosyalar</string>
+ <string name="key_view_action_share_with">Şu şekilde paylaş...</string>
+ <string name="key_view_action_share_nfc">NFC üzerinden Paylaş</string>
+ <string name="key_view_tab_main">Ana Bilgi</string>
+ <string name="key_view_tab_share">Paylaş</string>
+ <string name="key_view_tab_keys">Alt anahtarlar</string>
+ <string name="key_view_tab_certs">Sertifikalar</string>
<!--Edit key-->
+ <string name="edit_key_action_change_passphrase">Parolayı Değiştir</string>
+ <string name="edit_key_action_add_identity">Kimlik Ekle</string>
+ <string name="edit_key_action_add_subkey">Alt anahtar Ekle</string>
+ <string name="edit_key_edit_user_id_title">Bir eylem seç!</string>
+ <string name="edit_key_edit_subkey_title">Bir eylem seç!</string>
+ <string name="edit_key_new_subkey">yeni</string>
+ <string name="edit_key_select_flag">Lütfen en az bir bayrak seçiniz!</string>
<!--Create key-->
+ <string name="create_key_empty">Bu alan zorunludur</string>
+ <string name="create_key_passphrases_not_equal">Parolalar eşleşmedi</string>
+ <string name="create_key_hint_full_name">Tam Ad, örneğin: Max Mustermann</string>
<!--View key-->
<!--Navigation Drawer-->
<string name="nav_keys">Anahtarlar</string>
+ <string name="nav_encrypt_text">Metni şifrele</string>
+ <string name="nav_encrypt_files">Dosyaları şifrele</string>
+ <string name="nav_decrypt">Çözümle</string>
+ <string name="nav_apps">Uygulamalar</string>
<string name="my_keys">Anahtarlarım</string>
<!--hints-->
<!--certs-->
<string name="cert_default">varsayılan</string>
+ <string name="cert_none">hiç</string>
+ <string name="cert_positive">pozitif</string>
+ <string name="cert_verify_ok">Tamam</string>
<string name="cert_verify_failed">başarısız!</string>
<string name="cert_verify_error">hata!</string>
<string name="cert_verify_unavailable">anahtar mevcut değil</string>
<!--LogType log messages. Errors should have _ERROR_ in their name and end with a !-->
<!--Import Public log entries-->
<!--Import Secret log entries-->
+ <string name="msg_is_db_exception">Veritabanı hatası!</string>
<!--Keyring Canonicalization log entries-->
+ <string name="msg_kc_master">Ana anahtar işleniyor</string>
+ <string name="msg_kc_sub">Alt anahtar %s işleniyor</string>
+ <string name="msg_kc_sub_bad_type">Bilinmeyen alt anahtar sertifika tipi: %s</string>
<!--Keyring merging log entries-->
<!--createSecretKeyRing-->
<!--modifySecretKeyRing-->
+ <string name="msg_mf_subkey_new_id">Yeni alt anahtar ID: %s</string>
<!--Consolidate-->
+ <!--Other messages used in OperationLogs-->
+ <string name="msg_ek_error_not_found">Anahtar bulunamadı!</string>
+ <!--Messages for DecryptVerify operation-->
+ <!--Messages for SignEncrypt operation-->
<!--PassphraseCache-->
+ <string name="passp_cache_notif_pwd">Parola</string>
<!--unsorted-->
+ <string name="section_cert">Sertifika Detayları</string>
+ <string name="label_user_id">Kimli</string>
+ <string name="unknown_uid">&lt;bilinmeyen&gt;</string>
+ <string name="label_verify_status">Doğrulama Durumu</string>
+ <string name="label_cert_type">Tip</string>
+ <string name="error_key_not_found">Anahtar bulunamadı!</string>
+ <string name="key_no_passphrase">parola yok</string>
+ <string name="unknown_algorithm">bilinmeyen</string>
<string name="can_sign_not">imzalanamadı</string>
+ <string name="contact_show_key">Anahtarı göster (%s)</string>
<!--First Time-->
+ <string name="first_time_create_key">Anahtarımı oluştur</string>
+ <string name="first_time_skip">Kurulumu Atla</string>
</resources>
diff --git a/OpenKeychain/src/main/res/values-uk/strings.xml b/OpenKeychain/src/main/res/values-uk/strings.xml
index 3d6b9e1f4..d113103b4 100644
--- a/OpenKeychain/src/main/res/values-uk/strings.xml
+++ b/OpenKeychain/src/main/res/values-uk/strings.xml
@@ -169,8 +169,6 @@
<string name="no_keys_exported">Жодного ключа не експортовано.</string>
<string name="key_creation_el_gamal_info">Примітка: лише підключі підтримують ElGamal.</string>
<string name="key_not_found">Не можливо знайти ключ %08X.</string>
- <string name="key_send_success">Успішно завантажено ключ на сервер</string>
- <string name="key_certify_success">Успішно сертифіковані сутності</string>
<string name="list_empty">Цей список - порожній!</string>
<string name="nfc_successful">Успішно надіслано ключ через промінь NFC!</string>
<string name="key_copied_to_clipboard">Ключ вже скопійовано у буфер обміну!</string>
@@ -267,7 +265,6 @@
<string name="progress_con_reimport">consolidate: повторний імпорт…</string>
<!--action strings-->
<string name="hint_keyserver_search_hint">Назва/Ел. пошта/ІД ключа…</string>
- <string name="hint_keybase_search_hint">Назва/Ел.пошта/Доказ/Ключ…</string>
<!--key bit length selections-->
<string name="key_size_512">512</string>
<string name="key_size_768">768</string>
@@ -304,7 +301,6 @@
<string name="import_tab_keyserver">Сервер ключів</string>
<string name="import_tab_direct">Файл/Буфер обміну</string>
<string name="import_tab_qr_code">Код QR/NFC</string>
- <string name="import_tab_keybase">Keybase.io</string>
<string name="import_import">Імпортувати вибрані ключі</string>
<string name="import_qr_code_wrong">Невірний штрих-код! Спробуйте знову!</string>
<string name="import_qr_code_too_short_fingerprint">Відбиток надто короткий (&lt; 16 символів)</string>
@@ -540,7 +536,6 @@
<string name="msg_mf_error_noexist_primary">Вказаний поганий ІД первинного користувача!</string>
<string name="msg_mf_error_noexist_revoke">Вказаний поганий ІД первинного користувача!</string>
<string name="msg_mf_error_revoked_primary">ІД відхилених користувачів не може бути первинним!</string>
- <string name="msg_mf_error_pgp">Внутрішній виняток PGP!</string>
<string name="msg_mf_error_sig">Виняток підпису!</string>
<string name="msg_mf_master">Змінюються основі сертифікації</string>
<string name="msg_mf_primary_replace_old">Замінюється сертифікат ІД попереднього первинного користувача</string>
@@ -560,6 +555,9 @@
<!--Consolidate-->
<string name="msg_con_error_public">Помилка повторного імпорту публічних ключів!</string>
<string name="msg_con_error_secret">Помилка повторного імпорту секретних ключів!</string>
+ <!--Other messages used in OperationLogs-->
+ <!--Messages for DecryptVerify operation-->
+ <!--Messages for SignEncrypt operation-->
<!--PassphraseCache-->
<string name="passp_cache_notif_click_to_clear">Клацніть для очищення кешованих парольних фраз</string>
<string name="passp_cache_notif_n_keys">OpenKeychain має %d кешованих парольних фраз</string>
diff --git a/OpenKeychain/src/main/res/values-zh/strings.xml b/OpenKeychain/src/main/res/values-zh/strings.xml
index d058cb99e..578c13ed8 100644
--- a/OpenKeychain/src/main/res/values-zh/strings.xml
+++ b/OpenKeychain/src/main/res/values-zh/strings.xml
@@ -72,7 +72,6 @@
<string name="select_encryption_or_signature_key">选择至少一个加密密钥或者签名密钥</string>
<string name="key_exported">成功地导出了1个密钥</string>
<string name="no_keys_exported">没有密钥被导出</string>
- <string name="key_send_success">成功地上传了密钥到服务器</string>
<string name="list_empty">这个列表是空的!</string>
<!--errors
no punctuation, all lowercase,
@@ -148,6 +147,9 @@
<!--createSecretKeyRing-->
<!--modifySecretKeyRing-->
<!--Consolidate-->
+ <!--Other messages used in OperationLogs-->
+ <!--Messages for DecryptVerify operation-->
+ <!--Messages for SignEncrypt operation-->
<!--PassphraseCache-->
<!--unsorted-->
<!--First Time-->
diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml
index 883c3c878..5d0127f5c 100644
--- a/OpenKeychain/src/main/res/values/strings.xml
+++ b/OpenKeychain/src/main/res/values/strings.xml
@@ -16,6 +16,7 @@
<string name="title_add_subkey">"Add subkey"</string>
<string name="title_edit_key">"Edit Key"</string>
<string name="title_preferences">"Preferences"</string>
+ <string name="title_cloud_search_preferences">"Cloud Search Preferences"</string>
<string name="title_api_registered_apps">"Apps"</string>
<string name="title_key_server_preference">"Keyserver Preference"</string>
<string name="title_change_passphrase">"Change Passphrase"</string>
@@ -39,6 +40,7 @@
<!-- section -->
<string name="section_user_ids">"Identities"</string>
<string name="section_keys">"Subkeys"</string>
+ <string name="section_cloud_search">"Cloud search"</string>
<string name="section_general">"General"</string>
<string name="section_defaults">"Defaults"</string>
<string name="section_advanced">"Advanced"</string>
@@ -125,6 +127,8 @@
<string name="label_send_key">"Upload key to selected keyserver after certification"</string>
<string name="label_fingerprint">"Fingerprint"</string>
<string name="expiry_date_dialog_title">"Set expiry date"</string>
+ <string name="label_first_keyserver_is_used">"(First keyserver listed is preferred)"</string>
+ <string name="label_preferred">"preferred"</string>
<string name="user_id_no_name">"&lt;no name&gt;"</string>
<string name="none">"&lt;none&gt;"</string>
@@ -323,7 +327,7 @@
<!-- action strings -->
<string name="hint_keyserver_search_hint">"Name/Email/Key ID…"</string>
- <string name="hint_keybase_search_hint">"Name/Email/Proof/Key…"</string>
+ <string name="hint_cloud_search_hint">"Name/Email/Proof/Key…"</string>
<!-- key bit length selections -->
<string name="key_size_512">"512"</string>
@@ -364,9 +368,9 @@
<!-- Import -->
<string name="import_tab_keyserver">"Keyserver"</string>
+ <string name="import_tab_cloud">"Search Cloud"</string>
<string name="import_tab_direct">"File/Clipboard"</string>
<string name="import_tab_qr_code">"QR Code/NFC"</string>
- <string name="import_tab_keybase">"Keybase.io"</string>
<string name="import_import">"Import selected keys"</string>
<string name="import_qr_code_wrong">"QR Code malformed! Please try again!"</string>
<string name="import_qr_code_too_short_fingerprint">"Fingerprint is too short (&lt; 16 characters)"</string>
@@ -519,7 +523,6 @@
<!-- hints -->
<string name="encrypt_content_edit_text_hint">"Type text"</string>
- <string name="decrypt_content_edit_text_hint">"Enter ciphertext here to decrypt and/or verify…"</string>
<!-- certs -->
<string name="cert_default">"default"</string>
diff --git a/OpenKeychain/src/main/res/xml/adv_preferences.xml b/OpenKeychain/src/main/res/xml/adv_preferences.xml
index 3180f21aa..250f21e2a 100644
--- a/OpenKeychain/src/main/res/xml/adv_preferences.xml
+++ b/OpenKeychain/src/main/res/xml/adv_preferences.xml
@@ -1,6 +1,12 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="@string/section_defaults">
<org.sufficientlysecure.keychain.ui.widget.IntegerListPreference
+ android:entries="@array/passphrase_cache_ttl_entries"
+ android:entryValues="@array/passphrase_cache_ttl_values"
+ android:key="passphraseCacheTtl"
+ android:persistent="false"
+ android:title="@string/label_passphrase_cache_ttl" />
+ <org.sufficientlysecure.keychain.ui.widget.IntegerListPreference
android:key="defaultEncryptionAlgorithm"
android:persistent="false"
android:title="@string/label_encryption_algorithm" />
diff --git a/OpenKeychain/src/main/res/xml/cloud_search_prefs.xml b/OpenKeychain/src/main/res/xml/cloud_search_prefs.xml
new file mode 100644
index 000000000..c87c4df7b
--- /dev/null
+++ b/OpenKeychain/src/main/res/xml/cloud_search_prefs.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+ <CheckBoxPreference
+ android:title="Search Keyserver"
+ android:defaultValue="true"
+ android:summary="Search HKP keyserver"
+ android:key="search_keyserver_pref" />
+
+ <CheckBoxPreference
+ android:title="Search Keybase.io"
+ android:defaultValue="true"
+ android:summary="Search Keybase.io index"
+ android:key="search_keybase_pref" />
+
+ <PreferenceScreen
+ android:key="keyServers"
+ android:persistent="false"
+ android:title="@string/label_keyservers" />
+</PreferenceScreen> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/xml/gen_preferences.xml b/OpenKeychain/src/main/res/xml/gen_preferences.xml
deleted file mode 100644
index fd3c6c31a..000000000
--- a/OpenKeychain/src/main/res/xml/gen_preferences.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
- <PreferenceCategory android:title="@string/section_general">
- <org.sufficientlysecure.keychain.ui.widget.IntegerListPreference
- android:entries="@array/passphrase_cache_ttl_entries"
- android:entryValues="@array/passphrase_cache_ttl_values"
- android:key="passphraseCacheTtl"
- android:persistent="false"
- android:title="@string/label_passphrase_cache_ttl" />
-
- <PreferenceScreen
- android:key="keyServers"
- android:persistent="false"
- android:title="@string/label_keyservers" />
- </PreferenceCategory>
-</PreferenceScreen>
diff --git a/OpenKeychain/src/main/res/xml/preference_headers.xml b/OpenKeychain/src/main/res/xml/preference_headers.xml
index e6b68507a..dd7f1c3e6 100644
--- a/OpenKeychain/src/main/res/xml/preference_headers.xml
+++ b/OpenKeychain/src/main/res/xml/preference_headers.xml
@@ -1,7 +1,7 @@
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<header
- android:fragment="org.sufficientlysecure.keychain.ui.PreferencesActivity$GeneralPrefsFragment"
- android:title="@string/section_general" />
+ android:fragment="org.sufficientlysecure.keychain.ui.PreferencesActivity$CloudSearchPrefsFragment"
+ android:title="@string/section_cloud_search" />
<header
android:fragment="org.sufficientlysecure.keychain.ui.PreferencesActivity$AdvancedPrefsFragment"
android:title="@string/section_advanced" />