mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-11-30 12:32:17 -05:00
Merge remote-tracking branch 'origin/master' into db-overhaul
This commit is contained in:
commit
1b38a5b2e3
@ -1,3 +1,9 @@
|
|||||||
|
2.5
|
||||||
|
* fix decryption of symmetric pgp messages/files
|
||||||
|
* refactored edit key screen (thanks to Ash Hughes)
|
||||||
|
* new modern design for encrypt/decrypt screens
|
||||||
|
* OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)
|
||||||
|
|
||||||
2.4
|
2.4
|
||||||
Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
|
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):
|
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="org.sufficientlysecure.keychain.demo"
|
package="org.sufficientlysecure.keychain.demo"
|
||||||
android:versionCode="3"
|
android:versionCode="4"
|
||||||
android:versionName="2">
|
android:versionName="3">
|
||||||
|
|
||||||
<uses-sdk
|
<uses-sdk
|
||||||
android:minSdkVersion="9"
|
android:minSdkVersion="9"
|
||||||
|
@ -25,34 +25,64 @@ import android.content.ServiceConnection;
|
|||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
|
|
||||||
public class OpenPgpServiceConnection {
|
public class OpenPgpServiceConnection {
|
||||||
|
|
||||||
|
// interface to create callbacks for onServiceConnected
|
||||||
|
public interface OnBound {
|
||||||
|
public void onBound(IOpenPgpService service);
|
||||||
|
}
|
||||||
|
|
||||||
private Context mApplicationContext;
|
private Context mApplicationContext;
|
||||||
|
|
||||||
private boolean mBound;
|
|
||||||
private IOpenPgpService mService;
|
private IOpenPgpService mService;
|
||||||
private String mProviderPackageName;
|
private String mProviderPackageName;
|
||||||
|
|
||||||
|
private OnBound mOnBoundListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create new OpenPgpServiceConnection
|
||||||
|
*
|
||||||
|
* @param context
|
||||||
|
* @param providerPackageName specify package name of OpenPGP provider,
|
||||||
|
* e.g., "org.sufficientlysecure.keychain"
|
||||||
|
*/
|
||||||
public OpenPgpServiceConnection(Context context, String providerPackageName) {
|
public OpenPgpServiceConnection(Context context, String providerPackageName) {
|
||||||
this.mApplicationContext = context.getApplicationContext();
|
this.mApplicationContext = context.getApplicationContext();
|
||||||
this.mProviderPackageName = providerPackageName;
|
this.mProviderPackageName = providerPackageName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create new OpenPgpServiceConnection
|
||||||
|
*
|
||||||
|
* @param context
|
||||||
|
* @param providerPackageName specify package name of OpenPGP provider,
|
||||||
|
* e.g., "org.sufficientlysecure.keychain"
|
||||||
|
* @param onBoundListener callback, executed when connection to service has been established
|
||||||
|
*/
|
||||||
|
public OpenPgpServiceConnection(Context context, String providerPackageName,
|
||||||
|
OnBound onBoundListener) {
|
||||||
|
this.mApplicationContext = context.getApplicationContext();
|
||||||
|
this.mProviderPackageName = providerPackageName;
|
||||||
|
this.mOnBoundListener = onBoundListener;
|
||||||
|
}
|
||||||
|
|
||||||
public IOpenPgpService getService() {
|
public IOpenPgpService getService() {
|
||||||
return mService;
|
return mService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isBound() {
|
public boolean isBound() {
|
||||||
return mBound;
|
return (mService != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ServiceConnection mServiceConnection = new ServiceConnection() {
|
private ServiceConnection mServiceConnection = new ServiceConnection() {
|
||||||
public void onServiceConnected(ComponentName name, IBinder service) {
|
public void onServiceConnected(ComponentName name, IBinder service) {
|
||||||
mService = IOpenPgpService.Stub.asInterface(service);
|
mService = IOpenPgpService.Stub.asInterface(service);
|
||||||
mBound = true;
|
if (mOnBoundListener != null) {
|
||||||
|
mOnBoundListener.onBound(mService);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onServiceDisconnected(ComponentName name) {
|
public void onServiceDisconnected(ComponentName name) {
|
||||||
mService = null;
|
mService = null;
|
||||||
mBound = false;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -63,7 +93,7 @@ public class OpenPgpServiceConnection {
|
|||||||
*/
|
*/
|
||||||
public boolean bindToService() {
|
public boolean bindToService() {
|
||||||
// if not already bound...
|
// if not already bound...
|
||||||
if (mService == null && !mBound) {
|
if (mService == null) {
|
||||||
try {
|
try {
|
||||||
Intent serviceIntent = new Intent();
|
Intent serviceIntent = new Intent();
|
||||||
serviceIntent.setAction(IOpenPgpService.class.getName());
|
serviceIntent.setAction(IOpenPgpService.class.getName());
|
||||||
|
@ -102,4 +102,4 @@ task localTest(type: Test, dependsOn: assemble) {
|
|||||||
classpath = sourceSets.testLocal.runtimeClasspath
|
classpath = sourceSets.testLocal.runtimeClasspath
|
||||||
}
|
}
|
||||||
|
|
||||||
check.dependsOn localTest
|
//check.dependsOn localTest
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="org.sufficientlysecure.keychain"
|
package="org.sufficientlysecure.keychain"
|
||||||
android:installLocation="auto"
|
android:installLocation="auto"
|
||||||
android:versionCode="24000"
|
android:versionCode="25000"
|
||||||
android:versionName="2.4">
|
android:versionName="2.5">
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
General remarks
|
General remarks
|
||||||
|
@ -40,6 +40,7 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.ApiAccounts;
|
|||||||
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
||||||
import org.sufficientlysecure.keychain.remote.ui.RemoteServiceActivity;
|
import org.sufficientlysecure.keychain.remote.ui.RemoteServiceActivity;
|
||||||
import org.sufficientlysecure.keychain.service.PassphraseCacheService;
|
import org.sufficientlysecure.keychain.service.PassphraseCacheService;
|
||||||
|
import org.sufficientlysecure.keychain.ui.ImportKeysActivity;
|
||||||
import org.sufficientlysecure.keychain.util.InputData;
|
import org.sufficientlysecure.keychain.util.InputData;
|
||||||
import org.sufficientlysecure.keychain.util.Log;
|
import org.sufficientlysecure.keychain.util.Log;
|
||||||
|
|
||||||
@ -316,11 +317,10 @@ public class OpenPgpService extends RemoteService {
|
|||||||
if (signatureResult.getStatus() == OpenPgpSignatureResult.SIGNATURE_UNKNOWN_PUB_KEY) {
|
if (signatureResult.getStatus() == OpenPgpSignatureResult.SIGNATURE_UNKNOWN_PUB_KEY) {
|
||||||
// If signature is unknown we return an _additional_ PendingIntent
|
// If signature is unknown we return an _additional_ PendingIntent
|
||||||
// to retrieve the missing key
|
// to retrieve the missing key
|
||||||
// TODO!!!
|
Intent intent = new Intent(getBaseContext(), ImportKeysActivity.class);
|
||||||
Intent intent = new Intent(getBaseContext(), RemoteServiceActivity.class);
|
intent.setAction(ImportKeysActivity.ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN);
|
||||||
intent.setAction(RemoteServiceActivity.ACTION_ERROR_MESSAGE);
|
intent.putExtra(ImportKeysActivity.EXTRA_KEY_ID, signatureResult.getKeyId());
|
||||||
intent.putExtra(RemoteServiceActivity.EXTRA_ERROR_MESSAGE, "todo");
|
intent.putExtra(ImportKeysActivity.EXTRA_PENDING_INTENT_DATA, data);
|
||||||
intent.putExtra(RemoteServiceActivity.EXTRA_DATA, data);
|
|
||||||
|
|
||||||
PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0,
|
PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0,
|
||||||
intent,
|
intent,
|
||||||
@ -357,11 +357,10 @@ public class OpenPgpService extends RemoteService {
|
|||||||
|
|
||||||
// If keys are not in db we return an additional PendingIntent
|
// If keys are not in db we return an additional PendingIntent
|
||||||
// to retrieve the missing key
|
// to retrieve the missing key
|
||||||
// TODO!!!
|
Intent intent = new Intent(getBaseContext(), ImportKeysActivity.class);
|
||||||
Intent intent = new Intent(getBaseContext(), RemoteServiceActivity.class);
|
intent.setAction(ImportKeysActivity.ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN);
|
||||||
intent.setAction(RemoteServiceActivity.ACTION_ERROR_MESSAGE);
|
intent.putExtra(ImportKeysActivity.EXTRA_KEY_ID, keyId);
|
||||||
intent.putExtra(RemoteServiceActivity.EXTRA_ERROR_MESSAGE, "todo");
|
intent.putExtra(ImportKeysActivity.EXTRA_PENDING_INTENT_DATA, data);
|
||||||
intent.putExtra(RemoteServiceActivity.EXTRA_DATA, data);
|
|
||||||
|
|
||||||
PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0,
|
PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0,
|
||||||
intent,
|
intent,
|
||||||
@ -373,6 +372,9 @@ public class OpenPgpService extends RemoteService {
|
|||||||
} else {
|
} else {
|
||||||
Intent result = new Intent();
|
Intent result = new Intent();
|
||||||
result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS);
|
result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS);
|
||||||
|
|
||||||
|
// TODO: also return PendingIntent that opens the key view activity
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -112,7 +112,6 @@ public class KeychainIntentService extends IntentService
|
|||||||
// possible targets:
|
// possible targets:
|
||||||
public static final int TARGET_BYTES = 1;
|
public static final int TARGET_BYTES = 1;
|
||||||
public static final int TARGET_URI = 2;
|
public static final int TARGET_URI = 2;
|
||||||
public static final int TARGET_STREAM = 3;
|
|
||||||
|
|
||||||
// encrypt
|
// encrypt
|
||||||
public static final String ENCRYPT_SIGNATURE_KEY_ID = "secret_key_id";
|
public static final String ENCRYPT_SIGNATURE_KEY_ID = "secret_key_id";
|
||||||
@ -122,7 +121,6 @@ public class KeychainIntentService extends IntentService
|
|||||||
public static final String ENCRYPT_MESSAGE_BYTES = "message_bytes";
|
public static final String ENCRYPT_MESSAGE_BYTES = "message_bytes";
|
||||||
public static final String ENCRYPT_INPUT_FILE = "input_file";
|
public static final String ENCRYPT_INPUT_FILE = "input_file";
|
||||||
public static final String ENCRYPT_OUTPUT_FILE = "output_file";
|
public static final String ENCRYPT_OUTPUT_FILE = "output_file";
|
||||||
public static final String ENCRYPT_PROVIDER_URI = "provider_uri";
|
|
||||||
public static final String ENCRYPT_SYMMETRIC_PASSPHRASE = "passphrase";
|
public static final String ENCRYPT_SYMMETRIC_PASSPHRASE = "passphrase";
|
||||||
|
|
||||||
// decrypt/verify
|
// decrypt/verify
|
||||||
@ -173,11 +171,7 @@ public class KeychainIntentService extends IntentService
|
|||||||
public static final String RESULT_KEY_USAGES = "new_key_usages";
|
public static final String RESULT_KEY_USAGES = "new_key_usages";
|
||||||
|
|
||||||
// encrypt
|
// encrypt
|
||||||
public static final String RESULT_SIGNATURE_BYTES = "signature_data";
|
|
||||||
public static final String RESULT_SIGNATURE_STRING = "signature_text";
|
|
||||||
public static final String RESULT_ENCRYPTED_STRING = "encrypted_message";
|
|
||||||
public static final String RESULT_BYTES = "encrypted_data";
|
public static final String RESULT_BYTES = "encrypted_data";
|
||||||
public static final String RESULT_URI = "result_uri";
|
|
||||||
|
|
||||||
// decrypt/verify
|
// decrypt/verify
|
||||||
public static final String RESULT_DECRYPTED_BYTES = "decrypted_data";
|
public static final String RESULT_DECRYPTED_BYTES = "decrypted_data";
|
||||||
@ -191,10 +185,6 @@ public class KeychainIntentService extends IntentService
|
|||||||
// export
|
// export
|
||||||
public static final String RESULT_EXPORT = "exported";
|
public static final String RESULT_EXPORT = "exported";
|
||||||
|
|
||||||
// query
|
|
||||||
public static final String RESULT_QUERY_KEY_DATA = "query_key_data";
|
|
||||||
public static final String RESULT_QUERY_KEY_SEARCH_RESULT = "query_key_search_result";
|
|
||||||
|
|
||||||
Messenger mMessenger;
|
Messenger mMessenger;
|
||||||
|
|
||||||
private boolean mIsCanceled;
|
private boolean mIsCanceled;
|
||||||
@ -735,9 +725,6 @@ public class KeychainIntentService extends IntentService
|
|||||||
ArrayList<ImportKeysListEntry> entries = data.getParcelableArrayList(DOWNLOAD_KEY_LIST);
|
ArrayList<ImportKeysListEntry> entries = data.getParcelableArrayList(DOWNLOAD_KEY_LIST);
|
||||||
String keyServer = data.getString(DOWNLOAD_KEY_SERVER);
|
String keyServer = data.getString(DOWNLOAD_KEY_SERVER);
|
||||||
|
|
||||||
// TODO: add extra which requires fingerprint suport and force verification!
|
|
||||||
// only supported by newer sks keyserver versions
|
|
||||||
|
|
||||||
// this downloads the keys and places them into the ImportKeysListEntry entries
|
// this downloads the keys and places them into the ImportKeysListEntry entries
|
||||||
HkpKeyServer server = new HkpKeyServer(keyServer);
|
HkpKeyServer server = new HkpKeyServer(keyServer);
|
||||||
|
|
||||||
|
@ -38,6 +38,8 @@ import org.sufficientlysecure.keychain.Constants;
|
|||||||
import org.sufficientlysecure.keychain.R;
|
import org.sufficientlysecure.keychain.R;
|
||||||
import org.sufficientlysecure.keychain.pgp.PgpKeyHelper;
|
import org.sufficientlysecure.keychain.pgp.PgpKeyHelper;
|
||||||
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
|
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
|
||||||
|
import org.sufficientlysecure.keychain.provider.KeychainContract;
|
||||||
|
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
||||||
import org.sufficientlysecure.keychain.ui.dialog.PassphraseDialogFragment;
|
import org.sufficientlysecure.keychain.ui.dialog.PassphraseDialogFragment;
|
||||||
import org.sufficientlysecure.keychain.util.Log;
|
import org.sufficientlysecure.keychain.util.Log;
|
||||||
|
|
||||||
@ -88,13 +90,9 @@ public class DecryptFragment extends Fragment {
|
|||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
switch (requestCode) {
|
switch (requestCode) {
|
||||||
|
|
||||||
// this request is returned after LookupUnknownKeyDialogFragment started
|
|
||||||
// ImportKeysActivity and user looked uo key
|
|
||||||
case RESULT_CODE_LOOKUP_KEY: {
|
case RESULT_CODE_LOOKUP_KEY: {
|
||||||
Log.d(Constants.TAG, "Returning from Lookup Key...");
|
|
||||||
if (resultCode == Activity.RESULT_OK) {
|
if (resultCode == Activity.RESULT_OK) {
|
||||||
// decrypt again
|
// TODO: generate new OpenPgpSignatureResult and display it
|
||||||
// decryptStart();
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -189,6 +187,7 @@ public class DecryptFragment extends Fragment {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Should be overridden by MessageFragment and FileFragment to start actual decryption
|
* Should be overridden by MessageFragment and FileFragment to start actual decryption
|
||||||
|
*
|
||||||
* @param passphrase
|
* @param passphrase
|
||||||
*/
|
*/
|
||||||
protected void decryptStart(String passphrase) {
|
protected void decryptStart(String passphrase) {
|
||||||
|
@ -151,6 +151,10 @@ public class DrawerActivity extends ActionBarActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
if (mDrawerToggle == null) {
|
||||||
|
return super.onCreateOptionsMenu(menu);
|
||||||
|
}
|
||||||
|
|
||||||
menu.add(42, MENU_ID_PREFERENCE, 100, R.string.menu_preferences);
|
menu.add(42, MENU_ID_PREFERENCE, 100, R.string.menu_preferences);
|
||||||
menu.add(42, MENU_ID_HELP, 101, R.string.menu_help);
|
menu.add(42, MENU_ID_HELP, 101, R.string.menu_help);
|
||||||
|
|
||||||
@ -159,6 +163,10 @@ public class DrawerActivity extends ActionBarActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
if (mDrawerToggle == null) {
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
|
||||||
// The action bar home/up action should open or close the drawer.
|
// The action bar home/up action should open or close the drawer.
|
||||||
// ActionBarDrawerToggle will take care of this.
|
// ActionBarDrawerToggle will take care of this.
|
||||||
if (mDrawerToggle.onOptionsItemSelected(item)) {
|
if (mDrawerToggle.onOptionsItemSelected(item)) {
|
||||||
@ -216,14 +224,18 @@ public class DrawerActivity extends ActionBarActivity {
|
|||||||
protected void onPostCreate(Bundle savedInstanceState) {
|
protected void onPostCreate(Bundle savedInstanceState) {
|
||||||
super.onPostCreate(savedInstanceState);
|
super.onPostCreate(savedInstanceState);
|
||||||
// Sync the toggle state after onRestoreInstanceState has occurred.
|
// Sync the toggle state after onRestoreInstanceState has occurred.
|
||||||
mDrawerToggle.syncState();
|
if (mDrawerToggle != null) {
|
||||||
|
mDrawerToggle.syncState();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConfigurationChanged(Configuration newConfig) {
|
public void onConfigurationChanged(Configuration newConfig) {
|
||||||
super.onConfigurationChanged(newConfig);
|
super.onConfigurationChanged(newConfig);
|
||||||
// Pass any configuration change to the drawer toggles
|
// Pass any configuration change to the drawer toggles
|
||||||
mDrawerToggle.onConfigurationChanged(newConfig);
|
if (mDrawerToggle != null) {
|
||||||
|
mDrawerToggle.onConfigurationChanged(newConfig);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class NavItem {
|
private class NavItem {
|
||||||
|
@ -239,7 +239,6 @@ public class EncryptAsymmetricFragment extends Fragment {
|
|||||||
@Override
|
@Override
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
switch (requestCode) {
|
switch (requestCode) {
|
||||||
|
|
||||||
case RESULT_CODE_PUBLIC_KEYS: {
|
case RESULT_CODE_PUBLIC_KEYS: {
|
||||||
if (resultCode == Activity.RESULT_OK) {
|
if (resultCode == Activity.RESULT_OK) {
|
||||||
Bundle bundle = data.getExtras();
|
Bundle bundle = data.getExtras();
|
||||||
@ -260,11 +259,11 @@ public class EncryptAsymmetricFragment extends Fragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
package org.sufficientlysecure.keychain.ui;
|
package org.sufficientlysecure.keychain.ui;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
|
import android.app.Activity;
|
||||||
import android.app.ProgressDialog;
|
import android.app.ProgressDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@ -34,8 +35,10 @@ import android.support.v7.app.ActionBar;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
|
|
||||||
import com.beardedhen.androidbootstrap.BootstrapButton;
|
import com.beardedhen.androidbootstrap.BootstrapButton;
|
||||||
import com.devspark.appmsg.AppMsg;
|
import com.devspark.appmsg.AppMsg;
|
||||||
|
|
||||||
import org.sufficientlysecure.keychain.Constants;
|
import org.sufficientlysecure.keychain.Constants;
|
||||||
import org.sufficientlysecure.keychain.R;
|
import org.sufficientlysecure.keychain.R;
|
||||||
import org.sufficientlysecure.keychain.pgp.PgpKeyHelper;
|
import org.sufficientlysecure.keychain.pgp.PgpKeyHelper;
|
||||||
@ -54,7 +57,6 @@ public class ImportKeysActivity extends DrawerActivity implements ActionBar.OnNa
|
|||||||
+ "IMPORT_KEY_FROM_QR_CODE";
|
+ "IMPORT_KEY_FROM_QR_CODE";
|
||||||
public static final String ACTION_IMPORT_KEY_FROM_KEYSERVER = Constants.INTENT_PREFIX
|
public static final String ACTION_IMPORT_KEY_FROM_KEYSERVER = Constants.INTENT_PREFIX
|
||||||
+ "IMPORT_KEY_FROM_KEYSERVER";
|
+ "IMPORT_KEY_FROM_KEYSERVER";
|
||||||
// TODO: implement:
|
|
||||||
public static final String ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN = Constants.INTENT_PREFIX
|
public static final String ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN = Constants.INTENT_PREFIX
|
||||||
+ "IMPORT_KEY_FROM_KEY_SERVER_AND_RETURN";
|
+ "IMPORT_KEY_FROM_KEY_SERVER_AND_RETURN";
|
||||||
|
|
||||||
@ -72,6 +74,10 @@ public class ImportKeysActivity extends DrawerActivity implements ActionBar.OnNa
|
|||||||
public static final String EXTRA_KEY_ID = "key_id";
|
public static final String EXTRA_KEY_ID = "key_id";
|
||||||
public static final String EXTRA_FINGERPRINT = "fingerprint";
|
public static final String EXTRA_FINGERPRINT = "fingerprint";
|
||||||
|
|
||||||
|
// only used by ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN when used from OpenPgpService
|
||||||
|
public static final String EXTRA_PENDING_INTENT_DATA = "data";
|
||||||
|
private Intent mPendingIntentData;
|
||||||
|
|
||||||
// view
|
// view
|
||||||
private ImportKeysListFragment mListFragment;
|
private ImportKeysListFragment mListFragment;
|
||||||
private String[] mNavigationStrings;
|
private String[] mNavigationStrings;
|
||||||
@ -86,7 +92,7 @@ public class ImportKeysActivity extends DrawerActivity implements ActionBar.OnNa
|
|||||||
ImportKeysNFCFragment.class
|
ImportKeysNFCFragment.class
|
||||||
};
|
};
|
||||||
|
|
||||||
private int mCurrentNavPostition = -1;
|
private int mCurrentNavPosition = -1;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@ -102,17 +108,22 @@ public class ImportKeysActivity extends DrawerActivity implements ActionBar.OnNa
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
getSupportActionBar().setDisplayShowTitleEnabled(false);
|
|
||||||
|
|
||||||
setupDrawerNavigation(savedInstanceState);
|
|
||||||
|
|
||||||
// set drop down navigation
|
|
||||||
mNavigationStrings = getResources().getStringArray(R.array.import_action_list);
|
mNavigationStrings = getResources().getStringArray(R.array.import_action_list);
|
||||||
Context context = getSupportActionBar().getThemedContext();
|
|
||||||
ArrayAdapter<CharSequence> navigationAdapter = ArrayAdapter.createFromResource(context,
|
if (ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN.equals(getIntent().getAction())) {
|
||||||
R.array.import_action_list, android.R.layout.simple_spinner_dropdown_item);
|
setTitle(R.string.nav_import);
|
||||||
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
|
} else {
|
||||||
getSupportActionBar().setListNavigationCallbacks(navigationAdapter, this);
|
getSupportActionBar().setDisplayShowTitleEnabled(false);
|
||||||
|
|
||||||
|
setupDrawerNavigation(savedInstanceState);
|
||||||
|
|
||||||
|
// set drop down navigation
|
||||||
|
Context context = getSupportActionBar().getThemedContext();
|
||||||
|
ArrayAdapter<CharSequence> navigationAdapter = ArrayAdapter.createFromResource(context,
|
||||||
|
R.array.import_action_list, android.R.layout.simple_spinner_dropdown_item);
|
||||||
|
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
|
||||||
|
getSupportActionBar().setListNavigationCallbacks(navigationAdapter, this);
|
||||||
|
}
|
||||||
|
|
||||||
handleActions(savedInstanceState, getIntent());
|
handleActions(savedInstanceState, getIntent());
|
||||||
}
|
}
|
||||||
@ -152,34 +163,52 @@ public class ImportKeysActivity extends DrawerActivity implements ActionBar.OnNa
|
|||||||
// action: directly load data
|
// action: directly load data
|
||||||
startListFragment(savedInstanceState, importData, null, null);
|
startListFragment(savedInstanceState, importData, null, null);
|
||||||
}
|
}
|
||||||
} else if (ACTION_IMPORT_KEY_FROM_KEYSERVER.equals(action)) {
|
} else if (ACTION_IMPORT_KEY_FROM_KEYSERVER.equals(action)
|
||||||
String query = null;
|
|| ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN.equals(action)) {
|
||||||
if (extras.containsKey(EXTRA_QUERY)) {
|
|
||||||
query = extras.getString(EXTRA_QUERY);
|
// only used for OpenPgpService
|
||||||
} else if (extras.containsKey(EXTRA_KEY_ID)) {
|
if (extras.containsKey(EXTRA_PENDING_INTENT_DATA)) {
|
||||||
long keyId = intent.getLongExtra(EXTRA_KEY_ID, 0);
|
mPendingIntentData = extras.getParcelable(EXTRA_PENDING_INTENT_DATA);
|
||||||
if (keyId != 0) {
|
}
|
||||||
query = PgpKeyHelper.convertKeyIdToHex(keyId);
|
if (extras.containsKey(EXTRA_QUERY) || extras.containsKey(EXTRA_KEY_ID)) {
|
||||||
|
/* simple search based on query or key id */
|
||||||
|
|
||||||
|
String query = null;
|
||||||
|
if (extras.containsKey(EXTRA_QUERY)) {
|
||||||
|
query = extras.getString(EXTRA_QUERY);
|
||||||
|
} else if (extras.containsKey(EXTRA_KEY_ID)) {
|
||||||
|
long keyId = intent.getLongExtra(EXTRA_KEY_ID, 0);
|
||||||
|
if (keyId != 0) {
|
||||||
|
query = PgpKeyHelper.convertKeyIdToHex(keyId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (query != null && query.length() > 0) {
|
||||||
|
// display keyserver fragment with query
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putString(ImportKeysServerFragment.ARG_QUERY, query);
|
||||||
|
loadNavFragment(0, args);
|
||||||
|
|
||||||
|
// action: search immediately
|
||||||
|
startListFragment(savedInstanceState, null, null, query);
|
||||||
|
} else {
|
||||||
|
Log.e(Constants.TAG, "Query is empty!");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
} else if (extras.containsKey(EXTRA_FINGERPRINT)) {
|
} else if (extras.containsKey(EXTRA_FINGERPRINT)) {
|
||||||
|
/*
|
||||||
|
* search based on fingerprint, here we can enforce a check in the end
|
||||||
|
* if the right key has been downloaded
|
||||||
|
*/
|
||||||
|
|
||||||
String fingerprint = intent.getStringExtra(EXTRA_FINGERPRINT);
|
String fingerprint = intent.getStringExtra(EXTRA_FINGERPRINT);
|
||||||
if (fingerprint != null) {
|
loadFromFingerprint(savedInstanceState, fingerprint);
|
||||||
query = "0x" + fingerprint;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
Log.e(Constants.TAG,
|
Log.e(Constants.TAG,
|
||||||
"IMPORT_KEY_FROM_KEYSERVER action needs to contain the 'query', 'key_id', or " +
|
"IMPORT_KEY_FROM_KEYSERVER action needs to contain the 'query', 'key_id', or " +
|
||||||
"'fingerprint' extra!");
|
"'fingerprint' extra!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// display keyserver fragment with query
|
|
||||||
Bundle args = new Bundle();
|
|
||||||
args.putString(ImportKeysServerFragment.ARG_QUERY, query);
|
|
||||||
loadNavFragment(0, args);
|
|
||||||
|
|
||||||
// action: search immediately
|
|
||||||
startListFragment(savedInstanceState, null, null, query);
|
|
||||||
} else if (ACTION_IMPORT_KEY_FROM_FILE.equals(action)) {
|
} else if (ACTION_IMPORT_KEY_FROM_FILE.equals(action)) {
|
||||||
|
|
||||||
// NOTE: this only displays the appropriate fragment, no actions are taken
|
// NOTE: this only displays the appropriate fragment, no actions are taken
|
||||||
@ -234,14 +263,14 @@ public class ImportKeysActivity extends DrawerActivity implements ActionBar.OnNa
|
|||||||
* onNavigationItemSelected() should check whether the Fragment is already in existence
|
* onNavigationItemSelected() should check whether the Fragment is already in existence
|
||||||
* inside your Activity."
|
* inside your Activity."
|
||||||
* <p/>
|
* <p/>
|
||||||
* from http://bit.ly/1dBYThO
|
* from http://stackoverflow.com/a/14295474
|
||||||
* <p/>
|
* <p/>
|
||||||
* In our case, if we start ImportKeysActivity with parameters to directly search using a fingerprint,
|
* In our case, if we start ImportKeysActivity with parameters to directly search using a fingerprint,
|
||||||
* the fragment would be loaded twice resulting in the query being empty after the second load.
|
* the fragment would be loaded twice resulting in the query being empty after the second load.
|
||||||
* <p/>
|
* <p/>
|
||||||
* Our solution:
|
* Our solution:
|
||||||
* To prevent that a fragment will be loaded again even if it was already loaded loadNavFragment
|
* To prevent that a fragment will be loaded again even if it was already loaded loadNavFragment
|
||||||
* checks against mCurrentNavPostition.
|
* checks against mCurrentNavPosition.
|
||||||
*
|
*
|
||||||
* @param itemPosition
|
* @param itemPosition
|
||||||
* @param itemId
|
* @param itemId
|
||||||
@ -257,10 +286,12 @@ public class ImportKeysActivity extends DrawerActivity implements ActionBar.OnNa
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void loadNavFragment(int itemPosition, Bundle args) {
|
private void loadNavFragment(int itemPosition, Bundle args) {
|
||||||
if (mCurrentNavPostition != itemPosition) {
|
if (mCurrentNavPosition != itemPosition) {
|
||||||
getSupportActionBar().setSelectedNavigationItem(itemPosition);
|
if (ActionBar.NAVIGATION_MODE_LIST == getSupportActionBar().getNavigationMode()) {
|
||||||
|
getSupportActionBar().setSelectedNavigationItem(itemPosition);
|
||||||
|
}
|
||||||
loadFragment(NAVIGATION_CLASSES[itemPosition], args, mNavigationStrings[itemPosition]);
|
loadFragment(NAVIGATION_CLASSES[itemPosition], args, mNavigationStrings[itemPosition]);
|
||||||
mCurrentNavPostition = itemPosition;
|
mCurrentNavPosition = itemPosition;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -280,7 +311,11 @@ public class ImportKeysActivity extends DrawerActivity implements ActionBar.OnNa
|
|||||||
|
|
||||||
Log.d(Constants.TAG, "fingerprint: " + fingerprint);
|
Log.d(Constants.TAG, "fingerprint: " + fingerprint);
|
||||||
|
|
||||||
if (fingerprint.length() < 16) {
|
loadFromFingerprint(savedInstanceState, fingerprint);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadFromFingerprint(Bundle savedInstanceState, String fingerprint) {
|
||||||
|
if (fingerprint == null || fingerprint.length() < 40) {
|
||||||
AppMsg.makeText(this, R.string.import_qr_code_too_short_fingerprint,
|
AppMsg.makeText(this, R.string.import_qr_code_too_short_fingerprint,
|
||||||
AppMsg.STYLE_ALERT).show();
|
AppMsg.STYLE_ALERT).show();
|
||||||
return;
|
return;
|
||||||
@ -291,6 +326,7 @@ public class ImportKeysActivity extends DrawerActivity implements ActionBar.OnNa
|
|||||||
// display keyserver fragment with query
|
// display keyserver fragment with query
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putString(ImportKeysServerFragment.ARG_QUERY, query);
|
args.putString(ImportKeysServerFragment.ARG_QUERY, query);
|
||||||
|
args.putBoolean(ImportKeysServerFragment.ARG_DISABLE_QUERY_EDIT, true);
|
||||||
loadNavFragment(0, args);
|
loadNavFragment(0, args);
|
||||||
|
|
||||||
// action: search directly
|
// action: search directly
|
||||||
@ -301,66 +337,6 @@ public class ImportKeysActivity extends DrawerActivity implements ActionBar.OnNa
|
|||||||
mListFragment.loadNew(importData, dataUri, serverQuery, keyServer);
|
mListFragment.loadNew(importData, dataUri, serverQuery, keyServer);
|
||||||
}
|
}
|
||||||
|
|
||||||
// private void importAndSignOld(final long keyId, final String expectedFingerprint) {
|
|
||||||
// if (expectedFingerprint != null && expectedFingerprint.length() > 0) {
|
|
||||||
//
|
|
||||||
// Thread t = new Thread() {
|
|
||||||
// @Override
|
|
||||||
// public void run() {
|
|
||||||
// try {
|
|
||||||
// // TODO: display some sort of spinner here while the user waits
|
|
||||||
//
|
|
||||||
// // TODO: there should be only 1
|
|
||||||
// HkpKeyServer server = new HkpKeyServer(mPreferences.getKeyServers()[0]);
|
|
||||||
// String encodedKey = server.get(keyId);
|
|
||||||
//
|
|
||||||
// PGPKeyRing keyring = PGPHelper.decodeKeyRing(new ByteArrayInputStream(
|
|
||||||
// encodedKey.getBytes()));
|
|
||||||
// if (keyring != null && keyring instanceof PGPPublicKeyRing) {
|
|
||||||
// PGPPublicKeyRing publicKeyRing = (PGPPublicKeyRing) keyring;
|
|
||||||
//
|
|
||||||
// // make sure the fingerprints match before we cache this thing
|
|
||||||
// String actualFingerprint = PGPHelper.convertFingerprintToHex(publicKeyRing
|
|
||||||
// .getPublicKey().getFingerprint());
|
|
||||||
// if (expectedFingerprint.equals(actualFingerprint)) {
|
|
||||||
// // store the signed key in our local cache
|
|
||||||
// int retval = PGPMain.storeKeyRingInCache(publicKeyRing);
|
|
||||||
// if (retval != Id.return_value.ok
|
|
||||||
// && retval != Id.return_value.updated) {
|
|
||||||
// status.putString(EXTRA_ERROR,
|
|
||||||
// "Failed to store signed key in local cache");
|
|
||||||
// } else {
|
|
||||||
// Intent intent = new Intent(ImportFromQRCodeActivity.this,
|
|
||||||
// SignKeyActivity.class);
|
|
||||||
// intent.putExtra(EXTRA_KEY_ID, keyId);
|
|
||||||
// startActivityForResult(intent, Id.request.sign_key);
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// status.putString(
|
|
||||||
// EXTRA_ERROR,
|
|
||||||
// "Scanned fingerprint does NOT match the fingerprint of the received key. " +
|
|
||||||
// "You shouldnt trust this key.");
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// } catch (QueryException e) {
|
|
||||||
// Log.e(TAG, "Failed to query KeyServer", e);
|
|
||||||
// status.putString(EXTRA_ERROR, "Failed to query KeyServer");
|
|
||||||
// status.putInt(Constants.extras.STATUS, Id.message.done);
|
|
||||||
// } catch (IOException e) {
|
|
||||||
// Log.e(TAG, "Failed to query KeyServer", e);
|
|
||||||
// status.putString(EXTRA_ERROR, "Failed to query KeyServer");
|
|
||||||
// status.putInt(Constants.extras.STATUS, Id.message.done);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
//
|
|
||||||
// t.setName("KeyExchange Download Thread");
|
|
||||||
// t.setDaemon(true);
|
|
||||||
// t.start();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Import keys with mImportData
|
* Import keys with mImportData
|
||||||
*/
|
*/
|
||||||
@ -405,6 +381,11 @@ public class ImportKeysActivity extends DrawerActivity implements ActionBar.OnNa
|
|||||||
BadImportKeyDialogFragment.newInstance(bad);
|
BadImportKeyDialogFragment.newInstance(bad);
|
||||||
badImportKeyDialogFragment.show(getSupportFragmentManager(), "badKeyDialog");
|
badImportKeyDialogFragment.show(getSupportFragmentManager(), "badKeyDialog");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN.equals(getIntent().getAction())) {
|
||||||
|
ImportKeysActivity.this.setResult(Activity.RESULT_OK, mPendingIntentData);
|
||||||
|
finish();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -40,6 +40,7 @@ import org.sufficientlysecure.keychain.util.Log;
|
|||||||
public class ImportKeysServerFragment extends Fragment {
|
public class ImportKeysServerFragment extends Fragment {
|
||||||
public static final String ARG_QUERY = "query";
|
public static final String ARG_QUERY = "query";
|
||||||
public static final String ARG_KEY_SERVER = "key_server";
|
public static final String ARG_KEY_SERVER = "key_server";
|
||||||
|
public static final String ARG_DISABLE_QUERY_EDIT = "disable_query_edit";
|
||||||
|
|
||||||
private ImportKeysActivity mImportActivity;
|
private ImportKeysActivity mImportActivity;
|
||||||
|
|
||||||
@ -140,6 +141,10 @@ public class ImportKeysServerFragment extends Fragment {
|
|||||||
|
|
||||||
Log.d(Constants.TAG, "keyServer: " + keyServer);
|
Log.d(Constants.TAG, "keyServer: " + keyServer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (getArguments().getBoolean(ARG_DISABLE_QUERY_EDIT, false)) {
|
||||||
|
mQueryEditText.setEnabled(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
package org.sufficientlysecure.keychain.ui;
|
package org.sufficientlysecure.keychain.ui;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@ -157,18 +158,13 @@ public class ViewKeyActivity extends ActionBarActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateFromKeyserver(Uri dataUri) {
|
private void updateFromKeyserver(Uri dataUri) {
|
||||||
long updateKeyId = ProviderHelper.getMasterKeyId(ViewKeyActivity.this, dataUri);
|
byte[] fingerprintBlob = ProviderHelper.getFingerprint(this, dataUri);
|
||||||
|
String fingerprint = PgpKeyHelper.convertFingerprintToHex(fingerprintBlob);
|
||||||
if (updateKeyId == 0) {
|
|
||||||
Log.e(Constants.TAG, "this shouldn't happen. KeyId == 0!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Intent queryIntent = new Intent(this, ImportKeysActivity.class);
|
Intent queryIntent = new Intent(this, ImportKeysActivity.class);
|
||||||
queryIntent.setAction(ImportKeysActivity.ACTION_IMPORT_KEY_FROM_KEYSERVER);
|
queryIntent.setAction(ImportKeysActivity.ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN);
|
||||||
queryIntent.putExtra(ImportKeysActivity.EXTRA_KEY_ID, updateKeyId);
|
queryIntent.putExtra(ImportKeysActivity.EXTRA_FINGERPRINT, fingerprint);
|
||||||
|
|
||||||
// TODO: lookup with onactivityresult!
|
|
||||||
startActivityForResult(queryIntent, RESULT_CODE_LOOKUP_KEY);
|
startActivityForResult(queryIntent, RESULT_CODE_LOOKUP_KEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -246,4 +242,21 @@ public class ViewKeyActivity extends ActionBarActivity {
|
|||||||
mExportHelper.deleteKey(dataUri, returnHandler);
|
mExportHelper.deleteKey(dataUri, returnHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
|
switch (requestCode) {
|
||||||
|
case RESULT_CODE_LOOKUP_KEY: {
|
||||||
|
if (resultCode == Activity.RESULT_OK) {
|
||||||
|
// TODO: reload key??? move this into fragment?
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default: {
|
||||||
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ package org.sufficientlysecure.keychain.ui.adapter;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.support.v4.content.AsyncTaskLoader;
|
import android.support.v4.content.AsyncTaskLoader;
|
||||||
|
|
||||||
import org.sufficientlysecure.keychain.Constants;
|
import org.sufficientlysecure.keychain.Constants;
|
||||||
import org.sufficientlysecure.keychain.util.HkpKeyServer;
|
import org.sufficientlysecure.keychain.util.HkpKeyServer;
|
||||||
import org.sufficientlysecure.keychain.util.KeyServer;
|
import org.sufficientlysecure.keychain.util.KeyServer;
|
||||||
@ -53,7 +54,12 @@ public class ImportKeysListServerLoader
|
|||||||
return mEntryListWrapper;
|
return mEntryListWrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
queryServer(mServerQuery, mKeyServer);
|
if (mServerQuery.startsWith("0x") && mServerQuery.length() == 42) {
|
||||||
|
Log.d(Constants.TAG, "This search is based on a unique fingerprint. Enforce a fingerprint check!");
|
||||||
|
queryServer(mServerQuery, mKeyServer, true);
|
||||||
|
} else {
|
||||||
|
queryServer(mServerQuery, mKeyServer, false);
|
||||||
|
}
|
||||||
|
|
||||||
return mEntryListWrapper;
|
return mEntryListWrapper;
|
||||||
}
|
}
|
||||||
@ -84,14 +90,30 @@ public class ImportKeysListServerLoader
|
|||||||
/**
|
/**
|
||||||
* Query keyserver
|
* Query keyserver
|
||||||
*/
|
*/
|
||||||
private void queryServer(String query, String keyServer) {
|
private void queryServer(String query, String keyServer, boolean enforceFingerprint) {
|
||||||
HkpKeyServer server = new HkpKeyServer(keyServer);
|
HkpKeyServer server = new HkpKeyServer(keyServer);
|
||||||
try {
|
try {
|
||||||
ArrayList<ImportKeysListEntry> searchResult = server.search(query);
|
ArrayList<ImportKeysListEntry> searchResult = server.search(query);
|
||||||
|
|
||||||
mEntryList.clear();
|
mEntryList.clear();
|
||||||
// add result to data
|
// add result to data
|
||||||
mEntryList.addAll(searchResult);
|
if (enforceFingerprint) {
|
||||||
|
String fingerprint = query.substring(2);
|
||||||
|
Log.d(Constants.TAG, "fingerprint: " + fingerprint);
|
||||||
|
// query must return only one result!
|
||||||
|
if (searchResult.size() > 0) {
|
||||||
|
ImportKeysListEntry uniqueEntry = searchResult.get(0);
|
||||||
|
/*
|
||||||
|
* set fingerprint explicitly after query
|
||||||
|
* to enforce a check when the key is imported by KeychainIntentService
|
||||||
|
*/
|
||||||
|
uniqueEntry.setFingerPrintHex(fingerprint);
|
||||||
|
uniqueEntry.setSelected(true);
|
||||||
|
mEntryList.add(uniqueEntry);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
mEntryList.addAll(searchResult);
|
||||||
|
}
|
||||||
mEntryListWrapper = new AsyncTaskResultWrapper<ArrayList<ImportKeysListEntry>>(mEntryList, null);
|
mEntryListWrapper = new AsyncTaskResultWrapper<ArrayList<ImportKeysListEntry>>(mEntryList, null);
|
||||||
} catch (KeyServer.InsufficientQuery e) {
|
} catch (KeyServer.InsufficientQuery e) {
|
||||||
Log.e(Constants.TAG, "InsufficientQuery", e);
|
Log.e(Constants.TAG, "InsufficientQuery", e);
|
||||||
|
@ -28,20 +28,6 @@
|
|||||||
android:src="@drawable/overlay_error" />
|
android:src="@drawable/overlay_error" />
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
<com.beardedhen.androidbootstrap.BootstrapButton
|
|
||||||
android:id="@+id/lookup_key"
|
|
||||||
android:visibility="gone"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="50dp"
|
|
||||||
android:padding="4dp"
|
|
||||||
android:text="@string/btn_lookup_key"
|
|
||||||
bootstrapbutton:bb_icon_left="fa-download"
|
|
||||||
bootstrapbutton:bb_type="info"
|
|
||||||
bootstrapbutton:bb_size="small"
|
|
||||||
android:layout_alignParentTop="true"
|
|
||||||
android:layout_alignParentRight="true"
|
|
||||||
android:layout_alignParentEnd="true" />
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/mainUserId"
|
android:id="@+id/mainUserId"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
@ -60,4 +46,17 @@
|
|||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||||
android:layout_below="@+id/mainUserId"
|
android:layout_below="@+id/mainUserId"
|
||||||
android:layout_toRightOf="@+id/relativeLayout" />
|
android:layout_toRightOf="@+id/relativeLayout" />
|
||||||
|
|
||||||
|
<com.beardedhen.androidbootstrap.BootstrapButton
|
||||||
|
android:id="@+id/lookup_key"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:padding="4dp"
|
||||||
|
android:text="@string/btn_lookup_key"
|
||||||
|
bootstrapbutton:bb_icon_left="fa-download"
|
||||||
|
bootstrapbutton:bb_type="info"
|
||||||
|
bootstrapbutton:bb_size="small"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:layout_alignParentEnd="true" />
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
@ -1,6 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
|
<h2>2.5</h2>
|
||||||
|
<ul>
|
||||||
|
<li>fix decryption of symmetric pgp messages/files</li>
|
||||||
|
<li>refactored edit key screen (thanks to Ash Hughes)</li>
|
||||||
|
<li>OpenPGP API version 3 (multiple api accounts, internal fixes)</li>
|
||||||
|
<li>new modern design for encrypt/decrypt screens</li>
|
||||||
|
</ul>
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
|
<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):
|
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
|
<h2>2.5</h2>
|
||||||
|
<ul>
|
||||||
|
<li>fix decryption of symmetric pgp messages/files</li>
|
||||||
|
<li>refactored edit key screen (thanks to Ash Hughes)</li>
|
||||||
|
<li>OpenPGP API version 3 (multiple api accounts, internal fixes)</li>
|
||||||
|
<li>new modern design for encrypt/decrypt screens</li>
|
||||||
|
</ul>
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
|
<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):
|
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
|
<h2>2.5</h2>
|
||||||
|
<ul>
|
||||||
|
<li>fix decryption of symmetric pgp messages/files</li>
|
||||||
|
<li>refactored edit key screen (thanks to Ash Hughes)</li>
|
||||||
|
<li>OpenPGP API version 3 (multiple api accounts, internal fixes)</li>
|
||||||
|
<li>new modern design for encrypt/decrypt screens</li>
|
||||||
|
</ul>
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
|
<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):
|
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
|
<h2>2.5</h2>
|
||||||
|
<ul>
|
||||||
|
<li>fix decryption of symmetric pgp messages/files</li>
|
||||||
|
<li>refactored edit key screen (thanks to Ash Hughes)</li>
|
||||||
|
<li>OpenPGP API version 3 (multiple api accounts, internal fixes)</li>
|
||||||
|
<li>new modern design for encrypt/decrypt screens</li>
|
||||||
|
</ul>
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
|
<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):
|
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
|
<h2>2.5</h2>
|
||||||
|
<ul>
|
||||||
|
<li>corregido descifrado de mensajes/ficheros con pgp simétrico</li>
|
||||||
|
<li>rediseñada la pantalla de edición de claves (gracias a Ash Hughes)</li>
|
||||||
|
<li>API OpenPGP versión 3 (multiples cuentas api, correcciones internas)</li>
|
||||||
|
<li>diseño más moderno para las pantallas de cifrado/descifrado</li>
|
||||||
|
</ul>
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
<p>¡Gracias a todos los solicitantes de Google Summer of Code 2014, por hacer esta aplicación productiva y libre de errores!
|
<p>¡Gracias a todos los solicitantes de Google Summer of Code 2014, por hacer esta aplicación productiva y libre de errores!
|
||||||
Además de varios parches pequeños, un notable número de correcciones fueron hechas por las siguientes personas (en orden alfabético):
|
Además de varios parches pequeños, un notable número de correcciones fueron hechas por las siguientes personas (en orden alfabético):
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
|
<h2>2.5</h2>
|
||||||
|
<ul>
|
||||||
|
<li>fix decryption of symmetric pgp messages/files</li>
|
||||||
|
<li>refactored edit key screen (thanks to Ash Hughes)</li>
|
||||||
|
<li>OpenPGP API version 3 (multiple api accounts, internal fixes)</li>
|
||||||
|
<li>new modern design for encrypt/decrypt screens</li>
|
||||||
|
</ul>
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
|
<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):
|
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
|
<h2>2.5</h2>
|
||||||
|
<ul>
|
||||||
|
<li>fix decryption of symmetric pgp messages/files</li>
|
||||||
|
<li>refactored edit key screen (thanks to Ash Hughes)</li>
|
||||||
|
<li>OpenPGP API version 3 (multiple api accounts, internal fixes)</li>
|
||||||
|
<li>new modern design for encrypt/decrypt screens</li>
|
||||||
|
</ul>
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
|
<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):
|
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
|
<h2>2.5</h2>
|
||||||
|
<ul>
|
||||||
|
<li>fix decryption of symmetric pgp messages/files</li>
|
||||||
|
<li>refactored edit key screen (thanks to Ash Hughes)</li>
|
||||||
|
<li>OpenPGP API version 3 (multiple api accounts, internal fixes)</li>
|
||||||
|
<li>new modern design for encrypt/decrypt screens</li>
|
||||||
|
</ul>
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
<p>Merci à tous les participants de « Google Summer of Code 2014 » qui ont rendu cette version riche en fonctions et sans bogue !
|
<p>Merci à tous les participants de « Google Summer of Code 2014 » qui ont rendu cette version riche en fonctions et sans bogue !
|
||||||
À part plusieurs petits correctifs, un nombre notable de correctifs ont été apportés par les personnes suivantes (par ordre alphabétique) :
|
À part plusieurs petits correctifs, un nombre notable de correctifs ont été apportés par les personnes suivantes (par ordre alphabétique) :
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
|
<h2>2.5</h2>
|
||||||
|
<ul>
|
||||||
|
<li>fix decryption of symmetric pgp messages/files</li>
|
||||||
|
<li>refactored edit key screen (thanks to Ash Hughes)</li>
|
||||||
|
<li>OpenPGP API version 3 (multiple api accounts, internal fixes)</li>
|
||||||
|
<li>new modern design for encrypt/decrypt screens</li>
|
||||||
|
</ul>
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
<p>Grazie a tutti i partecipanti di Google Summer of Code 2014 che hanno reso questo rilascio ricco di caratteristiche e privo di bug!
|
<p>Grazie a tutti i partecipanti di Google Summer of Code 2014 che hanno reso questo rilascio ricco di caratteristiche e privo di bug!
|
||||||
Oltre a numerose piccole correzioni, un notevole numero di patch sono fatte dalle seguenti persone (in ordine alfabetico):
|
Oltre a numerose piccole correzioni, un notevole numero di patch sono fatte dalle seguenti persone (in ordine alfabetico):
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
|
<h2>2.5</h2>
|
||||||
|
<ul>
|
||||||
|
<li>fix decryption of symmetric pgp messages/files</li>
|
||||||
|
<li>refactored edit key screen (thanks to Ash Hughes)</li>
|
||||||
|
<li>OpenPGP API version 3 (multiple api accounts, internal fixes)</li>
|
||||||
|
<li>new modern design for encrypt/decrypt screens</li>
|
||||||
|
</ul>
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
<p>このリリースにおいて適用したリッチでバグのない機能を作ってくれたGoogle Summer of Code 2014の参加者たちに感謝を!
|
<p>このリリースにおいて適用したリッチでバグのない機能を作ってくれたGoogle Summer of Code 2014の参加者たちに感謝を!
|
||||||
また、以下の人達(アルファベット順)の作ってくれたいくつもののさなパッチや相当数のパッチにも:
|
また、以下の人達(アルファベット順)の作ってくれたいくつもののさなパッチや相当数のパッチにも:
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
|
<h2>2.5</h2>
|
||||||
|
<ul>
|
||||||
|
<li>fix decryption of symmetric pgp messages/files</li>
|
||||||
|
<li>refactored edit key screen (thanks to Ash Hughes)</li>
|
||||||
|
<li>OpenPGP API version 3 (multiple api accounts, internal fixes)</li>
|
||||||
|
<li>new modern design for encrypt/decrypt screens</li>
|
||||||
|
</ul>
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
|
<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):
|
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
|
<h2>2.5</h2>
|
||||||
|
<ul>
|
||||||
|
<li>fix decryption of symmetric pgp messages/files</li>
|
||||||
|
<li>refactored edit key screen (thanks to Ash Hughes)</li>
|
||||||
|
<li>OpenPGP API version 3 (multiple api accounts, internal fixes)</li>
|
||||||
|
<li>new modern design for encrypt/decrypt screens</li>
|
||||||
|
</ul>
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
<p>Podziękowania dla wszystkich kandydatów do Google Summer of Code 2014 którzy uczynili to wydanie bogatym w nowe funkcje i pozbawione błedów!
|
<p>Podziękowania dla wszystkich kandydatów do Google Summer of Code 2014 którzy uczynili to wydanie bogatym w nowe funkcje i pozbawione błedów!
|
||||||
Poza kilkoma małymi poprawkami, znaczna ilość aktualizacji została wykonana przez poniższe osoby (w kolejności alfabetycznej):
|
Poza kilkoma małymi poprawkami, znaczna ilość aktualizacji została wykonana przez poniższe osoby (w kolejności alfabetycznej):
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
|
<h2>2.5</h2>
|
||||||
|
<ul>
|
||||||
|
<li>fix decryption of symmetric pgp messages/files</li>
|
||||||
|
<li>refactored edit key screen (thanks to Ash Hughes)</li>
|
||||||
|
<li>OpenPGP API version 3 (multiple api accounts, internal fixes)</li>
|
||||||
|
<li>new modern design for encrypt/decrypt screens</li>
|
||||||
|
</ul>
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
|
<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):
|
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
|
<h2>2.5</h2>
|
||||||
|
<ul>
|
||||||
|
<li>fix decryption of symmetric pgp messages/files</li>
|
||||||
|
<li>refactored edit key screen (thanks to Ash Hughes)</li>
|
||||||
|
<li>OpenPGP API version 3 (multiple api accounts, internal fixes)</li>
|
||||||
|
<li>new modern design for encrypt/decrypt screens</li>
|
||||||
|
</ul>
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
<p>Спасибо всем участникам Google Summer of Code 2014, которые помогли сделать этот выпуск, добавив функции и исправив ошибки!
|
<p>Спасибо всем участникам Google Summer of Code 2014, которые помогли сделать этот выпуск, добавив функции и исправив ошибки!
|
||||||
Из общего числа патчей, особенный вклад внесли следующие люди (в алфавитном порядке):
|
Из общего числа патчей, особенный вклад внесли следующие люди (в алфавитном порядке):
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
|
<h2>2.5</h2>
|
||||||
|
<ul>
|
||||||
|
<li>fix decryption of symmetric pgp messages/files</li>
|
||||||
|
<li>refactored edit key screen (thanks to Ash Hughes)</li>
|
||||||
|
<li>OpenPGP API version 3 (multiple api accounts, internal fixes)</li>
|
||||||
|
<li>new modern design for encrypt/decrypt screens</li>
|
||||||
|
</ul>
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
|
<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):
|
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
|
<h2>2.5</h2>
|
||||||
|
<ul>
|
||||||
|
<li>fix decryption of symmetric pgp messages/files</li>
|
||||||
|
<li>refactored edit key screen (thanks to Ash Hughes)</li>
|
||||||
|
<li>OpenPGP API version 3 (multiple api accounts, internal fixes)</li>
|
||||||
|
<li>new modern design for encrypt/decrypt screens</li>
|
||||||
|
</ul>
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
|
<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):
|
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
|
<h2>2.5</h2>
|
||||||
|
<ul>
|
||||||
|
<li>виправлено опис симетричних повідомлень/файлів pgp</li>
|
||||||
|
<li>перероблено екран редагування ключа (завдяки Ash Hughes)</li>
|
||||||
|
<li>OpenPGP API версія 3 (підтримка кількох профілів, внутрішні зміни)</li>
|
||||||
|
<li>новий сучасний дизайн для екранів шифрування/розшифрування</li>
|
||||||
|
</ul>
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
<p>Дякуємо усім заявникам Google Summer of Code 2014, які зробили цю версію багатшу на функції та вільну від помилок!
|
<p>Дякуємо усім заявникам Google Summer of Code 2014, які зробили цю версію багатшу на функції та вільну від помилок!
|
||||||
Крім окремих незначних латок, значне число латок зробили наступні люди (у алфавітному порядку):
|
Крім окремих незначних латок, значне число латок зробили наступні люди (у алфавітному порядку):
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
|
<h2>2.5</h2>
|
||||||
|
<ul>
|
||||||
|
<li>fix decryption of symmetric pgp messages/files</li>
|
||||||
|
<li>refactored edit key screen (thanks to Ash Hughes)</li>
|
||||||
|
<li>OpenPGP API version 3 (multiple api accounts, internal fixes)</li>
|
||||||
|
<li>new modern design for encrypt/decrypt screens</li>
|
||||||
|
</ul>
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
|
<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):
|
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
|
<h2>2.5</h2>
|
||||||
|
<ul>
|
||||||
|
<li>fix decryption of symmetric pgp messages/files</li>
|
||||||
|
<li>refactored edit key screen (thanks to Ash Hughes)</li>
|
||||||
|
<li>OpenPGP API version 3 (multiple api accounts, internal fixes)</li>
|
||||||
|
<li>new modern design for encrypt/decrypt screens</li>
|
||||||
|
</ul>
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
|
<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):
|
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
|
||||||
|
@ -9,8 +9,8 @@ And don't add newlines before or after p tags because of transifex -->
|
|||||||
<ul>
|
<ul>
|
||||||
<li>fix decryption of symmetric pgp messages/files</li>
|
<li>fix decryption of symmetric pgp messages/files</li>
|
||||||
<li>refactored edit key screen (thanks to Ash Hughes)</li>
|
<li>refactored edit key screen (thanks to Ash Hughes)</li>
|
||||||
<li>OpenPGP API version 3 (multiple api accounts, internal fixes)</li>
|
|
||||||
<li>new modern design for encrypt/decrypt screens</li>
|
<li>new modern design for encrypt/decrypt screens</li>
|
||||||
|
<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2>2.4</h2>
|
<h2>2.4</h2>
|
||||||
|
@ -74,6 +74,7 @@
|
|||||||
<string name="menu_import_from_qr_code">Importar desde código QR</string>
|
<string name="menu_import_from_qr_code">Importar desde código QR</string>
|
||||||
<string name="menu_import">Importar</string>
|
<string name="menu_import">Importar</string>
|
||||||
<string name="menu_import_from_nfc">Importar desde NFC</string>
|
<string name="menu_import_from_nfc">Importar desde NFC</string>
|
||||||
|
<string name="menu_export_public_keys">Exportar todas las claves públicas</string>
|
||||||
<string name="menu_export_secret_keys">Exportar todas las claves secretas</string>
|
<string name="menu_export_secret_keys">Exportar todas las claves secretas</string>
|
||||||
<string name="menu_export_key">Exportar hacia archivo</string>
|
<string name="menu_export_key">Exportar hacia archivo</string>
|
||||||
<string name="menu_delete_key">Borrar clave</string>
|
<string name="menu_delete_key">Borrar clave</string>
|
||||||
@ -98,6 +99,8 @@
|
|||||||
<string name="menu_key_edit_cancel">Cancelar</string>
|
<string name="menu_key_edit_cancel">Cancelar</string>
|
||||||
<string name="menu_encrypt_to">Cifrar hacia...</string>
|
<string name="menu_encrypt_to">Cifrar hacia...</string>
|
||||||
<string name="menu_select_all">Seleccionar todo</string>
|
<string name="menu_select_all">Seleccionar todo</string>
|
||||||
|
<string name="menu_add_keys">Añadir claves</string>
|
||||||
|
<string name="menu_export_keys">Exportar claves</string>
|
||||||
<!--label-->
|
<!--label-->
|
||||||
<string name="label_sign">Firmar</string>
|
<string name="label_sign">Firmar</string>
|
||||||
<string name="label_message">Mensaje</string>
|
<string name="label_message">Mensaje</string>
|
||||||
@ -189,11 +192,15 @@
|
|||||||
<string name="set_a_passphrase">Establece una frase de contraseña antes.</string>
|
<string name="set_a_passphrase">Establece una frase de contraseña antes.</string>
|
||||||
<string name="no_filemanager_installed">No hay un gestor de archivos compatible instalado.</string>
|
<string name="no_filemanager_installed">No hay un gestor de archivos compatible instalado.</string>
|
||||||
<string name="passphrases_do_not_match">Las frases de contraseña no coinciden.</string>
|
<string name="passphrases_do_not_match">Las frases de contraseña no coinciden.</string>
|
||||||
|
<string name="passphrase_must_not_be_empty">Por favor, introduce una frase de contraseña.</string>
|
||||||
<string name="passphrase_for_symmetric_encryption">Cifrado simétrico.</string>
|
<string name="passphrase_for_symmetric_encryption">Cifrado simétrico.</string>
|
||||||
<string name="passphrase_for">Introducir la frase de contraseña para \'%s\'</string>
|
<string name="passphrase_for">Introducir la frase de contraseña para \'%s\'</string>
|
||||||
<string name="file_delete_confirmation">¿Estás seguro de que quieres borrar\n%s?</string>
|
<string name="file_delete_confirmation">¿Estás seguro de que quieres borrar\n%s?</string>
|
||||||
<string name="file_delete_successful">Borrado satisfactoriamente.</string>
|
<string name="file_delete_successful">Borrado satisfactoriamente.</string>
|
||||||
<string name="no_file_selected">Selecciona un archivo antes.</string>
|
<string name="no_file_selected">Selecciona un archivo antes.</string>
|
||||||
|
<string name="decryption_successful">Descifrado y/o verificado satisfactoriamente.</string>
|
||||||
|
<string name="encryption_successful">Firmado y/o cifrado satisfactoriamente.</string>
|
||||||
|
<string name="encryption_to_clipboard_successful">Firmado y/o cifrado al portapapeles satisfactoriamente.</string>
|
||||||
<string name="enter_passphrase_twice">Introduce la frase de contraseña dos veces.</string>
|
<string name="enter_passphrase_twice">Introduce la frase de contraseña dos veces.</string>
|
||||||
<string name="select_encryption_key">Selecciona al menos una clave de cifrado.</string>
|
<string name="select_encryption_key">Selecciona al menos una clave de cifrado.</string>
|
||||||
<string name="select_encryption_or_signature_key">Selecciona al menos una clave de cifrado o de firma.</string>
|
<string name="select_encryption_or_signature_key">Selecciona al menos una clave de cifrado o de firma.</string>
|
||||||
@ -205,6 +212,7 @@
|
|||||||
<string name="key_deletion_confirmation_multi">¿Quieres realmente borrar todas las claves seleccionadas?\n¡No podrás deshacerlo!</string>
|
<string name="key_deletion_confirmation_multi">¿Quieres realmente borrar todas las claves seleccionadas?\n¡No podrás deshacerlo!</string>
|
||||||
<string name="secret_key_deletion_confirmation">¿Quieres realmente borrar la clave SECRETA \'%s\'?\n¡No podrás deshacerlo!</string>
|
<string name="secret_key_deletion_confirmation">¿Quieres realmente borrar la clave SECRETA \'%s\'?\n¡No podrás deshacerlo!</string>
|
||||||
<string name="ask_save_changed_key">Has hecho cambios en el almacén de claves, ¿quieres guardarlos?</string>
|
<string name="ask_save_changed_key">Has hecho cambios en el almacén de claves, ¿quieres guardarlos?</string>
|
||||||
|
<string name="ask_empty_id_ok">Has añadido una ID de usuario vacía, ¿Estás seguro que quieres continuar?</string>
|
||||||
<string name="public_key_deletetion_confirmation">¿Quieres realmente borrar la clave PÚBLICA \'%s\'?\n¡No podrás deshacerlo!</string>
|
<string name="public_key_deletetion_confirmation">¿Quieres realmente borrar la clave PÚBLICA \'%s\'?\n¡No podrás deshacerlo!</string>
|
||||||
<string name="secret_key_delete_text">¿Borrar claves secretas?</string>
|
<string name="secret_key_delete_text">¿Borrar claves secretas?</string>
|
||||||
<string name="also_export_secret_keys">¿Exportar también las claves secretas?</string>
|
<string name="also_export_secret_keys">¿Exportar también las claves secretas?</string>
|
||||||
@ -298,6 +306,7 @@
|
|||||||
<item quantity="one">parte del archivo cargado es un objeto OpenPGP válido pero no una clave OpenPGP</item>
|
<item quantity="one">parte del archivo cargado es un objeto OpenPGP válido pero no una clave OpenPGP</item>
|
||||||
<item quantity="other">partes del archivo cargado son objetos OpenPGP válidos pero no claves OpenPGP</item>
|
<item quantity="other">partes del archivo cargado son objetos OpenPGP válidos pero no claves OpenPGP</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
<string name="error_change_something_first">Debes hacer cambios en el almacén de claves antes de que puedas guardarlo</string>
|
||||||
<!--progress dialogs, usually ending in '…'-->
|
<!--progress dialogs, usually ending in '…'-->
|
||||||
<string name="progress_done">Hecho.</string>
|
<string name="progress_done">Hecho.</string>
|
||||||
<string name="progress_cancel">Cancelar</string>
|
<string name="progress_cancel">Cancelar</string>
|
||||||
@ -423,6 +432,9 @@
|
|||||||
<string name="key_view_tab_main">Información</string>
|
<string name="key_view_tab_main">Información</string>
|
||||||
<string name="key_view_tab_certs">Certificaciones</string>
|
<string name="key_view_tab_certs">Certificaciones</string>
|
||||||
<!--Navigation Drawer-->
|
<!--Navigation Drawer-->
|
||||||
|
<string name="nav_contacts">Claves</string>
|
||||||
|
<string name="nav_encrypt">Firmar y cifrar</string>
|
||||||
|
<string name="nav_decrypt">Descifrar y verificar</string>
|
||||||
<string name="nav_import">Importar claves</string>
|
<string name="nav_import">Importar claves</string>
|
||||||
<string name="nav_secret_keys">Mis claves</string>
|
<string name="nav_secret_keys">Mis claves</string>
|
||||||
<string name="nav_apps">Aplicaciones registradas</string>
|
<string name="nav_apps">Aplicaciones registradas</string>
|
||||||
@ -436,4 +448,6 @@
|
|||||||
<string name="section_uids_to_sign">IDs de usuario para firmar</string>
|
<string name="section_uids_to_sign">IDs de usuario para firmar</string>
|
||||||
<string name="progress_re_adding_certs">Nueva aplicación de certificados</string>
|
<string name="progress_re_adding_certs">Nueva aplicación de certificados</string>
|
||||||
<!--hints-->
|
<!--hints-->
|
||||||
|
<string name="encrypt_content_edit_text_hint">Escribe aquí el mensaje que quieras cifrar y/o firmar...</string>
|
||||||
|
<string name="decrypt_content_edit_text_hint">Introduce aquí el texto cifrado para descifrarlo y/o verificarlo...</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -74,6 +74,7 @@
|
|||||||
<string name="menu_import_from_qr_code">Importer depuis un code QR</string>
|
<string name="menu_import_from_qr_code">Importer depuis un code QR</string>
|
||||||
<string name="menu_import">Importer</string>
|
<string name="menu_import">Importer</string>
|
||||||
<string name="menu_import_from_nfc">Importer avec NFC</string>
|
<string name="menu_import_from_nfc">Importer avec NFC</string>
|
||||||
|
<string name="menu_export_public_keys">Exporter toutes les clefs publiques</string>
|
||||||
<string name="menu_export_secret_keys">Exporter toutes les clefs secrètes</string>
|
<string name="menu_export_secret_keys">Exporter toutes les clefs secrètes</string>
|
||||||
<string name="menu_export_key">Exporter vers un fichier</string>
|
<string name="menu_export_key">Exporter vers un fichier</string>
|
||||||
<string name="menu_delete_key">Supprimer la clef</string>
|
<string name="menu_delete_key">Supprimer la clef</string>
|
||||||
@ -98,6 +99,8 @@
|
|||||||
<string name="menu_key_edit_cancel">Annuler</string>
|
<string name="menu_key_edit_cancel">Annuler</string>
|
||||||
<string name="menu_encrypt_to">Chiffrer vers...</string>
|
<string name="menu_encrypt_to">Chiffrer vers...</string>
|
||||||
<string name="menu_select_all">Tout sélectionner</string>
|
<string name="menu_select_all">Tout sélectionner</string>
|
||||||
|
<string name="menu_add_keys">Ajouter des clefs</string>
|
||||||
|
<string name="menu_export_keys">Exporter des clefs</string>
|
||||||
<!--label-->
|
<!--label-->
|
||||||
<string name="label_sign">Signer</string>
|
<string name="label_sign">Signer</string>
|
||||||
<string name="label_message">Message</string>
|
<string name="label_message">Message</string>
|
||||||
@ -189,11 +192,15 @@
|
|||||||
<string name="set_a_passphrase">Définir d\'abord une phrase de passe.</string>
|
<string name="set_a_passphrase">Définir d\'abord une phrase de passe.</string>
|
||||||
<string name="no_filemanager_installed">Aucun gestionnaire de fichiers compatible installé.</string>
|
<string name="no_filemanager_installed">Aucun gestionnaire de fichiers compatible installé.</string>
|
||||||
<string name="passphrases_do_not_match">Les phrases de passe ne correspondent pas.</string>
|
<string name="passphrases_do_not_match">Les phrases de passe ne correspondent pas.</string>
|
||||||
|
<string name="passphrase_must_not_be_empty">Veuillez saisir une phrase de passe</string>
|
||||||
<string name="passphrase_for_symmetric_encryption">Chriffrement symétrique.</string>
|
<string name="passphrase_for_symmetric_encryption">Chriffrement symétrique.</string>
|
||||||
<string name="passphrase_for">Saisir une phrase de passe pour « %s »</string>
|
<string name="passphrase_for">Saisir une phrase de passe pour « %s »</string>
|
||||||
<string name="file_delete_confirmation">Êtes-vous sûr de vouloir supprimer\n%s ?</string>
|
<string name="file_delete_confirmation">Êtes-vous sûr de vouloir supprimer\n%s ?</string>
|
||||||
<string name="file_delete_successful">Supprimé avec succès.</string>
|
<string name="file_delete_successful">Supprimé avec succès.</string>
|
||||||
<string name="no_file_selected">Choisir d\'abord un fichier.</string>
|
<string name="no_file_selected">Choisir d\'abord un fichier.</string>
|
||||||
|
<string name="decryption_successful">Déchiffré et/ou vérifié avec succès</string>
|
||||||
|
<string name="encryption_successful">Signé et/ou chiffré avec succès</string>
|
||||||
|
<string name="encryption_to_clipboard_successful">Signé et/ou chiffré vers le presse-papiers avec succès</string>
|
||||||
<string name="enter_passphrase_twice">Saisir la phrase de passe deux fois.</string>
|
<string name="enter_passphrase_twice">Saisir la phrase de passe deux fois.</string>
|
||||||
<string name="select_encryption_key">Choisir au moins une clef de chiffrement.</string>
|
<string name="select_encryption_key">Choisir au moins une clef de chiffrement.</string>
|
||||||
<string name="select_encryption_or_signature_key">Choisir au moins une clef de chiffrement ou de signature.</string>
|
<string name="select_encryption_or_signature_key">Choisir au moins une clef de chiffrement ou de signature.</string>
|
||||||
@ -205,6 +212,7 @@
|
|||||||
<string name="key_deletion_confirmation_multi">Voulez-vous vraiment supprimer toutes les clefs choisies ?\nCeci est irréversible !</string>
|
<string name="key_deletion_confirmation_multi">Voulez-vous vraiment supprimer toutes les clefs choisies ?\nCeci est irréversible !</string>
|
||||||
<string name="secret_key_deletion_confirmation">Voulez-vous vraiment supprimer la clef SECRÈTE %s ?\nVous ne pourrez pas la restituer !</string>
|
<string name="secret_key_deletion_confirmation">Voulez-vous vraiment supprimer la clef SECRÈTE %s ?\nVous ne pourrez pas la restituer !</string>
|
||||||
<string name="ask_save_changed_key">Vous avez apporté des changements au trousseau, voulez-vous l\'enregistrer ?</string>
|
<string name="ask_save_changed_key">Vous avez apporté des changements au trousseau, voulez-vous l\'enregistrer ?</string>
|
||||||
|
<string name="ask_empty_id_ok">Vous avez ajouté un ID utilisateur vide, êtes-vous certain de vouloir continuer?</string>
|
||||||
<string name="public_key_deletetion_confirmation">Voulez-vous vraiment supprimer la clef PUBLIQUE « %s » ?\nVous ne pourrez pas la restituer !</string>
|
<string name="public_key_deletetion_confirmation">Voulez-vous vraiment supprimer la clef PUBLIQUE « %s » ?\nVous ne pourrez pas la restituer !</string>
|
||||||
<string name="secret_key_delete_text">Supprimer les clefs privées ?</string>
|
<string name="secret_key_delete_text">Supprimer les clefs privées ?</string>
|
||||||
<string name="also_export_secret_keys">Exporter aussi les clefs secrètes?</string>
|
<string name="also_export_secret_keys">Exporter aussi les clefs secrètes?</string>
|
||||||
@ -424,6 +432,9 @@
|
|||||||
<string name="key_view_tab_main">Infos</string>
|
<string name="key_view_tab_main">Infos</string>
|
||||||
<string name="key_view_tab_certs">Certifications</string>
|
<string name="key_view_tab_certs">Certifications</string>
|
||||||
<!--Navigation Drawer-->
|
<!--Navigation Drawer-->
|
||||||
|
<string name="nav_contacts">Clefs</string>
|
||||||
|
<string name="nav_encrypt">Signer et chiffrer</string>
|
||||||
|
<string name="nav_decrypt">Déchiffrer et vérifier</string>
|
||||||
<string name="nav_import">Importer les clefs</string>
|
<string name="nav_import">Importer les clefs</string>
|
||||||
<string name="nav_secret_keys">Mes clefs</string>
|
<string name="nav_secret_keys">Mes clefs</string>
|
||||||
<string name="nav_apps">Applis enregistrées</string>
|
<string name="nav_apps">Applis enregistrées</string>
|
||||||
@ -437,4 +448,6 @@
|
|||||||
<string name="section_uids_to_sign">ID utilisateur pour signer</string>
|
<string name="section_uids_to_sign">ID utilisateur pour signer</string>
|
||||||
<string name="progress_re_adding_certs">Nouvel application des certificats</string>
|
<string name="progress_re_adding_certs">Nouvel application des certificats</string>
|
||||||
<!--hints-->
|
<!--hints-->
|
||||||
|
<string name="encrypt_content_edit_text_hint">Écrire ici le message à chiffrer et/ou signer...</string>
|
||||||
|
<string name="decrypt_content_edit_text_hint">Saisir le cryptogramme à déchiffrer et/ou à vérifier ici...</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
<string name="section_certification_key">あなたの鍵を証明に利用します</string>
|
<string name="section_certification_key">あなたの鍵を証明に利用します</string>
|
||||||
<string name="section_upload_key">鍵のアップロード</string>
|
<string name="section_upload_key">鍵のアップロード</string>
|
||||||
<string name="section_key_server">鍵サーバ</string>
|
<string name="section_key_server">鍵サーバ</string>
|
||||||
<string name="section_encrypt_and_or_sign">暗号化と/もしくは署名</string>
|
<string name="section_encrypt_and_or_sign">暗号化/署名</string>
|
||||||
<string name="section_decrypt_verify">復号化と検証</string>
|
<string name="section_decrypt_verify">復号化と検証</string>
|
||||||
<!--button-->
|
<!--button-->
|
||||||
<string name="btn_sign">署名</string>
|
<string name="btn_sign">署名</string>
|
||||||
@ -74,6 +74,7 @@
|
|||||||
<string name="menu_import_from_qr_code">QRコードからインポート</string>
|
<string name="menu_import_from_qr_code">QRコードからインポート</string>
|
||||||
<string name="menu_import">インポート</string>
|
<string name="menu_import">インポート</string>
|
||||||
<string name="menu_import_from_nfc">NFCからインポート</string>
|
<string name="menu_import_from_nfc">NFCからインポート</string>
|
||||||
|
<string name="menu_export_public_keys">すべての公開鍵のエクスポート</string>
|
||||||
<string name="menu_export_secret_keys">すべての秘密鍵のエクスポート</string>
|
<string name="menu_export_secret_keys">すべての秘密鍵のエクスポート</string>
|
||||||
<string name="menu_export_key">ファイルへのエクスポート</string>
|
<string name="menu_export_key">ファイルへのエクスポート</string>
|
||||||
<string name="menu_delete_key">鍵の削除</string>
|
<string name="menu_delete_key">鍵の削除</string>
|
||||||
@ -98,6 +99,8 @@
|
|||||||
<string name="menu_key_edit_cancel">キャンセル</string>
|
<string name="menu_key_edit_cancel">キャンセル</string>
|
||||||
<string name="menu_encrypt_to">暗号化...</string>
|
<string name="menu_encrypt_to">暗号化...</string>
|
||||||
<string name="menu_select_all">すべて選択</string>
|
<string name="menu_select_all">すべて選択</string>
|
||||||
|
<string name="menu_add_keys">鍵の追加</string>
|
||||||
|
<string name="menu_export_keys">複数鍵のエクスポート</string>
|
||||||
<!--label-->
|
<!--label-->
|
||||||
<string name="label_sign">署名</string>
|
<string name="label_sign">署名</string>
|
||||||
<string name="label_message">メッセージ</string>
|
<string name="label_message">メッセージ</string>
|
||||||
@ -186,11 +189,15 @@
|
|||||||
<string name="set_a_passphrase">最初にパスフレーズを設定してください。</string>
|
<string name="set_a_passphrase">最初にパスフレーズを設定してください。</string>
|
||||||
<string name="no_filemanager_installed">互換性のないファイルマネージャがインストールされています。</string>
|
<string name="no_filemanager_installed">互換性のないファイルマネージャがインストールされています。</string>
|
||||||
<string name="passphrases_do_not_match">パスフレーズが一致しません。</string>
|
<string name="passphrases_do_not_match">パスフレーズが一致しません。</string>
|
||||||
|
<string name="passphrase_must_not_be_empty">パスフレーズを入れてください。</string>
|
||||||
<string name="passphrase_for_symmetric_encryption">対称暗号。</string>
|
<string name="passphrase_for_symmetric_encryption">対称暗号。</string>
|
||||||
<string name="passphrase_for">\'%s\' にパスフレーズを入れてください。</string>
|
<string name="passphrase_for">\'%s\' にパスフレーズを入れてください。</string>
|
||||||
<string name="file_delete_confirmation">%s を削除してもかまいませんか?</string>
|
<string name="file_delete_confirmation">%s を削除してもかまいませんか?</string>
|
||||||
<string name="file_delete_successful">削除に成功しました。</string>
|
<string name="file_delete_successful">削除に成功しました。</string>
|
||||||
<string name="no_file_selected">最初にファイルを選択してください。</string>
|
<string name="no_file_selected">最初にファイルを選択してください。</string>
|
||||||
|
<string name="decryption_successful">復号化/検証に成功しました。</string>
|
||||||
|
<string name="encryption_successful">署名/暗号化に成功しました。</string>
|
||||||
|
<string name="encryption_to_clipboard_successful">クリップボードの中身の署名/暗号化に成功しました。</string>
|
||||||
<string name="enter_passphrase_twice">もう一度パスフレーズを入れてください。</string>
|
<string name="enter_passphrase_twice">もう一度パスフレーズを入れてください。</string>
|
||||||
<string name="select_encryption_key">少なくとも1つの暗号化鍵を選択して下さい。</string>
|
<string name="select_encryption_key">少なくとも1つの暗号化鍵を選択して下さい。</string>
|
||||||
<string name="select_encryption_or_signature_key">少なくとも1つの暗号化鍵か署名鍵を選択して下さい。</string>
|
<string name="select_encryption_or_signature_key">少なくとも1つの暗号化鍵か署名鍵を選択して下さい。</string>
|
||||||
@ -202,6 +209,7 @@
|
|||||||
<string name="key_deletion_confirmation_multi">選択したすべての鍵を本当に削除してよいですか?\nこれは元に戻せません。</string>
|
<string name="key_deletion_confirmation_multi">選択したすべての鍵を本当に削除してよいですか?\nこれは元に戻せません。</string>
|
||||||
<string name="secret_key_deletion_confirmation">秘密鍵\'%s\'を本当に削除してもよいですか?\nこれは元に戻せません!</string>
|
<string name="secret_key_deletion_confirmation">秘密鍵\'%s\'を本当に削除してもよいですか?\nこれは元に戻せません!</string>
|
||||||
<string name="ask_save_changed_key">あなたは鍵輪に変更を加えました、これを保存しますか?</string>
|
<string name="ask_save_changed_key">あなたは鍵輪に変更を加えました、これを保存しますか?</string>
|
||||||
|
<string name="ask_empty_id_ok">あなたは空のユーザーIDを追加しました、このまま続けますか?</string>
|
||||||
<string name="public_key_deletetion_confirmation">公開鍵\'%s\'を本当に削除してもよいですか?\nこれは元に戻せません!</string>
|
<string name="public_key_deletetion_confirmation">公開鍵\'%s\'を本当に削除してもよいですか?\nこれは元に戻せません!</string>
|
||||||
<string name="secret_key_delete_text">秘密鍵を削除しますか?</string>
|
<string name="secret_key_delete_text">秘密鍵を削除しますか?</string>
|
||||||
<string name="also_export_secret_keys">秘密鍵もエクスポートしますか?</string>
|
<string name="also_export_secret_keys">秘密鍵もエクスポートしますか?</string>
|
||||||
@ -409,6 +417,9 @@
|
|||||||
<string name="key_view_tab_main">情報</string>
|
<string name="key_view_tab_main">情報</string>
|
||||||
<string name="key_view_tab_certs">証明</string>
|
<string name="key_view_tab_certs">証明</string>
|
||||||
<!--Navigation Drawer-->
|
<!--Navigation Drawer-->
|
||||||
|
<string name="nav_contacts">鍵</string>
|
||||||
|
<string name="nav_encrypt">署名と暗号化</string>
|
||||||
|
<string name="nav_decrypt">復号化と検証</string>
|
||||||
<string name="nav_import">鍵のインポート</string>
|
<string name="nav_import">鍵のインポート</string>
|
||||||
<string name="nav_secret_keys">自分の鍵</string>
|
<string name="nav_secret_keys">自分の鍵</string>
|
||||||
<string name="nav_apps">登録済みのアプリ</string>
|
<string name="nav_apps">登録済みのアプリ</string>
|
||||||
@ -422,4 +433,6 @@
|
|||||||
<string name="section_uids_to_sign">署名に使うユーザーID</string>
|
<string name="section_uids_to_sign">署名に使うユーザーID</string>
|
||||||
<string name="progress_re_adding_certs">検証を再適用する</string>
|
<string name="progress_re_adding_certs">検証を再適用する</string>
|
||||||
<!--hints-->
|
<!--hints-->
|
||||||
|
<string name="encrypt_content_edit_text_hint">ここに書いたメッセージを暗号化/署名..</string>
|
||||||
|
<string name="decrypt_content_edit_text_hint">ここに入力された暗号化テキストを復号化/検証...</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -48,6 +48,7 @@
|
|||||||
<string name="btn_certify">Certyfikuj</string>
|
<string name="btn_certify">Certyfikuj</string>
|
||||||
<string name="btn_decrypt">Odszyfruj</string>
|
<string name="btn_decrypt">Odszyfruj</string>
|
||||||
<string name="btn_decrypt_verify">Deszyfruj i weryfikuj</string>
|
<string name="btn_decrypt_verify">Deszyfruj i weryfikuj</string>
|
||||||
|
<string name="btn_decrypt_verify_clipboard">Ze schowka</string>
|
||||||
<string name="btn_select_encrypt_keys">Wybierz odbiorców</string>
|
<string name="btn_select_encrypt_keys">Wybierz odbiorców</string>
|
||||||
<string name="btn_encrypt_file">Zaszyfruj plik</string>
|
<string name="btn_encrypt_file">Zaszyfruj plik</string>
|
||||||
<string name="btn_save">Zapisz</string>
|
<string name="btn_save">Zapisz</string>
|
||||||
@ -55,6 +56,8 @@
|
|||||||
<string name="btn_delete">Usuń</string>
|
<string name="btn_delete">Usuń</string>
|
||||||
<string name="btn_no_date">Żaden</string>
|
<string name="btn_no_date">Żaden</string>
|
||||||
<string name="btn_okay">Ok</string>
|
<string name="btn_okay">Ok</string>
|
||||||
|
<string name="btn_change_passphrase">Zmień nowe hasło</string>
|
||||||
|
<string name="btn_set_passphrase">Ustaw nowe hasło</string>
|
||||||
<string name="btn_search">Wyszukaj</string>
|
<string name="btn_search">Wyszukaj</string>
|
||||||
<string name="btn_export_to_server">Wyślij do serwera kluczy</string>
|
<string name="btn_export_to_server">Wyślij do serwera kluczy</string>
|
||||||
<string name="btn_next">Dalej</string>
|
<string name="btn_next">Dalej</string>
|
||||||
@ -71,6 +74,7 @@
|
|||||||
<string name="menu_import_from_qr_code">Zaimportuj z kodu QR</string>
|
<string name="menu_import_from_qr_code">Zaimportuj z kodu QR</string>
|
||||||
<string name="menu_import">Import</string>
|
<string name="menu_import">Import</string>
|
||||||
<string name="menu_import_from_nfc">Zaimportuj przy użyciu NFC</string>
|
<string name="menu_import_from_nfc">Zaimportuj przy użyciu NFC</string>
|
||||||
|
<string name="menu_export_public_keys">Eksportuj wszystkie klucze publiczne</string>
|
||||||
<string name="menu_export_secret_keys">Eksportuj wszystkie prywatne klucze</string>
|
<string name="menu_export_secret_keys">Eksportuj wszystkie prywatne klucze</string>
|
||||||
<string name="menu_export_key">Eksportuj do pliku</string>
|
<string name="menu_export_key">Eksportuj do pliku</string>
|
||||||
<string name="menu_delete_key">Usuń klucz</string>
|
<string name="menu_delete_key">Usuń klucz</string>
|
||||||
@ -95,6 +99,8 @@
|
|||||||
<string name="menu_key_edit_cancel">Anuluj</string>
|
<string name="menu_key_edit_cancel">Anuluj</string>
|
||||||
<string name="menu_encrypt_to">Zaszyfruj do...</string>
|
<string name="menu_encrypt_to">Zaszyfruj do...</string>
|
||||||
<string name="menu_select_all">Wybierz wszystko</string>
|
<string name="menu_select_all">Wybierz wszystko</string>
|
||||||
|
<string name="menu_add_keys">Dodaj klucze</string>
|
||||||
|
<string name="menu_export_keys">Eksportuj klucze</string>
|
||||||
<!--label-->
|
<!--label-->
|
||||||
<string name="label_sign">Podpis</string>
|
<string name="label_sign">Podpis</string>
|
||||||
<string name="label_message">Wiadomość</string>
|
<string name="label_message">Wiadomość</string>
|
||||||
@ -179,17 +185,25 @@
|
|||||||
<string name="error">Błąd</string>
|
<string name="error">Błąd</string>
|
||||||
<string name="error_message">Błąd: %s</string>
|
<string name="error_message">Błąd: %s</string>
|
||||||
<!--key flags-->
|
<!--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>
|
||||||
<!--sentences-->
|
<!--sentences-->
|
||||||
<string name="wrong_passphrase">Nieprawidłowe hasło.</string>
|
<string name="wrong_passphrase">Nieprawidłowe hasło.</string>
|
||||||
<string name="using_clipboard_content">Użycie zawartości schowka.</string>
|
<string name="using_clipboard_content">Użycie zawartości schowka.</string>
|
||||||
<string name="set_a_passphrase">Najpierw ustaw hasło.</string>
|
<string name="set_a_passphrase">Najpierw ustaw hasło.</string>
|
||||||
<string name="no_filemanager_installed">Nie zainstalowano żadnego kompatybilnego menadżera plików.</string>
|
<string name="no_filemanager_installed">Nie zainstalowano żadnego kompatybilnego menadżera plików.</string>
|
||||||
<string name="passphrases_do_not_match">Hasła nie pasują do siebie</string>
|
<string name="passphrases_do_not_match">Hasła nie pasują do siebie</string>
|
||||||
|
<string name="passphrase_must_not_be_empty">Podaj hasło.</string>
|
||||||
<string name="passphrase_for_symmetric_encryption">Szyfrowanie symetryczne.</string>
|
<string name="passphrase_for_symmetric_encryption">Szyfrowanie symetryczne.</string>
|
||||||
<string name="passphrase_for">Podaj hasło dla \'%s\'</string>
|
<string name="passphrase_for">Podaj hasło dla \'%s\'</string>
|
||||||
<string name="file_delete_confirmation">Czy jesteś pewien że chcesz usunąć\n%s?</string>
|
<string name="file_delete_confirmation">Czy jesteś pewien że chcesz usunąć\n%s?</string>
|
||||||
<string name="file_delete_successful">Usunięto pomyślnie.</string>
|
<string name="file_delete_successful">Usunięto pomyślnie.</string>
|
||||||
<string name="no_file_selected">Najpierw wskaż plik.</string>
|
<string name="no_file_selected">Najpierw wskaż plik.</string>
|
||||||
|
<string name="decryption_successful">Pomyślnie deszyfrowano i/lub zweryfikowano.</string>
|
||||||
|
<string name="encryption_successful">Pomyślnie podpisano i/lub zaszyfrowano.</string>
|
||||||
|
<string name="encryption_to_clipboard_successful">Pomyslnie podpisano i/lub zaszyfrowano do schowka.</string>
|
||||||
<string name="enter_passphrase_twice">Podaj hasło dwukrotnie.</string>
|
<string name="enter_passphrase_twice">Podaj hasło dwukrotnie.</string>
|
||||||
<string name="select_encryption_key">Wybierz co najmniej jeden klucz szyfrujący.</string>
|
<string name="select_encryption_key">Wybierz co najmniej jeden klucz szyfrujący.</string>
|
||||||
<string name="select_encryption_or_signature_key">Wybierz co najmniej jeden klucz szyfrujący lub klucz podpisujący.</string>
|
<string name="select_encryption_or_signature_key">Wybierz co najmniej jeden klucz szyfrujący lub klucz podpisujący.</string>
|
||||||
@ -200,6 +214,8 @@
|
|||||||
<string name="key_deletion_confirmation">Czy na pewno chcesz usunąć klucz \'%s\'?\nNie można cofnąć tej operacji!</string>
|
<string name="key_deletion_confirmation">Czy na pewno chcesz usunąć klucz \'%s\'?\nNie można cofnąć tej operacji!</string>
|
||||||
<string name="key_deletion_confirmation_multi">Czy na pewno chcesz usunąć wszystkie zaznaczone klucze?\nTej operacji nie można cofnąć!</string>
|
<string name="key_deletion_confirmation_multi">Czy na pewno chcesz usunąć wszystkie zaznaczone klucze?\nTej operacji nie można cofnąć!</string>
|
||||||
<string name="secret_key_deletion_confirmation">Czy na pewno chcesz usunąć klucz prywatny \'%s\'?\nNie można cofnąć tej operacji!</string>
|
<string name="secret_key_deletion_confirmation">Czy na pewno chcesz usunąć klucz prywatny \'%s\'?\nNie można cofnąć tej operacji!</string>
|
||||||
|
<string name="ask_save_changed_key">Zostały dokonane zmiany w pęku kluczy, czy chcesz je zachować?</string>
|
||||||
|
<string name="ask_empty_id_ok">Dodałeś pusty identyfikator użytkownika, czy na pewno chcesz kontynuować?</string>
|
||||||
<string name="public_key_deletetion_confirmation">Czy na pewno chcesz usunąć klucz publiczny \'%s\'?\nNie można cofnąć tej operacji!</string>
|
<string name="public_key_deletetion_confirmation">Czy na pewno chcesz usunąć klucz publiczny \'%s\'?\nNie można cofnąć tej operacji!</string>
|
||||||
<string name="secret_key_delete_text">Usunąć klucze prywatne?</string>
|
<string name="secret_key_delete_text">Usunąć klucze prywatne?</string>
|
||||||
<string name="also_export_secret_keys">Czy wyeksportować również klucze prywatne?</string>
|
<string name="also_export_secret_keys">Czy wyeksportować również klucze prywatne?</string>
|
||||||
@ -283,6 +299,7 @@
|
|||||||
<string name="error_nfc_needed">NCF jest niedostępne na twoim urządzeniu</string>
|
<string name="error_nfc_needed">NCF jest niedostępne na twoim urządzeniu</string>
|
||||||
<string name="error_nothing_import">Nie ma nic do zaimportowania!</string>
|
<string name="error_nothing_import">Nie ma nic do zaimportowania!</string>
|
||||||
<string name="error_expiry_must_come_after_creation">data wygaśnięcia musi być późniejsza niż data stworzenia</string>
|
<string name="error_expiry_must_come_after_creation">data wygaśnięcia musi być późniejsza niż data stworzenia</string>
|
||||||
|
<string name="error_save_first">zapisz najpierw pęk kluczy</string>
|
||||||
<string name="error_can_not_delete_contact">nie możesz usunąć tego kontaktu, ponieważ należy do ciebie.</string>
|
<string name="error_can_not_delete_contact">nie możesz usunąć tego kontaktu, ponieważ należy do ciebie.</string>
|
||||||
<string name="error_can_not_delete_contacts">nie możesz usunąć tych kontaktów, ponieważ należą do ciebie:\n%s</string>
|
<string name="error_can_not_delete_contacts">nie możesz usunąć tych kontaktów, ponieważ należą do ciebie:\n%s</string>
|
||||||
<string name="error_keyserver_insufficient_query">Niewystarczające zapytanie do serwera</string>
|
<string name="error_keyserver_insufficient_query">Niewystarczające zapytanie do serwera</string>
|
||||||
@ -300,6 +317,7 @@
|
|||||||
<item quantity="few">Część wczytanego pliku to poprawne obiekty OpenPGP, ale nie są kluczami OpenPGP</item>
|
<item quantity="few">Część wczytanego pliku to poprawne obiekty OpenPGP, ale nie są kluczami OpenPGP</item>
|
||||||
<item quantity="other">Część wczytanego pliku to poprawne obiekty OpenPGP, ale nie są kluczami OpenPGP</item>
|
<item quantity="other">Część wczytanego pliku to poprawne obiekty OpenPGP, ale nie są kluczami OpenPGP</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
<string name="error_change_something_first">Musisz dokonać zmian w pęku kluczy zanim będziesz mógł go zachować</string>
|
||||||
<!--progress dialogs, usually ending in '…'-->
|
<!--progress dialogs, usually ending in '…'-->
|
||||||
<string name="progress_done">Gotowe.</string>
|
<string name="progress_done">Gotowe.</string>
|
||||||
<string name="progress_cancel">Anuluj</string>
|
<string name="progress_cancel">Anuluj</string>
|
||||||
@ -429,6 +447,9 @@
|
|||||||
<string name="key_view_tab_main">Informacje</string>
|
<string name="key_view_tab_main">Informacje</string>
|
||||||
<string name="key_view_tab_certs">Certyfikaty</string>
|
<string name="key_view_tab_certs">Certyfikaty</string>
|
||||||
<!--Navigation Drawer-->
|
<!--Navigation Drawer-->
|
||||||
|
<string name="nav_contacts">Klucze</string>
|
||||||
|
<string name="nav_encrypt">Podpisz i zaszyfruj</string>
|
||||||
|
<string name="nav_decrypt">Deszyfruj i weryfikuj</string>
|
||||||
<string name="nav_import">Importuj klucze</string>
|
<string name="nav_import">Importuj klucze</string>
|
||||||
<string name="nav_secret_keys">Moje klucze</string>
|
<string name="nav_secret_keys">Moje klucze</string>
|
||||||
<string name="nav_apps">Zarejestrowane aplikacje</string>
|
<string name="nav_apps">Zarejestrowane aplikacje</string>
|
||||||
@ -442,4 +463,6 @@
|
|||||||
<string name="section_uids_to_sign">Identyfikator użytkownika do podpisu</string>
|
<string name="section_uids_to_sign">Identyfikator użytkownika do podpisu</string>
|
||||||
<string name="progress_re_adding_certs">Ponowne stosowanie certyfikatów</string>
|
<string name="progress_re_adding_certs">Ponowne stosowanie certyfikatów</string>
|
||||||
<!--hints-->
|
<!--hints-->
|
||||||
|
<string name="encrypt_content_edit_text_hint">Wpisz tutaj wiadomość do zaszyfrowania i/lub podpisania...</string>
|
||||||
|
<string name="decrypt_content_edit_text_hint">Wpisz tutaj tekst do zaszyfrowania i/lub zweryfikowania...</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -74,6 +74,7 @@
|
|||||||
<string name="menu_import_from_qr_code">Импорт из QR кода</string>
|
<string name="menu_import_from_qr_code">Импорт из QR кода</string>
|
||||||
<string name="menu_import">Импорт</string>
|
<string name="menu_import">Импорт</string>
|
||||||
<string name="menu_import_from_nfc">Импорт из NFC</string>
|
<string name="menu_import_from_nfc">Импорт из NFC</string>
|
||||||
|
<string name="menu_export_public_keys">Экспорт всех открытых ключей</string>
|
||||||
<string name="menu_export_secret_keys">Экспорт всех секретных ключей</string>
|
<string name="menu_export_secret_keys">Экспорт всех секретных ключей</string>
|
||||||
<string name="menu_export_key">Экспорт в файл</string>
|
<string name="menu_export_key">Экспорт в файл</string>
|
||||||
<string name="menu_delete_key">Удалить ключ</string>
|
<string name="menu_delete_key">Удалить ключ</string>
|
||||||
@ -98,6 +99,8 @@
|
|||||||
<string name="menu_key_edit_cancel">Отмена</string>
|
<string name="menu_key_edit_cancel">Отмена</string>
|
||||||
<string name="menu_encrypt_to">Зашифровать....</string>
|
<string name="menu_encrypt_to">Зашифровать....</string>
|
||||||
<string name="menu_select_all">Выбрать все</string>
|
<string name="menu_select_all">Выбрать все</string>
|
||||||
|
<string name="menu_add_keys">Добавить ключи</string>
|
||||||
|
<string name="menu_export_keys">Экспорт ключей</string>
|
||||||
<!--label-->
|
<!--label-->
|
||||||
<string name="label_sign">Подписать</string>
|
<string name="label_sign">Подписать</string>
|
||||||
<string name="label_message">Сообщение</string>
|
<string name="label_message">Сообщение</string>
|
||||||
@ -191,11 +194,15 @@
|
|||||||
<string name="set_a_passphrase">Сначала задайте пароль</string>
|
<string name="set_a_passphrase">Сначала задайте пароль</string>
|
||||||
<string name="no_filemanager_installed">Нет совместимого менеджера файлов.</string>
|
<string name="no_filemanager_installed">Нет совместимого менеджера файлов.</string>
|
||||||
<string name="passphrases_do_not_match">Пароли не совпадают.</string>
|
<string name="passphrases_do_not_match">Пароли не совпадают.</string>
|
||||||
|
<string name="passphrase_must_not_be_empty">Пожалуйста, введите пароль.</string>
|
||||||
<string name="passphrase_for_symmetric_encryption">Симметричное шифрование.</string>
|
<string name="passphrase_for_symmetric_encryption">Симметричное шифрование.</string>
|
||||||
<string name="passphrase_for">Введите пароль для\n\'%s\'</string>
|
<string name="passphrase_for">Введите пароль для\n\'%s\'</string>
|
||||||
<string name="file_delete_confirmation">Вы уверены, что хотите удалить\n%s ?</string>
|
<string name="file_delete_confirmation">Вы уверены, что хотите удалить\n%s ?</string>
|
||||||
<string name="file_delete_successful">Удалено.</string>
|
<string name="file_delete_successful">Удалено.</string>
|
||||||
<string name="no_file_selected">Сначала выберите файл.</string>
|
<string name="no_file_selected">Сначала выберите файл.</string>
|
||||||
|
<string name="decryption_successful">Расшифровано и/или проверено.</string>
|
||||||
|
<string name="encryption_successful">Подписано и/или зашифровано.</string>
|
||||||
|
<string name="encryption_to_clipboard_successful">Подписано и/или зашифровано в буфер обмена.</string>
|
||||||
<string name="enter_passphrase_twice">Дважды введите пароль.</string>
|
<string name="enter_passphrase_twice">Дважды введите пароль.</string>
|
||||||
<string name="select_encryption_key">Укажите хотя бы один ключ.</string>
|
<string name="select_encryption_key">Укажите хотя бы один ключ.</string>
|
||||||
<string name="select_encryption_or_signature_key">Выберите хотя бы один ключ для шифрования или подписи.</string>
|
<string name="select_encryption_or_signature_key">Выберите хотя бы один ключ для шифрования или подписи.</string>
|
||||||
@ -430,6 +437,9 @@
|
|||||||
<string name="key_view_tab_main">Информация</string>
|
<string name="key_view_tab_main">Информация</string>
|
||||||
<string name="key_view_tab_certs">Сертификация</string>
|
<string name="key_view_tab_certs">Сертификация</string>
|
||||||
<!--Navigation Drawer-->
|
<!--Navigation Drawer-->
|
||||||
|
<string name="nav_contacts">Ключи</string>
|
||||||
|
<string name="nav_encrypt">Подписать и зашифровать</string>
|
||||||
|
<string name="nav_decrypt">Расшифровать и проверить</string>
|
||||||
<string name="nav_import">Импорт ключей</string>
|
<string name="nav_import">Импорт ключей</string>
|
||||||
<string name="nav_secret_keys">Мои ключи</string>
|
<string name="nav_secret_keys">Мои ключи</string>
|
||||||
<string name="nav_apps">Связанные приложения</string>
|
<string name="nav_apps">Связанные приложения</string>
|
||||||
@ -442,4 +452,5 @@
|
|||||||
<string name="secret_key_no">не доступен</string>
|
<string name="secret_key_no">не доступен</string>
|
||||||
<string name="section_uids_to_sign">Подписываемые ID пользователя</string>
|
<string name="section_uids_to_sign">Подписываемые ID пользователя</string>
|
||||||
<!--hints-->
|
<!--hints-->
|
||||||
|
<string name="encrypt_content_edit_text_hint">Напишите сообщение здесь, что бы зашифровать и/или подписать...</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -74,6 +74,7 @@
|
|||||||
<string name="menu_import_from_qr_code">Імпорт з штрих-коду</string>
|
<string name="menu_import_from_qr_code">Імпорт з штрих-коду</string>
|
||||||
<string name="menu_import">Імпорт</string>
|
<string name="menu_import">Імпорт</string>
|
||||||
<string name="menu_import_from_nfc">Імпорт з NFC</string>
|
<string name="menu_import_from_nfc">Імпорт з NFC</string>
|
||||||
|
<string name="menu_export_public_keys">Експортувати усі публічні ключі</string>
|
||||||
<string name="menu_export_secret_keys">Експортувати усі секретні ключі</string>
|
<string name="menu_export_secret_keys">Експортувати усі секретні ключі</string>
|
||||||
<string name="menu_export_key">Експорт до файлу</string>
|
<string name="menu_export_key">Експорт до файлу</string>
|
||||||
<string name="menu_delete_key">Вилучити ключ</string>
|
<string name="menu_delete_key">Вилучити ключ</string>
|
||||||
@ -98,6 +99,8 @@
|
|||||||
<string name="menu_key_edit_cancel">Скасувати</string>
|
<string name="menu_key_edit_cancel">Скасувати</string>
|
||||||
<string name="menu_encrypt_to">Зашифрувати…</string>
|
<string name="menu_encrypt_to">Зашифрувати…</string>
|
||||||
<string name="menu_select_all">Вибрати усе</string>
|
<string name="menu_select_all">Вибрати усе</string>
|
||||||
|
<string name="menu_add_keys">Додати ключі</string>
|
||||||
|
<string name="menu_export_keys">Експортувати ключі</string>
|
||||||
<!--label-->
|
<!--label-->
|
||||||
<string name="label_sign">Підпис</string>
|
<string name="label_sign">Підпис</string>
|
||||||
<string name="label_message">Повідомлення</string>
|
<string name="label_message">Повідомлення</string>
|
||||||
@ -192,11 +195,15 @@
|
|||||||
<string name="set_a_passphrase">Спершу задайте парольну фразу.</string>
|
<string name="set_a_passphrase">Спершу задайте парольну фразу.</string>
|
||||||
<string name="no_filemanager_installed">Нема встановленого сумісного менеджера файлів.</string>
|
<string name="no_filemanager_installed">Нема встановленого сумісного менеджера файлів.</string>
|
||||||
<string name="passphrases_do_not_match">Парольні фрази не збігаються.</string>
|
<string name="passphrases_do_not_match">Парольні фрази не збігаються.</string>
|
||||||
|
<string name="passphrase_must_not_be_empty">Будь ласка, введіть парольну фразу.</string>
|
||||||
<string name="passphrase_for_symmetric_encryption">Симетричне шифрування.</string>
|
<string name="passphrase_for_symmetric_encryption">Симетричне шифрування.</string>
|
||||||
<string name="passphrase_for">Введіть парольну фразу для \'%s\'</string>
|
<string name="passphrase_for">Введіть парольну фразу для \'%s\'</string>
|
||||||
<string name="file_delete_confirmation">Ви справді хочете вилучити\n%s?</string>
|
<string name="file_delete_confirmation">Ви справді хочете вилучити\n%s?</string>
|
||||||
<string name="file_delete_successful">Успішно вилучено.</string>
|
<string name="file_delete_successful">Успішно вилучено.</string>
|
||||||
<string name="no_file_selected">Виберіть спершу файл.</string>
|
<string name="no_file_selected">Виберіть спершу файл.</string>
|
||||||
|
<string name="decryption_successful">Успішно розшифровано та/або перевірено.</string>
|
||||||
|
<string name="encryption_successful">Успішно підписано та/або перевірено.</string>
|
||||||
|
<string name="encryption_to_clipboard_successful">Успішно підписано та/або зашифровано до буфера обміну.</string>
|
||||||
<string name="enter_passphrase_twice">Введіть двічі парольну фразу.</string>
|
<string name="enter_passphrase_twice">Введіть двічі парольну фразу.</string>
|
||||||
<string name="select_encryption_key">Виберіть принаймні один ключ шифрування.</string>
|
<string name="select_encryption_key">Виберіть принаймні один ключ шифрування.</string>
|
||||||
<string name="select_encryption_or_signature_key">Виберіть принаймні один ключ шифрування або ключ підпису.</string>
|
<string name="select_encryption_or_signature_key">Виберіть принаймні один ключ шифрування або ключ підпису.</string>
|
||||||
@ -208,6 +215,7 @@
|
|||||||
<string name="key_deletion_confirmation_multi">Ви справді хочете вилучити усі вибрані ключі?\nВи не зможете це відмінити!</string>
|
<string name="key_deletion_confirmation_multi">Ви справді хочете вилучити усі вибрані ключі?\nВи не зможете це відмінити!</string>
|
||||||
<string name="secret_key_deletion_confirmation">Ви справді хочете вилучити секретний ключ \'%s\'?\nВи не зможете це відмінити!</string>
|
<string name="secret_key_deletion_confirmation">Ви справді хочете вилучити секретний ключ \'%s\'?\nВи не зможете це відмінити!</string>
|
||||||
<string name="ask_save_changed_key">Ви внесли зміни до в\'язки ключів, ви б хотіли. Волієте їх зберегти?</string>
|
<string name="ask_save_changed_key">Ви внесли зміни до в\'язки ключів, ви б хотіли. Волієте їх зберегти?</string>
|
||||||
|
<string name="ask_empty_id_ok">Ви вже додали порожній ідентифікатор користувача. Справді хочете продовжити?</string>
|
||||||
<string name="public_key_deletetion_confirmation">Справді волієте вилучити ВІДКРИТИЙ ключ \'%s\'?\nВи е зможете відмінити цю дію!</string>
|
<string name="public_key_deletetion_confirmation">Справді волієте вилучити ВІДКРИТИЙ ключ \'%s\'?\nВи е зможете відмінити цю дію!</string>
|
||||||
<string name="secret_key_delete_text">Видалити секретні ключі?</string>
|
<string name="secret_key_delete_text">Видалити секретні ключі?</string>
|
||||||
<string name="also_export_secret_keys">Також експортувати секретні ключі?</string>
|
<string name="also_export_secret_keys">Також експортувати секретні ключі?</string>
|
||||||
@ -439,6 +447,9 @@
|
|||||||
<string name="key_view_tab_main">Інформація</string>
|
<string name="key_view_tab_main">Інформація</string>
|
||||||
<string name="key_view_tab_certs">Сертифікати</string>
|
<string name="key_view_tab_certs">Сертифікати</string>
|
||||||
<!--Navigation Drawer-->
|
<!--Navigation Drawer-->
|
||||||
|
<string name="nav_contacts">Ключі</string>
|
||||||
|
<string name="nav_encrypt">Підписати і зашифрувати</string>
|
||||||
|
<string name="nav_decrypt">Розшифрувати і Перевірити</string>
|
||||||
<string name="nav_import">Імпортувати ключі</string>
|
<string name="nav_import">Імпортувати ключі</string>
|
||||||
<string name="nav_secret_keys">Мої ключі</string>
|
<string name="nav_secret_keys">Мої ключі</string>
|
||||||
<string name="nav_apps">Зареєстровані програми</string>
|
<string name="nav_apps">Зареєстровані програми</string>
|
||||||
@ -452,4 +463,6 @@
|
|||||||
<string name="section_uids_to_sign">ІД користувача для реєстрації</string>
|
<string name="section_uids_to_sign">ІД користувача для реєстрації</string>
|
||||||
<string name="progress_re_adding_certs">Перезастосування сертифікатів</string>
|
<string name="progress_re_adding_certs">Перезастосування сертифікатів</string>
|
||||||
<!--hints-->
|
<!--hints-->
|
||||||
|
<string name="encrypt_content_edit_text_hint">Напишіть повідомлення для шифрування та/або підпису…</string>
|
||||||
|
<string name="decrypt_content_edit_text_hint">Уведіть зашифрований текст тут для його розшифрування та/або перевірки…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -406,7 +406,7 @@
|
|||||||
<string name="import_qr_code_start_with_one">Please start with QR Code with ID 1</string>
|
<string name="import_qr_code_start_with_one">Please start with QR Code with ID 1</string>
|
||||||
<string name="import_qr_code_wrong">QR Code malformed! Please try again!</string>
|
<string name="import_qr_code_wrong">QR Code malformed! Please try again!</string>
|
||||||
<string name="import_qr_code_finished">QR Code scanning finished!</string>
|
<string name="import_qr_code_finished">QR Code scanning finished!</string>
|
||||||
<string name="import_qr_code_too_short_fingerprint">Fingerprint contained in this QR Code is too short (< 16 characters)</string>
|
<string name="import_qr_code_too_short_fingerprint">Fingerprint is too short (< 16 characters)</string>
|
||||||
<string name="import_qr_scan_button">Scan QR Code with \'Barcode Scanner\'</string>
|
<string name="import_qr_scan_button">Scan QR Code with \'Barcode Scanner\'</string>
|
||||||
<string name="import_nfc_text">To receive keys via NFC, the device needs to be unlocked.</string>
|
<string name="import_nfc_text">To receive keys via NFC, the device needs to be unlocked.</string>
|
||||||
<string name="import_nfc_help_button">Help</string>
|
<string name="import_nfc_help_button">Help</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user