aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdithya Abraham Philip <adithyaphilip@gmail.com>2015-02-28 14:29:20 +0530
committerAdithya Abraham Philip <adithyaphilip@gmail.com>2015-02-28 14:29:20 +0530
commit94114e35c2af9e264bfa6b3d458f6ceae77ab4f9 (patch)
tree5ff39778fa22dde56057a2f15fcad7aa63b330fb
parent23cbd786eae8720769e775e4f8785da47115110f (diff)
parent2ae4d6ce05e6ca1585239b779b1dd6f39f58050a (diff)
downloadopen-keychain-94114e35c2af9e264bfa6b3d458f6ceae77ab4f9.tar.gz
open-keychain-94114e35c2af9e264bfa6b3d458f6ceae77ab4f9.tar.bz2
open-keychain-94114e35c2af9e264bfa6b3d458f6ceae77ab4f9.zip
Merge branch 'development' of https://github.com/open-keychain/open-keychain into development
-rw-r--r--OpenKeychain/build.gradle2
-rw-r--r--OpenKeychain/src/main/AndroidManifest.xml4
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java7
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyFingerprintActivity.java12
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyFingerprintFragment.java16
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyFragment.java86
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java133
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/MainActivity.java40
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/NavDrawerActivity.java50
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java185
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java12
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvUserIdsFragment.java (renamed from OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvMainFragment.java)54
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java4
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserIdsAdapter.java8
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/Notify.java41
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/ListAwareSwipeRefreshLayout.java99
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/FabContainer.java8
-rw-r--r--OpenKeychain/src/main/res/anim/rotate.xml8
-rw-r--r--OpenKeychain/src/main/res/anim/rotate_spin.xml8
-rw-r--r--OpenKeychain/src/main/res/layout-land/qr_code_activity.xml39
-rw-r--r--OpenKeychain/src/main/res/layout/create_key_activity.xml6
-rw-r--r--OpenKeychain/src/main/res/layout/create_key_final_fragment.xml1
-rw-r--r--OpenKeychain/src/main/res/layout/create_key_input_fragment.xml2
-rw-r--r--OpenKeychain/src/main/res/layout/decrypt_files_activity.xml6
-rw-r--r--OpenKeychain/src/main/res/layout/decrypt_text_activity.xml8
-rw-r--r--OpenKeychain/src/main/res/layout/encrypt_files_activity.xml6
-rw-r--r--OpenKeychain/src/main/res/layout/encrypt_text_activity.xml6
-rw-r--r--OpenKeychain/src/main/res/layout/import_keys_activity.xml6
-rw-r--r--OpenKeychain/src/main/res/layout/import_keys_cloud_fragment.xml1
-rw-r--r--OpenKeychain/src/main/res/layout/indeterminate_progress.xml9
-rw-r--r--OpenKeychain/src/main/res/layout/key_list_fragment.xml68
-rw-r--r--OpenKeychain/src/main/res/layout/qr_code_activity.xml4
-rw-r--r--OpenKeychain/src/main/res/layout/view_key_activity.xml1
-rw-r--r--OpenKeychain/src/main/res/layout/view_key_adv_certs_fragment.xml9
-rw-r--r--OpenKeychain/src/main/res/layout/view_key_adv_keybase_fragment.xml126
-rw-r--r--OpenKeychain/src/main/res/layout/view_key_adv_keybase_proof.xml (renamed from OpenKeychain/src/main/res/layout/view_key_keybase_proof.xml)0
-rw-r--r--OpenKeychain/src/main/res/layout/view_key_adv_main_fragment.xml43
-rw-r--r--OpenKeychain/src/main/res/layout/view_key_adv_share_fragment.xml5
-rw-r--r--OpenKeychain/src/main/res/layout/view_key_fragment.xml2
-rw-r--r--OpenKeychain/src/main/res/layout/view_key_trust_fragment.xml105
-rw-r--r--OpenKeychain/src/main/res/raw-eu/help_about.html57
-rw-r--r--OpenKeychain/src/main/res/raw-eu/help_changelog.html232
-rw-r--r--OpenKeychain/src/main/res/raw-eu/help_nfc_beam.html12
-rw-r--r--OpenKeychain/src/main/res/raw-eu/help_start.html19
-rw-r--r--OpenKeychain/src/main/res/raw-eu/help_wot.html17
-rw-r--r--OpenKeychain/src/main/res/raw-eu/nfc_beam_share.html11
-rw-r--r--OpenKeychain/src/main/res/raw-ru/help_changelog.html276
-rw-r--r--OpenKeychain/src/main/res/raw-ru/help_nfc_beam.html2
-rw-r--r--OpenKeychain/src/main/res/raw-ru/help_start.html4
-rw-r--r--OpenKeychain/src/main/res/raw-ru/help_wot.html2
-rw-r--r--OpenKeychain/src/main/res/values-bg/strings.xml3
-rw-r--r--OpenKeychain/src/main/res/values-cs/strings.xml6
-rw-r--r--OpenKeychain/src/main/res/values-de/strings.xml7
-rw-r--r--OpenKeychain/src/main/res/values-es/strings.xml101
-rw-r--r--OpenKeychain/src/main/res/values-et/strings.xml3
-rw-r--r--OpenKeychain/src/main/res/values-eu/strings.xml69
-rw-r--r--OpenKeychain/src/main/res/values-fi/strings.xml3
-rw-r--r--OpenKeychain/src/main/res/values-fr/strings.xml62
-rw-r--r--OpenKeychain/src/main/res/values-is/strings.xml3
-rw-r--r--OpenKeychain/src/main/res/values-it/strings.xml7
-rw-r--r--OpenKeychain/src/main/res/values-ja/strings.xml24
-rw-r--r--OpenKeychain/src/main/res/values-nl/strings.xml74
-rw-r--r--OpenKeychain/src/main/res/values-pl/strings.xml61
-rw-r--r--OpenKeychain/src/main/res/values-pt/strings.xml3
-rw-r--r--OpenKeychain/src/main/res/values-ro/strings.xml3
-rw-r--r--OpenKeychain/src/main/res/values-ru/strings.xml116
-rw-r--r--OpenKeychain/src/main/res/values-sl/strings.xml5
-rw-r--r--OpenKeychain/src/main/res/values-sr/strings.xml35
-rw-r--r--OpenKeychain/src/main/res/values-sv/strings.xml7
-rw-r--r--OpenKeychain/src/main/res/values-tr/strings.xml6
-rw-r--r--OpenKeychain/src/main/res/values-uk/strings.xml6
-rw-r--r--OpenKeychain/src/main/res/values-zh-rTW/strings.xml7
-rw-r--r--OpenKeychain/src/main/res/values-zh/strings.xml3
-rw-r--r--OpenKeychain/src/main/res/values/strings.xml31
74 files changed, 1672 insertions, 835 deletions
diff --git a/OpenKeychain/build.gradle b/OpenKeychain/build.gradle
index 3d852621c..7fa139c06 100644
--- a/OpenKeychain/build.gradle
+++ b/OpenKeychain/build.gradle
@@ -28,7 +28,7 @@ dependencies {
compile 'com.google.zxing:core:3.0.1'
compile 'com.jpardogo.materialtabstrip:library:1.0.9'
compile 'it.neokree:MaterialNavigationDrawer:1.3.1'
- compile 'com.nispok:snackbar:2.7.4'
+ compile 'com.nispok:snackbar:2.9.1'
compile 'com.getbase:floatingactionbutton:1.8.0'
}
diff --git a/OpenKeychain/src/main/AndroidManifest.xml b/OpenKeychain/src/main/AndroidManifest.xml
index 20e618320..d74a71fff 100644
--- a/OpenKeychain/src/main/AndroidManifest.xml
+++ b/OpenKeychain/src/main/AndroidManifest.xml
@@ -95,7 +95,7 @@
<activity
android:name=".ui.CreateKeyActivity"
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
- android:windowSoftInputMode="stateHidden"
+ android:windowSoftInputMode="stateHidden|adjustResize"
android:label="@string/title_create_key"
android:parentActivityName=".ui.MainActivity">
<meta-data
@@ -106,9 +106,9 @@
android:name=".ui.EditKeyActivity"
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
android:label="@string/title_edit_key" />
+ <!-- NOTE: Dont use configChanges for QR Code view! We use a different layout for landscape -->
<activity
android:name=".ui.QrCodeViewActivity"
- android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
android:label="@string/share_qr_code_dialog_title" />
<activity
android:name=".ui.ViewKeyActivity"
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java
index ceb0a2d2b..635fe86f1 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java
@@ -78,6 +78,10 @@ public class KeychainIntentServiceHandler extends Handler {
}
public void showProgressDialog(FragmentActivity activity) {
+ if (mProgressDialogFragment == null) {
+ return;
+ }
+
// TODO: This is a hack!, see
// http://stackoverflow.com/questions/10114324/show-dialogfragment-from-onactivityresult
final FragmentManager manager = activity.getSupportFragmentManager();
@@ -94,7 +98,8 @@ public class KeychainIntentServiceHandler extends Handler {
Bundle data = message.getData();
if (mProgressDialogFragment == null) {
- Log.e(Constants.TAG, "Progress has not been updated because mProgressDialogFragment was null!");
+ // Log.e(Constants.TAG,
+ // "Progress has not been updated because mProgressDialogFragment was null!");
return;
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyFingerprintActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyFingerprintActivity.java
index 777288e69..b7c80c1ed 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyFingerprintActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyFingerprintActivity.java
@@ -17,14 +17,12 @@
package org.sufficientlysecure.keychain.ui;
-import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
-import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.util.Log;
public class CertifyFingerprintActivity extends BaseActivity {
@@ -79,14 +77,4 @@ public class CertifyFingerprintActivity extends BaseActivity {
getSupportFragmentManager().executePendingTransactions();
}
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- // if a result has been returned, display a notify
- if (data != null && data.hasExtra(OperationResult.EXTRA_RESULT)) {
- OperationResult result = data.getParcelableExtra(OperationResult.EXTRA_RESULT);
- result.createNotify(this).show();
- } else {
- super.onActivityResult(requestCode, resultCode, data);
- }
- }
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyFingerprintFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyFingerprintFragment.java
index aef705ee9..a6b8a0e85 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyFingerprintFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyFingerprintFragment.java
@@ -41,6 +41,8 @@ import org.sufficientlysecure.keychain.util.Log;
public class CertifyFingerprintFragment extends LoaderFragment implements
LoaderManager.LoaderCallbacks<Cursor> {
+ static final int REQUEST_CERTIFY = 1;
+
public static final String ARG_DATA_URI = "uri";
private TextView mFingerprint;
@@ -177,8 +179,20 @@ public class CertifyFingerprintFragment extends LoaderFragment implements
Log.e(Constants.TAG, "key not found!", e);
}
Intent certifyIntent = new Intent(getActivity(), CertifyKeyActivity.class);
+ certifyIntent.putExtras(getActivity().getIntent());
certifyIntent.putExtra(CertifyKeyActivity.EXTRA_KEY_IDS, new long[]{keyId});
- startActivityForResult(certifyIntent, 0);
+ startActivityForResult(certifyIntent, REQUEST_CERTIFY);
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ // always just pass this one through
+ if (requestCode == REQUEST_CERTIFY) {
+ getActivity().setResult(resultCode, data);
+ getActivity().finish();
+ return;
+ }
+ super.onActivityResult(requestCode, resultCode, data);
}
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyFragment.java
index 50d5e3229..e1467ec61 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyFragment.java
@@ -31,6 +31,7 @@ import android.os.Bundle;
import android.os.Message;
import android.os.Messenger;
import android.os.Parcel;
+import android.os.Parcelable;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
@@ -94,6 +95,7 @@ public class CertifyKeyFragment extends LoaderFragment
private static final int INDEX_IS_REVOKED = 4;
private MultiUserIdsAdapter mUserIdsAdapter;
+ private Messenger mPassthroughMessenger;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
@@ -109,6 +111,9 @@ public class CertifyKeyFragment extends LoaderFragment
return;
}
+ mPassthroughMessenger = getActivity().getIntent().getParcelableExtra(
+ KeychainIntentService.EXTRA_MESSENGER);
+
// preselect certify key id if given
long certifyKeyId = getActivity().getIntent().getLongExtra(CertifyKeyActivity.EXTRA_CERTIFY_KEY_ID, Constants.key.none);
if (certifyKeyId != Constants.key.none) {
@@ -332,7 +337,6 @@ public class CertifyKeyFragment extends LoaderFragment
}
}
-
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
@@ -362,51 +366,63 @@ public class CertifyKeyFragment extends LoaderFragment
return;
}
+ Bundle data = new Bundle();
+ {
+ // fill values for this action
+ CertifyActionsParcel parcel = new CertifyActionsParcel(mSignMasterKeyId);
+ parcel.mCertifyActions.addAll(certifyActions);
+
+ data.putParcelable(KeychainIntentService.CERTIFY_PARCEL, parcel);
+ if (mUploadKeyCheckbox.isChecked()) {
+ String keyserver = Preferences.getPreferences(getActivity()).getPreferredKeyserver();
+ data.putString(KeychainIntentService.UPLOAD_KEY_SERVER, keyserver);
+ }
+ }
+
// Send all information needed to service to sign key in other thread
Intent intent = new Intent(getActivity(), KeychainIntentService.class);
-
intent.setAction(KeychainIntentService.ACTION_CERTIFY_KEYRING);
-
- // fill values for this action
- CertifyActionsParcel parcel = new CertifyActionsParcel(mSignMasterKeyId);
- parcel.mCertifyActions.addAll(certifyActions);
-
- Bundle data = new Bundle();
- data.putParcelable(KeychainIntentService.CERTIFY_PARCEL, parcel);
- if (mUploadKeyCheckbox.isChecked()) {
- String keyserver = Preferences.getPreferences(getActivity()).getPreferredKeyserver();
- data.putString(KeychainIntentService.UPLOAD_KEY_SERVER, keyserver);
- }
intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
- // Message is received after signing is done in KeychainIntentService
- KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(getActivity(),
- getString(R.string.progress_certifying), ProgressDialog.STYLE_SPINNER, true) {
- public void handleMessage(Message message) {
- // handle messages by standard KeychainIntentServiceHandler first
- super.handleMessage(message);
-
- if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {
- Bundle data = message.getData();
- CertifyResult result = data.getParcelable(CertifyResult.EXTRA_RESULT);
-
- Intent intent = new Intent();
- intent.putExtra(CertifyResult.EXTRA_RESULT, result);
- getActivity().setResult(Activity.RESULT_OK, intent);
- getActivity().finish();
+ if (mPassthroughMessenger != null) {
+ intent.putExtra(KeychainIntentService.EXTRA_MESSENGER, mPassthroughMessenger);
+ } else {
+
+ // Message is received after signing is done in KeychainIntentService
+ KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(getActivity(),
+ getString(R.string.progress_certifying), ProgressDialog.STYLE_SPINNER, true) {
+ public void handleMessage(Message message) {
+ // handle messages by standard KeychainIntentServiceHandler first
+ super.handleMessage(message);
+
+ if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {
+ Bundle data = message.getData();
+ CertifyResult result = data.getParcelable(CertifyResult.EXTRA_RESULT);
+
+ Intent intent = new Intent();
+ intent.putExtra(CertifyResult.EXTRA_RESULT, result);
+ getActivity().setResult(Activity.RESULT_OK, intent);
+ getActivity().finish();
+ }
}
- }
- };
+ };
- // Create a new Messenger for the communication back
- Messenger messenger = new Messenger(saveHandler);
- intent.putExtra(KeychainIntentService.EXTRA_MESSENGER, messenger);
+ // Create a new Messenger for the communication back
+ Messenger messenger = new Messenger(saveHandler);
+ intent.putExtra(KeychainIntentService.EXTRA_MESSENGER, messenger);
- // show progress dialog
- saveHandler.showProgressDialog(getActivity());
+ // show progress dialog
+ saveHandler.showProgressDialog(getActivity());
+ }
// start service with intent
getActivity().startService(intent);
+
+ if (mPassthroughMessenger != null) {
+ getActivity().setResult(Activity.RESULT_OK);
+ getActivity().finish();
+ }
+
}
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java
index 99714b4a0..496048582 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java
@@ -18,6 +18,7 @@
package org.sufficientlysecure.keychain.ui;
+import android.animation.ObjectAnimator;
import android.annotation.TargetApi;
import android.app.ProgressDialog;
import android.content.Context;
@@ -36,16 +37,12 @@ import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.view.MenuItemCompat;
import android.support.v4.widget.CursorAdapter;
-import android.support.v4.widget.NoScrollableSwipeRefreshLayout;
-import android.support.v7.app.ActionBar;
-import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.SearchView;
import android.view.ActionMode;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
-import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
@@ -57,6 +54,7 @@ import android.widget.ListView;
import android.widget.TextView;
import com.getbase.floatingactionbutton.FloatingActionButton;
+import com.getbase.floatingactionbutton.FloatingActionsMenu;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
@@ -73,8 +71,8 @@ import org.sufficientlysecure.keychain.ui.dialog.DeleteKeyDialogFragment;
import org.sufficientlysecure.keychain.ui.util.Highlighter;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.ui.util.Notify;
-import org.sufficientlysecure.keychain.ui.widget.ListAwareSwipeRefreshLayout;
import org.sufficientlysecure.keychain.util.ExportHelper;
+import org.sufficientlysecure.keychain.util.FabContainer;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences;
@@ -91,25 +89,19 @@ import se.emilsjolander.stickylistheaders.StickyListHeadersListView;
*/
public class KeyListFragment extends LoaderFragment
implements SearchView.OnQueryTextListener, AdapterView.OnItemClickListener,
- LoaderManager.LoaderCallbacks<Cursor> {
+ LoaderManager.LoaderCallbacks<Cursor>, FabContainer {
ExportHelper mExportHelper;
private KeyListAdapter mAdapter;
private StickyListHeadersListView mStickyList;
- private ListAwareSwipeRefreshLayout mSwipeRefreshLayout;
// saves the mode object for multiselect, needed for reset at some point
private ActionMode mActionMode = null;
- private boolean mShowAllKeys = true;
-
private String mQuery;
- private SearchView mSearchView;
- private FloatingActionButton mFabQrCode;
- private FloatingActionButton mFabCloud;
- private FloatingActionButton mFabFile;
+ private FloatingActionsMenu mFab;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -129,96 +121,38 @@ public class KeyListFragment extends LoaderFragment
mStickyList = (StickyListHeadersListView) view.findViewById(R.id.key_list_list);
mStickyList.setOnItemClickListener(this);
- mFabQrCode = (FloatingActionButton) view.findViewById(R.id.fab_add_qr_code);
- mFabCloud = (FloatingActionButton) view.findViewById(R.id.fab_add_cloud);
- mFabFile = (FloatingActionButton) view.findViewById(R.id.fab_add_file);
+ mFab = (FloatingActionsMenu) view.findViewById(R.id.fab_main);
+
+ FloatingActionButton fabQrCode = (FloatingActionButton) view.findViewById(R.id.fab_add_qr_code);
+ FloatingActionButton fabCloud = (FloatingActionButton) view.findViewById(R.id.fab_add_cloud);
+ FloatingActionButton fabFile = (FloatingActionButton) view.findViewById(R.id.fab_add_file);
- mFabQrCode.setOnClickListener(new OnClickListener() {
+ fabQrCode.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
+ mFab.collapse();
scanQrCode();
}
});
- mFabCloud.setOnClickListener(new OnClickListener() {
+ fabCloud.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
+ mFab.collapse();
searchCloud();
}
});
- mFabFile.setOnClickListener(new OnClickListener() {
+ fabFile.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
+ mFab.collapse();
importFile();
}
});
- mSwipeRefreshLayout = (ListAwareSwipeRefreshLayout) view.findViewById(R.id.key_list_swipe_container);
- mSwipeRefreshLayout.setOnRefreshListener(new NoScrollableSwipeRefreshLayout.OnRefreshListener() {
- @Override
- public void onRefresh() {
- KeychainIntentServiceHandler finishedHandler = new KeychainIntentServiceHandler(getActivity()) {
- public void handleMessage(Message message) {
- if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {
- mSwipeRefreshLayout.setRefreshing(false);
- }
- }
- };
- // new KeyUpdateHelper().updateAllKeys(getActivity(), finishedHandler);
- updateActionbarForSwipe(false);
- }
- });
- mSwipeRefreshLayout.setColorScheme(
- R.color.android_purple_dark,
- R.color.android_purple_light,
- R.color.android_purple_dark,
- R.color.android_purple_light);
- mSwipeRefreshLayout.setStickyListHeadersListView(mStickyList);
- mSwipeRefreshLayout.setOnTouchListener(new View.OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- if (event.getAction() == MotionEvent.ACTION_MOVE) {
- updateActionbarForSwipe(true);
- } else {
- updateActionbarForSwipe(false);
- }
- return false;
- }
- });
- // Just disable for now
- mSwipeRefreshLayout.setIsLocked(true);
return root;
}
- private void updateActionbarForSwipe(boolean show) {
- ActionBarActivity activity = (ActionBarActivity) getActivity();
- ActionBar bar = activity.getSupportActionBar();
-
- if (show) {
- bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
- bar.setDisplayUseLogoEnabled(false);
- bar.setCustomView(R.layout.custom_actionbar);
- TextView title = (TextView) getActivity().findViewById(R.id.custom_actionbar_text);
- title.setText(R.string.swipe_to_update);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
-// hideMenu = true;
-// activity.invalidateOptionsMenu();
- }
- } else {
- bar.setTitle(getActivity().getTitle());
- bar.setDisplayHomeAsUpEnabled(true);
- bar.setDisplayShowTitleEnabled(true);
- bar.setDisplayUseLogoEnabled(true);
- bar.setDisplayShowHomeEnabled(true);
- bar.setDisplayShowCustomEnabled(false);
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
-// hideMenu = false;
-// activity.invalidateOptionsMenu();
- }
- }
- }
-
/**
* Define Adapter and Loader on create of Activity
*/
@@ -275,7 +209,7 @@ public class KeyListFragment extends LoaderFragment
}
case R.id.menu_key_list_multi_export: {
ids = mAdapter.getCurrentSelectedMasterKeyIds();
- ExportHelper mExportHelper = new ExportHelper((ActionBarActivity) getActivity());
+ ExportHelper mExportHelper = new ExportHelper(getActivity());
mExportHelper.showExportKeysDialog(ids, Constants.Path.APP_DIR_FILE,
mAdapter.isAnySecretSelected());
break;
@@ -301,7 +235,7 @@ public class KeyListFragment extends LoaderFragment
public void onItemCheckedStateChanged(ActionMode mode, int position, long id,
boolean checked) {
if (checked) {
- mAdapter.setNewSelection(position, checked);
+ mAdapter.setNewSelection(position, true);
} else {
mAdapter.removeSelection(position);
}
@@ -370,14 +304,6 @@ public class KeyListFragment extends LoaderFragment
whereArgs[i] = "%" + words[i] + "%";
}
}
- if (!mShowAllKeys) {
- if (where == null) {
- where = "";
- } else {
- where += " AND ";
- }
- where += KeyRings.VERIFIED + " != 0";
- }
// Now create and return a CursorLoader that will take care of
// creating a Cursor for the data being displayed.
@@ -441,7 +367,6 @@ public class KeyListFragment extends LoaderFragment
/**
* Show dialog to delete key
*
- * @param masterKeyIds
* @param hasSecret must contain whether the list of masterKeyIds contains a secret key or not
*/
public void showDeleteKeyDialog(final ActionMode mode, long[] masterKeyIds, boolean hasSecret) {
@@ -493,10 +418,10 @@ public class KeyListFragment extends LoaderFragment
// Get the searchview
MenuItem searchItem = menu.findItem(R.id.menu_key_list_search);
- mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);
+ SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
// Execute this when searching
- mSearchView.setOnQueryTextListener(this);
+ searchView.setOnQueryTextListener(this);
// Erase search result without focus
MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {
@@ -594,7 +519,6 @@ public class KeyListFragment extends LoaderFragment
return true;
}
-
private void searchCloud() {
Intent importIntent = new Intent(getActivity(), ImportKeysActivity.class);
importIntent.putExtra(ImportKeysActivity.EXTRA_QUERY, (String) null); // hack to show only cloud tab
@@ -677,6 +601,23 @@ public class KeyListFragment extends LoaderFragment
}
}
+ @Override
+ public void fabMoveUp(int height) {
+ ObjectAnimator anim = ObjectAnimator.ofFloat(mFab, "translationY", 0, -height);
+ // we're a little behind, so skip 1/10 of the time
+ anim.setDuration(270);
+ anim.start();
+ }
+
+ @Override
+ public void fabRestorePosition() {
+ ObjectAnimator anim = ObjectAnimator.ofFloat(mFab, "translationY", 0);
+ // we're a little ahead, so wait a few ms
+ anim.setStartDelay(70);
+ anim.setDuration(300);
+ anim.start();
+ }
+
/**
* Implements StickyListHeadersAdapter from library
*/
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/MainActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/MainActivity.java
index 2f29f9360..b6b2fcb8a 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/MainActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/MainActivity.java
@@ -23,13 +23,33 @@ import android.os.Bundle;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.operations.results.OperationResult;
+import org.sufficientlysecure.keychain.remote.ui.AppsListFragment;
import org.sufficientlysecure.keychain.util.Preferences;
+import org.sufficientlysecure.keychain.util.FabContainer;
-public class MainActivity extends NavDrawerActivity {
+import it.neokree.materialnavigationdrawer.MaterialNavigationDrawer;
+
+public class MainActivity extends MaterialNavigationDrawer implements FabContainer {
@Override
public void init(Bundle savedInstanceState) {
- super.init(savedInstanceState);
+ // don't open drawer on first run
+ disableLearningPattern();
+
+// addMultiPaneSupport();
+
+ // set the header image
+ // create and set the header
+ setDrawerHeaderImage(R.drawable.drawer_header);
+
+ // create sections
+ addSection(newSection(getString(R.string.nav_keys), R.drawable.ic_vpn_key_black_24dp, new KeyListFragment()));
+ addSection(newSection(getString(R.string.nav_encrypt_decrypt), R.drawable.ic_lock_black_24dp, new EncryptDecryptOverviewFragment()));
+ addSection(newSection(getString(R.string.title_api_registered_apps), R.drawable.ic_apps_black_24dp, new AppsListFragment()));
+
+ // create bottom section
+ addBottomSection(newSection(getString(R.string.menu_preferences), R.drawable.ic_settings_black_24dp, new Intent(this, SettingsActivity.class)));
+ addBottomSection(newSection(getString(R.string.menu_help), R.drawable.ic_help_black_24dp, new Intent(this, HelpActivity.class)));
// if this is the first time show first time activity
Preferences prefs = Preferences.getPreferences(this);
@@ -47,4 +67,20 @@ public class MainActivity extends NavDrawerActivity {
}
}
+ @Override
+ public void fabMoveUp(int height) {
+ Object fragment = getCurrentSection().getTargetFragment();
+ if (fragment instanceof FabContainer) {
+ ((FabContainer) fragment).fabMoveUp(height);
+ }
+ }
+
+ @Override
+ public void fabRestorePosition() {
+ Object fragment = getCurrentSection().getTargetFragment();
+ if (fragment instanceof FabContainer) {
+ ((FabContainer) fragment).fabRestorePosition();
+ }
+ }
+
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/NavDrawerActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/NavDrawerActivity.java
deleted file mode 100644
index fb23c7d3a..000000000
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/NavDrawerActivity.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2015 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.os.Bundle;
-
-import org.sufficientlysecure.keychain.R;
-import org.sufficientlysecure.keychain.remote.ui.AppsListFragment;
-
-import it.neokree.materialnavigationdrawer.MaterialNavigationDrawer;
-
-public abstract class NavDrawerActivity extends MaterialNavigationDrawer {
-
- @Override
- public void init(Bundle savedInstanceState) {
- // don't open drawer on first run
- disableLearningPattern();
-
-// addMultiPaneSupport();
-
- // set the header image
- // create and set the header
- setDrawerHeaderImage(R.drawable.drawer_header);
-
- // create sections
- addSection(newSection(getString(R.string.nav_keys), R.drawable.ic_vpn_key_black_24dp, new KeyListFragment()));
- addSection(newSection(getString(R.string.nav_encrypt_decrypt), R.drawable.ic_lock_black_24dp, new EncryptDecryptOverviewFragment()));
- addSection(newSection(getString(R.string.title_api_registered_apps), R.drawable.ic_apps_black_24dp, new AppsListFragment()));
-
- // create bottom section
- addBottomSection(newSection(getString(R.string.menu_preferences), R.drawable.ic_settings_black_24dp, new Intent(this, SettingsActivity.class)));
- addBottomSection(newSection(getString(R.string.menu_help), R.drawable.ic_help_black_24dp, new Intent(this, HelpActivity.class)));
- }
-}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java
index afb742079..f7d402c0b 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java
@@ -18,7 +18,10 @@
package org.sufficientlysecure.keychain.ui;
+import android.animation.ArgbEvaluator;
+import android.animation.ObjectAnimator;
import android.annotation.TargetApi;
+import android.app.Activity;
import android.app.ActivityOptions;
import android.content.Intent;
import android.database.Cursor;
@@ -33,6 +36,7 @@ import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
+import android.os.Messenger;
import android.provider.ContactsContract;
import android.provider.Settings;
import android.support.v4.app.ActivityCompat;
@@ -44,6 +48,9 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.AlphaAnimation;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.AnimationUtils;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.RelativeLayout;
@@ -54,11 +61,15 @@ import com.getbase.floatingactionbutton.FloatingActionButton;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
+import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing;
+import org.sufficientlysecure.keychain.operations.results.CertifyResult;
+import org.sufficientlysecure.keychain.operations.results.ImportKeyResult;
import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.pgp.KeyRing;
import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.provider.ProviderHelper;
+import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
import org.sufficientlysecure.keychain.ui.util.FormattingUtils;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
@@ -68,7 +79,9 @@ import org.sufficientlysecure.keychain.ui.widget.AspectRatioImageView;
import org.sufficientlysecure.keychain.util.ContactHelper;
import org.sufficientlysecure.keychain.util.ExportHelper;
import org.sufficientlysecure.keychain.util.Log;
+import org.sufficientlysecure.keychain.util.Preferences;
+import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
@@ -105,6 +118,10 @@ public class ViewKeyActivity extends BaseActivity implements
private boolean mIsSecret = false;
private boolean mHasEncrypt = false;
private boolean mIsVerified = false;
+ private MenuItem mRefreshItem;
+ private boolean mIsRefreshing;
+ private Animation mRotate, mRotateSpin;
+ private View mRefresh;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -128,6 +145,51 @@ public class ViewKeyActivity extends BaseActivity implements
mQrCode = (ImageView) findViewById(R.id.view_key_qr_code);
mQrCodeLayout = (CardView) findViewById(R.id.view_key_qr_code_layout);
+ mRotateSpin = AnimationUtils.loadAnimation(this, R.anim.rotate_spin);
+ mRotateSpin.setAnimationListener(new AnimationListener() {
+ @Override
+ public void onAnimationStart(Animation animation) {
+
+ }
+
+ @Override
+ public void onAnimationEnd(Animation animation) {
+ mRefreshItem.getActionView().clearAnimation();
+ mRefreshItem.setActionView(null);
+ mRefreshItem.setEnabled(true);
+
+ // this is a deferred call
+ supportInvalidateOptionsMenu();
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation animation) {
+
+ }
+ });
+ mRotate = AnimationUtils.loadAnimation(this, R.anim.rotate);
+ mRotate.setRepeatCount(Animation.INFINITE);
+ mRotate.setAnimationListener(new Animation.AnimationListener() {
+ @Override
+ public void onAnimationStart(Animation animation) {
+
+ }
+
+ @Override
+ public void onAnimationEnd(Animation animation) {
+
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation animation) {
+ if (!mIsRefreshing) {
+ mRefreshItem.getActionView().clearAnimation();
+ mRefreshItem.getActionView().startAnimation(mRotateSpin);
+ }
+ }
+ });
+ mRefresh = getLayoutInflater().inflate(R.layout.indeterminate_progress, null);
+
mDataUri = getIntent().getData();
if (mDataUri == null) {
Log.e(Constants.TAG, "Data missing. Should be uri of key!");
@@ -222,7 +284,7 @@ public class ViewKeyActivity extends BaseActivity implements
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.key_view, menu);
-
+ mRefreshItem = menu.findItem(R.id.menu_key_view_refresh);
return true;
}
@@ -324,6 +386,25 @@ public class ViewKeyActivity extends BaseActivity implements
private void certifyFingeprint(Uri dataUri) {
Intent intent = new Intent(this, CertifyFingerprintActivity.class);
intent.setData(dataUri);
+
+ // Message is received after signing is done in KeychainIntentService
+ KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this) {
+ public void handleMessage(Message message) {
+ // handle messages by standard KeychainIntentServiceHandler first
+ super.handleMessage(message);
+
+ if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {
+ Bundle data = message.getData();
+ CertifyResult result = data.getParcelable(CertifyResult.EXTRA_RESULT);
+
+ result.createNotify(ViewKeyActivity.this).show();
+ }
+ }
+ };
+ // Create a new Messenger for the communication back
+ Messenger messenger = new Messenger(saveHandler);
+ intent.putExtra(KeychainIntentService.EXTRA_MESSENGER, messenger);
+
startActivityForResult(intent, 0);
}
@@ -414,16 +495,72 @@ public class ViewKeyActivity extends BaseActivity implements
private void updateFromKeyserver(Uri dataUri, ProviderHelper providerHelper)
throws ProviderHelper.NotFoundException {
+
+ mIsRefreshing = true;
+ mRefreshItem.setEnabled(false);
+ mRefreshItem.setActionView(mRefresh);
+ mRefresh.startAnimation(mRotate);
+
byte[] blob = (byte[]) providerHelper.getGenericData(
KeychainContract.KeyRings.buildUnifiedKeyRingUri(dataUri),
KeychainContract.Keys.FINGERPRINT, ProviderHelper.FIELD_TYPE_BLOB);
String fingerprint = KeyFormattingUtils.convertFingerprintToHex(blob);
- Intent queryIntent = new Intent(this, ImportKeysActivity.class);
- queryIntent.setAction(ImportKeysActivity.ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN_RESULT);
- queryIntent.putExtra(ImportKeysActivity.EXTRA_FINGERPRINT, fingerprint);
+ ParcelableKeyRing keyEntry = new ParcelableKeyRing(fingerprint, null, null);
+ ArrayList<ParcelableKeyRing> entries = new ArrayList<>();
+ entries.add(keyEntry);
+
+ // Message is received after importing is done in KeychainIntentService
+ KeychainIntentServiceHandler serviceHandler = new KeychainIntentServiceHandler(this) {
+ public void handleMessage(Message message) {
+ // handle messages by standard KeychainIntentServiceHandler first
+ super.handleMessage(message);
+
+ if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {
+ // get returned data bundle
+ Bundle returnData = message.getData();
+
+ mIsRefreshing = false;
+
+ if (returnData == null) {
+ finish();
+ return;
+ }
+ final ImportKeyResult result =
+ returnData.getParcelable(OperationResult.EXTRA_RESULT);
+ result.createNotify(ViewKeyActivity.this).show();
+ }
+ }
+ };
+
+ // fill values for this action
+ Bundle data = new Bundle();
+
+ // search config
+ {
+ Preferences prefs = Preferences.getPreferences(this);
+ Preferences.CloudSearchPrefs cloudPrefs =
+ new Preferences.CloudSearchPrefs(true, true, prefs.getPreferredKeyserver());
+ data.putString(KeychainIntentService.IMPORT_KEY_SERVER, cloudPrefs.keyserver);
+ }
+
+ data.putParcelableArrayList(KeychainIntentService.IMPORT_KEY_LIST, entries);
+
+ // Send all information needed to service to query keys in other thread
+ Intent intent = new Intent(this, KeychainIntentService.class);
+ intent.setAction(KeychainIntentService.ACTION_IMPORT_KEYRING);
+ intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
+
+ // Create a new Messenger for the communication back
+ Messenger messenger = new Messenger(serviceHandler);
+ intent.putExtra(KeychainIntentService.EXTRA_MESSENGER, messenger);
+
+ // show progress dialog
+ serviceHandler.showProgressDialog(this);
+
+ // start service with intent
+ startService(intent);
- startActivityForResult(queryIntent, 0);
}
private void editKey(Uri dataUri) {
@@ -603,6 +740,8 @@ public class ViewKeyActivity extends BaseActivity implements
}
}
+ int mPreviousColor = 0;
+
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
/* TODO better error handling? May cause problems when a key is deleted,
@@ -634,8 +773,12 @@ public class ViewKeyActivity extends BaseActivity implements
&& new Date(data.getLong(INDEX_EXPIRY) * 1000).before(new Date());
mIsVerified = data.getInt(INDEX_VERIFIED) > 0;
- // re-create options menu based on mIsSecret, mIsVerified
- supportInvalidateOptionsMenu();
+ // if the refresh animation isn't playing
+ if (!mRotate.hasStarted() && !mRotateSpin.hasStarted()) {
+ // re-create options menu based on mIsSecret, mIsVerified
+ supportInvalidateOptionsMenu();
+ // this is done at the end of the animation otherwise
+ }
AsyncTask<String, Void, Bitmap> photoTask =
new AsyncTask<String, Void, Bitmap>() {
@@ -743,9 +886,31 @@ public class ViewKeyActivity extends BaseActivity implements
mFab.setVisibility(View.VISIBLE);
}
}
- mToolbar.setBackgroundColor(color);
- mStatusBar.setBackgroundColor(color);
- mBigToolbar.setBackgroundColor(color);
+
+ if (mPreviousColor == 0 || mPreviousColor == color) {
+ mToolbar.setBackgroundColor(color);
+ mStatusBar.setBackgroundColor(color);
+ mBigToolbar.setBackgroundColor(color);
+ mPreviousColor = color;
+ } else {
+ ObjectAnimator colorFade1 =
+ ObjectAnimator.ofObject(mToolbar, "backgroundColor",
+ new ArgbEvaluator(), mPreviousColor, color);
+ ObjectAnimator colorFade2 =
+ ObjectAnimator.ofObject(mStatusBar, "backgroundColor",
+ new ArgbEvaluator(), mPreviousColor, color);
+ ObjectAnimator colorFade3 =
+ ObjectAnimator.ofObject(mBigToolbar, "backgroundColor",
+ new ArgbEvaluator(), mPreviousColor, color);
+
+ colorFade1.setDuration(1200);
+ colorFade2.setDuration(1200);
+ colorFade3.setDuration(1200);
+ colorFade1.start();
+ colorFade2.start();
+ colorFade3.start();
+ mPreviousColor = color;
+ }
mStatusImage.setAlpha(80);
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java
index 894529cc5..9d79b377c 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java
@@ -124,16 +124,16 @@ public class ViewKeyAdvActivity extends BaseActivity implements
mTabsAdapter = new PagerTabStripAdapter(this);
mViewPager.setAdapter(mTabsAdapter);
- Bundle mainBundle = new Bundle();
- mainBundle.putParcelable(ViewKeyAdvMainFragment.ARG_DATA_URI, dataUri);
- mTabsAdapter.addTab(ViewKeyAdvMainFragment.class,
- mainBundle, getString(R.string.key_view_tab_main));
-
Bundle shareBundle = new Bundle();
- shareBundle.putParcelable(ViewKeyAdvMainFragment.ARG_DATA_URI, dataUri);
+ shareBundle.putParcelable(ViewKeyAdvUserIdsFragment.ARG_DATA_URI, dataUri);
mTabsAdapter.addTab(ViewKeyAdvShareFragment.class,
shareBundle, getString(R.string.key_view_tab_share));
+ Bundle userIdsBundle = new Bundle();
+ userIdsBundle.putParcelable(ViewKeyAdvUserIdsFragment.ARG_DATA_URI, dataUri);
+ mTabsAdapter.addTab(ViewKeyAdvUserIdsFragment.class,
+ userIdsBundle, getString(R.string.section_user_ids));
+
Bundle keysBundle = new Bundle();
keysBundle.putParcelable(ViewKeyAdvSubkeysFragment.ARG_DATA_URI, dataUri);
mTabsAdapter.addTab(ViewKeyAdvSubkeysFragment.class,
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvMainFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvUserIdsFragment.java
index fc107d794..c4e6639a8 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvMainFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvUserIdsFragment.java
@@ -18,9 +18,7 @@
package org.sufficientlysecure.keychain.ui;
-import android.content.Intent;
import android.database.Cursor;
-import android.graphics.PorterDuff;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.LoaderManager;
@@ -30,31 +28,22 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
-import android.widget.ImageView;
import android.widget.ListView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.compatibility.DialogFragmentWorkaround;
-import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets;
-import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.ui.adapter.UserIdsAdapter;
import org.sufficientlysecure.keychain.ui.dialog.UserIdInfoDialogFragment;
import org.sufficientlysecure.keychain.util.Log;
-import java.util.Date;
-
-public class ViewKeyAdvMainFragment extends LoaderFragment implements
+public class ViewKeyAdvUserIdsFragment extends LoaderFragment implements
LoaderManager.LoaderCallbacks<Cursor> {
public static final String ARG_DATA_URI = "uri";
- private View mActionCertify;
- private View mActionCertifyText;
- private ImageView mActionCertifyImage;
-
private ListView mUserIds;
private static final int LOADER_ID_UNIFIED = 0;
@@ -70,12 +59,6 @@ public class ViewKeyAdvMainFragment extends LoaderFragment implements
View view = inflater.inflate(R.layout.view_key_adv_main_fragment, getContainer());
mUserIds = (ListView) view.findViewById(R.id.view_key_user_ids);
- mActionCertify = view.findViewById(R.id.view_key_action_certify);
- mActionCertifyText = view.findViewById(R.id.view_key_action_certify_text);
- mActionCertifyImage = (ImageView) view.findViewById(R.id.view_key_action_certify_image);
- // make certify image gray, like action icons
- mActionCertifyImage.setColorFilter(getResources().getColor(R.color.tertiary_text_light),
- PorterDuff.Mode.SRC_IN);
mUserIds.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
@@ -120,12 +103,6 @@ public class ViewKeyAdvMainFragment extends LoaderFragment implements
Log.i(Constants.TAG, "mDataUri: " + mDataUri.toString());
- mActionCertify.setOnClickListener(new View.OnClickListener() {
- public void onClick(View view) {
- certify(mDataUri);
- }
- });
-
mUserIdsAdapter = new UserIdsAdapter(getActivity(), null, 0);
mUserIds.setAdapter(mUserIdsAdapter);
@@ -178,21 +155,6 @@ public class ViewKeyAdvMainFragment extends LoaderFragment implements
case LOADER_ID_UNIFIED: {
if (data.moveToFirst()) {
- // If this key is revoked, it cannot be used for anything!
- if (data.getInt(INDEX_UNIFIED_IS_REVOKED) != 0) {
- mActionCertify.setEnabled(false);
- mActionCertifyText.setEnabled(false);
- } else {
-
- Date expiryDate = new Date(data.getLong(INDEX_UNIFIED_EXPIRY) * 1000);
- if (!data.isNull(INDEX_UNIFIED_EXPIRY) && expiryDate.before(new Date())) {
- mActionCertify.setEnabled(false);
- mActionCertifyText.setEnabled(false);
- } else {
- mActionCertify.setEnabled(true);
- mActionCertifyText.setEnabled(true);
- }
- }
break;
}
@@ -219,18 +181,4 @@ public class ViewKeyAdvMainFragment extends LoaderFragment implements
}
}
- private void certify(Uri dataUri) {
- long keyId = 0;
- try {
- keyId = new ProviderHelper(getActivity())
- .getCachedPublicKeyRing(dataUri)
- .extractOrGetMasterKeyId();
- } catch (PgpKeyNotFoundException e) {
- Log.e(Constants.TAG, "key not found!", e);
- }
- Intent certifyIntent = new Intent(getActivity(), CertifyKeyActivity.class);
- certifyIntent.putExtra(CertifyKeyActivity.EXTRA_KEY_IDS, new long[]{keyId});
- startActivityForResult(certifyIntent, 0);
- }
-
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java
index 5483d16b8..25edc7a02 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java
@@ -80,7 +80,7 @@ public class ViewKeyTrustFragment extends LoaderFragment implements
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup superContainer, Bundle savedInstanceState) {
View root = super.onCreateView(inflater, superContainer, savedInstanceState);
- View view = inflater.inflate(R.layout.view_key_trust_fragment, getContainer());
+ View view = inflater.inflate(R.layout.view_key_adv_keybase_fragment, getContainer());
mInflater = inflater;
mTrustReadout = (TextView) view.findViewById(R.id.view_key_trust_readout);
@@ -299,7 +299,7 @@ public class ViewKeyTrustFragment extends LoaderFragment implements
int rowNumber = 1;
for (CharSequence s : result.mProofs) {
- TableRow row = (TableRow) mInflater.inflate(R.layout.view_key_keybase_proof, null);
+ TableRow row = (TableRow) mInflater.inflate(R.layout.view_key_adv_keybase_proof, null);
TextView number = (TextView) row.findViewById(R.id.proof_number);
TextView text = (TextView) row.findViewById(R.id.proof_text);
number.setText(Integer.toString(rowNumber++) + ". ");
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserIdsAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserIdsAdapter.java
index ad7c9e430..8c0ab9165 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserIdsAdapter.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserIdsAdapter.java
@@ -72,19 +72,19 @@ public class UserIdsAdapter extends CursorAdapter implements AdapterView.OnItemC
public UserIdsAdapter(Context context, Cursor c, int flags, boolean showCheckBoxes,
SaveKeyringParcel saveKeyringParcel) {
- this(context, c, flags, showCheckBoxes, false, saveKeyringParcel);
+ this(context, c, flags, showCheckBoxes, true, saveKeyringParcel);
}
public UserIdsAdapter(Context context, Cursor c, int flags, boolean showCheckBoxes) {
- this(context, c, flags, showCheckBoxes, false, null);
+ this(context, c, flags, showCheckBoxes, true, null);
}
public UserIdsAdapter(Context context, Cursor c, int flags, SaveKeyringParcel saveKeyringParcel) {
- this(context, c, flags, false, false, saveKeyringParcel);
+ this(context, c, flags, false, true, saveKeyringParcel);
}
public UserIdsAdapter(Context context, Cursor c, int flags) {
- this(context, c, flags, false, false, null);
+ this(context, c, flags, false, true, null);
}
@Override
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/Notify.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/Notify.java
index 6f8c477c0..8686b605f 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/Notify.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/Notify.java
@@ -19,14 +19,16 @@ package org.sufficientlysecure.keychain.ui.util;
import android.app.Activity;
import android.content.res.Resources;
-import android.graphics.Color;
import com.nispok.snackbar.Snackbar;
import com.nispok.snackbar.Snackbar.SnackbarDuration;
import com.nispok.snackbar.SnackbarManager;
+import com.nispok.snackbar.enums.SnackbarType;
import com.nispok.snackbar.listeners.ActionClickListener;
+import com.nispok.snackbar.listeners.EventListenerAdapter;
import org.sufficientlysecure.keychain.R;
+import org.sufficientlysecure.keychain.util.FabContainer;
/**
* Notify wrapper which allows a more easy use of different notification libraries
@@ -40,15 +42,13 @@ public class Notify {
/**
* Shows a simple in-layout notification with the CharSequence given as parameter
- * @param activity
* @param text Text to show
* @param style Notification styling
*/
- public static void showNotify(Activity activity, CharSequence text, Style style) {
+ public static void showNotify(final Activity activity, CharSequence text, Style style) {
- Snackbar bar = Snackbar.with(activity)
- .text(text)
- .duration(SnackbarDuration.LENGTH_LONG);
+ Snackbar bar = getSnackbar(activity)
+ .text(text);
switch (style) {
case OK:
@@ -66,8 +66,9 @@ public class Notify {
}
public static Showable createNotify (Activity activity, int resId, int duration, Style style) {
- final Snackbar bar = Snackbar.with(activity)
+ final Snackbar bar = getSnackbar(activity)
.text(resId);
+
if (duration == LENGTH_INDEFINITE) {
bar.duration(SnackbarDuration.LENGTH_INDEFINITE);
} else {
@@ -101,7 +102,8 @@ public class Notify {
public static Showable createNotify(Activity activity, String msg, int duration, Style style,
final ActionListener listener, int resIdAction) {
- final Snackbar bar = Snackbar.with(activity)
+
+ final Snackbar bar = getSnackbar(activity)
.text(msg)
.actionLabel(resIdAction)
.actionListener(new ActionClickListener() {
@@ -110,6 +112,7 @@ public class Notify {
listener.onAction();
}
});
+
if (duration == LENGTH_INDEFINITE) {
bar.duration(SnackbarDuration.LENGTH_INDEFINITE);
} else {
@@ -139,7 +142,6 @@ public class Notify {
/**
* Shows a simple in-layout notification with the resource text from given id
- * @param activity
* @param resId ResourceId of notification text
* @param style Notification styling
* @throws Resources.NotFoundException
@@ -148,6 +150,27 @@ public class Notify {
showNotify(activity, activity.getResources().getText(resId), style);
}
+ private static Snackbar getSnackbar(final Activity activity) {
+ Snackbar bar = Snackbar.with(activity)
+ .type(SnackbarType.MULTI_LINE)
+ .duration(SnackbarDuration.LENGTH_LONG);
+
+ if (activity instanceof FabContainer) {
+ bar.eventListener(new EventListenerAdapter() {
+ @Override
+ public void onShow(Snackbar snackbar) {
+ ((FabContainer) activity).fabMoveUp(snackbar.getHeight());
+ }
+
+ @Override
+ public void onDismiss(Snackbar snackbar) {
+ ((FabContainer) activity).fabRestorePosition();
+ }
+ });
+ }
+ return bar;
+ }
+
public interface Showable {
public void show();
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/ListAwareSwipeRefreshLayout.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/ListAwareSwipeRefreshLayout.java
deleted file mode 100644
index 3403208d7..000000000
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/ListAwareSwipeRefreshLayout.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2014 Daniel Albert
- *
- * 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.widget;
-
-import android.content.Context;
-import android.support.v4.widget.NoScrollableSwipeRefreshLayout;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-
-import se.emilsjolander.stickylistheaders.StickyListHeadersListView;
-
-public class ListAwareSwipeRefreshLayout extends NoScrollableSwipeRefreshLayout {
-
- private StickyListHeadersListView mStickyListHeadersListView = null;
- private boolean mIsLocked = false;
-
- /**
- * Constructors
- */
- public ListAwareSwipeRefreshLayout(Context context) {
- super(context);
- }
-
- public ListAwareSwipeRefreshLayout(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- /**
- * Getters / Setters
- */
- public void setStickyListHeadersListView(StickyListHeadersListView stickyListHeadersListView) {
- mStickyListHeadersListView = stickyListHeadersListView;
- }
-
- public StickyListHeadersListView getStickyListHeadersListView() {
- return mStickyListHeadersListView;
- }
-
- public void setIsLocked(boolean locked) {
- mIsLocked = locked;
- }
-
- public boolean getIsLocked() {
- return mIsLocked;
- }
-
- @Override
- public boolean canChildScrollUp() {
- if (mStickyListHeadersListView == null) {
- return super.canChildScrollUp();
- }
-
- return (mIsLocked || (
- mStickyListHeadersListView.getWrappedList().getChildCount() > 0
- && (mStickyListHeadersListView.getWrappedList().getChildAt(0).getTop() < 0
- || mStickyListHeadersListView.getFirstVisiblePosition() > 0)
- )
- );
- }
-
- /** Called on a touch event, this method exempts a small area in the upper right from pull to
- * refresh handling.
- *
- * If the touch event happens somewhere in the upper right corner of the screen, we return false
- * to indicate that the event was not handled. This ensures events in that area are always
- * handed through to the list scrollbar handle. For all other cases, we pass the message through
- * to the pull to refresh handler.
- */
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- // The device may be null. This actually happens
- if (event.getDevice() != null) {
- // MotionEvent.AXIS_X is api level 12, for some reason, so we use a constant 0 here
- float ratioX = event.getX() / event.getDevice().getMotionRange(0).getMax();
- float ratioY = event.getY() / event.getDevice().getMotionRange(1).getMax();
- // if this is the upper right corner, don't handle as pull to refresh event
- if (ratioX > 0.85f && ratioY < 0.15f) {
- return false;
- }
- }
- return super.onTouchEvent(event);
- }
-
-} \ No newline at end of file
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/FabContainer.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/FabContainer.java
new file mode 100644
index 000000000..116b98d1e
--- /dev/null
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/FabContainer.java
@@ -0,0 +1,8 @@
+package org.sufficientlysecure.keychain.util;
+
+public interface FabContainer {
+
+ void fabMoveUp(int height);
+ void fabRestorePosition();
+
+}
diff --git a/OpenKeychain/src/main/res/anim/rotate.xml b/OpenKeychain/src/main/res/anim/rotate.xml
new file mode 100644
index 000000000..3856fa081
--- /dev/null
+++ b/OpenKeychain/src/main/res/anim/rotate.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rotate xmlns:android="http://schemas.android.com/apk/res/android"
+ android:fromDegrees="0"
+ android:toDegrees="360"
+ android:pivotX="50%"
+ android:pivotY="50%"
+ android:duration="800"
+ android:interpolator="@android:anim/linear_interpolator" /> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/anim/rotate_spin.xml b/OpenKeychain/src/main/res/anim/rotate_spin.xml
new file mode 100644
index 000000000..e6ddec869
--- /dev/null
+++ b/OpenKeychain/src/main/res/anim/rotate_spin.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rotate xmlns:android="http://schemas.android.com/apk/res/android"
+ android:fromDegrees="0"
+ android:toDegrees="360"
+ android:pivotX="50%"
+ android:pivotY="50%"
+ android:duration="400"
+ android:interpolator="@android:anim/accelerate_decelerate_interpolator" /> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout-land/qr_code_activity.xml b/OpenKeychain/src/main/res/layout-land/qr_code_activity.xml
new file mode 100644
index 000000000..59a733e89
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout-land/qr_code_activity.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <include
+ android:id="@+id/toolbar_include"
+ layout="@layout/toolbar_standalone" />
+
+ <LinearLayout
+ android:layout_below="@id/toolbar_include"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <android.support.v7.widget.CardView
+ android:id="@+id/qr_code_image_layout"
+ android:transitionName="qr_code"
+ android:layout_gravity="center_horizontal"
+ android:layout_margin="32dp"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:clickable="true"
+ android:foreground="?android:attr/selectableItemBackground"
+ app:cardBackgroundColor="@android:color/white"
+ app:cardUseCompatPadding="true"
+ app:cardCornerRadius="4dp">
+
+ <org.sufficientlysecure.keychain.ui.widget.AspectRatioImageView
+ android:id="@+id/qr_code_image"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ app:dominantMeasurement="height"
+ app:aspectRatioEnabled="true" />
+ </android.support.v7.widget.CardView>
+
+ </LinearLayout>
+</RelativeLayout> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/create_key_activity.xml b/OpenKeychain/src/main/res/layout/create_key_activity.xml
index c42fd4d4b..b9d5206a1 100644
--- a/OpenKeychain/src/main/res/layout/create_key_activity.xml
+++ b/OpenKeychain/src/main/res/layout/create_key_activity.xml
@@ -7,8 +7,14 @@
android:id="@+id/toolbar_include"
layout="@layout/toolbar_standalone" />
+ <!--
+ fitsSystemWindows and layout_marginTop from
+ https://medium.com/@ngdelamo/using-drawerlayout-the-material-way-i-716bba2b5705
+ -->
<FrameLayout
android:layout_below="@id/toolbar_include"
+ android:fitsSystemWindows="true"
+ android:layout_marginTop="-25dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
diff --git a/OpenKeychain/src/main/res/layout/create_key_final_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_final_fragment.xml
index 97eba9cd1..9b6a807cb 100644
--- a/OpenKeychain/src/main/res/layout/create_key_final_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/create_key_final_fragment.xml
@@ -66,6 +66,7 @@
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:textAppearance="?android:attr/textAppearanceMedium"
+ android:checked="true"
android:text="@string/create_key_upload"
android:id="@+id/create_key_upload" />
diff --git a/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml
index 026d98004..f678825aa 100644
--- a/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml
@@ -6,7 +6,7 @@
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:fillViewport="false"
+ android:fillViewport="true"
android:layout_above="@+id/create_key_button_divider">
<LinearLayout
diff --git a/OpenKeychain/src/main/res/layout/decrypt_files_activity.xml b/OpenKeychain/src/main/res/layout/decrypt_files_activity.xml
index 608fce111..06c1dda7b 100644
--- a/OpenKeychain/src/main/res/layout/decrypt_files_activity.xml
+++ b/OpenKeychain/src/main/res/layout/decrypt_files_activity.xml
@@ -7,8 +7,14 @@
android:id="@+id/toolbar_include"
layout="@layout/toolbar_standalone" />
+ <!--
+ fitsSystemWindows and layout_marginTop from
+ https://medium.com/@ngdelamo/using-drawerlayout-the-material-way-i-716bba2b5705
+ -->
<LinearLayout
android:layout_below="@id/toolbar_include"
+ android:fitsSystemWindows="true"
+ android:layout_marginTop="-25dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
diff --git a/OpenKeychain/src/main/res/layout/decrypt_text_activity.xml b/OpenKeychain/src/main/res/layout/decrypt_text_activity.xml
index b97fc9c8e..a692b3681 100644
--- a/OpenKeychain/src/main/res/layout/decrypt_text_activity.xml
+++ b/OpenKeychain/src/main/res/layout/decrypt_text_activity.xml
@@ -6,9 +6,15 @@
<include
android:id="@+id/toolbar_include"
layout="@layout/toolbar_standalone" />
-
+
+ <!--
+ fitsSystemWindows and layout_marginTop from
+ https://medium.com/@ngdelamo/using-drawerlayout-the-material-way-i-716bba2b5705
+ -->
<LinearLayout
android:layout_below="@id/toolbar_include"
+ android:fitsSystemWindows="true"
+ android:layout_marginTop="-25dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
diff --git a/OpenKeychain/src/main/res/layout/encrypt_files_activity.xml b/OpenKeychain/src/main/res/layout/encrypt_files_activity.xml
index d292b1a5b..168e6d0be 100644
--- a/OpenKeychain/src/main/res/layout/encrypt_files_activity.xml
+++ b/OpenKeychain/src/main/res/layout/encrypt_files_activity.xml
@@ -7,9 +7,15 @@
android:id="@+id/toolbar_include"
layout="@layout/toolbar_standalone" />
+ <!--
+ fitsSystemWindows and layout_marginTop from
+ https://medium.com/@ngdelamo/using-drawerlayout-the-material-way-i-716bba2b5705
+ -->
<LinearLayout
android:layout_below="@id/toolbar_include"
android:id="@+id/content_frame"
+ android:fitsSystemWindows="true"
+ android:layout_marginTop="-25dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
diff --git a/OpenKeychain/src/main/res/layout/encrypt_text_activity.xml b/OpenKeychain/src/main/res/layout/encrypt_text_activity.xml
index 66abd03b1..fd7fd6672 100644
--- a/OpenKeychain/src/main/res/layout/encrypt_text_activity.xml
+++ b/OpenKeychain/src/main/res/layout/encrypt_text_activity.xml
@@ -7,9 +7,15 @@
android:id="@+id/toolbar_include"
layout="@layout/toolbar_standalone" />
+ <!--
+ fitsSystemWindows and layout_marginTop from
+ https://medium.com/@ngdelamo/using-drawerlayout-the-material-way-i-716bba2b5705
+ -->
<LinearLayout
android:layout_below="@id/toolbar_include"
android:id="@+id/content_frame"
+ android:fitsSystemWindows="true"
+ android:layout_marginTop="-25dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
diff --git a/OpenKeychain/src/main/res/layout/import_keys_activity.xml b/OpenKeychain/src/main/res/layout/import_keys_activity.xml
index 93d630437..dcdd9a31a 100644
--- a/OpenKeychain/src/main/res/layout/import_keys_activity.xml
+++ b/OpenKeychain/src/main/res/layout/import_keys_activity.xml
@@ -7,8 +7,14 @@
android:id="@+id/toolbar_include"
layout="@layout/toolbar_standalone" />
+ <!--
+ fitsSystemWindows and layout_marginTop from
+ https://medium.com/@ngdelamo/using-drawerlayout-the-material-way-i-716bba2b5705
+ -->
<LinearLayout
android:layout_below="@id/toolbar_include"
+ android:fitsSystemWindows="true"
+ android:layout_marginTop="-25dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
diff --git a/OpenKeychain/src/main/res/layout/import_keys_cloud_fragment.xml b/OpenKeychain/src/main/res/layout/import_keys_cloud_fragment.xml
index 46ec736ca..6f52e1938 100644
--- a/OpenKeychain/src/main/res/layout/import_keys_cloud_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/import_keys_cloud_fragment.xml
@@ -1,5 +1,4 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:custom="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
diff --git a/OpenKeychain/src/main/res/layout/indeterminate_progress.xml b/OpenKeychain/src/main/res/layout/indeterminate_progress.xml
new file mode 100644
index 000000000..8515e83a4
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/indeterminate_progress.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerInParent="true"
+ android:padding="0dp"
+ android:src="@drawable/ic_refresh_white_24dp"
+ style="@style/Widget.AppCompat.ActionButton" />
diff --git a/OpenKeychain/src/main/res/layout/key_list_fragment.xml b/OpenKeychain/src/main/res/layout/key_list_fragment.xml
index 3c46b4f9c..65935f9c8 100644
--- a/OpenKeychain/src/main/res/layout/key_list_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/key_list_fragment.xml
@@ -2,48 +2,41 @@
<RelativeLayout xmlns:fab="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
- android:layout_width="match_parent">
+ android:layout_width="match_parent"
+ >
- <org.sufficientlysecure.keychain.ui.widget.ListAwareSwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/key_list_swipe_container"
+ <!--rebuild functionality of ListFragment -->
+ <FrameLayout
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- <!--rebuild functionality of ListFragment -->
- <FrameLayout
+ android:layout_height="match_parent">
+
+ <se.emilsjolander.stickylistheaders.StickyListHeadersListView
+ android:id="@+id/key_list_list"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent"
+ android:drawSelectorOnTop="true"
+ android:fastScrollEnabled="true"
+ android:paddingLeft="16dp"
+ android:paddingRight="32dp"
+ android:scrollbarStyle="outsideOverlay" />
- <se.emilsjolander.stickylistheaders.StickyListHeadersListView
- android:id="@+id/key_list_list"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:clipToPadding="false"
- android:drawSelectorOnTop="true"
- android:fastScrollEnabled="true"
- android:paddingBottom="16dp"
- android:paddingLeft="16dp"
- android:paddingRight="32dp"
- android:scrollbarStyle="outsideOverlay" />
+ <LinearLayout
+ android:id="@+id/key_list_empty"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center"
+ android:orientation="vertical"
+ android:visibility="visible">
- <LinearLayout
- android:id="@+id/key_list_empty"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:gravity="center"
- android:orientation="vertical"
- android:visibility="visible">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:text="@string/key_list_empty_text1"
- android:textAppearance="?android:attr/textAppearanceLarge" />
+ android:text="@string/key_list_empty_text1"
+ android:textAppearance="?android:attr/textAppearanceLarge" />
- </LinearLayout>
- </FrameLayout>
- </org.sufficientlysecure.keychain.ui.widget.ListAwareSwipeRefreshLayout>
+ </LinearLayout>
+ </FrameLayout>
<com.getbase.floatingactionbutton.FloatingActionsMenu
android:id="@+id/fab_main"
@@ -58,9 +51,10 @@
fab:fab_addButtonPlusIconColor="@color/icons"
fab:fab_expandDirection="up"
fab:fab_labelStyle="@style/FabMenuStyle"
- android:layout_marginBottom="16dp"
+ android:layout_marginBottom="8dp"
android:layout_marginRight="16dp"
- android:layout_marginEnd="16dp">
+ android:layout_marginEnd="16dp"
+ >
<com.getbase.floatingactionbutton.FloatingActionButton
android:id="@+id/fab_add_qr_code"
diff --git a/OpenKeychain/src/main/res/layout/qr_code_activity.xml b/OpenKeychain/src/main/res/layout/qr_code_activity.xml
index 4ce097f40..5709bf0ff 100644
--- a/OpenKeychain/src/main/res/layout/qr_code_activity.xml
+++ b/OpenKeychain/src/main/res/layout/qr_code_activity.xml
@@ -12,11 +12,12 @@
android:layout_below="@id/toolbar_include"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:orientation="vertical">
+ android:orientation="horizontal">
<android.support.v7.widget.CardView
android:id="@+id/qr_code_image_layout"
android:transitionName="qr_code"
+ android:layout_gravity="center_vertical"
android:layout_margin="32dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -30,6 +31,7 @@
android:id="@+id/qr_code_image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ app:dominantMeasurement="width"
app:aspectRatioEnabled="true" />
</android.support.v7.widget.CardView>
diff --git a/OpenKeychain/src/main/res/layout/view_key_activity.xml b/OpenKeychain/src/main/res/layout/view_key_activity.xml
index e2d153e0d..1a45370a5 100644
--- a/OpenKeychain/src/main/res/layout/view_key_activity.xml
+++ b/OpenKeychain/src/main/res/layout/view_key_activity.xml
@@ -134,6 +134,7 @@
android:clickable="true"
android:foreground="?android:attr/selectableItemBackground"
card_view:cardBackgroundColor="@android:color/white"
+ card_view:cardElevation="2dp"
card_view:cardUseCompatPadding="true"
card_view:cardCornerRadius="4dp">
diff --git a/OpenKeychain/src/main/res/layout/view_key_adv_certs_fragment.xml b/OpenKeychain/src/main/res/layout/view_key_adv_certs_fragment.xml
index 2232ea9f2..d512477aa 100644
--- a/OpenKeychain/src/main/res/layout/view_key_adv_certs_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/view_key_adv_certs_fragment.xml
@@ -8,15 +8,6 @@
android:orientation="vertical">
<TextView
- style="@style/SectionHeader"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:layout_marginLeft="16dp"
- android:layout_marginRight="16dp"
- android:text="@string/section_certs" />
-
- <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/holo_gray_bright"
diff --git a/OpenKeychain/src/main/res/layout/view_key_adv_keybase_fragment.xml b/OpenKeychain/src/main/res/layout/view_key_adv_keybase_fragment.xml
new file mode 100644
index 000000000..a29c9fbee
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/view_key_adv_keybase_fragment.xml
@@ -0,0 +1,126 @@
+<?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">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:background="@color/holo_gray_bright"
+ android:padding="8dp"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:text="@string/key_trust_header_text"
+ android:gravity="center_horizontal" />
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dip"
+ android:background="?android:attr/listDivider" />
+
+ <ScrollView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <!-- focusable and related properties to workaround http://stackoverflow.com/q/16182331-->
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:focusable="true"
+ android:focusableInTouchMode="true"
+ android:descendantFocusability="beforeDescendants"
+ android:orientation="vertical"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp">
+
+ <TextView
+ style="@style/SectionHeader"
+ android:layout_width="wrap_content"
+ android:layout_height="0dp"
+ android:layout_marginTop="8dp"
+ android:text="@string/section_should_you_trust"
+ android:layout_weight="1" />
+
+ <TextView
+ android:id="@+id/view_key_trust_readout"
+ android:layout_width="wrap_content"
+ android:layout_height="0dp"
+ android:layout_marginTop="14dp"
+ android:layout_marginLeft="8dp"
+ android:layout_weight="1"
+ style="?android:attr/textAppearanceMedium" />
+
+ <TextView
+ style="@style/SectionHeader"
+ android:layout_width="wrap_content"
+ android:layout_height="0dp"
+ android:layout_marginTop="14dp"
+ android:text="@string/section_cloud_evidence"
+ android:layout_weight="1" />
+
+ <LinearLayout
+ android:id="@+id/view_key_trust_search_cloud"
+ android:layout_width="match_parent"
+ android:layout_height="?android:attr/listPreferredItemHeight"
+ android:clickable="true"
+ android:paddingRight="4dp"
+ style="@style/SelectableItem"
+ android:orientation="horizontal">
+
+ <TextView
+ android:paddingLeft="8dp"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_width="0dip"
+ android:layout_height="match_parent"
+ android:text="@string/key_trust_start_cloud_search"
+ android:layout_weight="1"
+ android:gravity="center_vertical" />
+
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:padding="8dp"
+ android:src="@drawable/ic_action_search_cloud"
+ android:layout_gravity="center_vertical" />
+
+ </LinearLayout>
+
+
+ <TextView
+ android:id="@+id/view_key_trust_cloud_narrative"
+ android:layout_width="wrap_content"
+ android:layout_height="0dp"
+ android:layout_marginTop="14dp"
+ android:layout_marginBottom="14dp"
+ android:layout_marginLeft="8dp"
+ android:layout_weight="1"
+ style="?android:attr/textAppearanceMedium" />
+
+ <TableLayout
+ android:id="@+id/view_key_proof_list"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+
+ <TextView
+ android:id="@+id/view_key_proof_verify_header"
+ style="@style/SectionHeader"
+ android:layout_width="wrap_content"
+ android:layout_height="0dp"
+ android:layout_marginTop="16dp"
+ android:text="@string/section_proof_details"
+ android:layout_weight="1" />
+
+ <TextView
+ android:id="@+id/view_key_proof_verify_detail"
+ android:layout_width="wrap_content"
+ android:layout_height="0dp"
+ android:layout_marginTop="14dp"
+ android:layout_marginLeft="8dp"
+ android:layout_weight="1"
+ style="?android:attr/textAppearanceMedium" />
+
+
+ </LinearLayout>
+
+ </ScrollView>
+</LinearLayout> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/view_key_keybase_proof.xml b/OpenKeychain/src/main/res/layout/view_key_adv_keybase_proof.xml
index 0ffd151c1..0ffd151c1 100644
--- a/OpenKeychain/src/main/res/layout/view_key_keybase_proof.xml
+++ b/OpenKeychain/src/main/res/layout/view_key_adv_keybase_proof.xml
diff --git a/OpenKeychain/src/main/res/layout/view_key_adv_main_fragment.xml b/OpenKeychain/src/main/res/layout/view_key_adv_main_fragment.xml
index d4272b816..3347a514c 100644
--- a/OpenKeychain/src/main/res/layout/view_key_adv_main_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/view_key_adv_main_fragment.xml
@@ -28,49 +28,6 @@
android:layout_marginBottom="4dp"
android:layout_weight="1" />
- <TextView
- style="@style/SectionHeader"
- android:layout_width="wrap_content"
- android:layout_height="0dp"
- android:layout_marginTop="14dp"
- android:text="@string/section_actions"
- android:layout_weight="1" />
-
- <LinearLayout
- android:id="@+id/view_key_action_certify"
- android:layout_width="match_parent"
- android:layout_height="?android:attr/listPreferredItemHeight"
- android:clickable="true"
- android:paddingRight="4dp"
- style="@style/SelectableItem"
- android:orientation="horizontal">
-
- <TextView
- android:id="@+id/view_key_action_certify_text"
- android:paddingLeft="8dp"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_width="0dip"
- android:layout_height="match_parent"
- android:text="@string/key_view_action_certify"
- android:layout_weight="1"
- android:gravity="center_vertical" />
-
- <ImageView
- android:id="@+id/view_key_action_certify_image"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:padding="8dp"
- android:src="@drawable/status_signature_verified_cutout_24px"
- android:layout_gravity="center_vertical" />
-
- </LinearLayout>
-
- <View
- android:id="@+id/view_key_action_certify_divider"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="?android:attr/listDivider" />
-
</LinearLayout>
</ScrollView>
diff --git a/OpenKeychain/src/main/res/layout/view_key_adv_share_fragment.xml b/OpenKeychain/src/main/res/layout/view_key_adv_share_fragment.xml
index 7b382dca5..a6224a8d1 100644
--- a/OpenKeychain/src/main/res/layout/view_key_adv_share_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/view_key_adv_share_fragment.xml
@@ -68,11 +68,11 @@
android:layout_height="1dip"
android:background="?android:attr/listDivider" />
-
<android.support.v7.widget.CardView
android:id="@+id/view_key_qr_code_layout"
android:transitionName="qr_code"
android:visibility="visible"
+ android:layout_marginTop="16dp"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center_horizontal"
@@ -81,6 +81,7 @@
android:foreground="?android:attr/selectableItemBackground"
card_view:cardBackgroundColor="@android:color/white"
card_view:cardUseCompatPadding="true"
+ card_view:cardElevation="2dp"
card_view:cardCornerRadius="4dp">
<ImageView
@@ -93,7 +94,7 @@
style="@style/SectionHeader"
android:layout_width="wrap_content"
android:layout_height="0dp"
- android:layout_marginTop="14dp"
+ android:layout_marginTop="16dp"
android:text="@string/section_share_key"
android:layout_weight="1" />
diff --git a/OpenKeychain/src/main/res/layout/view_key_fragment.xml b/OpenKeychain/src/main/res/layout/view_key_fragment.xml
index 8e1bad3a8..bba412f99 100644
--- a/OpenKeychain/src/main/res/layout/view_key_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/view_key_fragment.xml
@@ -18,7 +18,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardBackgroundColor="@android:color/white"
- card_view:cardElevation="2sp"
+ card_view:cardElevation="2dp"
card_view:cardUseCompatPadding="true"
card_view:cardCornerRadius="4dp">
diff --git a/OpenKeychain/src/main/res/layout/view_key_trust_fragment.xml b/OpenKeychain/src/main/res/layout/view_key_trust_fragment.xml
deleted file mode 100644
index f97401271..000000000
--- a/OpenKeychain/src/main/res/layout/view_key_trust_fragment.xml
+++ /dev/null
@@ -1,105 +0,0 @@
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <!-- focusable and related properties to workaround http://stackoverflow.com/q/16182331-->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:focusable="true"
- android:focusableInTouchMode="true"
- android:descendantFocusability="beforeDescendants"
- android:orientation="vertical"
- android:paddingLeft="16dp"
- android:paddingRight="16dp">
-
- <TextView
- style="@style/SectionHeader"
- android:layout_width="wrap_content"
- android:layout_height="0dp"
- android:layout_marginTop="8dp"
- android:text="@string/section_should_you_trust"
- android:layout_weight="1" />
-
- <TextView
- android:id="@+id/view_key_trust_readout"
- android:layout_width="wrap_content"
- android:layout_height="0dp"
- android:layout_marginTop="14dp"
- android:layout_marginLeft="8dp"
- android:layout_weight="1"
- style="?android:attr/textAppearanceMedium"/>
-
- <TextView
- style="@style/SectionHeader"
- android:layout_width="wrap_content"
- android:layout_height="0dp"
- android:layout_marginTop="14dp"
- android:text="@string/section_cloud_evidence"
- android:layout_weight="1" />
-
- <LinearLayout
- android:id="@+id/view_key_trust_search_cloud"
- android:layout_width="match_parent"
- android:layout_height="?android:attr/listPreferredItemHeight"
- android:clickable="true"
- android:paddingRight="4dp"
- style="@style/SelectableItem"
- android:orientation="horizontal">
-
- <TextView
- android:paddingLeft="8dp"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_width="0dip"
- android:layout_height="match_parent"
- android:text="@string/key_trust_start_cloud_search"
- android:layout_weight="1"
- android:gravity="center_vertical" />
-
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:padding="8dp"
- android:src="@drawable/ic_action_search_cloud"
- android:layout_gravity="center_vertical" />
-
- </LinearLayout>
-
-
- <TextView
- android:id="@+id/view_key_trust_cloud_narrative"
- android:layout_width="wrap_content"
- android:layout_height="0dp"
- android:layout_marginTop="14dp"
- android:layout_marginBottom="14dp"
- android:layout_marginLeft="8dp"
- android:layout_weight="1"
- style="?android:attr/textAppearanceMedium" />
-
- <TableLayout
- android:id="@+id/view_key_proof_list"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"/>
-
- <TextView
- android:id="@+id/view_key_proof_verify_header"
- style="@style/SectionHeader"
- android:layout_width="wrap_content"
- android:layout_height="0dp"
- android:layout_marginTop="16dp"
- android:text="@string/section_proof_details"
- android:layout_weight="1" />
-
- <TextView
- android:id="@+id/view_key_proof_verify_detail"
- android:layout_width="wrap_content"
- android:layout_height="0dp"
- android:layout_marginTop="14dp"
- android:layout_marginLeft="8dp"
- android:layout_weight="1"
- style="?android:attr/textAppearanceMedium"/>
-
-
- </LinearLayout>
-
-</ScrollView>
diff --git a/OpenKeychain/src/main/res/raw-eu/help_about.html b/OpenKeychain/src/main/res/raw-eu/help_about.html
new file mode 100644
index 000000000..2c6c5b3c4
--- /dev/null
+++ b/OpenKeychain/src/main/res/raw-eu/help_about.html
@@ -0,0 +1,57 @@
+<html>
+<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>License: GPLv3+</p>
+
+<h2>Developers</h2>
+<ul>
+<li>Dominik Schürmann (Maintainer)</li>
+<li>Art O Cathain</li>
+<li>Ash Hughes</li>
+<li>Brian C. Barnes</li>
+<li>Bahtiar 'kalkin' Gadimov</li>
+<li>Daniel Albert</li>
+<li>Daniel Hammann</li>
+<li>Daniel Haß</li>
+<li>Greg Witczak</li>
+<li>'mar-v-in'</li>
+<li>Markus Doits</li>
+<li>Miroojin Bakshi</li>
+<li>Nikhil Peter Raj</li>
+<li>Paul Sarbinowski</li>
+<li>'Senecaso'</li>
+<li>Signe Rüsch</li>
+<li>Sreeram Boyapati</li>
+<li>Thialfihar (APG 1.x)</li>
+<li>Tim Bray</li>
+<li>Vincent Breitmoser</li>
+</ul>
+<h2>Libraries</h2>
+<ul>
+<li>
+<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v4</a> (Apache License v2)</li>
+<li>
+<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li>
+<li>
+<a href="https://github.com/timbray/KeybaseLib">KeybaseLib</a> (Apache License v2)</li>
+<li>
+<a href="https://github.com/JohnPersano/SuperToasts">SuperToasts</a> (Apache License v2)</li>
+<li>
+<a href="https://github.com/splitwise/TokenAutoComplete">TokenAutoComplete</a> (Apache License v2)</li>
+<li>
+<a href="https://github.com/rtreffer/minidns">MiniDNS</a> (Apache License v2)</li>
+<li>
+<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
+<li>
+<a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li>
+<li>
+<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
+<li>
+<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
+<li>
+<a href="https://github.com/SafeSlingerProject/exchange-android">SafeSlinger Exchange library</a> (MIT License)</li>
+</ul>
+</body>
+</html>
diff --git a/OpenKeychain/src/main/res/raw-eu/help_changelog.html b/OpenKeychain/src/main/res/raw-eu/help_changelog.html
new file mode 100644
index 000000000..0cb7d5210
--- /dev/null
+++ b/OpenKeychain/src/main/res/raw-eu/help_changelog.html
@@ -0,0 +1,232 @@
+<html>
+<head></head>
+<body>
+
+<h2>3.1.2</h2>
+<ul>
+<li>Fix key export to files (now for real)</li>
+</ul>
+<h2>3.1.1</h2>
+<ul>
+<li>Fix key export to files (they were written partially)</li>
+<li>Fix crash on Android 2.3</li>
+</ul>
+<h2>3.1</h2>
+<ul>
+<li>Fix crash on Android 5</li>
+<li>New certify screen</li>
+<li>Secure Exchange directly from key list (SafeSlinger library)</li>
+<li>New QR Code program flow</li>
+<li>Redesigned decrypt screen</li>
+<li>New icon usage and colors</li>
+<li>Fix import of secret keys from Symantec Encryption Desktop</li>
+<li>Subkey IDs on Yubikeys are now checked correctly</li>
+</ul>
+<h2>3.0.1</h2>
+<ul>
+<li>Better handling of large key imports</li>
+<li>Improved subkey selection</li>
+</ul>
+<h2>3.0</h2>
+<ul>
+<li>Full support for Yubikey signature generation and decryption!</li>
+<li>Propose installable compatible apps in apps list</li>
+<li>New design for decryption screens</li>
+<li>Many fixes for key import, also fixes stripped keys</li>
+<li>Honor and display key authenticate flags</li>
+<li>User interface to generate custom keys</li>
+<li>Fixing user id revocation certificates</li>
+<li>New cloud search (searches over traditional keyservers and keybase.io)</li>
+<li>Support for stripping keys inside OpenKeychain</li>
+</ul>
+<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>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>
+</ul>
+<h2>2.9</h2>
+<ul>
+<li>Fixing crashes introduced in v2.8</li>
+<li>Experimental ECC support</li>
+<li>Experimental Yubikey support (signing-only with imported keys)</li>
+</ul>
+<h2>2.8</h2>
+<ul>
+<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>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>
+</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>
+
+<h2>2.7</h2>
+<ul>
+<li>Purple! (Dominik, Vincent)</li>
+<li>New key view design (Dominik, Vincent)</li>
+<li>New flat Android buttons (Dominik, Vincent)</li>
+<li>API fixes (Dominik)</li>
+<li>Keybase.io import (Tim Bray)</li>
+</ul>
+<h2>2.6.1</h2>
+<ul>
+<li>Some fixes for regression bugs</li>
+</ul>
+<h2>2.6</h2>
+<ul>
+<li>Key certifications (thanks to Vincent Breitmoser)</li>
+<li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
+<li>New design for signature verification</li>
+<li>Custom key length (thanks to Greg Witczak)</li>
+<li>Fix share-functionality from other apps</li>
+</ul>
+<h2>2.5</h2>
+<ul>
+<li>Fix decryption of symmetric OpenPGP messages/files</li>
+<li>Refactored key edit screen (thanks to Ash Hughes)</li>
+<li>New modern design for encrypt/decrypt screens</li>
+<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
+</ul>
+<h2>2.4</h2>
+<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
+Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
+Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
+<ul>
+<li>New unified key list</li>
+<li>Colorized key fingerprint</li>
+<li>Support for keyserver ports</li>
+<li>Deactivate possibility to generate weak keys</li>
+<li>Much more internal work on the API</li>
+<li>Certify user ids</li>
+<li>Keyserver query based on machine-readable output</li>
+<li>Lock navigation drawer on tablets</li>
+<li>Suggestions for emails on creation of keys</li>
+<li>Search in public key lists</li>
+<li>And much more improvements and fixes…</li>
+</ul>
+<h2>2.3.1</h2>
+<ul>
+<li>Hotfix for crash when upgrading from old versions</li>
+</ul>
+<h2>2.3</h2>
+<ul>
+<li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
+<li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
+<li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
+<li>Querying keyservers directly from the import screen</li>
+<li>Fix layout and dialog style on Android 2.2-3.0</li>
+<li>Fix crash on keys with empty user ids</li>
+<li>Fix crash and empty lists when coming back from signing screen</li>
+<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
+<li>Fix upload of key from signing screen</li>
+</ul>
+<h2>2.2</h2>
+<ul>
+<li>New design with navigation drawer</li>
+<li>New public key list design</li>
+<li>New public key view</li>
+<li>Bug fixes for importing of keys</li>
+<li>Key cross-certification (thanks to Ash Hughes)</li>
+<li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
+<li>First version with new languages (thanks to the contributors on Transifex)</li>
+<li>Sharing of keys via QR Codes fixed and improved</li>
+<li>Package signature verification for API</li>
+</ul>
+<h2>2.1.1</h2>
+<ul>
+<li>API Updates, preparation for K-9 Mail integration</li>
+</ul>
+<h2>2.1</h2>
+<ul>
+<li>Lots of bug fixes</li>
+<li>New API for developers</li>
+<li>PRNG bug fix by Google</li>
+</ul>
+<h2>2.0</h2>
+<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>Fixes import issues</li>
+<li>New AIDL API</li>
+</ul>
+<h2>1.0.8</h2>
+<ul>
+<li>Basic keyserver support</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>
+</ul>
+<h2>1.0.7</h2>
+<ul>
+<li>Fixed problem with signature verification of texts with trailing newline</li>
+<li>More options for passphrase cache time to live (20, 40, 60 mins)</li>
+</ul>
+<h2>1.0.6</h2>
+<ul>
+<li>Account adding crash on Froyo fixed</li>
+<li>Secure file deletion</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>
+</ul>
+<h2>1.0.5</h2>
+<ul>
+<li>German and Italian translation</li>
+<li>Much smaller package, due to reduced BC sources</li>
+<li>New preferences GUI</li>
+<li>Layout adjustment for localization</li>
+<li>Signature bugfix</li>
+</ul>
+<h2>1.0.4</h2>
+<ul>
+<li>Fixed another crash caused by some SDK bug with query builder</li>
+</ul>
+<h2>1.0.3</h2>
+<ul>
+<li>Fixed crashes during encryption/signing and possibly key export</li>
+</ul>
+<h2>1.0.2</h2>
+<ul>
+<li>Filterable key lists</li>
+<li>Smarter pre-selection of encryption keys</li>
+<li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
+<li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
+</ul>
+<h2>1.0.1</h2>
+<ul>
+<li>GMail account listing was broken in 1.0.0, fixed again</li>
+</ul>
+<h2>1.0.0</h2>
+<ul>
+<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
+<li>Support of more file managers (including ASTRO)</li>
+<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>
+</ul>
+</body>
+</html>
diff --git a/OpenKeychain/src/main/res/raw-eu/help_nfc_beam.html b/OpenKeychain/src/main/res/raw-eu/help_nfc_beam.html
new file mode 100644
index 000000000..966fb554a
--- /dev/null
+++ b/OpenKeychain/src/main/res/raw-eu/help_nfc_beam.html
@@ -0,0 +1,12 @@
+<html>
+<head></head>
+<body>
+<h2>How to receive keys</h2>
+<ol>
+<li>Go to your partners keys and open the key you want to share.</li>
+<li>Hold the two devices back to back (they have to be almost touching) and you’ll feel a vibration.</li>
+<li>After it vibrates you’ll see the content on your partners device turn into a card-like object with Star Trek warp speed-looking animation in the background.</li>
+<li>Tap the card and the content will then load on the your device.</li>
+</ol>
+</body>
+</html>
diff --git a/OpenKeychain/src/main/res/raw-eu/help_start.html b/OpenKeychain/src/main/res/raw-eu/help_start.html
new file mode 100644
index 000000000..92fd4a92a
--- /dev/null
+++ b/OpenKeychain/src/main/res/raw-eu/help_start.html
@@ -0,0 +1,19 @@
+<html>
+<head></head>
+<body>
+<h2>Getting started</h2>
+<p>First you need a personal key. Create one via the menu in "Keys" or import existing secret keys. Afterwards, you can download your friends' keys or exchange them via QR Codes or NFC.</p>
+
+<p>On Android lower 4.4, it is recommended that you install <a href="market://details?id=org.openintents.filemanager">OI File Manager</a> for enhanced file selection.</p>
+
+<h2>I found a bug in OpenKeychain!</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>
+<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>
+<p>Help translating OpenKeychain! Everybody can participate at <a href="https://www.transifex.com/projects/p/openpgp-keychain/">OpenKeychain on Transifex</a>.</p>
+
+</body>
+</html>
diff --git a/OpenKeychain/src/main/res/raw-eu/help_wot.html b/OpenKeychain/src/main/res/raw-eu/help_wot.html
new file mode 100644
index 000000000..2a551f79c
--- /dev/null
+++ b/OpenKeychain/src/main/res/raw-eu/help_wot.html
@@ -0,0 +1,17 @@
+<html>
+<head></head>
+<body>
+<h2>Web of Trust</h2>
+<p>The Web of Trust describes the part of OpenPGP 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>Trust Model</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>
+
+</body>
+</html>
diff --git a/OpenKeychain/src/main/res/raw-eu/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-eu/nfc_beam_share.html
new file mode 100644
index 000000000..083e055c7
--- /dev/null
+++ b/OpenKeychain/src/main/res/raw-eu/nfc_beam_share.html
@@ -0,0 +1,11 @@
+<html>
+<head></head>
+<body>
+<ol>
+<li>Make sure that NFC is turned on in Settings &gt; More &gt; NFC and make sure that Android Beam is also on in the same section.</li>
+<li>Hold the two devices back to back (they have to be almost touching) and you'll feel a vibration.</li>
+<li>After it vibrates you'll see the content on your device turn into a card-like object with Star Trek warp speed-looking animation in the background.</li>
+<li>Tap the card and the content will then load on the other person’s device.</li>
+</ol>
+</body>
+</html>
diff --git a/OpenKeychain/src/main/res/raw-ru/help_changelog.html b/OpenKeychain/src/main/res/raw-ru/help_changelog.html
index 0cb7d5210..6c22f1315 100644
--- a/OpenKeychain/src/main/res/raw-ru/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw-ru/help_changelog.html
@@ -4,229 +4,229 @@
<h2>3.1.2</h2>
<ul>
-<li>Fix key export to files (now for real)</li>
+<li>Исправление экспорта ключей в файл (на этот раз точно)</li>
</ul>
<h2>3.1.1</h2>
<ul>
-<li>Fix key export to files (they were written partially)</li>
-<li>Fix crash on Android 2.3</li>
+<li>Исправление экспорта ключей (записывались частично)</li>
+<li>Исправление падений на Android 2.3</li>
</ul>
<h2>3.1</h2>
<ul>
-<li>Fix crash on Android 5</li>
-<li>New certify screen</li>
-<li>Secure Exchange directly from key list (SafeSlinger library)</li>
-<li>New QR Code program flow</li>
-<li>Redesigned decrypt screen</li>
-<li>New icon usage and colors</li>
-<li>Fix import of secret keys from Symantec Encryption Desktop</li>
-<li>Subkey IDs on Yubikeys are now checked correctly</li>
+<li>Исправление падений на Android 5</li>
+<li>Новый диалог сертификации</li>
+<li>Безопасный обмен ключами из списка (SafeSlinger library)</li>
+<li>Новый обработчик QR кодов</li>
+<li>Изменение дизайна диалога расшифровки</li>
+<li>Использование новых иконок и цветов</li>
+<li>Исправлен импорт закрытых ключей из Symantec Encryption Desktop</li>
+<li>Корректная проверка идентификаторов доп. ключей на Yubikeys</li>
</ul>
<h2>3.0.1</h2>
<ul>
-<li>Better handling of large key imports</li>
-<li>Improved subkey selection</li>
+<li>Улучшение обработки импорта больших ключей</li>
+<li>Улучшение выбора доп. ключей</li>
</ul>
<h2>3.0</h2>
<ul>
-<li>Full support for Yubikey signature generation and decryption!</li>
-<li>Propose installable compatible apps in apps list</li>
-<li>New design for decryption screens</li>
-<li>Many fixes for key import, also fixes stripped keys</li>
-<li>Honor and display key authenticate flags</li>
-<li>User interface to generate custom keys</li>
-<li>Fixing user id revocation certificates</li>
-<li>New cloud search (searches over traditional keyservers and keybase.io)</li>
-<li>Support for stripping keys inside OpenKeychain</li>
+<li>Полная поддержка подписания и расшифровки с Yubikey!</li>
+<li>Предлагаются для установки совместимые программы</li>
+<li>Новый дизайн для диалога расшифровки</li>
+<li>Исправление ошибок импорта ключей и исправление сжатых ключей</li>
+<li>Обработка и отображение флагов ключей</li>
+<li>Пользовательский интерфейс для генерации ключей</li>
+<li>Исправление сертификатов отзыва</li>
+<li>Новый облачный поиск (ищет на традиционных серверах и keybase.io)</li>
+<li>Поддержка сжатых ключей в OpenKeychain</li>
</ul>
<h2>2.9.2</h2>
<ul>
-<li>Fix keys broken in 2.9.1</li>
-<li>Yubikey decryption now working via API</li>
+<li>Исправление ключей, сломанных в 2.9.1</li>
+<li>Расшифровка с Yubikey теперь работает через 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>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>
+<li>Разделение диалога шифрования на два окна</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 теперь обрабатывает отозванные/просроченные ключи и возвращает все идентификаторы</li>
</ul>
<h2>2.9</h2>
<ul>
-<li>Fixing crashes introduced in v2.8</li>
-<li>Experimental ECC support</li>
-<li>Experimental Yubikey support (signing-only with imported keys)</li>
+<li>Исправление падений, выявленных в 2.8</li>
+<li>Экспериментальная поддержка Эллиптических кривых</li>
+<li>Экспериментальная поддержка Yubikey (вход по импортированному ключу)</li>
</ul>
<h2>2.8</h2>
<ul>
-<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>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>
-</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>
+<li>Так много небольших исправлений, что лучше сообщить о существенных изменениях</li>
+<li>Изменение ключа: новый дизайн, аннулирование клуча</li>
+<li>Импорт ключа: усовершенствованный дизайн, безопасное соединение с серверами ключей по протоколу hkps, определение серверов по записям DNS SRV</li>
+<li>Новый диалог при первом запуске</li>
+<li>Экран создания ключа: автодополнение имени и адреса почты из учетной записи Android</li>
+<li>Шифрование файла: усовершенствованный дизайн, возможность шифрования нескольких файлов</li>
+<li>Новые иконки статуса ключа (Brennan Novak)</li>
+<li>Важное исправление: Теперь возможен импорт большого количества ключей из одного файла</li>
+<li>Уведомление о запомненных паролях</li>
+<li>Ключи соединяются с контактами Android</li>
+</ul>
+<p>Этот релиз стал возможен благодаря работе Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>
<h2>2.7</h2>
<ul>
-<li>Purple! (Dominik, Vincent)</li>
-<li>New key view design (Dominik, Vincent)</li>
-<li>New flat Android buttons (Dominik, Vincent)</li>
-<li>API fixes (Dominik)</li>
-<li>Keybase.io import (Tim Bray)</li>
+<li>Пурпурный! (Dominik, Vincent)</li>
+<li>Новый вид просмотра ключей (Dominik, Vincent)</li>
+<li>Новый вид кнопок в стиле Android (Dominik, Vincent)</li>
+<li>Исправления API (Dominik)</li>
+<li>Импорт Keybase.io (Tim Bray)</li>
</ul>
<h2>2.6.1</h2>
<ul>
-<li>Some fixes for regression bugs</li>
+<li>Исправления найденных ошибок</li>
</ul>
<h2>2.6</h2>
<ul>
-<li>Key certifications (thanks to Vincent Breitmoser)</li>
-<li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
-<li>New design for signature verification</li>
-<li>Custom key length (thanks to Greg Witczak)</li>
-<li>Fix share-functionality from other apps</li>
+<li>Сертификация ключей (благодаря Vincent Breitmoser)</li>
+<li>Поддержка частично-секретных ключей GnuPG (благодаря Vincent Breitmoser)</li>
+<li>Новый дизайн проверки подписи</li>
+<li>Произвольная длина ключей (благодаря Greg Witczak)</li>
+<li>Исправление ошибки получения данных от других приложений</li>
</ul>
<h2>2.5</h2>
<ul>
-<li>Fix decryption of symmetric OpenPGP messages/files</li>
-<li>Refactored key edit screen (thanks to Ash Hughes)</li>
-<li>New modern design for encrypt/decrypt screens</li>
-<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
+<li>Исправлено симметричное шифрование сообщений/файлов</li>
+<li>Переработано окно изменения ключа (благодаря Ash Hughes)</li>
+<li>Новый дизайн для окон шифрования/расшифровки</li>
+<li>OpenPGP API версии 3 (множественные аккаунты, внутренние исправления, поиск ключей)</li>
</ul>
<h2>2.4</h2>
-<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
-Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
+<p>Спасибо всем участникам Google Summer of Code 2014, которые помогли сделать этот выпуск, добавив функции и исправив ошибки!
+Из общего числа патчей, особенный вклад внесли следующие люди (в алфавитном порядке):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul>
-<li>New unified key list</li>
-<li>Colorized key fingerprint</li>
-<li>Support for keyserver ports</li>
-<li>Deactivate possibility to generate weak keys</li>
-<li>Much more internal work on the API</li>
-<li>Certify user ids</li>
-<li>Keyserver query based on machine-readable output</li>
-<li>Lock navigation drawer on tablets</li>
-<li>Suggestions for emails on creation of keys</li>
-<li>Search in public key lists</li>
-<li>And much more improvements and fixes…</li>
+<li>Новый объединенный список ключей</li>
+<li>Цветовая индикация отпечатков ключей</li>
+<li>Поддержка портов серверов ключей</li>
+<li>Отключена возможность создавать слабые ключи</li>
+<li>Ещё больше улучшений работы API</li>
+<li>Сертификация пользовательских данных</li>
+<li>Запрос к серверу ключей основывается на машинном формате вывода</li>
+<li>Фиксация панели на планшетах</li>
+<li>Подсказки email при создании ключей</li>
+<li>Поиск в списках публичных ключей</li>
+<li>И множество других исправлений и улучшений...</li>
</ul>
<h2>2.3.1</h2>
<ul>
-<li>Hotfix for crash when upgrading from old versions</li>
+<li>Исправление ошибки при обновлении со старых версий</li>
</ul>
<h2>2.3</h2>
<ul>
-<li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
-<li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
-<li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
-<li>Querying keyservers directly from the import screen</li>
-<li>Fix layout and dialog style on Android 2.2-3.0</li>
-<li>Fix crash on keys with empty user ids</li>
-<li>Fix crash and empty lists when coming back from signing screen</li>
-<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
-<li>Fix upload of key from signing screen</li>
+<li>Удален не требующийся экспорт публичного ключа при экспорте секретного ключа (спасибо, Ash Hughes)</li>
+<li>Исправлена ошибка срока годности ключей (спасибо, Ash Hughes)</li>
+<li>Исправления ошибок при изменении ключей (спасибо, Ash Hughes)</li>
+<li>Запрос ключа с сервера прямо из окна импорта ключей</li>
+<li>Исправление внешнего вида для Android 2.2-3.0</li>
+<li>Исправлено падение когда ключ не содержал идентификатор пользователя</li>
+<li>Исправлено падение и пустой список при возвращении из окна подписания</li>
+<li>Криптографическая библиотека Bouncy Castle обновлена с версии 1.47 до 1.50 и пересобрана</li>
+<li>Исправлена загрузка ключа из окна подписания</li>
</ul>
<h2>2.2</h2>
<ul>
-<li>New design with navigation drawer</li>
-<li>New public key list design</li>
-<li>New public key view</li>
-<li>Bug fixes for importing of keys</li>
-<li>Key cross-certification (thanks to Ash Hughes)</li>
-<li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
-<li>First version with new languages (thanks to the contributors on Transifex)</li>
-<li>Sharing of keys via QR Codes fixed and improved</li>
-<li>Package signature verification for API</li>
+<li>Новый дизайн с боковой панелью</li>
+<li>Новый дизайн списка ключей</li>
+<li>Новый вид просмотра ключа</li>
+<li>Исправление ошибок импорта ключей</li>
+<li>Кросс-сертификация ключей (спасибо, Ash Hughes)</li>
+<li>Правильная обработка паролей в UTF-8 (спасибо, Ash Hughes)</li>
+<li>Первая версия с новыми языками (спасибо переводчикам с Transifex)</li>
+<li>Исправление и улучшение передачи ключей через QR коды</li>
+<li>Проверка подписей пакетов для API</li>
</ul>
<h2>2.1.1</h2>
<ul>
-<li>API Updates, preparation for K-9 Mail integration</li>
+<li>Обновление API, подготовка к интеграции с K-9 Mail</li>
</ul>
<h2>2.1</h2>
<ul>
-<li>Lots of bug fixes</li>
-<li>New API for developers</li>
-<li>PRNG bug fix by Google</li>
+<li>Множество исправлений ошибок</li>
+<li>Новый API для разработчиков</li>
+<li>Исправление ошибки генератора случайных чисел</li>
</ul>
<h2>2.0</h2>
<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>Fixes import issues</li>
-<li>New AIDL API</li>
+<li>Переработка дизайна</li>
+<li>Передача ключей через QR коды и NFC</li>
+<li>Подписание ключей</li>
+<li>Загрузка ключей на сервер</li>
+<li>Исправление проблем импорта</li>
+<li>Новый AIDL API</li>
</ul>
<h2>1.0.8</h2>
<ul>
-<li>Basic keyserver support</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>Поддержка серверов ключей</li>
+<li>App2SD</li>
+<li>Больше вариантов сохранения кэша пароля: 1, 2, 4, 8 часов</li>
+<li>Переводы: Норвежский (спасибо, Sander Danielsen), Китайский (спасибо, Zhang Fredrick)</li>
+<li>Исправления ошибок</li>
+<li>Оптимизация</li>
</ul>
<h2>1.0.7</h2>
<ul>
-<li>Fixed problem with signature verification of texts with trailing newline</li>
-<li>More options for passphrase cache time to live (20, 40, 60 mins)</li>
+<li>Исправление ошибки при проверке подписи текста с переводом строки</li>
+<li>Больше вариантов сохранения кэша пароля (20, 40, 60 минут)</li>
</ul>
<h2>1.0.6</h2>
<ul>
-<li>Account adding crash on Froyo fixed</li>
-<li>Secure file deletion</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>Исправление ошибки создания записи на Froyo</li>
+<li>Безопасное удаление файлов</li>
+<li>Опция удаления файла ключа после импорта</li>
+<li>Передача шифрования (галерея и т.д.)</li>
+<li>Новые возможности (язык, v3 подписи)</li>
+<li>Изменения интерфейса</li>
+<li>Исправления ошибок</li>
</ul>
<h2>1.0.5</h2>
<ul>
-<li>German and Italian translation</li>
-<li>Much smaller package, due to reduced BC sources</li>
-<li>New preferences GUI</li>
-<li>Layout adjustment for localization</li>
-<li>Signature bugfix</li>
+<li>Новые языки: немецкий, итальянский</li>
+<li>Значительное уменьшение размера программы</li>
+<li>Новый интерфейс настроек</li>
+<li>Изменение вида для локализации</li>
+<li>Исправление ошибки подписи</li>
</ul>
<h2>1.0.4</h2>
<ul>
-<li>Fixed another crash caused by some SDK bug with query builder</li>
+<li>Исправление еще одной ошибки, возникающей в SDK</li>
</ul>
<h2>1.0.3</h2>
<ul>
-<li>Fixed crashes during encryption/signing and possibly key export</li>
+<li>Исправление ошибок при шифровании/подписании и экспорте ключей</li>
</ul>
<h2>1.0.2</h2>
<ul>
-<li>Filterable key lists</li>
-<li>Smarter pre-selection of encryption keys</li>
-<li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
-<li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
+<li>Фильтр списка ключей</li>
+<li>Улучшение выбора ключей шифрования</li>
+<li>Добавлена возможность шифровать файлы прямо из файлового менеджера</li>
+<li>Исправления ошибок и новые возможности для интеграции с K-9 Mail</li>
</ul>
<h2>1.0.1</h2>
<ul>
-<li>GMail account listing was broken in 1.0.0, fixed again</li>
+<li>Исправление выбора учетной записи GMail, сломанного в 1.0.0</li>
</ul>
<h2>1.0.0</h2>
<ul>
-<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
-<li>Support of more file managers (including ASTRO)</li>
-<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>интеграция с K-9 Mail, APG поддерживает beta-версию K-9 Mail</li>
+<li>Поддержка сторонних файловых менеджеров (в т.ч. ASTRO)</li>
+<li>Словенский перевод</li>
+<li>Новая база данных, еще быстрее и компактнее</li>
+<li>Добавлены обработчики для взаимодействия с другими приложениями</li>
+<li>Исправления ошибок</li>
</ul>
</body>
</html>
diff --git a/OpenKeychain/src/main/res/raw-ru/help_nfc_beam.html b/OpenKeychain/src/main/res/raw-ru/help_nfc_beam.html
index 5ed10635d..fcf55cdaf 100644
--- a/OpenKeychain/src/main/res/raw-ru/help_nfc_beam.html
+++ b/OpenKeychain/src/main/res/raw-ru/help_nfc_beam.html
@@ -3,7 +3,7 @@
<body>
<h2>Как обменяться ключами</h2>
<ol>
-<li>Go to your partners keys and open the key you want to share.</li>
+<li>Нажмите и удерживайте ключ, который вы хотите передать.</li>
<li>Поднесите оба устройства вплотную обратными сторонами (до полного касания). Вы почувствуете небольшую вибрацию.</li>
<li>Как только устройства завибрируют, на экране появится карточка с передаваемым содержимым.</li>
<li>Нажмите на карточку, что бы передать данные (ключи) с одного устройства на другое.</li>
diff --git a/OpenKeychain/src/main/res/raw-ru/help_start.html b/OpenKeychain/src/main/res/raw-ru/help_start.html
index ef91a4131..1463d374d 100644
--- a/OpenKeychain/src/main/res/raw-ru/help_start.html
+++ b/OpenKeychain/src/main/res/raw-ru/help_start.html
@@ -2,9 +2,9 @@
<head></head>
<body>
<h2>Приступая</h2>
-<p>First you need a personal key. Create one via the menu in "Keys" or import existing secret keys. Afterwards, you can download your friends' keys or exchange them via QR Codes or NFC.</p>
+<p>Для начала Вам нужен свой секретный ключ. Создайте его в меню раздела "Ключи" или импортируйте ранее созданный ключ. Позже вы сможете поделиться данными своего ключа с друзьями с помощью QR кода или NFC.</p>
-<p>On Android lower 4.4, it is recommended that you install <a href="market://details?id=org.openintents.filemanager">OI File Manager</a> for enhanced file selection.</p>
+<p>На Android ниже 4.4, рекомендуется установить <a href="market://details?id=org.openintents.filemanager">OI File Manager</a> для выбора файлов.</p>
<h2>Я нашел ошибку в OpenKeychain!</h2>
<p>Пожалуйста, сообщайте о возникших проблемах и найденных ошибках в разделе <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">Решение проблем OpenKeychain</a>.</p>
diff --git a/OpenKeychain/src/main/res/raw-ru/help_wot.html b/OpenKeychain/src/main/res/raw-ru/help_wot.html
index 4da6c9a82..7fbde44d3 100644
--- a/OpenKeychain/src/main/res/raw-ru/help_wot.html
+++ b/OpenKeychain/src/main/res/raw-ru/help_wot.html
@@ -2,7 +2,7 @@
<head></head>
<body>
<h2>Сеть доверия (WoT)</h2>
-<p>The Web of Trust describes the part of OpenPGP 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>
+<p>Сеть доверия (The Web of Trust) предоставляет механизм заверения ключей посредством присоединения и распространения информации о выполненной сертификации. Для гарантии безопасного зашифрованного общения крайне важно не сомневаться, что владельцем ключа является ваш собеседник.</p>
<h2>Поддержка в OpenKeychain</h2>
<p>В настоящее время реализованы только базовые возможности WoT. Работа в самом разгаре и в будущих версиях OpenKeychain будут появляться дополнительные возможности.</p>
diff --git a/OpenKeychain/src/main/res/values-bg/strings.xml b/OpenKeychain/src/main/res/values-bg/strings.xml
index ef0a0ce94..233347bd3 100644
--- a/OpenKeychain/src/main/res/values-bg/strings.xml
+++ b/OpenKeychain/src/main/res/values-bg/strings.xml
@@ -36,6 +36,8 @@
<!--Share-->
<!--Key list-->
<!--Key view-->
+ <!--Key trust-->
+ <!--keybase proof stuff-->
<!--Edit key-->
<!--Create key-->
<!--View key-->
@@ -54,6 +56,7 @@
<!--Promote key-->
<!--Other messages used in OperationLogs-->
<!--Messages for DecryptVerify operation-->
+ <!--Messages for VerifySignedLiteralData operation-->
<!--Messages for SignEncrypt operation-->
<!--Messages for PgpSignEncrypt operation-->
<!--PassphraseCache-->
diff --git a/OpenKeychain/src/main/res/values-cs/strings.xml b/OpenKeychain/src/main/res/values-cs/strings.xml
index cbf0eb0b8..903cc50f3 100644
--- a/OpenKeychain/src/main/res/values-cs/strings.xml
+++ b/OpenKeychain/src/main/res/values-cs/strings.xml
@@ -238,7 +238,6 @@
<string name="error_could_not_extract_private_key">nebylo možné extrahovat privátní klíč</string>
<!--errors without preceeding Error:-->
<string name="error_jelly_bean_needed">Musíte mít Android 4.1 abyste mohli používat Androidí NFC Beam technologii!</string>
- <string name="error_nfc_needed">NFC není na vašem zařízení k dispozici!</string>
<string name="error_nothing_import">Žádný klíč nenalezen!</string>
<string name="error_contacts_key_id_missing">Příjem ID klíče od kontatktu selhal!</string>
<string name="error_generic_report_bug">Nastala obecná chyba, prosím vytvořte nový bug report pro OpenKeychain.</string>
@@ -432,6 +431,8 @@
<string name="user_id_info_uncertified_text">Tato identita nebyla ještě ověřena. Nemůžete si být jisti, že identita skutečně odpovídá konkrétní 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>
+ <!--Key trust-->
+ <!--keybase proof stuff-->
<!--Edit key-->
<string name="edit_key_action_change_passphrase">Změnit heslo</string>
<string name="edit_key_action_add_identity">Přidat identitu</string>
@@ -467,8 +468,6 @@
<string name="create_key_hint_full_name">Celé jméno, např. Jan Novák</string>
<string name="create_key_edit">Změnit konfiguraci klíče</string>
<!--View key-->
- <string name="view_key_revoked">Tento klíč byl zneplatněn!</string>
- <string name="view_key_expired">Tento klíč vyexpiroval!</string>
<!--Navigation Drawer-->
<string name="nav_keys">Klíče</string>
<string name="nav_apps">Aplikace</string>
@@ -510,6 +509,7 @@
<!--Other messages used in OperationLogs-->
<string name="msg_ek_error_not_found">Klíč nenalezen!</string>
<!--Messages for DecryptVerify operation-->
+ <!--Messages for VerifySignedLiteralData operation-->
<!--Messages for SignEncrypt operation-->
<!--Messages for PgpSignEncrypt operation-->
<string name="msg_acc_saved">Účet uložen</string>
diff --git a/OpenKeychain/src/main/res/values-de/strings.xml b/OpenKeychain/src/main/res/values-de/strings.xml
index e6416b28b..63b0c4c09 100644
--- a/OpenKeychain/src/main/res/values-de/strings.xml
+++ b/OpenKeychain/src/main/res/values-de/strings.xml
@@ -249,7 +249,6 @@
<string name="error_could_not_extract_private_key">Privater Schlüssel konnte nicht extrahiert werden</string>
<!--errors without preceeding Error:-->
<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_contacts_key_id_missing">Abrufen der Schlüsselkennung von den Kontakten ist fehlgeschlagen!</string>
<string name="error_generic_report_bug">Ein allgemeiner Fehler trat auf, bitte schreiben Sie einen neuen Bugreport für OpenKeychain.</string>
@@ -432,7 +431,6 @@
<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>
@@ -497,6 +495,8 @@
<string name="user_id_info_uncertified_text">Diese Identität wurde noch nicht beglaubigt. Sie können 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>
+ <!--Key trust-->
+ <!--keybase proof stuff-->
<!--Edit key-->
<string name="edit_key_action_change_passphrase">Passwort ändern</string>
<string name="edit_key_action_add_identity">Identität hinzufügen</string>
@@ -532,8 +532,6 @@
<string name="create_key_hint_full_name">Vollständiger Name, z.B. Max Mustermann</string>
<string name="create_key_edit">Schlüsselkonfiguration ändern</string>
<!--View key-->
- <string name="view_key_revoked">Dieser Schlüssel wurde widerrufen!</string>
- <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_decrypt">Verschlüsseln/Entschlüsseln</string>
@@ -885,6 +883,7 @@
<string name="msg_dc_trail_sym">Anhang gefunden, symmetrisch verschlüsselte Daten</string>
<string name="msg_dc_trail_unknown">Anhängende Daten unbekannter Art gefunden</string>
<string name="msg_dc_unlocking">Geheimer Schlüssel wird entsperrt</string>
+ <!--Messages for VerifySignedLiteralData operation-->
<!--Messages for SignEncrypt operation-->
<string name="msg_se">Starte Signier-/Verschlüsselungsvorgang</string>
<string name="msg_se_error_no_input">Keine Eingabe gegeben!</string>
diff --git a/OpenKeychain/src/main/res/values-es/strings.xml b/OpenKeychain/src/main/res/values-es/strings.xml
index e2c657f3e..0d7444c47 100644
--- a/OpenKeychain/src/main/res/values-es/strings.xml
+++ b/OpenKeychain/src/main/res/values-es/strings.xml
@@ -39,6 +39,9 @@
<string name="title_keys">Claves</string>
<!--section-->
<string name="section_user_ids">Identificaciones</string>
+ <string name="section_should_you_trust">¿Debe confiar en esta clave?</string>
+ <string name="section_proof_details">Prueba de verificación</string>
+ <string name="section_cloud_evidence">Evidencia desde la nube</string>
<string name="section_keys">Subclaves</string>
<string name="section_cloud_search">Búsqueda en la nube</string>
<string name="section_general">General</string>
@@ -71,6 +74,8 @@
<string name="btn_export_to_server">Cargar al servidor de claves</string>
<string name="btn_next">Siguiente</string>
<string name="btn_back">Volver</string>
+ <string name="btn_no">No</string>
+ <string name="btn_match">Las huellas de validación son coincidentes</string>
<string name="btn_lookup_key">Buscar clave</string>
<string name="btn_share_encrypted_signed">Cifrar y compartir mensaje</string>
<string name="btn_view_cert_key">Ver clave de verificación</string>
@@ -90,6 +95,7 @@
<string name="menu_create_key">Crear mi clave</string>
<string name="menu_import_existing_key">Importar desde fichero</string>
<string name="menu_search">Buscar</string>
+ <string name="menu_nfc_preferences">Configuraciones NFC</string>
<string name="menu_beam_preferences">Ajustes de Beam</string>
<string name="menu_key_edit_cancel">Cancelar</string>
<string name="menu_encrypt_to">Cifrar hacia...</string>
@@ -98,6 +104,7 @@
<string name="menu_search_cloud">Buscar en la nube</string>
<string name="menu_export_all_keys">Exportar todas las claves</string>
<string name="menu_advanced">Mostrar información avanzada</string>
+ <string name="menu_certify_fingerprint">Verificar vía comparación de huellas de validación</string>
<!--label-->
<string name="label_message">Mensaje</string>
<string name="label_file">Archivo</string>
@@ -243,13 +250,14 @@
<string name="error_key_needs_a_user_id">necesita al menos una identificación</string>
<string name="error_no_signature_passphrase">no has proporcionado una frase de contraseña</string>
<string name="error_no_signature_key">no has proporcionado una clave de firma</string>
- <string name="error_invalid_data">¡No hay contenido cifrado o firmado con OpenPGP válido!</string>
+ <string name="error_invalid_data">¡No es un contenido cifrado o firmado con OpenPGP válido!</string>
<string name="error_integrity_check_failed">¡ha fallado la comprobación de integridad! ¡Los datos han sido modificados!</string>
<string name="error_wrong_passphrase">frase de contraseña incorrecta</string>
<string name="error_could_not_extract_private_key">no se puede extraer la clave privada</string>
<!--errors without preceeding Error:-->
<string name="error_jelly_bean_needed">¡Necesita Android 4.1 para usar la característica NFC Beam (haz NFC) de Android!</string>
- <string name="error_nfc_needed">¡NFC no está disponible en tu dispositivo!</string>
+ <string name="error_nfc_needed">¡NFC ha de estar habilitado!</string>
+ <string name="error_beam_needed">¡Beam ha de estar habilitado!</string>
<string name="error_nothing_import">¡No se encontraron claves!</string>
<string name="error_contacts_key_id_missing">¡Fallo al obtener clave de identificación desde los contactos!</string>
<string name="error_generic_report_bug">Ha ocurrido un error genérico, por favor, informa de este bug a OpenKeychain</string>
@@ -258,14 +266,14 @@
<string name="decrypt_result_invalid_signature">¡Firma no válida!</string>
<string name="decrypt_result_signature_uncertified">Firmado por (¡no certificada!)</string>
<string name="decrypt_result_signature_certified">Firmado por</string>
- <string name="decrypt_result_signature_expired_key">¡La clave ha expirado!</string>
+ <string name="decrypt_result_signature_expired_key">¡La clave ha caducado!</string>
<string name="decrypt_result_signature_revoked_key">¡La clave ha sido revocada!</string>
<string name="decrypt_result_signature_missing_key">Clave pública desconocida</string>
<string name="decrypt_result_encrypted">Cifrado</string>
<string name="decrypt_result_not_encrypted">No cifrado</string>
<string name="decrypt_result_action_show">Mostrar</string>
<string name="decrypt_result_action_Lookup">Buscar</string>
- <string name="decrypt_invalid_text">O bien la firma no es válida, o la clave ha sido revocada/ha expirado. No puede estar seguro de quién escribió el texto. ¿Todavía quiere mostrarlo?</string>
+ <string name="decrypt_invalid_text">O bien la firma no es válida, o la clave ha sido revocada o ha caducado. No puede estar seguro de quién escribió el texto. ¿Aún quiere mostrarlo?</string>
<string name="decrypt_invalid_button">Comprendo los riesgos, ¡muéstralo!</string>
<!--Add keys-->
<string name="add_keys_my_key">Mi clave:</string>
@@ -432,7 +440,6 @@
<string name="intent_send_encrypt">Cifrar con OpenKeychain</string>
<string name="intent_send_decrypt">Descifrar con OpenKeychain</string>
<!--Remote API-->
- <string name="api_no_apps">¡No hay aplicaciones registradas!\n\n¡Puede encontrar una lista de aplicaciones de terceros soportadas en \'Ayuda\'!</string>
<string name="api_settings_show_info">Mostrar información avanzada</string>
<string name="api_settings_hide_info">Ocultar información avanzada</string>
<string name="api_settings_show_advanced">Mostrar la configuración avanzada</string>
@@ -489,14 +496,54 @@
<string name="key_view_tab_share">Compartir</string>
<string name="key_view_tab_keys">Subclaves</string>
<string name="key_view_tab_certs">Certificados</string>
+ <string name="key_view_tab_keybase">Keybase.io</string>
<string name="user_id_info_revoked_title">Revocada</string>
- <string name="user_id_info_revoked_text">Esta identificación ha sido revocada por el propietario de la clave. En adelante no es válida.</string>
+ <string name="user_id_info_revoked_text">Esta identificación ha sido revocada por el propietario de la clave. En adelante no será válida.</string>
<string name="user_id_info_certified_title">Certificada</string>
<string name="user_id_info_certified_text">Esta identificación ha sido certificada por usted.</string>
<string name="user_id_info_uncertified_title">No certificada</string>
<string name="user_id_info_uncertified_text">Esta identificación de no ha sido certificada aún. No puede estar seguro de si la identificación corresponde en realidad a una persona específica.</string>
- <string name="user_id_info_invalid_title">No válido</string>
+ <string name="user_id_info_invalid_title">No válida</string>
<string name="user_id_info_invalid_text">¡Hay algo mal con esta identificación!</string>
+ <!--Key trust-->
+ <string name="key_trust_already_verified">¡Ya ha certificado esta clave!</string>
+ <string name="key_trust_it_is_yours">¡Esta es una de sus claves!</string>
+ <string name="key_trust_maybe">Esta clave no está revocada ni caducada.\nNo la ha certificado, pero puede elegir confiar en ella.</string>
+ <string name="key_trust_revoked">Esta clave ha sido revocada por su propietario. No debe confiar en ella.</string>
+ <string name="key_trust_expired">Esta clave ha caducado. No debe confiar en ella.</string>
+ <string name="key_trust_old_keys">Puede ser correcto usar esta para descifrar un mensaje antiguo que date del momento en que esta clave estaba vigente.</string>
+ <string name="key_trust_no_cloud_evidence">No hay evidencia desde la nube de la fiabilidad de esta clave.</string>
+ <string name="key_trust_start_cloud_search">Comenzar búsqueda</string>
+ <string name="key_trust_results_prefix">Keybase.io ofrece \"pruebas\" que sostienen que el propietario de esta clave:</string>
+ <!--keybase proof stuff-->
+ <string name="keybase_narrative_twitter">Publica en Twitter como</string>
+ <string name="keybase_narrative_github">Es conocido en GitHub como</string>
+ <string name="keybase_narrative_dns">Controla el(los) nombre(s) de dominio</string>
+ <string name="keybase_narrative_web_site">Puede publicar en el(los) sitio(s) web</string>
+ <string name="keybase_narrative_reddit">Publica en Reddit como </string>
+ <string name="keybase_narrative_coinbase">Es conocido en Coinbase como</string>
+ <string name="keybase_narrative_hackernews">Publica en Hacker News como</string>
+ <string name="keybase_narrative_unknown">Tipo de prueba desconocido</string>
+ <string name="keybase_proof_failure">Desafortunadamente esta prueba no puede ser verificada.</string>
+ <string name="keybase_unknown_proof_failure">Problema no reconocido con el verificador de la prueba</string>
+ <string name="keybase_problem_fetching_evidence">Problema con la evidencia de la prueba</string>
+ <string name="keybase_key_mismatch">La huella de validación de clave no coincide con aquella en el post de la prueba</string>
+ <string name="keybase_dns_query_failure">Fallo al obtener registro DNS TXT</string>
+ <string name="keybase_no_prover_found">No se encontró verificador de prueba para</string>
+ <string name="keybase_message_payload_mismatch">El post de la prueba descifrada no coincide con el valor esperado</string>
+ <string name="keybase_message_fetching_data">Descargado evidencia de la prueba</string>
+ <string name="keybase_proof_succeeded">¡Esta prueba ha sido verificada!</string>
+ <string name="keybase_a_post">Un post</string>
+ <string name="keybase_fetched_from">descargada desde</string>
+ <string name="keybase_for_the_domain">para el dominio</string>
+ <string name="keybase_contained_signature">contiene un mensaje que sólo podría haber sido creado por el propietario de esta clave.</string>
+ <string name="keybase_twitter_proof">Un twit</string>
+ <string name="keybase_dns_proof">Un registro DNS TXT</string>
+ <string name="keybase_web_site_proof">Un fichero de texto</string>
+ <string name="keybase_github_proof">Un gist</string>
+ <string name="keybase_reddit_proof">Un fichero JSON</string>
+ <string name="keybase_reddit_attribution">atribuido por Reddit a</string>
+ <string name="keybase_verify">Verificar</string>
<!--Edit key-->
<string name="edit_key_action_change_passphrase">Cambiar frase-contraseña</string>
<string name="edit_key_action_add_identity">Añadir identificación</string>
@@ -532,8 +579,12 @@
<string name="create_key_hint_full_name">Nombre completo, ej. Max Mustermann</string>
<string name="create_key_edit">Cambiar configuración de clave</string>
<!--View key-->
- <string name="view_key_revoked">¡Esta clave ha sido revocada!</string>
- <string name="view_key_expired">¡Esta clave ha expirado!</string>
+ <string name="view_key_revoked">Revocada: ¡La clave no debe volver a ser usada!</string>
+ <string name="view_key_expired">Caducada: ¡El contacto necesita extender la vigencia de las claves!</string>
+ <string name="view_key_expired_secret">Caducada: ¡Puede extender la vigencia de las claves al editarlas!</string>
+ <string name="view_key_my_key">Mi clave</string>
+ <string name="view_key_verified">Clave verificada</string>
+ <string name="view_key_unverified">No verificada: ¡Escanee el código QR para verificar la clave!</string>
<!--Navigation Drawer-->
<string name="nav_keys">Claves</string>
<string name="nav_encrypt_decrypt">Cifrar/Descifrar</string>
@@ -570,8 +621,8 @@
<string name="msg_ip_insert_keys">Analizando claves</string>
<string name="msg_ip_prepare">Preparando base de datos de operaciones</string>
<string name="msg_ip_master">Procesando clave maestra %s</string>
- <string name="msg_ip_master_expired">El juego de claves expiró el %s</string>
- <string name="msg_ip_master_expires">El juego de claves expira el %s</string>
+ <string name="msg_ip_master_expired">El juego de claves caducó el %s</string>
+ <string name="msg_ip_master_expires">El juego de claves caduca el %s</string>
<string name="msg_ip_master_flags_unspecified">Indicativos maestros: no especificados (se asumen todos)</string>
<string name="msg_ip_master_flags_cesa">Indicativos maestros: certificar, cifrar, firmar, autentificar</string>
<string name="msg_ip_master_flags_cesx">Indicativos maestros: certificar, cifrar, firmar</string>
@@ -592,8 +643,8 @@
<string name="msg_ip_merge_public">Incorporando datos importados al juego de claves público existente</string>
<string name="msg_ip_merge_secret">Incorporando datos importados al juego de claves público existente</string>
<string name="msg_ip_subkey">Procesando subclave %s</string>
- <string name="msg_ip_subkey_expired">La subclave expiró el %s</string>
- <string name="msg_ip_subkey_expires">La subclave expira el %s</string>
+ <string name="msg_ip_subkey_expired">La subclave caducó el %s</string>
+ <string name="msg_ip_subkey_expires">La subclave caduca el %s</string>
<string name="msg_ip_subkey_flags_unspecified">Indicativos de subclave: no especificados (se asumen todos)</string>
<string name="msg_ip_subkey_flags_cesa">Indicativos de subclave: certificar, cifrar, firmar, autentificar</string>
<string name="msg_ip_subkey_flags_cesx">Indicativos de subclave: certificar, cifrar, firmar</string>
@@ -686,17 +737,17 @@
<string name="msg_kc_notation_dup">Eliminando certificado de notación redundante</string>
<string name="msg_kc_notation_empty">Eliminando certificado de notación vacía</string>
<string name="msg_kc_sub">Procesando subclave %s</string>
- <string name="msg_kc_sub_bad">Eliminando certificado no válido de vinculación de subclave</string>
+ <string name="msg_kc_sub_bad">Eliminando certificado no vigente de vinculación de subclave</string>
<string name="msg_kc_sub_bad_err">Eliminando certificado defectuoso de vinculación de subclave</string>
<string name="msg_kc_sub_bad_local">Eliminando certificado de vinculación de subclave, con distintivo \"local\"</string>
<string name="msg_kc_sub_bad_keyid">La identificación del publicante de la vinculación de subclave no coincide</string>
<string name="msg_kc_sub_bad_time">Eliminando certificado de vinculación de subclave, con marca de tiempo futura</string>
<string name="msg_kc_sub_bad_type">Tipo de certificado de subclave desconocido: %s</string>
<string name="msg_kc_sub_dup">Eliminando certificado redundante de vinculación de subclave</string>
- <string name="msg_kc_sub_primary_bad">Eliminando certificado de vinculación de subclave debido a un certificado de vinculación principal no válido</string>
+ <string name="msg_kc_sub_primary_bad">Eliminando certificado de vinculación de subclave debido a un certificado de vinculación principal no vigente</string>
<string name="msg_kc_sub_primary_bad_err">Eliminando certificado de vinculación de subclave debido a un certificado de vinculación principal defectuoso</string>
<string name="msg_kc_sub_primary_none">Eliminando certificado de vinculación de subclave debido a un certificado de vinculación principal ausente</string>
- <string name="msg_kc_sub_no_cert">No se encontró ningún certificado válido para %s, eliminándola del juego de claves</string>
+ <string name="msg_kc_sub_no_cert">No se encontró ningún certificado vigente para %s, eliminándola del juego de claves</string>
<string name="msg_kc_sub_revoke_bad_err">Eliminando certificado defectuoso de revocación de subclave</string>
<string name="msg_kc_sub_revoke_bad">Eliminando certificado defectuoso de revocación de subclave</string>
<string name="msg_kc_sub_revoke_dup">Eliminando certificado redundante de revocación de subclave</string>
@@ -722,7 +773,7 @@
<string name="msg_kc_uid_foreign">Eliminando certificado por \'%s\' de identificación de usuario ajeno </string>
<string name="msg_kc_uid_revoke_dup">Eliminando certificado de revocación redundante para la identificación de usuario \'%s\'</string>
<string name="msg_kc_uid_revoke_old">Eliminando certificado de revocación caducado para la identificación de usuario \'%s\'</string>
- <string name="msg_kc_uid_no_cert">No se encontró auto-certificado válido para la identificación de usuario \'%s\', eliminándola del juego de claves</string>
+ <string name="msg_kc_uid_no_cert">No se encontró auto-certificado vigente para la identificación de usuario \'%s\', eliminándola del juego de claves</string>
<string name="msg_kc_uid_remove">Eliminando identificación de usuario \'%s\' no válida</string>
<string name="msg_kc_uid_dup">Eliminando identificaciones de usuario duplicadas \'%s\'. El juego de claves contenía dos de ellas. ¡Esto puede resultar en certificados perdidos!</string>
<string name="msg_kc_uid_warn_encoding">¡La identificación de usuario no se verifica como UTF-8!</string>
@@ -896,6 +947,18 @@
<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 VerifySignedLiteralData operation-->
+ <string name="msg_vl">Comenzando comprobación de firma</string>
+ <string name="msg_vl_error_no_siglist">No hay lista de firmas en los datos literales firmados</string>
+ <string name="msg_vl_error_wrong_key">Mensaje no firmado con una clave correcta</string>
+ <string name="msg_vl_error_missing_literal">No hay carga útil en los datos literales firmados</string>
+ <string name="msg_vl_clear_meta_file">Nombre de fichero: %s</string>
+ <string name="msg_vl_clear_meta_mime">Tipo MIME: %s</string>
+ <string name="msg_vl_clear_meta_time">Fecha de modificación: %s</string>
+ <string name="msg_vl_clear_meta_size">Tamaño de fichero: %s</string>
+ <string name="msg_vl_clear_signature_check">Verificando datos de firma</string>
+ <string name="msg_vl_error_integrity_check">¡Error de comprobación de integridad!</string>
+ <string name="msg_vl_ok">Correcto</string>
<!--Messages for SignEncrypt operation-->
<string name="msg_se">Iniciando operación de firmado/cifrado</string>
<string name="msg_se_input_bytes">Procesando entrada de matriz de bytes</string>
@@ -1007,7 +1070,7 @@
</plurals>
<string name="msg_acc_saved">Cuenta guardada</string>
<string name="msg_download_success">¡Descargado con éxito!</string>
- <string name="msg_download_no_valid_keys">¡No se encontraron clave válidas en el fichero/portapapeles!</string>
+ <string name="msg_download_no_valid_keys">¡No se encontraron claves vigentes en el fichero/portapapeles!</string>
<string name="msg_download_no_pgp_parts">PENDIENTE: ¡plurales!</string>
<plurals name="error_import_non_pgp_part">
<item quantity="one">parte del archivo cargado es un objeto OpenPGP válido pero no una clave OpenPGP</item>
@@ -1037,6 +1100,8 @@
<string name="certs_text">Aquí sólo se muestran auto-certificados validados y certificados validados creados con sus claves.</string>
<string name="section_uids_to_certify">Identificaciones para</string>
<string name="certify_text">Las claves que está importando contienen \"identificaciones\": nombres y correos electrónicos. Para certificación seleccione exactamente aquellas que coinciden con lo que usted esperaba.</string>
+ <string name="certify_fingerprint_text">Compare la huella de validación mostrada, caracter por caracter, con la que se muestra en el dispositivo de su colega.</string>
+ <string name="certify_fingerprint_text2">¿Coinciden las huellas de validación mostradas?</string>
<string name="label_revocation">Razón de la revocación</string>
<string name="label_verify_status">Estado de la verificación</string>
<string name="label_cert_type">Tipo</string>
diff --git a/OpenKeychain/src/main/res/values-et/strings.xml b/OpenKeychain/src/main/res/values-et/strings.xml
index 992d1db91..057eb8e00 100644
--- a/OpenKeychain/src/main/res/values-et/strings.xml
+++ b/OpenKeychain/src/main/res/values-et/strings.xml
@@ -90,6 +90,8 @@
<!--Share-->
<!--Key list-->
<!--Key view-->
+ <!--Key trust-->
+ <!--keybase proof stuff-->
<!--Edit key-->
<!--Create key-->
<!--View key-->
@@ -108,6 +110,7 @@
<!--Promote key-->
<!--Other messages used in OperationLogs-->
<!--Messages for DecryptVerify operation-->
+ <!--Messages for VerifySignedLiteralData operation-->
<!--Messages for SignEncrypt operation-->
<!--Messages for PgpSignEncrypt operation-->
<!--PassphraseCache-->
diff --git a/OpenKeychain/src/main/res/values-eu/strings.xml b/OpenKeychain/src/main/res/values-eu/strings.xml
new file mode 100644
index 000000000..233347bd3
--- /dev/null
+++ b/OpenKeychain/src/main/res/values-eu/strings.xml
@@ -0,0 +1,69 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+ <!--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-->
+ <!--section-->
+ <!--button-->
+ <!--menu-->
+ <!--label-->
+ <!--choice-->
+ <!--key flags-->
+ <!--sentences-->
+ <!--errors
+ no punctuation, all lowercase,
+ they will be put after "error_message", e.g. "Error: file not found"-->
+ <!--errors without preceeding Error:-->
+ <!--results shown after decryption/verification-->
+ <!--Add keys-->
+ <!--progress dialogs, usually ending in '…'-->
+ <!--action strings-->
+ <!--key bit length selections-->
+ <!--elliptic curve names-->
+ <!--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>
+ <string name="key_curve_bp_p512">"Brainpool P-512"</string>-->
+ <!--compression-->
+ <!--Help-->
+ <!--Import-->
+ <!--Generic result toast-->
+ <!--Import result toast-->
+ <!--Delete result toast-->
+ <!--Certify result toast-->
+ <!--Intent labels-->
+ <!--Remote API-->
+ <!--Share-->
+ <!--Key list-->
+ <!--Key view-->
+ <!--Key trust-->
+ <!--keybase proof stuff-->
+ <!--Edit key-->
+ <!--Create key-->
+ <!--View key-->
+ <!--Navigation Drawer-->
+ <!--hints-->
+ <!--certs-->
+ <!--LogType log messages. Errors should have _ERROR_ in their name and end with a !-->
+ <!--Import Public log entries-->
+ <!--Import Secret log entries-->
+ <!--Keyring Canonicalization log entries-->
+ <!--Keyring merging log entries-->
+ <!--createSecretKeyRing-->
+ <!--modifySecretKeyRing-->
+ <!--Consolidate-->
+ <!--Edit Key (higher level than modify)-->
+ <!--Promote key-->
+ <!--Other messages used in OperationLogs-->
+ <!--Messages for DecryptVerify operation-->
+ <!--Messages for VerifySignedLiteralData operation-->
+ <!--Messages for SignEncrypt operation-->
+ <!--Messages for PgpSignEncrypt operation-->
+ <!--PassphraseCache-->
+ <!--First Time-->
+ <!--unsorted-->
+ <!--Passphrase wizard-->
+ <!--TODO: rename all the things!-->
+ <!--<string name="enter_passphrase_twice">Enter passphrase twice</string>-->
+ <!--<string name="nfc_text">Please place a NFC tag near your device</string>-->
+</resources>
diff --git a/OpenKeychain/src/main/res/values-fi/strings.xml b/OpenKeychain/src/main/res/values-fi/strings.xml
index 468d7b835..804383637 100644
--- a/OpenKeychain/src/main/res/values-fi/strings.xml
+++ b/OpenKeychain/src/main/res/values-fi/strings.xml
@@ -214,6 +214,8 @@
<!--Share-->
<!--Key list-->
<!--Key view-->
+ <!--Key trust-->
+ <!--keybase proof stuff-->
<!--Edit key-->
<!--Create key-->
<!--View key-->
@@ -232,6 +234,7 @@
<!--Promote key-->
<!--Other messages used in OperationLogs-->
<!--Messages for DecryptVerify operation-->
+ <!--Messages for VerifySignedLiteralData operation-->
<!--Messages for SignEncrypt operation-->
<!--Messages for PgpSignEncrypt operation-->
<!--PassphraseCache-->
diff --git a/OpenKeychain/src/main/res/values-fr/strings.xml b/OpenKeychain/src/main/res/values-fr/strings.xml
index 6d0733625..50bd53921 100644
--- a/OpenKeychain/src/main/res/values-fr/strings.xml
+++ b/OpenKeychain/src/main/res/values-fr/strings.xml
@@ -39,6 +39,9 @@
<string name="title_keys">Clefs</string>
<!--section-->
<string name="section_user_ids">identités</string>
+ <string name="section_should_you_trust">Devriez-vous faire confiance à cette clef ?</string>
+ <string name="section_proof_details">Vérification de preuve</string>
+ <string name="section_cloud_evidence">Preuve provenant du nuage</string>
<string name="section_keys">Sous-clefs</string>
<string name="section_cloud_search">Recherche nuagique</string>
<string name="section_general">Général</string>
@@ -71,6 +74,8 @@
<string name="btn_export_to_server">Téléverser vers le serveur de clefs</string>
<string name="btn_next">Suivant</string>
<string name="btn_back">Retour</string>
+ <string name="btn_no">Non</string>
+ <string name="btn_match">Les empreintes correspondent</string>
<string name="btn_lookup_key">Rechercher la clef</string>
<string name="btn_share_encrypted_signed">Chiffrer et partager le message</string>
<string name="btn_view_cert_key">Voir la clef de certification</string>
@@ -90,6 +95,7 @@
<string name="menu_create_key">Créer ma clef</string>
<string name="menu_import_existing_key">Importer depuis un fichier</string>
<string name="menu_search">Rechercher</string>
+ <string name="menu_nfc_preferences">Paramètres NFC</string>
<string name="menu_beam_preferences">Paramètres Beam</string>
<string name="menu_key_edit_cancel">Annuler</string>
<string name="menu_encrypt_to">Chiffrer vers...</string>
@@ -98,6 +104,7 @@
<string name="menu_search_cloud">Rechercher dans le nuage</string>
<string name="menu_export_all_keys">Exporter toutes les clefs</string>
<string name="menu_advanced">Afficher les infos avancées</string>
+ <string name="menu_certify_fingerprint">Vérifier par comparaison d\'empreintes</string>
<!--label-->
<string name="label_message">Message</string>
<string name="label_file">Fichier</string>
@@ -249,7 +256,8 @@
<string name="error_could_not_extract_private_key">impossible d\'extraire la clef privée</string>
<!--errors without preceeding Error:-->
<string name="error_jelly_bean_needed">Il vous faut Android 4.1 pour utiliser la fonction Beam NFC d\'Android !</string>
- <string name="error_nfc_needed">La NFC n\'est pas proposée sur votre appareil !</string>
+ <string name="error_nfc_needed">La NFC doit être activée !</string>
+ <string name="error_beam_needed">Beam doit être activé !</string>
<string name="error_nothing_import">Aucune clef trouvée !</string>
<string name="error_contacts_key_id_missing">Échec lors de la récupération de l\'ID de clef à partir des contacts !</string>
<string name="error_generic_report_bug">Une erreur générique est survenue, veuillez créer un nouveau rapport de bogue pour OpenKeychain.</string>
@@ -432,7 +440,6 @@
<string name="intent_send_encrypt">Chiffrer avec OpenKeychain</string>
<string name="intent_send_decrypt">Déchiffrer avec OpenKeychain</string>
<!--Remote API-->
- <string name="api_no_apps">Aucune application enregistrée !\n\nUne liste d\'applications tierces prises en charge peut être trouvée dans l\'« Aide » !</string>
<string name="api_settings_show_info">Afficher les informations avancées</string>
<string name="api_settings_hide_info">Masquer les informations avancées</string>
<string name="api_settings_show_advanced">Afficher les paramètres avancés</string>
@@ -489,6 +496,7 @@
<string name="key_view_tab_share">Partager</string>
<string name="key_view_tab_keys">Sous-clefs</string>
<string name="key_view_tab_certs">Certificats</string>
+ <string name="key_view_tab_keybase">Keybase.io</string>
<string name="user_id_info_revoked_title">Révoquée</string>
<string name="user_id_info_revoked_text">Cette identité a été révoquée par le propriétaire de la clef. Elle n\'est plus valide.</string>
<string name="user_id_info_certified_title">Certifié</string>
@@ -497,6 +505,43 @@
<string name="user_id_info_uncertified_text">Cette identité n\'a pas encore été certifiée. Vous ne pouvez pas être sûr que l\'identité correspond vraiment à une personne spécifique.</string>
<string name="user_id_info_invalid_title">Invalide</string>
<string name="user_id_info_invalid_text">Quelque chose ne va pas avec cette identité !</string>
+ <!--Key trust-->
+ <string name="key_trust_already_verified">Vous avez déjà certifié cette clef !</string>
+ <string name="key_trust_it_is_yours">C\'est une de vos clefs !</string>
+ <string name="key_trust_maybe">Cette clef n\'est ni révoquée, ni expirée.\nVous ne l\'avez pas certifiée, mais vous pourriez décider de lui faire confiance.</string>
+ <string name="key_trust_revoked">Cette clef a été révoquée par son propriétaire. Vous ne devriez pas lui faire confiance.</string>
+ <string name="key_trust_expired">Cette clef est expirée. Vous ne devriez pas lui faire confiance.</string>
+ <string name="key_trust_old_keys">Vous pourriez l\'utiliser pour déchiffrer un ancien message datant de la période de validité de la clef.</string>
+ <string name="key_trust_no_cloud_evidence">Aucune preuve de fiabilité provenant du nuage pour cette clef.</string>
+ <string name="key_trust_start_cloud_search">Lancer la recherche</string>
+ <string name="key_trust_results_prefix">Keybase.io offre des « preuves » affirmant que le propriétaire de cette clef : </string>
+ <!--keybase proof stuff-->
+ <string name="keybase_narrative_twitter">Publie vers Twitter en tant que</string>
+ <string name="keybase_narrative_github">Est connu sur GitHub en tant que</string>
+ <string name="keybase_narrative_dns">Contrôle le/les nom(s) de domaine</string>
+ <string name="keybase_narrative_web_site">Peut publier vers le/les site(s) Web</string>
+ <string name="keybase_narrative_reddit">Publie sur Reddit en tant que</string>
+ <string name="keybase_narrative_coinbase">Est connu sur Coinbase en tant que</string>
+ <string name="keybase_narrative_hackernews">Publie sur « Hacker News » en tant que</string>
+ <string name="keybase_narrative_unknown">Type de preuve inconnu</string>
+ <string name="keybase_proof_failure">Malheureusement cette preuve ne peut pas être vérifiée.</string>
+ <string name="keybase_unknown_proof_failure">Problème inconnu avec le vérificateur de preuve</string>
+ <string name="keybase_key_mismatch">L\'empreinte de clef ne correspondant pas à celle du billet de preuve</string>
+ <string name="keybase_dns_query_failure">Échec lors de la récupération de l\'enregistrement DNS TXT</string>
+ <string name="keybase_no_prover_found">Aucun vérificateur de preuve trouvé pour</string>
+ <string name="keybase_message_payload_mismatch">Le billet de preuve déchiffré ne correspond pas à la valeur attendue</string>
+ <string name="keybase_proof_succeeded">Cette preuve a été vérifié !</string>
+ <string name="keybase_a_post">Un billet</string>
+ <string name="keybase_fetched_from">récupéré de</string>
+ <string name="keybase_for_the_domain">pour le domaine</string>
+ <string name="keybase_contained_signature">contient un message qui a seulement pu être créé par le propriétaire de cette clef.</string>
+ <string name="keybase_twitter_proof">Un gazouillis</string>
+ <string name="keybase_dns_proof">Un enregistrement DNS TXT</string>
+ <string name="keybase_web_site_proof">Un fichier texte</string>
+ <string name="keybase_github_proof">Un gist</string>
+ <string name="keybase_reddit_proof">Un fichier JSON</string>
+ <string name="keybase_reddit_attribution">attribué par Reddit à</string>
+ <string name="keybase_verify">Vérifier</string>
<!--Edit key-->
<string name="edit_key_action_change_passphrase">Changer la phrase de passe</string>
<string name="edit_key_action_add_identity">Ajouter une identité</string>
@@ -532,8 +577,12 @@
<string name="create_key_hint_full_name">Nom complet, p. ex. Marc-Olivier Lagacé</string>
<string name="create_key_edit">Changer la configuration de la clef</string>
<!--View key-->
- <string name="view_key_revoked">Cette clef a été révoquée !</string>
- <string name="view_key_expired">Cette clef est expirée !</string>
+ <string name="view_key_revoked">Révoquée : la clef ne doit plus être utilisée !</string>
+ <string name="view_key_expired">Expirée : le contact doit prolonger la validité de la clef !</string>
+ <string name="view_key_expired_secret">Expirée : vous pouvez prolonger la validité de la clef en la modifiant !</string>
+ <string name="view_key_my_key">Ma clef</string>
+ <string name="view_key_verified">Clef vérifiée</string>
+ <string name="view_key_unverified">Non vérifiée : balayez le code QR pour vérifier la clef !</string>
<!--Navigation Drawer-->
<string name="nav_keys">Clefs</string>
<string name="nav_encrypt_decrypt">Chiffrer/déchiffrer</string>
@@ -896,6 +945,8 @@
<string name="msg_dc_trail_sym">Des données traînantes chiffrées symétriquement ont été rencontrées</string>
<string name="msg_dc_trail_unknown">Des données traînantes de type inconnu ont été rencontrées</string>
<string name="msg_dc_unlocking">Déverrouillage de la clef secrète</string>
+ <!--Messages for VerifySignedLiteralData operation-->
+ <string name="msg_vl">Lancement de la vérification de la signature</string>
<!--Messages for SignEncrypt operation-->
<string name="msg_se">Début de l\'opération de signature/chiffrement</string>
<string name="msg_se_input_bytes">Traitement de l\'entrée du tableau de bytes</string>
@@ -1037,6 +1088,8 @@
<string name="certs_text">Seuls les auto-certificats et les certificats validés créés avec vos clefs sont affichés ici.</string>
<string name="section_uids_to_certify">Identités pour</string>
<string name="certify_text">Les clefs que vous importez contiennent des « identités » : des noms et des adresses courriel. Choisissez exactement ceux qui correspondent à ce que vous attendiez.</string>
+ <string name="certify_fingerprint_text">Comparez l\'empreinte affichée, caractère par caractère, à celle affichée sur l\'appareil de l\'autre personne.</string>
+ <string name="certify_fingerprint_text2">Est-ce que les empreintes affichées correspondent ?</string>
<string name="label_revocation">Raison de la révocation</string>
<string name="label_verify_status">État de vérification</string>
<string name="label_cert_type">Type</string>
@@ -1058,6 +1111,7 @@
<string name="error_multi_not_supported">L\'enregistrement des fichiers multiples n\'est pas pris en charge. Ceci est actuellement une limitation d\'Android.</string>
<string name="key_colon">Clef :</string>
<string name="exchange_description">Pour démarrer un échange de clef, choisir le nombre de participants du côté droit, puis cliquer sur le bouton « Démarrer l\'échange ».\n\Deux questions de plus seront posées pour s\'assurer que seuls les bons participants sont dans l\'échange et que les empreintes sont correctes.</string>
+ <string name="btn_start_exchange">Démarrer l\'échange</string>
<string name="user_id_none"><![CDATA[<none>]]></string>
<!--Passphrase wizard-->
<!--TODO: rename all the things!-->
diff --git a/OpenKeychain/src/main/res/values-is/strings.xml b/OpenKeychain/src/main/res/values-is/strings.xml
index ef0a0ce94..233347bd3 100644
--- a/OpenKeychain/src/main/res/values-is/strings.xml
+++ b/OpenKeychain/src/main/res/values-is/strings.xml
@@ -36,6 +36,8 @@
<!--Share-->
<!--Key list-->
<!--Key view-->
+ <!--Key trust-->
+ <!--keybase proof stuff-->
<!--Edit key-->
<!--Create key-->
<!--View key-->
@@ -54,6 +56,7 @@
<!--Promote key-->
<!--Other messages used in OperationLogs-->
<!--Messages for DecryptVerify operation-->
+ <!--Messages for VerifySignedLiteralData operation-->
<!--Messages for SignEncrypt operation-->
<!--Messages for PgpSignEncrypt operation-->
<!--PassphraseCache-->
diff --git a/OpenKeychain/src/main/res/values-it/strings.xml b/OpenKeychain/src/main/res/values-it/strings.xml
index 4c73ebc72..d741f7111 100644
--- a/OpenKeychain/src/main/res/values-it/strings.xml
+++ b/OpenKeychain/src/main/res/values-it/strings.xml
@@ -240,7 +240,6 @@ Non potrai annullare!</string>
<string name="error_could_not_extract_private_key">impossibile estrarre la chiave privata</string>
<!--errors without preceeding Error:-->
<string name="error_jelly_bean_needed">Devi avere Android 4.1 per usare Android NFC Beam!</string>
- <string name="error_nfc_needed">NFC non disponibile nel tuo dispositivo!</string>
<string name="error_nothing_import">Nessuna chiave trovata!</string>
<string name="error_contacts_key_id_missing">Recupero dell\'ID della chiave dai contatti fallito!</string>
<string name="error_generic_report_bug">Si è verificato un errore generico, si prega di creare una nuova segnalazione di errore per OpenKeychain.</string>
@@ -388,7 +387,6 @@ Non potrai annullare!</string>
<string name="intent_send_encrypt">Codifica con OpenKeychain</string>
<string name="intent_send_decrypt">Decodifica con OpenKeychain</string>
<!--Remote API-->
- <string name="api_no_apps">Nessuna applicazione registrata!\n\nUna lista di applicazioni di terze parti supportate è disponibile in \'Aiuto\'!</string>
<string name="api_settings_show_info">Mostra informazioni dettagliate</string>
<string name="api_settings_hide_info">Nascondi informazioni dettagliate</string>
<string name="api_settings_show_advanced">Mostra impostazioni avanzate</string>
@@ -451,6 +449,8 @@ Permetti accesso?\n\nATTENZIONE: Se non sai perche\' questo schermata e\' appars
<string name="user_id_info_uncertified_text">Questa identità non è stata ancora certificata. Non puoi esser sicuro che l\'identità corrisponda veramente ad una specifica persona.</string>
<string name="user_id_info_invalid_title">Non valido</string>
<string name="user_id_info_invalid_text">C\'è qualcosa che non va con questa identità!</string>
+ <!--Key trust-->
+ <!--keybase proof stuff-->
<!--Edit key-->
<string name="edit_key_action_change_passphrase">Cambia Frase Di Accesso</string>
<string name="edit_key_action_add_identity">Aggiungi Identità</string>
@@ -486,8 +486,6 @@ Permetti accesso?\n\nATTENZIONE: Se non sai perche\' questo schermata e\' appars
<string name="create_key_hint_full_name">Nome completo, es: Mario Rossi</string>
<string name="create_key_edit">Cambia configurazione della chiave</string>
<!--View key-->
- <string name="view_key_revoked">Questa chiave è stata revocata!</string>
- <string name="view_key_expired">Questa chiave è scaduta</string>
<!--Navigation Drawer-->
<string name="nav_keys">Chiavi</string>
<string name="nav_apps">Apps</string>
@@ -709,6 +707,7 @@ Permetti accesso?\n\nATTENZIONE: Se non sai perche\' questo schermata e\' appars
<string name="msg_dc">Inizio operazione di decodifica...</string>
<string name="msg_dc_sym_skip">Dati simmetrici non permessi, proseguo...</string>
<string name="msg_dc_unlocking">Sblocco chiave segreta</string>
+ <!--Messages for VerifySignedLiteralData operation-->
<!--Messages for SignEncrypt operation-->
<!--Messages for PgpSignEncrypt operation-->
<string name="msg_crt_success">Identità certificata correttamente</string>
diff --git a/OpenKeychain/src/main/res/values-ja/strings.xml b/OpenKeychain/src/main/res/values-ja/strings.xml
index 936440893..c5318db36 100644
--- a/OpenKeychain/src/main/res/values-ja/strings.xml
+++ b/OpenKeychain/src/main/res/values-ja/strings.xml
@@ -71,6 +71,8 @@
<string name="btn_export_to_server">鍵サーバへアップロード</string>
<string name="btn_next">次</string>
<string name="btn_back">戻る</string>
+ <string name="btn_no">なし</string>
+ <string name="btn_match">指紋が一致</string>
<string name="btn_lookup_key">鍵検出</string>
<string name="btn_share_encrypted_signed">暗号化してメッセージを共有</string>
<string name="btn_view_cert_key">検証した鍵を見る</string>
@@ -90,6 +92,7 @@
<string name="menu_create_key">自分の鍵の生成</string>
<string name="menu_import_existing_key">ファイルからインポート</string>
<string name="menu_search">検索</string>
+ <string name="menu_nfc_preferences">NFC設定</string>
<string name="menu_beam_preferences">Beamの設定</string>
<string name="menu_key_edit_cancel">キャンセル</string>
<string name="menu_encrypt_to">暗号化...</string>
@@ -98,6 +101,7 @@
<string name="menu_search_cloud">クラウドを検索</string>
<string name="menu_export_all_keys">すべての鍵のエクスポート</string>
<string name="menu_advanced">詳細情報を表示</string>
+ <string name="menu_certify_fingerprint">指紋比較による検証</string>
<!--label-->
<string name="label_message">メッセージ</string>
<string name="label_file">ファイル</string>
@@ -257,7 +261,8 @@
<string name="error_could_not_extract_private_key">秘密鍵を取り出すことができません</string>
<!--errors without preceeding Error:-->
<string name="error_jelly_bean_needed">Android NFC Beam機能を使うにはAndroid 4.1 が必要です!</string>
- <string name="error_nfc_needed">あなたのデバイスにはNFCが存在しません!</string>
+ <string name="error_nfc_needed">NFCを有効にしてください!</string>
+ <string name="error_beam_needed">Beamを有効にしてください!</string>
<string name="error_nothing_import">鍵が見当りません!</string>
<string name="error_contacts_key_id_missing">連絡帳から鍵IDの回収が失敗しました!</string>
<string name="error_generic_report_bug">一般エラーが発生しました、この新しいバグの情報をOpenKeychainプロジェクトに送ってください</string>
@@ -426,9 +431,6 @@
<string name="intent_send_encrypt">OpenKeychainで暗号化</string>
<string name="intent_send_decrypt">OpenKeychainで復号化</string>
<!--Remote API-->
- <string name="api_no_apps">未登録のアプリです!
-
-\'ヘルプ\'のサードパーティ製アプリケーションのサポートリストにあるかを見てください!</string>
<string name="api_settings_show_info">詳細情報を表示</string>
<string name="api_settings_hide_info">詳細情報を非表示</string>
<string name="api_settings_show_advanced">拡張設定を表示</string>
@@ -497,6 +499,8 @@
<string name="user_id_info_uncertified_text">このIDはまだ検証されていません。IDが本当に特定の人に対応している場合を、あなたは確認することができません。</string>
<string name="user_id_info_invalid_title">無効</string>
<string name="user_id_info_invalid_text">このIDではなにかしら問題があります!</string>
+ <!--Key trust-->
+ <!--keybase proof stuff-->
<!--Edit key-->
<string name="edit_key_action_change_passphrase">パスフレーズの変更</string>
<string name="edit_key_action_add_identity">ユーザIDの追加</string>
@@ -532,8 +536,12 @@
<string name="create_key_hint_full_name">フルネーム、例えば Max Mustermann</string>
<string name="create_key_edit">鍵の設定変更</string>
<!--View key-->
- <string name="view_key_revoked">この鍵は破棄されています!</string>
- <string name="view_key_expired">この鍵は期限切れです!</string>
+ <string name="view_key_revoked">破棄: 鍵はもう使われません!</string>
+ <string name="view_key_expired">期限切れ: この連絡先は鍵の妥当性を拡張する必要があります!</string>
+ <string name="view_key_expired_secret">期限切れ: 編集で鍵の妥当性を拡張することができます!</string>
+ <string name="view_key_my_key">自分の鍵</string>
+ <string name="view_key_verified">検証済みの鍵</string>
+ <string name="view_key_unverified">未検証: QRコードをスキャンして鍵を検証!</string>
<!--Navigation Drawer-->
<string name="nav_keys">鍵</string>
<string name="nav_encrypt_decrypt">暗号化/復号化</string>
@@ -889,6 +897,7 @@
<string name="msg_dc_trail_sym">追跡で遭遇、対称暗号化されたデータ</string>
<string name="msg_dc_trail_unknown">追跡で未知のタイプのデータに遭遇</string>
<string name="msg_dc_unlocking">秘密鍵のロック解除</string>
+ <!--Messages for VerifySignedLiteralData operation-->
<!--Messages for SignEncrypt operation-->
<string name="msg_se">署名/暗号化操作を開始します</string>
<string name="msg_se_input_bytes">バイト配列からの入力処理中</string>
@@ -1023,6 +1032,8 @@
<string name="certs_text">あなたの検証された自己証明とあなたの鍵で生成された証明がここに表示されます</string>
<string name="section_uids_to_certify">ユーザID</string>
<string name="certify_text">インポートした鍵には\"アイデンティティ\": 名前とメールアドレス を含みます。正確に期待したものと一致しているか認定されているものを選択します。</string>
+ <string name="certify_fingerprint_text">表示している指紋を、文字対文字で、あなたのパートナーの表示しているものと比較</string>
+ <string name="certify_fingerprint_text2">表示している指紋は一致しましたか?</string>
<string name="label_revocation">破棄の理由</string>
<string name="label_verify_status">検証ステータス</string>
<string name="label_cert_type">種別</string>
@@ -1045,6 +1056,7 @@
<string name="error_multi_not_supported">複数ファイルの保存はサポートされていません。これは現在のAndroidでの制限です。</string>
<string name="key_colon">鍵:</string>
<string name="exchange_description">鍵交換の開始は、右側の参加者の番号を選択し、その後、\"交換開始\"ボタンを推します。\n\n2つ以上の質問で交換にいる右の参加者とその指紋が正しいかを確認してください。</string>
+ <string name="btn_start_exchange">交換開始</string>
<string name="user_id_none"><![CDATA[<none>]]></string>
<!--Passphrase wizard-->
<!--TODO: rename all the things!-->
diff --git a/OpenKeychain/src/main/res/values-nl/strings.xml b/OpenKeychain/src/main/res/values-nl/strings.xml
index 6a7f53e35..34b8f1627 100644
--- a/OpenKeychain/src/main/res/values-nl/strings.xml
+++ b/OpenKeychain/src/main/res/values-nl/strings.xml
@@ -39,6 +39,9 @@
<string name="title_keys">Sleutels</string>
<!--section-->
<string name="section_user_ids">Identiteiten</string>
+ <string name="section_should_you_trust">Zou je deze sleutel vertrouwen?</string>
+ <string name="section_proof_details">Bewijs van verificatie</string>
+ <string name="section_cloud_evidence">Bewijs van de cloud</string>
<string name="section_keys">Subsleutels</string>
<string name="section_cloud_search">Cloud zoeken</string>
<string name="section_general">Algemeen</string>
@@ -71,6 +74,8 @@
<string name="btn_export_to_server">Upload Naar Sleutelserver</string>
<string name="btn_next">Volgende</string>
<string name="btn_back">Terug</string>
+ <string name="btn_no">Nee</string>
+ <string name="btn_match">Vingerafdrukken komen overeen</string>
<string name="btn_lookup_key">Opzoeksleutel</string>
<string name="btn_share_encrypted_signed">Bericht versleutelen en delen</string>
<string name="btn_view_cert_key">Toon certificatiesleutel</string>
@@ -90,6 +95,7 @@
<string name="menu_create_key">Mijn sleutel aanmaken</string>
<string name="menu_import_existing_key">Importeren van bestand</string>
<string name="menu_search">Zoeken</string>
+ <string name="menu_nfc_preferences">NFC-instellingen</string>
<string name="menu_beam_preferences">Beam-instellingen</string>
<string name="menu_key_edit_cancel">Annuleren</string>
<string name="menu_encrypt_to">Versleutelen naar…</string>
@@ -98,6 +104,7 @@
<string name="menu_search_cloud">Zoeken</string>
<string name="menu_export_all_keys">Alle sleutels exporteren</string>
<string name="menu_advanced">Geavanceerde info tonen</string>
+ <string name="menu_certify_fingerprint">Verifiëren door vingerafdrukken te vergelijken</string>
<!--label-->
<string name="label_message">Bericht</string>
<string name="label_file">Bestand</string>
@@ -249,7 +256,8 @@
<string name="error_could_not_extract_private_key">kan privésleutel niet uitpakken</string>
<!--errors without preceeding Error:-->
<string name="error_jelly_bean_needed">U heeft minstens Android 4.1 nodig om Androids NFC Beam eigenschap te gebruiken!</string>
- <string name="error_nfc_needed">Uw apparaat biedt geen ondersteuning voor NFC</string>
+ <string name="error_nfc_needed">NFC moet aangezet zijn!</string>
+ <string name="error_beam_needed">Beam moet aangezet zijn!</string>
<string name="error_nothing_import">Geen sleutels gevonden!</string>
<string name="error_contacts_key_id_missing">Sleutel-ID van contacten ophalen mislukt!</string>
<string name="error_generic_report_bug">Een algemene fout is opgetreden, gelieve een nieuw bug-verslag te maken voor OpenKeychain.</string>
@@ -432,7 +440,6 @@
<string name="intent_send_encrypt">Codeer met OpenKeychain</string>
<string name="intent_send_decrypt">Decodeer met OpenKeychain</string>
<!--Remote API-->
- <string name="api_no_apps">Geen geregistreerde apps!\n\nEen lijst van ondersteunde derde-partij applicaties kan gevonden worden in \'Help\'!</string>
<string name="api_settings_show_info">Toon geavanceerde informatie</string>
<string name="api_settings_hide_info">Verberg geavanceerde informatie</string>
<string name="api_settings_show_advanced">Toon geavanceerde instellingen</string>
@@ -489,6 +496,7 @@
<string name="key_view_tab_share">Delen</string>
<string name="key_view_tab_keys">Subsleutels</string>
<string name="key_view_tab_certs">Certificaten</string>
+ <string name="key_view_tab_keybase">Keybase.io</string>
<string name="user_id_info_revoked_title">Ingetrokken</string>
<string name="user_id_info_revoked_text">Deze identiteit is door de sleuteleigenaar ingetrokken. Ze is niet langer geldig.</string>
<string name="user_id_info_certified_title">Gecertificeerd</string>
@@ -497,6 +505,45 @@
<string name="user_id_info_uncertified_text">Deze identiteit is nog niet gecertificeerd. Je kan niet zeker zijn dat deze identiteit echt overeenkomt met een bepaald persoon.</string>
<string name="user_id_info_invalid_title">Ongeldig</string>
<string name="user_id_info_invalid_text">Er is iets mis met deze identiteit!</string>
+ <!--Key trust-->
+ <string name="key_trust_already_verified">Je hebt deze sleutel al gecertificeerd!</string>
+ <string name="key_trust_it_is_yours">Dit is een van jouw sleutels!</string>
+ <string name="key_trust_maybe">Deze sleutel is ingetrokken noch verlopen.\nJe hebt ze niet gecertificeerd, maar je kan kiezen ze te vertrouwen.</string>
+ <string name="key_trust_revoked">Deze sleutel is door de eigenaar ingetrokken. Je zou ze niet moeten vertrouwen.</string>
+ <string name="key_trust_expired">Deze sleutel is verlopen. Je zou ze niet moeten vertrouwen.</string>
+ <string name="key_trust_old_keys">Het kan oké zijn deze sleutel te gebruiken om een oud bericht te ontsleutelen van een moment waarop de sleutel nog geldig was.</string>
+ <string name="key_trust_no_cloud_evidence">Geen bewijs van de cloud voor de betrouwbaarheid van deze sleutel.</string>
+ <string name="key_trust_start_cloud_search">Zoeken starten</string>
+ <string name="key_trust_results_prefix">Keybase.io geeft “bewijzen” die stellen dat de eigenaar van deze sleutel:</string>
+ <!--keybase proof stuff-->
+ <string name="keybase_narrative_twitter">Post op Twitter als</string>
+ <string name="keybase_narrative_github">Bekend is op GitHub als</string>
+ <string name="keybase_narrative_dns">De volgende domeinnamen beheert</string>
+ <string name="keybase_narrative_web_site">Kan posten op de website(s)</string>
+ <string name="keybase_narrative_reddit">Post op Reddit als</string>
+ <string name="keybase_narrative_coinbase">Bekend is op Coinbase als</string>
+ <string name="keybase_narrative_hackernews">Post op Hacker News als</string>
+ <string name="keybase_narrative_unknown">Onbekend bewijstype</string>
+ <string name="keybase_proof_failure">Helaas kan dit bewijs niet geverifieerd worden.</string>
+ <string name="keybase_unknown_proof_failure">Niet-herkend probleem met de bewijschecker</string>
+ <string name="keybase_problem_fetching_evidence">Probleem met bewijs van bewijs</string>
+ <string name="keybase_key_mismatch">Sleutelvingerafdruk komt niet overeen met die in bewijspost</string>
+ <string name="keybase_dns_query_failure">DNS TXT record ophalen mislukt</string>
+ <string name="keybase_no_prover_found">Geen bewijschecker gevonden voor</string>
+ <string name="keybase_message_payload_mismatch">Ontsleuteld bewijs komt niet overeen met verwachte waarde</string>
+ <string name="keybase_message_fetching_data">Bezig met ophalen van bewijs van bewijs</string>
+ <string name="keybase_proof_succeeded">Dit bewijs is geverifieerd!</string>
+ <string name="keybase_a_post">Een post</string>
+ <string name="keybase_fetched_from">opgehaald van</string>
+ <string name="keybase_for_the_domain">voor het domein</string>
+ <string name="keybase_contained_signature">bevat een bericht dat enkel gemaakt kan zijn door de eigenaar van deze sleutel.</string>
+ <string name="keybase_twitter_proof">Een tweet</string>
+ <string name="keybase_dns_proof">Een DNS TXT record</string>
+ <string name="keybase_web_site_proof">Een tekstbestand</string>
+ <string name="keybase_github_proof">Een gist</string>
+ <string name="keybase_reddit_proof">Een JSON-bestand</string>
+ <string name="keybase_reddit_attribution">toegeschreven door Reddit aan</string>
+ <string name="keybase_verify">Verifiëren</string>
<!--Edit key-->
<string name="edit_key_action_change_passphrase">Wachtwoord wijzigen</string>
<string name="edit_key_action_add_identity">Identiteit toevoegen</string>
@@ -532,8 +579,12 @@
<string name="create_key_hint_full_name">Volledige naam, bv. Max Mustermann</string>
<string name="create_key_edit">Sleutelconfiguratie wijzigen</string>
<!--View key-->
- <string name="view_key_revoked">Deze sleutel is ingetrokken!</string>
- <string name="view_key_expired">Deze sleutel is verlopen!</string>
+ <string name="view_key_revoked">Ingetrokken: sleutel mag niet meer gebruikt worden!</string>
+ <string name="view_key_expired">Verlopen: het contact moet de geldigheid van de sleutels verlengen!</string>
+ <string name="view_key_expired_secret">Verlopen: je kan de geldigheid van de sleutels verlengen door ze te bewerken!</string>
+ <string name="view_key_my_key">Mijn sleutel</string>
+ <string name="view_key_verified">Geverifieerde sleutels</string>
+ <string name="view_key_unverified">Niet geverifieerd: scan QR-code om de sleutel te verifiëren!</string>
<!--Navigation Drawer-->
<string name="nav_keys">Sleutels</string>
<string name="nav_encrypt_decrypt">Versleutelen/Ontsleutelen</string>
@@ -896,6 +947,18 @@
<string name="msg_dc_trail_sym">Achterlopende, symmetrisch versleutelde gegevens tegengekomen</string>
<string name="msg_dc_trail_unknown">Achterlopende gegevens van onbekend type tegengekomen</string>
<string name="msg_dc_unlocking">Bezig met ontgrendelen van geheime sleutel</string>
+ <!--Messages for VerifySignedLiteralData operation-->
+ <string name="msg_vl">Ondertekeningscontrole wordt gestart</string>
+ <string name="msg_vl_error_no_siglist">Geen ondertekeningslijst in ondertekende letterlijke gegevens</string>
+ <string name="msg_vl_error_wrong_key">Bericht niet ondertekend met de juiste sleutel</string>
+ <string name="msg_vl_error_missing_literal">Geen payload in ondertekende letterlijke gegevens</string>
+ <string name="msg_vl_clear_meta_file">Bestandsnaam: %s</string>
+ <string name="msg_vl_clear_meta_mime">MIME-type: %s</string>
+ <string name="msg_vl_clear_meta_time">Wijzigingstijd: %s</string>
+ <string name="msg_vl_clear_meta_size">Bestandsgrootte: %s</string>
+ <string name="msg_vl_clear_signature_check">Bezig met verifiëren van ondertekeningsgegevens</string>
+ <string name="msg_vl_error_integrity_check">Fout bij integriteitscontrole!</string>
+ <string name="msg_vl_ok">Oké</string>
<!--Messages for SignEncrypt operation-->
<string name="msg_se">Ondertekening/versleuteling wordt gestart</string>
<string name="msg_se_input_bytes">Bezig met verwerken van input van byte array</string>
@@ -1037,6 +1100,8 @@
<string name="certs_text">Enkel gevalideerde self-certificaten en gevalideerde certificaten gemaakt met jouw sleutels worden hier weergegeven.</string>
<string name="section_uids_to_certify">Identiteiten voor</string>
<string name="certify_text">De sleutels die je importeert bevatten \'identiteiten\': namen en e-mailadressen. Selecteer precies die voor certificatie die overeenkomen met wat je had verwacht.</string>
+ <string name="certify_fingerprint_text">Vergelijk de weergegeven vingerafdruk, karakter per karakter, met die weergegeven op het toestel van je partner.</string>
+ <string name="certify_fingerprint_text2">Komen de weergegeven vingerafdrukken overeen?</string>
<string name="label_revocation">Intrek Reden</string>
<string name="label_verify_status">Verificatie Status</string>
<string name="label_cert_type">Type</string>
@@ -1058,6 +1123,7 @@
<string name="error_multi_not_supported">Opslaan van meerdere bestanden wordt niet ondersteund. Dit is een beperking van Android.</string>
<string name="key_colon">Sleutel:</string>
<string name="exchange_description">Selecteer om een sleuteluitwisseling te starten het aantal deelnemers aan de rechterkant, en klik vervolgens op de knop \'Start uitwisseling\'.\n\nJe zal twee vragne gesteld worden om zeker te zijn dat enkel de juiste deelnemers zich in de uitwisseling bevinden en dat hun vingerafdrukken correct zijn.</string>
+ <string name="btn_start_exchange">Uitwisseling starten</string>
<string name="user_id_none"><![CDATA[<none>]]></string>
<!--Passphrase wizard-->
<!--TODO: rename all the things!-->
diff --git a/OpenKeychain/src/main/res/values-pl/strings.xml b/OpenKeychain/src/main/res/values-pl/strings.xml
index bf15bfff9..3dc6a2a35 100644
--- a/OpenKeychain/src/main/res/values-pl/strings.xml
+++ b/OpenKeychain/src/main/res/values-pl/strings.xml
@@ -9,16 +9,18 @@
<string name="title_encrypt_text">Szyfruj tekst</string>
<string name="title_encrypt_files">Szyfruj pliki</string>
<string name="title_decrypt">Odszyfruj</string>
- <string name="title_unlock">Klucz odblokowania</string>
+ <string name="title_unlock">Odblokuj klucz</string>
<string name="title_add_subkey">Dodaj pod-klucz</string>
<string name="title_edit_key">Edytuj klucz</string>
+ <string name="title_preferences">Ustawienia</string>
<string name="title_cloud_search_preferences">Właściwości Szukania w Chmurze</string>
<string name="title_api_registered_apps">Aplikacje</string>
+ <string name="title_key_server_preference">Serwery kluczy</string>
<string name="title_change_passphrase">Zmień hasło</string>
- <string name="title_share_fingerprint_with">Podziel się fingerprintem z...</string>
- <string name="title_share_key">Podziel się kluczem z...</string>
- <string name="title_share_file">Podziel się plikiem z...</string>
- <string name="title_share_message">Podziel się wiadomością z...</string>
+ <string name="title_share_fingerprint_with">Podziel się odciskiem klucza przez...</string>
+ <string name="title_share_key">Podziel się kluczem przez...</string>
+ <string name="title_share_file">Podziel się plikiem przez...</string>
+ <string name="title_share_message">Podziel się wiadomością przez...</string>
<string name="title_encrypt_to_file">Zaszyfruj do pliku</string>
<string name="title_decrypt_to_file">Odszyfruj do pliku</string>
<string name="title_import_keys">Importuj klucze</string>
@@ -33,7 +35,8 @@
<string name="title_log_display">Logi</string>
<string name="title_create_key">Utwórz klucz</string>
<string name="title_exchange_keys">Wymień się kluczami</string>
- <string name="title_advanced_key_info">Zaawansowane Info Klucza</string>
+ <string name="title_advanced_key_info">Zaawansowane informacje o kluczu</string>
+ <string name="title_keys">Klucze</string>
<!--section-->
<string name="section_user_ids">Tożsamości</string>
<string name="section_keys">Pod-klucze</string>
@@ -48,11 +51,13 @@
<string name="section_certification_key">Twój klucz użyty do certyfikacji</string>
<string name="section_upload_key">Synchronizuj Klucz</string>
<string name="section_key_server">Serwer kluczy</string>
- <string name="section_fingerprint">Fingerprint</string>
+ <string name="section_fingerprint">Odcisk klucza</string>
<string name="section_key_to_certify">Klucz do certyfikacji</string>
<string name="section_decrypt_files">Pliki</string>
<string name="section_decrypt_text">Tekst</string>
<string name="section_certs">Certyfikaty</string>
+ <string name="section_encrypt">Zaszyfruj</string>
+ <string name="section_decrypt">Odszyfruj</string>
<!--button-->
<string name="btn_decrypt_verify_file">Odszyfruj, weryfikuj i zapisz plik</string>
<string name="btn_decrypt_verify_message">Odszyfruj i weryfikuj wiadomość</string>
@@ -72,8 +77,11 @@
<string name="btn_create_key">Utwórz klucz</string>
<string name="btn_add_files">Dodaj plik(i)</string>
<string name="btn_add_share_decrypted_text">Podziel się odszyfrowanym tekstem</string>
- <string name="btn_decrypt_and_verify">oraz weryfikuj podpisy</string>
+ <string name="btn_decrypt_clipboard">Odszyfruj ze schowka</string>
+ <string name="btn_decrypt_and_verify">oraz zweryfikuj podpisy</string>
<string name="btn_decrypt_files">Odszyfruj pliki</string>
+ <string name="btn_encrypt_files">Zaszyfruj pliki</string>
+ <string name="btn_encrypt_text">Zaszyfruj tekst</string>
<!--menu-->
<string name="menu_preferences">Ustawienia</string>
<string name="menu_help">Pomoc</string>
@@ -102,16 +110,16 @@
<string name="label_ascii_armor">Plik ASCII Armor</string>
<string name="label_file_ascii_armor">Włącz ASCII Armor</string>
<string name="label_write_version_header">Niech inni wiedzą, że używasz OpenKeychain</string>
- <string name="label_write_version_header_summary">Napisze \'\'OpenKeychain v2.7\' do podpisów OpenPGP, ciphertekstu i wyeksportowanych kluczy</string>
- <string name="label_use_default_yubikey_pin">Użyj domyślnego PINu YubiKey </string>
- <string name="label_use_num_keypad_for_yubikey_pin">Użyj klawiatury numerycznej dla PIN\'u YubiKey</string>
- <string name="label_label_use_default_yubikey_pin_summary">Używa domyślnego PINu (123456) do dostępu do YubiKeys przez NFC</string>
+ <string name="label_write_version_header_summary">Wpisuje \'\'OpenKeychain v2.7\' do podpisów, szyfrogramów i wyeksportowanych kluczy OpenPGP.</string>
+ <string name="label_use_default_yubikey_pin">Użyj domyślnego PIN-u YubiKey</string>
+ <string name="label_use_num_keypad_for_yubikey_pin">Użyj klawiatury numerycznej dla PIN-u YubiKey</string>
+ <string name="label_label_use_default_yubikey_pin_summary">Używa domyślnego PIN-u (123456) do dostępu do YubiKeys przez NFC</string>
<string name="label_asymmetric_from">Podpisane przez:</string>
<string name="label_to">Szyfruj do:</string>
<string name="label_delete_after_encryption">Usuń plik po zaszyfrowaniu</string>
<string name="label_delete_after_decryption">Usuń po odszyfrowaniu</string>
<string name="label_encryption_algorithm">Algorytm szyfrowania</string>
- <string name="label_hash_algorithm">Algorytm hash</string>
+ <string name="label_hash_algorithm">Funkcja skrótu</string>
<string name="label_symmetric">Szyfruj z hasłem</string>
<string name="label_passphrase_cache_ttl">Czas pamięci cache</string>
<string name="label_passphrase_cache_subs">Pamiętaj hasła względem pod-klucza:</string>
@@ -178,9 +186,9 @@
<string name="error_message">Błąd: %s</string>
<!--key flags-->
<string name="flag_certify">Certyfikuj</string>
- <string name="flag_sign">Podpisz</string>
- <string name="flag_encrypt">Zaszyfruj</string>
- <string name="flag_authenticate">Autentykuj</string>
+ <string name="flag_sign">Podpisuj</string>
+ <string name="flag_encrypt">Szyfruj</string>
+ <string name="flag_authenticate">Uwierzytelniaj</string>
<!--sentences-->
<string name="wrong_passphrase">Nieprawidłowe hasło.</string>
<string name="no_filemanager_installed">Nie zainstalowano żadnego kompatybilnego menadżera plików.</string>
@@ -219,7 +227,7 @@
<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>
- <string name="fingerprint_copied_to_clipboard">Fingerprint został skopiowany do schowka!</string>
+ <string name="fingerprint_copied_to_clipboard">Odcisk klucza został skopiowany do schowka!</string>
<string name="select_key_to_certify">Proszę wybrać klucz który będzie użyty do certyfikacji!</string>
<string name="key_too_big_for_sharing">Klucz ma za duży rozmiar by być udostępniony w ten sposób!</string>
<string name="text_copied_to_clipboard">Tekst został skopiowany do schowka!</string>
@@ -242,7 +250,6 @@
<string name="error_could_not_extract_private_key">nie można wyodrębnić klucza prywatnego</string>
<!--errors without preceeding Error:-->
<string name="error_jelly_bean_needed">Potrzebujesz Androida 4.1 aby korzystać z Android NFC Beam</string>
- <string name="error_nfc_needed">NCF jest niedostępne na twoim urządzeniu</string>
<string name="error_nothing_import">Nie znaleziono kluczy!</string>
<string name="error_contacts_key_id_missing">Pobieranie ID klucza z kontaktów nie powiodło się!</string>
<string name="error_generic_report_bug">Wystąpił błąd ogólny, proszę zgłoś go autorom OpenKeychain.</string>
@@ -345,14 +352,16 @@
<string name="help_about_version">Wersja:</string>
<!--Import-->
<string name="import_tab_keyserver">Serwery kluczy</string>
- <string name="import_tab_cloud">Szukaj w Chmurze</string>
+ <string name="import_tab_cloud">Szukaj w chmurze</string>
<string name="import_tab_direct">Plik/Schowek</string>
<string name="import_tab_qr_code">Kod QR/NFC</string>
<string name="import_import">Zaimportuj wybrane klucze</string>
<string name="import_qr_code_wrong">Kod QR zniekształcony! Spróbuj jeszcze raz!</string>
<string name="import_qr_code_too_short_fingerprint">Odcisk klucza jest za krótki (&lt; 16 znaków)</string>
<string name="import_qr_code_button">Skanuj kod QR</string>
+ <string name="import_qr_code_text">Umieść kod QR przed kamerą!</string>
<!--Generic result toast-->
+ <string name="view_log">Szczegóły</string>
<string name="with_warnings">, z ostrzeżeniami</string>
<string name="with_cancelled">, aż anulowano</string>
<!--Import result toast-->
@@ -433,7 +442,6 @@
<string name="intent_send_encrypt">Zaszyfruj korzystając z OpenKeychain</string>
<string name="intent_send_decrypt">Deszyfruj korzystając z OpenKeychain</string>
<!--Remote API-->
- <string name="api_no_apps">Brak zarejestrowanych aplikacji!\n\nLista obsługiwanych aplikacji innych firm jest dostępna w \'Pomoc\'.</string>
<string name="api_settings_show_info">Pokaż zaawansowane informacje</string>
<string name="api_settings_hide_info">Ukryj zaawansowane informacje</string>
<string name="api_settings_show_advanced">Pokaż zaawanowane ustawienia</string>
@@ -449,6 +457,7 @@
<string name="api_settings_delete_account">Usuń konto</string>
<string name="api_settings_package_name">Nazwa paczki</string>
<string name="api_settings_package_signature">Skrót SHA-256 podpisu paczki</string>
+ <string name="api_settings_accounts">Konta (przestarzłe API)</string>
<string name="api_settings_settings">Ustawienia</string>
<string name="api_settings_key">Klucz konta:</string>
<string name="api_settings_accounts_empty">Brak kont połączonych z tą aplikacją.</string>
@@ -498,6 +507,8 @@ OSTRZEŻENIE: Jeżeli nie wiesz, czemu wyświetlił się ten komunikat, nie zezw
<string name="user_id_info_uncertified_text">Ta tożsamość nie była jeszcze certyfikowana. Nie możesz być pewny, że ta tożsamość naprawdę jest tą osobą za którą się podaje.</string>
<string name="user_id_info_invalid_title">Nieprawidłowe</string>
<string name="user_id_info_invalid_text">Coś jest nie tak z tą tożsamością!</string>
+ <!--Key trust-->
+ <!--keybase proof stuff-->
<!--Edit key-->
<string name="edit_key_action_change_passphrase">Zmień hasło</string>
<string name="edit_key_action_add_identity">Dodaj tożsamość</string>
@@ -533,10 +544,9 @@ OSTRZEŻENIE: Jeżeli nie wiesz, czemu wyświetlił się ten komunikat, nie zezw
<string name="create_key_hint_full_name">Imię i nazwisko, na przykład, Jan Kowalski</string>
<string name="create_key_edit">Zmień klucz konfiguracji</string>
<!--View key-->
- <string name="view_key_revoked">Ten klucz został unieważniony!</string>
- <string name="view_key_expired">Ten klucz stracił swoją ważność!</string>
<!--Navigation Drawer-->
<string name="nav_keys">Klucze</string>
+ <string name="nav_encrypt_decrypt">Zaszyfruj/Odszyfruj</string>
<string name="nav_apps">Aplikacje</string>
<string name="drawer_open">Otwórz panel nawigacji</string>
<string name="drawer_close">Zamknij panel nawigacji</string>
@@ -571,8 +581,11 @@ OSTRZEŻENIE: Jeżeli nie wiesz, czemu wyświetlił się ten komunikat, nie zezw
<!--Keyring Canonicalization log entries-->
<!--Keyring merging log entries-->
<!--createSecretKeyRing-->
- <string name="msg_cr">Generowanie nowego master klucza</string>
+ <string name="msg_cr">Generowanie nowego klucza głównego</string>
+ <string name="msg_cr_error_internal_pgp">Błąd wewnętrzny PGP!</string>
<!--modifySecretKeyRing-->
+ <string name="msg_mf_error_pgp">Błąd wewnętrzny PGP!</string>
+ <string name="msg_mf_passphrase">Zmiana hasła dla pęku kluczy</string>
<string name="msg_mf_error_past_expiry">Data ważności nie może być przeszła!</string>
<string name="msg_mf_subkey_revoke">Unieważnianie pod-klucza %s</string>
<string name="msg_mf_uid_error_empty">ID użytkownika nie może być pusty!</string>
@@ -599,6 +612,7 @@ OSTRZEŻENIE: Jeżeli nie wiesz, czemu wyświetlił się ten komunikat, nie zezw
<string name="msg_dc_pass_cached">Użycie hasła z pamięci cache</string>
<string name="msg_dc_pending_passphrase">Hasło wymagane, wymagana reakcja użytkownika...</string>
<string name="msg_dc">Rozpoczynanie operacji odszyfrowania...</string>
+ <!--Messages for VerifySignedLiteralData operation-->
<!--Messages for SignEncrypt operation-->
<!--Messages for PgpSignEncrypt operation-->
<string name="msg_crt_saving">Zapisywanie pęków kluczy</string>
@@ -677,6 +691,7 @@ OSTRZEŻENIE: Jeżeli nie wiesz, czemu wyświetlił się ten komunikat, nie zezw
<string name="swipe_to_update">Pociągnij w dół, aby aktualizować z serwera kluczy</string>
<string name="error_no_file_selected">Wybierz przynajmniej jeden plik, aby szyfrować!</string>
<string name="key_colon">Klucz:</string>
+ <string name="btn_start_exchange">Rozpocznij wymianę</string>
<!--Passphrase wizard-->
<!--TODO: rename all the things!-->
<!--<string name="enter_passphrase_twice">Enter passphrase twice</string>-->
diff --git a/OpenKeychain/src/main/res/values-pt/strings.xml b/OpenKeychain/src/main/res/values-pt/strings.xml
index ef0a0ce94..233347bd3 100644
--- a/OpenKeychain/src/main/res/values-pt/strings.xml
+++ b/OpenKeychain/src/main/res/values-pt/strings.xml
@@ -36,6 +36,8 @@
<!--Share-->
<!--Key list-->
<!--Key view-->
+ <!--Key trust-->
+ <!--keybase proof stuff-->
<!--Edit key-->
<!--Create key-->
<!--View key-->
@@ -54,6 +56,7 @@
<!--Promote key-->
<!--Other messages used in OperationLogs-->
<!--Messages for DecryptVerify operation-->
+ <!--Messages for VerifySignedLiteralData operation-->
<!--Messages for SignEncrypt operation-->
<!--Messages for PgpSignEncrypt operation-->
<!--PassphraseCache-->
diff --git a/OpenKeychain/src/main/res/values-ro/strings.xml b/OpenKeychain/src/main/res/values-ro/strings.xml
index ef0a0ce94..233347bd3 100644
--- a/OpenKeychain/src/main/res/values-ro/strings.xml
+++ b/OpenKeychain/src/main/res/values-ro/strings.xml
@@ -36,6 +36,8 @@
<!--Share-->
<!--Key list-->
<!--Key view-->
+ <!--Key trust-->
+ <!--keybase proof stuff-->
<!--Edit key-->
<!--Create key-->
<!--View key-->
@@ -54,6 +56,7 @@
<!--Promote key-->
<!--Other messages used in OperationLogs-->
<!--Messages for DecryptVerify operation-->
+ <!--Messages for VerifySignedLiteralData operation-->
<!--Messages for SignEncrypt operation-->
<!--Messages for PgpSignEncrypt operation-->
<!--PassphraseCache-->
diff --git a/OpenKeychain/src/main/res/values-ru/strings.xml b/OpenKeychain/src/main/res/values-ru/strings.xml
index ec862020a..dc1c81bb4 100644
--- a/OpenKeychain/src/main/res/values-ru/strings.xml
+++ b/OpenKeychain/src/main/res/values-ru/strings.xml
@@ -2,6 +2,7 @@
<resources>
<!--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").-->
+ <string name="app_name">OpenKeychain</string>
<!--title-->
<string name="title_select_recipients">Выберите ключи</string>
<string name="title_select_secret_key">Выберите Ваш ключ</string>
@@ -70,6 +71,8 @@
<string name="btn_export_to_server">Загрузить на сервер ключей</string>
<string name="btn_next">Далее</string>
<string name="btn_back">Назад</string>
+ <string name="btn_no">Нет</string>
+ <string name="btn_match">Отпечатки совпадают</string>
<string name="btn_lookup_key">Найти ключ</string>
<string name="btn_share_encrypted_signed">Зашифровать и отправить сообщение</string>
<string name="btn_view_cert_key">Просмотр ключа</string>
@@ -89,6 +92,7 @@
<string name="menu_create_key">Создать свой ключ</string>
<string name="menu_import_existing_key">Импорт из файла</string>
<string name="menu_search">Поиск</string>
+ <string name="menu_nfc_preferences">Настройки NFC</string>
<string name="menu_beam_preferences">Настройки Beam</string>
<string name="menu_key_edit_cancel">Отмена</string>
<string name="menu_encrypt_to">Зашифровать....</string>
@@ -97,6 +101,7 @@
<string name="menu_search_cloud">Поиск в облаке</string>
<string name="menu_export_all_keys">Экспорт всех ключей</string>
<string name="menu_advanced">Подробные данные</string>
+ <string name="menu_certify_fingerprint">Сверить отпечатки</string>
<!--label-->
<string name="label_message">Сообщение</string>
<string name="label_file">Файл</string>
@@ -249,7 +254,8 @@
<string name="error_could_not_extract_private_key">не удалось извлечь личный ключ</string>
<!--errors without preceeding Error:-->
<string name="error_jelly_bean_needed">Для использования NFC Beam требуется Android 4.1+ !</string>
- <string name="error_nfc_needed">Ваше устройство не поддерживает NFC!</string>
+ <string name="error_nfc_needed">Необходимо включить NFC!</string>
+ <string name="error_beam_needed">Необходимо включить Beam!</string>
<string name="error_nothing_import">Ключи не найдены!</string>
<string name="error_contacts_key_id_missing">Ошибка извлечения идентификатора ключа из контактов!</string>
<string name="error_generic_report_bug">Выявлена ошибка. Пожалуйста, сообщите о ней разработчику.</string>
@@ -386,7 +392,6 @@
<string name="intent_send_encrypt">OpenKeychain: Зашифровать</string>
<string name="intent_send_decrypt">OpenKeychain: Расшифровать</string>
<!--Remote API-->
- <string name="api_no_apps">Нет связанных приложений!\n\nСписок приложений, поддерживающих интеграцию, доступен в разделе \'Помощь\'!</string>
<string name="api_settings_show_info">Показать подробную информацию</string>
<string name="api_settings_hide_info">Скрыть подробную информацию</string>
<string name="api_settings_show_advanced">Показать расширенные настройки</string>
@@ -452,6 +457,8 @@
<string name="user_id_info_uncertified_text">Этот идентификатор не был заверен. Нет гарантии, что он принадлежит этому человеку.</string>
<string name="user_id_info_invalid_title">Недействительно</string>
<string name="user_id_info_invalid_text">Что-то не так с идентификатором!</string>
+ <!--Key trust-->
+ <!--keybase proof stuff-->
<!--Edit key-->
<string name="edit_key_action_change_passphrase">Изменить пароль</string>
<string name="edit_key_action_add_identity">Добавить идентификатор</string>
@@ -487,8 +494,12 @@
<string name="create_key_hint_full_name">Полное имя, напр. Иван Хлестаков</string>
<string name="create_key_edit">Изменить конфигурацию ключа</string>
<!--View key-->
- <string name="view_key_revoked">Этот ключ был аннулирован!</string>
- <string name="view_key_expired">Срок годности ключа истёк!</string>
+ <string name="view_key_revoked">Аннулирован: Ключ не должен использоваться когда-либо в будущем!</string>
+ <string name="view_key_expired">Срок годности истёк: Контакт должен продлить срок!</string>
+ <string name="view_key_expired_secret">Срок годности истёк: Вы можете продлить срок, изменив ключ!</string>
+ <string name="view_key_my_key">Мой ключ</string>
+ <string name="view_key_verified">Подтвержденный ключ</string>
+ <string name="view_key_unverified">Достоверность: Сканируйте QR код для проверки ключа!</string>
<!--Navigation Drawer-->
<string name="nav_keys">Ключи</string>
<string name="nav_encrypt_decrypt">Зашифровать/Расшифровать</string>
@@ -580,8 +591,8 @@
<string name="msg_ip_uid_reorder">Переупорядочение пользовательских ID</string>
<string name="msg_ip_uid_processing">Обработка id %s</string>
<string name="msg_ip_uid_revoked">id аннулирован</string>
- <string name="msg_ip_uat_processing_image">Обработка пользовательского атрибута типа изображения</string>
- <string name="msg_ip_uat_processing_unknown">Обработка пользовательского атрибута неизвестного типа</string>
+ <string name="msg_ip_uat_processing_image">Обработка атрибута пользователя типа изображения</string>
+ <string name="msg_ip_uat_processing_unknown">Обработка атрибута пользователя неизвестного типа</string>
<string name="msg_ip_uat_cert_bad">Плохой сертификат!</string>
<string name="msg_ip_uat_cert_error">Ошибка обработки сертификата!</string>
<string name="msg_ip_uat_cert_nonrevoke">Уже есть неотзываемый сертификат, пропускаем.</string>
@@ -629,14 +640,14 @@
<string name="msg_kc_notation_dup">Удаление лишнего сертификата обозначения</string>
<string name="msg_kc_notation_empty">Удаление пустого сертификата обозначения</string>
<string name="msg_kc_sub">Обработка доп. ключа %s</string>
- <string name="msg_kc_sub_bad">Удаление недопустимого сертификата связывания доп. ключа</string>
+ <string name="msg_kc_sub_bad">Удаление неверного сертификата связывания доп. ключа</string>
<string name="msg_kc_sub_bad_err">Удаление плохого сертификата связывания доп. ключа</string>
<string name="msg_kc_sub_bad_local">Удаление сертификата связывания доп. ключа с \"локальным\" флагом</string>
<string name="msg_kc_sub_bad_keyid">Несоответствие id издателя связывания доп. ключа</string>
<string name="msg_kc_sub_bad_time">Удаление сертификата связывания доп. ключа с отметкой времени, находящейся в будущем</string>
<string name="msg_kc_sub_bad_type">Неизвестный тип сертификата доп. ключа: %s</string>
<string name="msg_kc_sub_dup">Удаление лишнего сертификата связывания доп. ключа</string>
- <string name="msg_kc_sub_primary_bad">Удаление сертификата связывания доп. ключа вследствие недопустимого основного сертификата связывания</string>
+ <string name="msg_kc_sub_primary_bad">Удаление сертификата связывания доп. ключа вследствие неверного основного сертификата связывания</string>
<string name="msg_kc_sub_primary_bad_err">Удаление сертификата связывания доп. ключа вследствие плохого основного сертификата связывания</string>
<string name="msg_kc_sub_primary_none">Удаление сертификата связывания доп. ключа вследствие отсутствующего основного сертификата связывания</string>
<string name="msg_kc_sub_no_cert">Нет допустимого сертификата для %s, удаление из связки</string>
@@ -648,20 +659,85 @@
<string name="msg_kc_sub_algo_bad_sign">Доп. ключ имеет флаг использования подписи, но алгоритм не подходит для подписи.</string>
<string name="msg_kc_success">Связка нормализована успешно, нет изменений</string>
<string name="msg_kc_success_bad_and_red">Связка нормализована успешно, удалено %1$s ошибочных и %2$s лишних сертификатов</string>
+ <string name="msg_kc_uid_bad_err">Удаление плохого самостоятельного сертификата для ID \'%s\'</string>
+ <string name="msg_kc_uid_bad_local">Удаление сертификата ID с \'локальным\' флагом</string>
+ <string name="msg_kc_uid_bad_time">Удаление ID с отметкой времени, находящейся в будущем</string>
+ <string name="msg_kc_uid_bad_type">Удаление сертификата ID неизвестного типа (%s)</string>
+ <string name="msg_kc_uid_bad">Удаление плохого самостоятельного сертификата для ID \'%s\'</string>
+ <string name="msg_kc_uid_cert_dup">Удаление устаревшего самостоятельного сертификата для ID \'%s\'</string>
+ <string name="msg_kc_uid_foreign">Удаление \'%s\' несоответствующего сертификата ID</string>
+ <string name="msg_kc_uid_revoke_dup">Удаление лишнего сертификата аннулирования для ID \'%s\'</string>
+ <string name="msg_kc_uid_revoke_old">Удаление устаревшего сертификата аннулирования для ID \'%s\'</string>
+ <string name="msg_kc_uid_no_cert">Нет допустимого самостоятельного сертификата для ID \'%s\', удаление из связки</string>
+ <string name="msg_kc_uid_remove">Удаление неверного ID \'%s\'</string>
+ <string name="msg_kc_uid_dup">Удаление повторяющегося ID \'%s\'. Связка содержит их два. Это может привести к отсутствию сертификатов!</string>
+ <string name="msg_kc_uid_warn_encoding">ID пользователя не соответствует UTF-8!</string>
+ <string name="msg_kc_uat_jpeg">Обработка атрибута пользователя типа JPEG</string>
+ <string name="msg_kc_uat_unknown">Обработка атрибута пользователя неизвестного типа</string>
+ <string name="msg_kc_uat_bad_err">Удаление плохого самостоятельного сертификата для атрибута пользователя</string>
+ <string name="msg_kc_uat_bad_local">Удаление сертификата атрибута пользователя с \'локальным\' флагом</string>
+ <string name="msg_kc_uat_bad_time">Удаление атрибута пользователя с отметкой времени, находящейся в будущем</string>
+ <string name="msg_kc_uat_bad_type">Удаление сертификата атрибута пользователя неизвестного типа (%s)</string>
+ <string name="msg_kc_uat_bad">Удаление плохого самостоятельного сертификата для атрибута пользователя</string>
+ <string name="msg_kc_uat_cert_dup">Удаление устаревшего самостоятельного сертификата для атрибута пользователя</string>
+ <string name="msg_kc_uat_dup">Удаление повторяющегося атрибута пользователя. Связка содержит их два. Это может привести к отсутствию сертификатов!</string>
+ <string name="msg_kc_uat_foreign">Удаление несоответствующего сертификата атрибута пользователя</string>
+ <string name="msg_kc_uat_revoke_dup">Удаление лишнего сертификата аннулирования для атрибута пользователя</string>
+ <string name="msg_kc_uat_revoke_old">Удаление устаревшего сертификата аннулирования для атрибута пользователя</string>
+ <string name="msg_kc_uat_no_cert">Нет допустимого самостоятельного сертификата для атрибута пользователя, удаление из связки</string>
+ <string name="msg_kc_uat_remove">Удаление неверного атрибута пользователя</string>
+ <string name="msg_kc_uat_warn_encoding">ID пользователя не соответствует UTF-8!</string>
<!--Keyring merging log entries-->
+ <string name="msg_mg_error_secret_dummy">Найден новый публичный доп. ключ, но фиктивное создание секретного доп. ключа не поддерживается!</string>
+ <string name="msg_mg_error_heterogeneous">Попытка объединить связки с различными отпечатками!</string>
+ <string name="msg_mg_error_encode">Фатальная ошибка кодирования подписи!</string>
+ <string name="msg_mg_public">Объединение с публичной связкой %s</string>
+ <string name="msg_mg_secret">Объединение с секретной связкой %s</string>
+ <string name="msg_mg_new_subkey">Добавление нового доп. ключа %s</string>
+ <string name="msg_mg_found_new">Найдено %s новых сертификатов в связке</string>
+ <string name="msg_mg_unchanged">Нет данных для объединения</string>
<!--createSecretKeyRing-->
<string name="msg_cr">Создание нового основного ключа</string>
+ <string name="msg_cr_error_no_master">Ну заданы параметры основного ключа!</string>
+ <string name="msg_cr_error_no_user_id">Связки должны создаваться с хотя бы одним ID пользователя!</string>
+ <string name="msg_cr_error_no_certify">Основной ключ должен иметь флаг сертификата!</string>
+ <string name="msg_cr_error_null_expiry">Срок годности не может быть \'такой же как раньше\' при создании ключа. Это программная ошибка, пожалуйста, сообщите об этом!</string>
<string name="msg_cr_error_keysize_512">Размер ключа должен быть больше или равен 512!</string>
+ <string name="msg_cr_error_no_curve">Не задан размер ключа! Это программная ошибка, пожалуйста, сообщите об этом!</string>
+ <string name="msg_cr_error_no_keysize">Не задана эллиптическая кривая! Это программная ошибка, пожалуйста, сообщите об этом!</string>
<string name="msg_cr_error_internal_pgp">Внутренняя ошибка OpenPGP!</string>
+ <string name="msg_cr_error_unknown_algo">Выбран неизвестный алгоритм! Это программная ошибка, пожалуйста, сообщите об этом!</string>
+ <string name="msg_cr_error_flags_dsa">Выбраны плохие флаги ключа, DSA не может быть использован для шифрования!</string>
+ <string name="msg_cr_error_flags_elgamal">Выбраны плохие флаги ключа, ElGamal не может быть использован для подписи!</string>
+ <string name="msg_cr_error_flags_ecdsa">Выбраны плохие флаги ключа, ECDSA не может быть использован для шифрования!</string>
+ <string name="msg_cr_error_flags_ecdh">Выбраны плохие флаги ключа, ECDH не может быть использован для подписи!</string>
<!--modifySecretKeyRing-->
+ <string name="msg_mr">Изменение связки %s</string>
<string name="msg_mf_error_encode">Ошибка кодирования!</string>
+ <string name="msg_mf_error_fingerprint">Отпечаток ключа не совпадает с представленным!</string>
+ <string name="msg_mf_error_keyid">Нет ID ключа. Это программная ошибка. Пожалуйста, сообщите об этом!</string>
<string name="msg_mf_error_integrity">Внутренняя ошибка, сбой проверки целостности!</string>
+ <string name="msg_mf_error_master_none">Не найден основной сертификат! (Все отозваны?)</string>
+ <string name="msg_mf_error_revoked_primary">Аннулированные идентификаторы не могут быть основными!</string>
<string name="msg_mf_error_pgp">Внутренняя ошибка OpenPGP!</string>
<string name="msg_mf_error_sig">Ошибка подписи!</string>
+ <string name="msg_mf_master">Изменение основного сертификата</string>
+ <string name="msg_mf_passphrase_key">Перешифрование доп. ключа %s новым паролем</string>
+ <string name="msg_mf_primary_new">Создание нового сертификата для основного идентификатора</string>
+ <string name="msg_mf_subkey_change">Изменение доп. ключа %s</string>
+ <string name="msg_mf_error_subkey_missing">Попытка работы с отсутствующим доп. ключом %s!</string>
+ <string name="msg_mf_subkey_new">Добавление нового доп. ключа типа %s</string>
+ <string name="msg_mf_subkey_new_id">Идентификатор нового доп. ключа: %s</string>
+ <string name="msg_mf_error_past_expiry">Срок годности не может быть в прошлом!</string>
+ <string name="msg_mf_subkey_revoke">Аннулирование доп. ключа %s</string>
<string name="msg_mf_success">Связка успешно изменена</string>
+ <string name="msg_mf_uid_primary">Изменение основного идентификатора на %s</string>
+ <string name="msg_mf_uid_error_empty">Идентификатор пользователя не может быть пустой</string>
<string name="msg_mf_unlock_error">Ошибка разблокирования связки!</string>
<string name="msg_mf_unlock">Разблокирование связки</string>
<!--Consolidate-->
+ <string name="msg_con">Консолидация базы данных</string>
+ <string name="msg_con_error_bad_state">Консолидация началась но база не кэширована! Это программная ошибка, пожалуйста, сообщите об этом.</string>
<!--Edit Key (higher level than modify)-->
<!--Promote key-->
<string name="msg_pr_error_key_not_found">Ключ не найден!</string>
@@ -669,26 +745,40 @@
<string name="msg_ek_error_divert">Редактирование NFC ключей (еще) не поддерживается!</string>
<string name="msg_ek_error_not_found">Ключ не найден!</string>
<!--Messages for DecryptVerify operation-->
+ <string name="msg_dc_ok">OK</string>
<string name="msg_dc_unlocking">Разблокировка секретного ключа</string>
+ <!--Messages for VerifySignedLiteralData operation-->
<!--Messages for SignEncrypt operation-->
<!--Messages for PgpSignEncrypt operation-->
+ <string name="msg_pse_compressing">Подготовка сжатия</string>
+ <string name="msg_pse_encrypting">Шифрование данных</string>
+ <string name="msg_pse_error_bad_passphrase">Неправильный пароль!</string>
+ <string name="msg_pse_error_nfc">Ошибка данных NFC!</string>
<string name="msg_pse_error_pgp">Внутренняя ошибка OpenPGP!</string>
<string name="msg_crt_saving">Сохранение связки</string>
<string name="msg_crt_unlock">Разблокировка основного ключа</string>
<string name="msg_crt_warn_not_found">Ключ не найден!</string>
+ <string name="msg_crt_warn_cert_failed">Создание сертификата не удалось!</string>
<string name="msg_crt_upload_success">Ключ успешно загружен на сервер</string>
<string name="msg_export_error_fopen">Ошибка открытия файла!</string>
<string name="msg_export_error_db">Ошибка базы данных!</string>
<string name="msg_export_error_io">Ошибка ввода/вывода!</string>
<string name="msg_del_error_empty">Нет данных для удаления!</string>
+ <string name="msg_acc_saved">Аккаунт сохранен</string>
<plurals name="error_import_non_pgp_part">
<item quantity="one">часть загруженного файла содержит данные OpenPGP, но это не ключ</item>
<item quantity="few">части загруженного файла содержат данные OpenPGP, но это не ключ</item>
<item quantity="other">части загруженного файла содержат данные OpenPGP, но это не ключ</item>
</plurals>
<!--PassphraseCache-->
+ <string name="passp_cache_notif_keys">Кэшированные пароли:</string>
+ <string name="passp_cache_notif_clear">Очистить кэш</string>
+ <string name="passp_cache_notif_pwd">Пароль</string>
<!--First Time-->
<string name="first_time_text1">Верните вашу приватность с помощью OpenKeychain!</string>
+ <string name="first_time_create_key">Создать ключ</string>
+ <string name="first_time_import_key">Импорт из файла</string>
+ <string name="first_time_skip">Пропустить настройку</string>
<!--unsorted-->
<string name="section_certifier_id">Кем подписан</string>
<string name="section_cert">Детали сертификации</string>
@@ -706,8 +796,18 @@
<string name="can_sign_not">не для подписания</string>
<string name="error_no_encrypt_subkey">Нет доп. ключа для шифрования!</string>
<string name="contact_show_key">Показать ключ (%s)</string>
+ <string name="key_colon">Ключ:</string>
+ <string name="btn_start_exchange">Начать обмен</string>
<!--Passphrase wizard-->
<!--TODO: rename all the things!-->
+ <string name="title_unlock_method">Выберите метод разблокировки</string>
<!--<string name="enter_passphrase_twice">Enter passphrase twice</string>-->
+ <string name="enter_passphrase">Введите пароль</string>
+ <string name="passphrase">Пароль</string>
+ <string name="passphrase_invalid">Неверный пароль</string>
+ <string name="passphrase_again">Еще раз</string>
+ <string name="nfc_title">NFC</string>
<!--<string name="nfc_text">Please place a NFC tag near your device</string>-->
+ <string name="unlocked">Разблокирован</string>
+ <string name="nfc_settings">Настройки</string>
</resources>
diff --git a/OpenKeychain/src/main/res/values-sl/strings.xml b/OpenKeychain/src/main/res/values-sl/strings.xml
index 499ff8468..5d6581bfc 100644
--- a/OpenKeychain/src/main/res/values-sl/strings.xml
+++ b/OpenKeychain/src/main/res/values-sl/strings.xml
@@ -219,7 +219,6 @@
<string name="error_could_not_extract_private_key">ne morem izvleči zasebnega ključa</string>
<!--errors without preceeding Error:-->
<string name="error_jelly_bean_needed">Za uporabo storitve NFC Beam potrebujete najmanj Android 4.1!</string>
- <string name="error_nfc_needed">NFC ni na voljo na vaši napravi!</string>
<string name="error_nothing_import">Najden ni bil noben ključ!</string>
<string name="error_generic_report_bug">Pripetila se je splošna napaka, prosimo ustvarite poročilo o \'hrošču\'.</string>
<!--results shown after decryption/verification-->
@@ -381,6 +380,8 @@
<string name="user_id_info_revoked_title">Preklican</string>
<string name="user_id_info_revoked_text">Lastnik ključa je preklical to identiteto. Ta ni več veljavna.</string>
<string name="user_id_info_invalid_title">Neveljaven</string>
+ <!--Key trust-->
+ <!--keybase proof stuff-->
<!--Edit key-->
<string name="edit_key_action_change_passphrase">Zamenjaj geslo</string>
<string name="edit_key_action_add_identity">Dodaj identiteto</string>
@@ -396,7 +397,6 @@
<string name="create_key_passphrases_not_equal">Gesli se ne ujemata</string>
<string name="create_key_hint_full_name">Polno ime, npr. Janez Vzorec</string>
<!--View key-->
- <string name="view_key_expired">Ta ključ je pretekel!</string>
<!--Navigation Drawer-->
<string name="nav_keys">Ključi</string>
<string name="nav_apps">Aplikacije</string>
@@ -459,6 +459,7 @@
<!--Other messages used in OperationLogs-->
<string name="msg_ek_error_not_found">Ključ ni bil najden!</string>
<!--Messages for DecryptVerify operation-->
+ <!--Messages for VerifySignedLiteralData operation-->
<!--Messages for SignEncrypt operation-->
<!--Messages for PgpSignEncrypt operation-->
<string name="msg_crt_warn_not_found">Ključ ni bil najden!</string>
diff --git a/OpenKeychain/src/main/res/values-sr/strings.xml b/OpenKeychain/src/main/res/values-sr/strings.xml
index b3a15cb7f..11639e2eb 100644
--- a/OpenKeychain/src/main/res/values-sr/strings.xml
+++ b/OpenKeychain/src/main/res/values-sr/strings.xml
@@ -71,6 +71,8 @@
<string name="btn_export_to_server">Отпреми на сервер кључева</string>
<string name="btn_next">Следеће</string>
<string name="btn_back">Назад</string>
+ <string name="btn_no">Не</string>
+ <string name="btn_match">Отисци се поклапају</string>
<string name="btn_lookup_key">Потражи кључ</string>
<string name="btn_share_encrypted_signed">Шифруј и подели поруку</string>
<string name="btn_view_cert_key">Прикажи кључ за оверавање</string>
@@ -90,6 +92,7 @@
<string name="menu_create_key">Направи ми кључ</string>
<string name="menu_import_existing_key">Увези из фајла</string>
<string name="menu_search">Претрага</string>
+ <string name="menu_nfc_preferences">НФЦ поставке</string>
<string name="menu_beam_preferences">Поставке Снопа</string>
<string name="menu_key_edit_cancel">Одустани</string>
<string name="menu_encrypt_to">Шифруј у…</string>
@@ -98,6 +101,7 @@
<string name="menu_search_cloud">Клауд претрага</string>
<string name="menu_export_all_keys">Извези све кључеве</string>
<string name="menu_advanced">Прикажи напредне податке</string>
+ <string name="menu_certify_fingerprint">Овери поређењем отисака</string>
<!--label-->
<string name="label_message">Порука</string>
<string name="label_file">Фајл</string>
@@ -252,7 +256,8 @@
<string name="error_could_not_extract_private_key">нисам могао да извучем лични кључ</string>
<!--errors without preceeding Error:-->
<string name="error_jelly_bean_needed">Потребан вам је Андроид 4.1 да бисте користили Андроидову могућност НФЦ Снопа!</string>
- <string name="error_nfc_needed">НФЦ није доступан на вашем уређају!</string>
+ <string name="error_nfc_needed">НФЦ мора бити укључен!</string>
+ <string name="error_beam_needed">Бим мора бити укључен</string>
<string name="error_nothing_import">Нема нађених кључева!</string>
<string name="error_contacts_key_id_missing">Добављање ИД кључа из контаката није успело!</string>
<string name="error_generic_report_bug">Дошло је до опште грешке, направите нови извештај о грешци за Отворени кључарник.</string>
@@ -449,7 +454,6 @@
<string name="intent_send_encrypt">Шифруј помоћу Отвореног кључарника</string>
<string name="intent_send_decrypt">Дешифруј помоћу Отвореног кључарника</string>
<!--Remote API-->
- <string name="api_no_apps">Нема регистрованих апликација!\n\nСписак подржаних апликација треће стране можете наћи у одељку „Помоћ“!</string>
<string name="api_settings_show_info">Прикажи напредне податке</string>
<string name="api_settings_hide_info">Сакриј напредне податке</string>
<string name="api_settings_show_advanced">Прикажи напредне поставке</string>
@@ -507,6 +511,7 @@
<string name="key_view_tab_share">Подели</string>
<string name="key_view_tab_keys">Поткључеви</string>
<string name="key_view_tab_certs">Сертификати</string>
+ <string name="key_view_tab_keybase">Keybase.io</string>
<string name="user_id_info_revoked_title">Опозван</string>
<string name="user_id_info_revoked_text">Власник кључа је опозвао овај идентитет. Више није исправан.</string>
<string name="user_id_info_certified_title">Оверен</string>
@@ -515,6 +520,13 @@
<string name="user_id_info_uncertified_text">Овај идентитет још није оверен. Не можете бити сигурни да идентитет заиста одговара одређеној особи.</string>
<string name="user_id_info_invalid_title">Неисправан</string>
<string name="user_id_info_invalid_text">Нешто није у реду са овим идентитетом!</string>
+ <!--Key trust-->
+ <string name="key_trust_it_is_yours">Ово је један од ваших кључева!</string>
+ <string name="key_trust_revoked">Власни је опозвао овај кључ. Не бисте требали да се поуздате у њега.</string>
+ <string name="key_trust_expired">Овај кључ је истекао. Не бисте требали да се поуздате у њега.</string>
+ <string name="key_trust_start_cloud_search">Почни претрагу</string>
+ <!--keybase proof stuff-->
+ <string name="keybase_verify">Овери</string>
<!--Edit key-->
<string name="edit_key_action_change_passphrase">Измени лозинку</string>
<string name="edit_key_action_add_identity">Додај идентитет</string>
@@ -550,8 +562,12 @@
<string name="create_key_hint_full_name">Пуно име, нпр. Петар Петровић</string>
<string name="create_key_edit">Промени конфигурацију кључа</string>
<!--View key-->
- <string name="view_key_revoked">Овај кључ је опозван!</string>
- <string name="view_key_expired">Овај кључ је истекао!</string>
+ <string name="view_key_revoked">Опозван: кључ више не смије бити коришћен!</string>
+ <string name="view_key_expired">Истекао: контакт мора да продужи ваљаност кључа!</string>
+ <string name="view_key_expired_secret">Истекао: можете да уредите кључ и продужите му ваљаност!</string>
+ <string name="view_key_my_key">Мој кључ</string>
+ <string name="view_key_verified">Оверен кључ</string>
+ <string name="view_key_unverified">Неоверен: очитајте бар-код да бисте оверили кључ!</string>
<!--Navigation Drawer-->
<string name="nav_keys">Кључеви</string>
<string name="nav_encrypt_decrypt">Шифруј/дешифруј</string>
@@ -921,6 +937,15 @@
<string name="msg_dc_trail_sym">Наиђох на пратеће симетрично шифроване податке</string>
<string name="msg_dc_trail_unknown">Наиђох на пратеће податке непознатог типа</string>
<string name="msg_dc_unlocking">Откључавам тајни кључ</string>
+ <!--Messages for VerifySignedLiteralData operation-->
+ <string name="msg_vl">Почињем проверу потписа</string>
+ <string name="msg_vl_clear_meta_file">Име фајла: %s</string>
+ <string name="msg_vl_clear_meta_mime">МИМЕ тип: %s</string>
+ <string name="msg_vl_clear_meta_time">Време измене: %s</string>
+ <string name="msg_vl_clear_meta_size">Величина: %s</string>
+ <string name="msg_vl_clear_signature_check">Оверавам податке потписа</string>
+ <string name="msg_vl_error_integrity_check">Грешка провере интегритета!</string>
+ <string name="msg_vl_ok">У реду</string>
<!--Messages for SignEncrypt operation-->
<string name="msg_se">Почињем радњу потписивања/шифровања</string>
<string name="msg_se_input_bytes">Обрађујем улаз низа бајтова</string>
@@ -1069,6 +1094,8 @@
<string name="certs_text">Приказани су само потврђени сопствени сертификати и потврђени сертификати направљени вашим кључем.</string>
<string name="section_uids_to_certify">Идентитети за</string>
<string name="certify_text">Кључеви које увозите садрже „идентитете“: имена и е-адресе. Одредите за оверу само оне који одговарају ономе што очекујете.</string>
+ <string name="certify_fingerprint_text">Упоредите приказани отисак, знак по знак, са оним приказаним на другаревом уређају.</string>
+ <string name="certify_fingerprint_text2">Да ли се приказани отисци поклапају?</string>
<string name="label_revocation">Разлог опозива</string>
<string name="label_verify_status">Стање овере</string>
<string name="label_cert_type">Тип</string>
diff --git a/OpenKeychain/src/main/res/values-sv/strings.xml b/OpenKeychain/src/main/res/values-sv/strings.xml
index 7c855176b..a24fe7ee7 100644
--- a/OpenKeychain/src/main/res/values-sv/strings.xml
+++ b/OpenKeychain/src/main/res/values-sv/strings.xml
@@ -248,7 +248,6 @@
<string name="error_could_not_extract_private_key">kunde inte extrahera privat nyckel</string>
<!--errors without preceeding Error:-->
<string name="error_jelly_bean_needed">Du behöver Android 4.1 för att använda Androids NFC Beam-funktion!</string>
- <string name="error_nfc_needed">NFC är inte tillgängligt på din enhet!</string>
<string name="error_nothing_import">Inga nycklar hittades!</string>
<string name="error_contacts_key_id_missing">Det gick inte att hämta nyckel-ID:t från kontakter!</string>
<string name="error_generic_report_bug">Ett generiskt fel inträffade, skapa en ny buggrapport för OpenKeychain.</string>
@@ -430,7 +429,6 @@
<string name="intent_send_encrypt">Kryptera med OpenKeychain</string>
<string name="intent_send_decrypt">Dekryptera med OpenKeychain</string>
<!--Remote API-->
- <string name="api_no_apps">Inga registrerade appar!\n\nEn lista med tredjepartsappar som stöds kan hittas under \'Hjälp\'! </string>
<string name="api_settings_show_info">Visa avancerad information</string>
<string name="api_settings_hide_info">Göm avancerad information</string>
<string name="api_settings_show_advanced">Visa avancerade inställningar</string>
@@ -495,6 +493,8 @@
<string name="user_id_info_uncertified_text">Den här identiteten har ännu inte certifierats. Du kan inte vara säker på att identiteten verkligen hänger ihop med en viss person.</string>
<string name="user_id_info_invalid_title">Ogiltig</string>
<string name="user_id_info_invalid_text">Något är fel med den här identiteten!</string>
+ <!--Key trust-->
+ <!--keybase proof stuff-->
<!--Edit key-->
<string name="edit_key_action_change_passphrase">Ändra lösenordsfras</string>
<string name="edit_key_action_add_identity">Lägg till identitet</string>
@@ -525,8 +525,6 @@
<string name="create_key_hint_full_name">Fullständigt namn, t.ex. Kalle Svensson</string>
<string name="create_key_edit">Ändra nyckelkonfiguration</string>
<!--View key-->
- <string name="view_key_revoked">Den här nyckeln har återkallats!</string>
- <string name="view_key_expired">Den här nyckeln har gått ut!</string>
<!--Navigation Drawer-->
<string name="nav_keys">Nycklar</string>
<string name="nav_encrypt_decrypt">Kryptera/Dekryptera</string>
@@ -775,6 +773,7 @@
<string name="msg_dc_sym_skip">Symmetrisk data inte tillåten, hoppar över…</string>
<string name="msg_dc_sym">Hittade block med symmetriskt krypterad data</string>
<string name="msg_dc_unlocking">Låser upp privat nyckel</string>
+ <!--Messages for VerifySignedLiteralData operation-->
<!--Messages for SignEncrypt operation-->
<string name="msg_se_success">Signering/kryptering lyckades!</string>
<!--Messages for PgpSignEncrypt operation-->
diff --git a/OpenKeychain/src/main/res/values-tr/strings.xml b/OpenKeychain/src/main/res/values-tr/strings.xml
index 194224708..7b6a976f5 100644
--- a/OpenKeychain/src/main/res/values-tr/strings.xml
+++ b/OpenKeychain/src/main/res/values-tr/strings.xml
@@ -237,7 +237,6 @@
<string name="error_could_not_extract_private_key">özel anahtar çıkarılamadı</string>
<!--errors without preceeding Error:-->
<string name="error_jelly_bean_needed">Android\'in NFC Beam özelliğini kullanabilmek için Android 4.1 kullanmalısınız!</string>
- <string name="error_nfc_needed">Cihazınız NFC desteklemiyor!</string>
<string name="error_nothing_import">Anahtar bulunamadı!</string>
<string name="error_contacts_key_id_missing">Kişilerden anahtar ID getirme işlemi başarısız!</string>
<string name="error_generic_report_bug">Genel bir hata oluştu, lütfen OpenKeychain için yeni bir hata raporu oluşturun.</string>
@@ -426,6 +425,8 @@
<string name="user_id_info_uncertified_text">Bu kimlik henüz tasdiklenmemiş. Bu kimliğin belirli bir kişiye ait olduğundan emin olamazsınız.</string>
<string name="user_id_info_invalid_title">Geçersiz</string>
<string name="user_id_info_invalid_text">Bu kimlikle ilgili yanlış olan bazı şeyler var!</string>
+ <!--Key trust-->
+ <!--keybase proof stuff-->
<!--Edit key-->
<string name="edit_key_action_change_passphrase">Parolayı Değiştir</string>
<string name="edit_key_action_add_identity">Kimlik Ekle</string>
@@ -452,8 +453,6 @@
<string name="create_key_hint_full_name">Tam Ad, örneğin: Max Mustermann</string>
<string name="create_key_edit">Anahtar yapılandırmasını değiştir.</string>
<!--View key-->
- <string name="view_key_revoked">Bu anahtar yürürlükten kaldırıldı!</string>
- <string name="view_key_expired">Bu anahtarın son kullanma tarihi geçmiş!</string>
<!--Navigation Drawer-->
<string name="nav_keys">Anahtarlar</string>
<string name="nav_apps">Uygulamalar</string>
@@ -495,6 +494,7 @@
<string name="msg_dc_error_no_data">Akış içinde şifrelenmiş veri bulunamadı!</string>
<string name="msg_dc_error_no_key">Akış içinde bilinen özel anahtar ile şifrelenmiş veri bulunamadı!</string>
<string name="msg_dc_prep_streams">Çözümleme için akışlar hazırlanıyor</string>
+ <!--Messages for VerifySignedLiteralData operation-->
<!--Messages for SignEncrypt operation-->
<!--Messages for PgpSignEncrypt operation-->
<string name="msg_crt_warn_not_found">Anahtar bulunamadı!</string>
diff --git a/OpenKeychain/src/main/res/values-uk/strings.xml b/OpenKeychain/src/main/res/values-uk/strings.xml
index a8e4ac3b4..cf586b2d5 100644
--- a/OpenKeychain/src/main/res/values-uk/strings.xml
+++ b/OpenKeychain/src/main/res/values-uk/strings.xml
@@ -240,7 +240,6 @@
<string name="error_could_not_extract_private_key">не можна витягти секретний ключ</string>
<!--errors without preceeding Error:-->
<string name="error_jelly_bean_needed">Вам потрібний Android 4.1 для використання функції Androids NFC промінь!</string>
- <string name="error_nfc_needed">NFC недоступний на вашому пристрої!</string>
<string name="error_nothing_import">Ключ не знайдено!</string>
<string name="error_generic_report_bug">Трапилася загальна помилка, будь ласка, створіть новий звіт про помилку для OpenKeychain.</string>
<!--results shown after decryption/verification-->
@@ -432,6 +431,8 @@
<string name="user_id_info_uncertified_title">Несертифіковано</string>
<string name="user_id_info_invalid_title">Недійсна</string>
<string name="user_id_info_invalid_text">Щось неправильне у цій сутності!</string>
+ <!--Key trust-->
+ <!--keybase proof stuff-->
<!--Edit key-->
<string name="edit_key_action_change_passphrase">Змінити пароль</string>
<string name="edit_key_action_add_identity">Додати сутність</string>
@@ -451,8 +452,6 @@
<string name="create_key_text">Введіть ваше повне ім\'я, електронну адреса та оберіть парольну фразу.</string>
<string name="create_key_hint_full_name">Повне ім\'я, наприклад Степан Бандера</string>
<!--View key-->
- <string name="view_key_revoked">Цей ключ вже відкликано!</string>
- <string name="view_key_expired">Термін дії цього ключа вже минув!</string>
<!--Navigation Drawer-->
<string name="nav_keys">Ключі</string>
<string name="nav_apps">Програми</string>
@@ -589,6 +588,7 @@
<string name="msg_dc_clear_meta_time">Час зміни: %s</string>
<string name="msg_dc_error_integrity_check">Помилка перевірки цілісності!</string>
<string name="msg_dc_ok">Гаразд</string>
+ <!--Messages for VerifySignedLiteralData operation-->
<!--Messages for SignEncrypt operation-->
<!--Messages for PgpSignEncrypt operation-->
<plurals name="error_import_non_pgp_part">
diff --git a/OpenKeychain/src/main/res/values-zh-rTW/strings.xml b/OpenKeychain/src/main/res/values-zh-rTW/strings.xml
index daa0a171b..b6ab2c8a4 100644
--- a/OpenKeychain/src/main/res/values-zh-rTW/strings.xml
+++ b/OpenKeychain/src/main/res/values-zh-rTW/strings.xml
@@ -196,7 +196,6 @@
<string name="error_could_not_extract_private_key">無法抽取私鑰</string>
<!--errors without preceeding Error:-->
<string name="error_jelly_bean_needed">需要Android 4.1以上才能使用NFC Beam功能!</string>
- <string name="error_nfc_needed">您的裝置不支援NFC!</string>
<string name="error_nothing_import">找不到金鑰!</string>
<!--results shown after decryption/verification-->
<string name="decrypt_result_no_signature">尚未簽名</string>
@@ -313,7 +312,6 @@
<string name="intent_send_encrypt">使用OpenKeychain加密</string>
<string name="intent_send_decrypt">使用OpenKeychain解密</string>
<!--Remote API-->
- <string name="api_no_apps">沒有已註冊的應用程式!\n\n支援的第三方應用程式請參考說明文件。</string>
<string name="api_settings_show_info">顯示進階資訊</string>
<string name="api_settings_hide_info">隱藏進階資訊</string>
<string name="api_settings_show_advanced">顯示進階設定</string>
@@ -356,6 +354,8 @@
<string name="user_id_info_uncertified_title">未認證</string>
<string name="user_id_info_uncertified_text">這個身分識別尚未經過認證,你不能確認這個身分識別是否屬於真的某個人。</string>
<string name="user_id_info_invalid_title">無效</string>
+ <!--Key trust-->
+ <!--keybase proof stuff-->
<!--Edit key-->
<string name="edit_key_action_change_passphrase">變更口令</string>
<string name="edit_key_action_add_identity">新增身分識別</string>
@@ -379,8 +379,6 @@
<string name="create_key_final_robot_text">建立金鑰可能需要一點時間,來杯咖啡吧…</string>
<string name="create_key_text">輸入你的全名、電子郵件,並選擇一組口令。</string>
<!--View key-->
- <string name="view_key_revoked">這把金鑰已被撤銷!</string>
- <string name="view_key_expired">這把金鑰已經過期!</string>
<!--Navigation Drawer-->
<string name="nav_keys">金鑰</string>
<string name="nav_apps">應用程式</string>
@@ -408,6 +406,7 @@
<!--Messages for DecryptVerify operation-->
<string name="msg_dc_error_invalid_siglist">找不到有效的簽名資訊!</string>
<string name="msg_dc">開始解密…</string>
+ <!--Messages for VerifySignedLiteralData operation-->
<!--Messages for SignEncrypt operation-->
<!--Messages for PgpSignEncrypt operation-->
<string name="msg_crt_warn_not_found">找不到金鑰!</string>
diff --git a/OpenKeychain/src/main/res/values-zh/strings.xml b/OpenKeychain/src/main/res/values-zh/strings.xml
index 1c0e0c396..209350332 100644
--- a/OpenKeychain/src/main/res/values-zh/strings.xml
+++ b/OpenKeychain/src/main/res/values-zh/strings.xml
@@ -213,6 +213,8 @@
<string name="share_nfc_dialog">使用NFC分享</string>
<!--Key list-->
<!--Key view-->
+ <!--Key trust-->
+ <!--keybase proof stuff-->
<!--Edit key-->
<!--Create key-->
<!--View key-->
@@ -231,6 +233,7 @@
<!--Promote key-->
<!--Other messages used in OperationLogs-->
<!--Messages for DecryptVerify operation-->
+ <!--Messages for VerifySignedLiteralData operation-->
<!--Messages for SignEncrypt operation-->
<!--Messages for PgpSignEncrypt operation-->
<!--PassphraseCache-->
diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml
index 10a53f0b7..917c64bda 100644
--- a/OpenKeychain/src/main/res/values/strings.xml
+++ b/OpenKeychain/src/main/res/values/strings.xml
@@ -48,7 +48,7 @@
<string name="section_user_ids">"Identities"</string>
<string name="section_should_you_trust">"Should you trust this key?"</string>
<string name="section_proof_details">Proof verification</string>
- <string name="section_cloud_evidence">"Evidence from the cloud"</string>
+ <string name="section_cloud_evidence">"Proofs from the cloud"</string>
<string name="section_keys">"Subkeys"</string>
<string name="section_cloud_search">"Cloud search"</string>
<string name="section_general">"General"</string>
@@ -83,7 +83,7 @@
<string name="btn_next">"Next"</string>
<string name="btn_back">"Back"</string>
<string name="btn_no">"No"</string>
- <string name="btn_match">"Fingerprints are matching"</string>
+ <string name="btn_match">"Fingerprints match"</string>
<string name="btn_lookup_key">"Lookup key"</string>
<string name="btn_share_encrypted_signed">"Encrypt and share message"</string>
<string name="btn_view_cert_key">"View certification key"</string>
@@ -565,9 +565,10 @@
<string name="key_trust_revoked">"This key has been revoked by its owner. You should not trust it."</string>
<string name="key_trust_expired">"This key has expired. You should not trust it."</string>
<string name="key_trust_old_keys">" It may be OK to use this to decrypt an old message dating from the time when this key was valid."</string>
- <string name="key_trust_no_cloud_evidence">"No evidence from the cloud on this key’s trustworthiness."</string>
+ <string name="key_trust_no_cloud_evidence">"No proof from the cloud on this key’s trustworthiness."</string>
<string name="key_trust_start_cloud_search">"Start search"</string>
<string name="key_trust_results_prefix">"Keybase.io offers “proofs” which assert that the owner of this key: "</string>
+ <string name="key_trust_header_text">"Note: Keybase.io proofs are an experimental feature of OpenKeychain. We encourage you to scan QR Codes or exchange keys via NFC in addition to verifying them."</string>
<!-- keybase proof stuff -->
<string name="keybase_narrative_twitter">"Posts to Twitter as"</string>
@@ -580,12 +581,12 @@
<string name="keybase_narrative_unknown">"Unknown proof type"</string>
<string name="keybase_proof_failure">"Unfortunately this proof cannot be verified."</string>
<string name="keybase_unknown_proof_failure">"Unrecognized problem with proof checker"</string>
- <string name="keybase_problem_fetching_evidence">"Problem with proof evidence"</string>
+ <string name="keybase_problem_fetching_evidence">"Problem with proof"</string>
<string name="keybase_key_mismatch">"Key fingerprint doesn’t match that in proof post"</string>
<string name="keybase_dns_query_failure">"DNS TXT Record retrieval failed"</string>
<string name="keybase_no_prover_found">"No proof checker found for"</string>
<string name="keybase_message_payload_mismatch">"Decrypted proof post does not match expected value"</string>
- <string name="keybase_message_fetching_data">"Fetching proof evidence"</string>
+ <string name="keybase_message_fetching_data">"Fetching proof"</string>
<string name="keybase_proof_succeeded">"This proof has been verified!"</string>
<string name="keybase_a_post">"A post"</string>
<string name="keybase_fetched_from">"fetched from"</string>
@@ -624,7 +625,7 @@
<string name="edit_key_error_add_subkey">"Add at least one subkey!"</string>
<!-- Create key -->
- <string name="create_key_upload">"Upload key to keyserver"</string>
+ <string name="create_key_upload">"Synchronize with the cloud"</string>
<string name="create_key_empty">"This field is required"</string>
<string name="create_key_passphrases_not_equal">"Passphrases do not match"</string>
<string name="create_key_final_text">"You entered the following identity:"</string>
@@ -637,7 +638,7 @@
<!-- View key -->
<string name="view_key_revoked">"Revoked: Key must not be used anymore!"</string>
- <string name="view_key_expired">"Expired: The contact needs to extend the keys validity!"</string>
+ <string name="view_key_expired">"Expired: The contact needs to extend the key's validity!"</string>
<string name="view_key_expired_secret">"Expired: You can extend the keys validity by editing it!"</string>
<string name="view_key_my_key">"My Key"</string>
<string name="view_key_verified">"Verified Key"</string>
@@ -794,19 +795,19 @@
<string name="msg_kc_error_dup_key">"Subkey %s occurs twice in keyring. Keyring is malformed, not importing!"</string>
<string name="msg_kc_master">"Processing master key"</string>
<string name="msg_kc_master_bad_type">"Removing master key certificate of unknown type (%s)"</string>
- <string name="msg_kc_master_bad_local">"Removing master key certificate with "local" flag"</string>
+ <string name="msg_kc_master_bad_local">"Removing master key certificate with 'local' flag"</string>
<string name="msg_kc_master_bad_err">"Removing bad master key certificate"</string>
<string name="msg_kc_master_bad_time">"Removing keyring revocation certificate with future timestamp"</string>
<string name="msg_kc_master_bad_type_uid">"Removing user ID certificate in bad position"</string>
<string name="msg_kc_master_bad">"Removing bad master key certificate"</string>
- <string name="msg_kc_master_local">"Removing master key certificate with "local" flag"</string>
+ <string name="msg_kc_master_local">"Removing master key certificate with 'local' flag"</string>
<string name="msg_kc_revoke_dup">"Removing redundant keyring revocation certificate"</string>
<string name="msg_kc_notation_dup">"Removing redundant notation certificate"</string>
<string name="msg_kc_notation_empty">"Removing empty notation certificate"</string>
<string name="msg_kc_sub">"Processing subkey %s"</string>
<string name="msg_kc_sub_bad">"Removing invalid subkey binding certificate"</string>
<string name="msg_kc_sub_bad_err">"Removing bad subkey binding certificate"</string>
- <string name="msg_kc_sub_bad_local">"Removing subkey binding certificate with "local" flag"</string>
+ <string name="msg_kc_sub_bad_local">"Removing subkey binding certificate with 'local' flag"</string>
<string name="msg_kc_sub_bad_keyid">"Subkey binding issuer id mismatch"</string>
<string name="msg_kc_sub_bad_time">"Removing subkey binding certificate with future timestamp"</string>
<string name="msg_kc_sub_bad_type">"Unknown subkey certificate type: %s"</string>
@@ -991,8 +992,8 @@
<string name="msg_dc_clear_decompress">"Unpacking compressed data"</string>
<string name="msg_dc_clear_meta_file">"Filename: %s"</string>
<string name="msg_dc_clear_meta_mime">"MIME type: %s"</string>
- <string name="msg_dc_clear_meta_size">"Filesize: %s"</string>
- <string name="msg_dc_clear_meta_size_unknown">"Filesize is unknown"</string>
+ <string name="msg_dc_clear_meta_size">"File size: %s"</string>
+ <string name="msg_dc_clear_meta_size_unknown">"File size is unknown"</string>
<string name="msg_dc_clear_meta_time">"Modification time: %s"</string>
<string name="msg_dc_clear_signature_bad">"Signature check NOT OK!"</string>
<string name="msg_dc_clear_signature_check">"Verifying signature data"</string>
@@ -1039,10 +1040,10 @@
<!-- Messages for SignEncrypt operation -->
<string name="msg_se">"Starting sign/encrypt operation"</string>
<string name="msg_se_input_bytes">"Processing input from byte array"</string>
- <string name="msg_se_input_uri">"Processing input from uri"</string>
+ <string name="msg_se_input_uri">"Processing input from URI"</string>
<string name="msg_se_error_no_input">"No input given!"</string>
- <string name="msg_se_error_input_uri_not_found">"Error opening Uri for reading!"</string>
- <string name="msg_se_error_output_uri_not_found">"Error opening Uri for writing!"</string>
+ <string name="msg_se_error_input_uri_not_found">"Error opening URI for reading!"</string>
+ <string name="msg_se_error_output_uri_not_found">"Error opening URI for writing!"</string>
<string name="msg_se_error_too_many_inputs">"More inputs than outputs specified! This is probably a programming error, please report!"</string>
<string name="msg_se_warn_output_left">"Got outputs left but no inputs. This is probably a programming error, please report!"</string>
<string name="msg_se_success">"Sign/encrypt operation successful"</string>