From 17301be2cae4742f6ff508f984730a4d44e0a66a Mon Sep 17 00:00:00 2001 From: danielnelz Date: Mon, 9 Mar 2015 20:09:05 +0100 Subject: Created enum MessageStatus in KeychainIntentServiceHandler and enum IOType in KeychainIntentService and replaced int constants with them. Fixed some typos. --- .../keychain/service/KeychainIntentService.java | 92 +++++++++++++--------- .../service/KeychainIntentServiceHandler.java | 34 +++++--- .../keychain/ui/CertifyKeyFragment.java | 2 +- .../keychain/ui/ConsolidateDialogActivity.java | 2 +- .../keychain/ui/CreateKeyFinalFragment.java | 4 +- .../keychain/ui/DecryptFilesFragment.java | 13 +-- .../keychain/ui/DecryptTextFragment.java | 5 +- .../keychain/ui/EditKeyFragment.java | 2 +- .../keychain/ui/EncryptActivity.java | 2 +- .../keychain/ui/ImportKeysActivity.java | 2 +- .../keychain/ui/ImportKeysProxyActivity.java | 2 +- .../keychain/ui/KeyListFragment.java | 2 +- .../keychain/ui/SafeSlingerActivity.java | 2 +- .../keychain/ui/UploadKeyActivity.java | 2 +- .../keychain/ui/ViewKeyActivity.java | 7 +- .../keychain/ui/ViewKeyTrustFragment.java | 2 +- .../ui/dialog/DeleteKeyDialogFragment.java | 2 +- .../keychain/util/ExportHelper.java | 2 +- 18 files changed, 106 insertions(+), 73 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java index d95701458..b0453474e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java @@ -60,6 +60,7 @@ import org.sufficientlysecure.keychain.pgp.SignEncryptParcel; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralMsgIdException; import org.sufficientlysecure.keychain.provider.ProviderHelper; +import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler.MessageStatus; import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.InputData; import org.sufficientlysecure.keychain.util.Log; @@ -126,8 +127,20 @@ public class KeychainIntentService extends IntentService implements Progressable public static final String SOURCE = "source"; // possible targets: - public static final int IO_BYTES = 1; - public static final int IO_URI = 2; + public static enum IOType { + UNKNOWN, + BYTES, + URI; + + private static final IOType[] values = values(); + + public static IOType fromInt(int n) { + if(n >= values.length) + return UNKNOWN; + else + return values[n]; + } + } // encrypt public static final String ENCRYPT_DECRYPT_INPUT_URI = "input_uri"; @@ -244,7 +257,7 @@ public class KeychainIntentService extends IntentService implements Progressable CertifyResult result = op.certify(parcel, keyServerUri); // Result - sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, result); + sendMessageToHandler(MessageStatus.OKAY, result); break; } @@ -259,7 +272,7 @@ public class KeychainIntentService extends IntentService implements Progressable } // Result - sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, result); + sendMessageToHandler(MessageStatus.OKAY, result); break; } @@ -288,7 +301,7 @@ public class KeychainIntentService extends IntentService implements Progressable DecryptVerifyResult decryptVerifyResult = builder.build().execute(); - sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, decryptVerifyResult); + sendMessageToHandler(MessageStatus.OKAY, decryptVerifyResult); } catch (Exception e) { sendErrorToHandler(e); } @@ -349,7 +362,7 @@ public class KeychainIntentService extends IntentService implements Progressable } // kind of awkward, but this whole class wants to pull bytes out of “data” - data.putInt(KeychainIntentService.TARGET, KeychainIntentService.IO_BYTES); + data.putInt(KeychainIntentService.TARGET, IOType.BYTES.ordinal()); data.putByteArray(KeychainIntentService.DECRYPT_CIPHERTEXT_BYTES, messageBytes); InputData inputData = createDecryptInputData(data); @@ -386,7 +399,7 @@ public class KeychainIntentService extends IntentService implements Progressable resultData.putString(KeychainIntentServiceHandler.KEYBASE_PROOF_URL, prover.getProofUrl()); resultData.putString(KeychainIntentServiceHandler.KEYBASE_PRESENCE_URL, prover.getPresenceUrl()); resultData.putString(KeychainIntentServiceHandler.KEYBASE_PRESENCE_LABEL, prover.getPresenceLabel()); - sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, resultData); + sendMessageToHandler(MessageStatus.OKAY, resultData); } catch (Exception e) { sendErrorToHandler(e); } @@ -429,7 +442,7 @@ public class KeychainIntentService extends IntentService implements Progressable Log.logDebugBundle(resultData, "resultData"); - sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, resultData); + sendMessageToHandler(MessageStatus.OKAY, resultData); } catch (Exception e) { sendErrorToHandler(e); } @@ -447,7 +460,7 @@ public class KeychainIntentService extends IntentService implements Progressable DeleteResult result = op.execute(masterKeyIds, isSecret); // Result - sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, result); + sendMessageToHandler(MessageStatus.OKAY, result); break; } @@ -462,7 +475,7 @@ public class KeychainIntentService extends IntentService implements Progressable EditKeyResult result = op.execute(saveParcel, passphrase); // Result - sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, result); + sendMessageToHandler(MessageStatus.OKAY, result); break; } @@ -476,7 +489,7 @@ public class KeychainIntentService extends IntentService implements Progressable PromoteKeyResult result = op.execute(keyRingId); // Result - sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, result); + sendMessageToHandler(MessageStatus.OKAY, result); break; } @@ -500,7 +513,7 @@ public class KeychainIntentService extends IntentService implements Progressable } // Result - sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, result); + sendMessageToHandler(MessageStatus.OKAY, result); break; } @@ -521,7 +534,7 @@ public class KeychainIntentService extends IntentService implements Progressable : importExportOperation.importKeyRings(cache, keyServer); // Result - sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, result); + sendMessageToHandler(MessageStatus.OKAY, result); break; @@ -537,7 +550,7 @@ public class KeychainIntentService extends IntentService implements Progressable SignEncryptResult result = op.execute(inputParcel); // Result - sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, result); + sendMessageToHandler(MessageStatus.OKAY, result); break; } @@ -560,7 +573,7 @@ public class KeychainIntentService extends IntentService implements Progressable throw new PgpGeneralException("Unable to export key to selected server"); } - sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY); + sendMessageToHandler(MessageStatus.OKAY); } catch (Exception e) { sendErrorToHandler(e); } @@ -582,7 +595,7 @@ public class KeychainIntentService extends IntentService implements Progressable private void sendProofError(String msg) { Bundle bundle = new Bundle(); bundle.putString(KeychainIntentServiceHandler.DATA_ERROR, msg); - sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, bundle); + sendMessageToHandler(MessageStatus.OKAY, bundle); } private void sendErrorToHandler(Exception e) { @@ -599,14 +612,14 @@ public class KeychainIntentService extends IntentService implements Progressable Bundle data = new Bundle(); data.putString(KeychainIntentServiceHandler.DATA_ERROR, message); - sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_EXCEPTION, null, data); + sendMessageToHandler(MessageStatus.EXCEPTION, null, data); } - private void sendMessageToHandler(Integer arg1, Integer arg2, Bundle data) { + private void sendMessageToHandler(MessageStatus status, Integer arg2, Bundle data) { Message msg = Message.obtain(); assert msg != null; - msg.arg1 = arg1; + msg.arg1 = status.ordinal(); if (arg2 != null) { msg.arg2 = arg2; } @@ -623,18 +636,18 @@ public class KeychainIntentService extends IntentService implements Progressable } } - private void sendMessageToHandler(Integer arg1, OperationResult data) { + private void sendMessageToHandler(MessageStatus status, OperationResult data) { Bundle bundle = new Bundle(); bundle.putParcelable(OperationResult.EXTRA_RESULT, data); - sendMessageToHandler(arg1, null, bundle); + sendMessageToHandler(status, null, bundle); } - private void sendMessageToHandler(Integer arg1, Bundle data) { - sendMessageToHandler(arg1, null, data); + private void sendMessageToHandler(MessageStatus status, Bundle data) { + sendMessageToHandler(status, null, data); } - private void sendMessageToHandler(Integer arg1) { - sendMessageToHandler(arg1, null, null); + private void sendMessageToHandler(MessageStatus status) { + sendMessageToHandler(status, null, null); } /** @@ -651,7 +664,7 @@ public class KeychainIntentService extends IntentService implements Progressable data.putInt(KeychainIntentServiceHandler.DATA_PROGRESS, progress); data.putInt(KeychainIntentServiceHandler.DATA_PROGRESS_MAX, max); - sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_UPDATE_PROGRESS, null, data); + sendMessageToHandler(MessageStatus.UPDATE_PROGRESS, null, data); } public void setProgress(int resourceId, int progress, int max) { @@ -664,7 +677,7 @@ public class KeychainIntentService extends IntentService implements Progressable @Override public void setPreventCancel() { - sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_PREVENT_CANCEL); + sendMessageToHandler(MessageStatus.PREVENT_CANCEL); } private InputData createDecryptInputData(Bundle data) throws IOException, PgpGeneralException { @@ -673,35 +686,37 @@ public class KeychainIntentService extends IntentService implements Progressable private InputData createCryptInputData(Bundle data, String bytesName) throws PgpGeneralException, IOException { int source = data.get(SOURCE) != null ? data.getInt(SOURCE) : data.getInt(TARGET); - switch (source) { - case IO_BYTES: /* encrypting bytes directly */ + IOType type = IOType.fromInt(source); + switch (type) { + case BYTES: /* encrypting bytes directly */ byte[] bytes = data.getByteArray(bytesName); return new InputData(new ByteArrayInputStream(bytes), bytes.length); - case IO_URI: /* encrypting content uri */ + case URI: /* encrypting content uri */ Uri providerUri = data.getParcelable(ENCRYPT_DECRYPT_INPUT_URI); // InputStream return new InputData(getContentResolver().openInputStream(providerUri), FileHelper.getFileSize(this, providerUri, 0)); default: - throw new PgpGeneralException("No target choosen!"); + throw new PgpGeneralException("No target chosen!"); } } private OutputStream createCryptOutputStream(Bundle data) throws PgpGeneralException, FileNotFoundException { int target = data.getInt(TARGET); - switch (target) { - case IO_BYTES: + IOType type = IOType.fromInt(target); + switch (type) { + case BYTES: return new ByteArrayOutputStream(); - case IO_URI: + case URI: Uri providerUri = data.getParcelable(ENCRYPT_DECRYPT_OUTPUT_URI); return getContentResolver().openOutputStream(providerUri); default: - throw new PgpGeneralException("No target choosen!"); + throw new PgpGeneralException("No target chosen!"); } } @@ -711,12 +726,13 @@ public class KeychainIntentService extends IntentService implements Progressable private void finalizeCryptOutputStream(Bundle data, Bundle resultData, OutputStream outStream, String bytesName) { int target = data.getInt(TARGET); - switch (target) { - case IO_BYTES: + IOType type = IOType.fromInt(target); + switch (type) { + case BYTES: byte output[] = ((ByteArrayOutputStream) outStream).toByteArray(); resultData.putByteArray(bytesName, output); break; - case IO_URI: + case URI: // nothing, output was written, just send okay and verification bundle break; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java index 635fe86f1..fe0e7bb90 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java @@ -32,11 +32,24 @@ import org.sufficientlysecure.keychain.util.Log; public class KeychainIntentServiceHandler extends Handler { - // possible messages send from this service to handler on ui - public static final int MESSAGE_OKAY = 1; - public static final int MESSAGE_EXCEPTION = 2; - public static final int MESSAGE_UPDATE_PROGRESS = 3; - public static final int MESSAGE_PREVENT_CANCEL = 4; + // possible messages sent from this service to handler on ui + public static enum MessageStatus{ + UNKNOWN, + OKAY, + EXCEPTION, + UPDATE_PROGRESS, + PREVENT_CANCEL; + + private static final MessageStatus[] values = values(); + + public static MessageStatus fromInt(int n) + { + if(n >= values.length) + return UNKNOWN; + else + return values[n]; + } + } // possible data keys for messages public static final String DATA_ERROR = "error"; @@ -103,13 +116,14 @@ public class KeychainIntentServiceHandler extends Handler { return; } - switch (message.arg1) { - case MESSAGE_OKAY: + MessageStatus status = MessageStatus.fromInt(message.arg1); + switch (status) { + case OKAY: mProgressDialogFragment.dismissAllowingStateLoss(); break; - case MESSAGE_EXCEPTION: + case EXCEPTION: mProgressDialogFragment.dismissAllowingStateLoss(); // show error from service @@ -121,7 +135,7 @@ public class KeychainIntentServiceHandler extends Handler { break; - case MESSAGE_UPDATE_PROGRESS: + case UPDATE_PROGRESS: if (data.containsKey(DATA_PROGRESS) && data.containsKey(DATA_PROGRESS_MAX)) { // update progress from service @@ -139,7 +153,7 @@ public class KeychainIntentServiceHandler extends Handler { break; - case MESSAGE_PREVENT_CANCEL: + case PREVENT_CANCEL: mProgressDialogFragment.setPreventCancel(true); break; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyFragment.java index e1467ec61..1e1bd32c1 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyFragment.java @@ -395,7 +395,7 @@ public class CertifyKeyFragment extends LoaderFragment // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { Bundle data = message.getData(); CertifyResult result = data.getParcelable(CertifyResult.EXTRA_RESULT); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ConsolidateDialogActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ConsolidateDialogActivity.java index f0ef8b9ef..c55aad1f9 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ConsolidateDialogActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ConsolidateDialogActivity.java @@ -57,7 +57,7 @@ public class ConsolidateDialogActivity extends FragmentActivity { // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { /* don't care about the results (for now?) // get returned data bundle diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java index 920488e3e..0c3ebee72 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java @@ -185,7 +185,7 @@ public class CreateKeyFinalFragment extends Fragment { // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { // get returned data bundle Bundle returnData = message.getData(); if (returnData == null) { @@ -255,7 +255,7 @@ public class CreateKeyFinalFragment extends Fragment { // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { // TODO: upload operation needs a result! // TODO: then combine these results //if (result.getResult() == OperationResultParcel.RESULT_OK) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesFragment.java index 5606523be..c808557a6 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesFragment.java @@ -37,6 +37,7 @@ import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult; import org.sufficientlysecure.keychain.service.KeychainIntentService; +import org.sufficientlysecure.keychain.service.KeychainIntentService.IOType; import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; import org.sufficientlysecure.keychain.ui.dialog.DeleteFileDialogFragment; import org.sufficientlysecure.keychain.ui.util.Notify; @@ -182,10 +183,10 @@ public class DecryptFilesFragment extends DecryptFragment { // data Log.d(Constants.TAG, "mInputUri=" + mInputUri + ", mOutputUri=" + mOutputUri); - data.putInt(KeychainIntentService.SOURCE, KeychainIntentService.IO_URI); + data.putInt(KeychainIntentService.SOURCE, IOType.URI.ordinal()); data.putParcelable(KeychainIntentService.ENCRYPT_DECRYPT_INPUT_URI, mInputUri); - data.putInt(KeychainIntentService.TARGET, KeychainIntentService.IO_URI); + data.putInt(KeychainIntentService.TARGET, IOType.URI.ordinal()); data.putParcelable(KeychainIntentService.ENCRYPT_DECRYPT_OUTPUT_URI, mOutputUri); data.putString(KeychainIntentService.DECRYPT_PASSPHRASE, mPassphrase); @@ -200,7 +201,7 @@ public class DecryptFilesFragment extends DecryptFragment { // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { // get returned data bundle Bundle returnData = message.getData(); @@ -256,10 +257,10 @@ public class DecryptFilesFragment extends DecryptFragment { // data Log.d(Constants.TAG, "mInputUri=" + mInputUri + ", mOutputUri=" + mOutputUri); - data.putInt(KeychainIntentService.SOURCE, KeychainIntentService.IO_URI); + data.putInt(KeychainIntentService.SOURCE, IOType.URI.ordinal()); data.putParcelable(KeychainIntentService.ENCRYPT_DECRYPT_INPUT_URI, mInputUri); - data.putInt(KeychainIntentService.TARGET, KeychainIntentService.IO_URI); + data.putInt(KeychainIntentService.TARGET, IOType.URI.ordinal()); data.putParcelable(KeychainIntentService.ENCRYPT_DECRYPT_OUTPUT_URI, mOutputUri); data.putString(KeychainIntentService.DECRYPT_PASSPHRASE, mPassphrase); @@ -274,7 +275,7 @@ public class DecryptFilesFragment extends DecryptFragment { // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { // get returned data bundle Bundle returnData = message.getData(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextFragment.java index a15b23c06..1b34f6bf0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextFragment.java @@ -36,6 +36,7 @@ import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.compatibility.ClipboardReflection; import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult; import org.sufficientlysecure.keychain.service.KeychainIntentService; +import org.sufficientlysecure.keychain.service.KeychainIntentService.IOType; import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.util.Log; @@ -158,7 +159,7 @@ public class DecryptTextFragment extends DecryptFragment { intent.setAction(KeychainIntentService.ACTION_DECRYPT_VERIFY); // data - data.putInt(KeychainIntentService.TARGET, KeychainIntentService.IO_BYTES); + data.putInt(KeychainIntentService.TARGET, IOType.BYTES.ordinal()); data.putByteArray(KeychainIntentService.DECRYPT_CIPHERTEXT_BYTES, mCiphertext.getBytes()); data.putString(KeychainIntentService.DECRYPT_PASSPHRASE, mPassphrase); data.putByteArray(KeychainIntentService.DECRYPT_NFC_DECRYPTED_SESSION_KEY, mNfcDecryptedSessionKey); @@ -172,7 +173,7 @@ public class DecryptTextFragment extends DecryptFragment { // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { // get returned data bundle Bundle returnData = message.getData(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java index 25ca6e8fd..9fc7a2a59 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java @@ -606,7 +606,7 @@ public class EditKeyFragment extends LoaderFragment implements // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { // get returned data bundle Bundle returnData = message.getData(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java index c595cc5b8..f8db03873 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java @@ -129,7 +129,7 @@ public abstract class EncryptActivity extends BaseActivity { // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { SignEncryptResult result = message.getData().getParcelable(SignEncryptResult.EXTRA_RESULT); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java index 71f6fd4bf..d51e2c7fc 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java @@ -302,7 +302,7 @@ public class ImportKeysActivity extends BaseActivity { // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { // get returned data bundle Bundle returnData = message.getData(); if (returnData == null) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysProxyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysProxyActivity.java index 948da94d8..cc8b47971 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysProxyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysProxyActivity.java @@ -222,7 +222,7 @@ public class ImportKeysProxyActivity extends FragmentActivity { // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { // get returned data bundle Bundle returnData = message.getData(); if (returnData == null) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java index 43d893fa6..b7f9bc99f 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java @@ -552,7 +552,7 @@ public class KeyListFragment extends LoaderFragment // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { // get returned data bundle Bundle returnData = message.getData(); if (returnData == null) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java index d1df2906d..d0cea5f05 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java @@ -132,7 +132,7 @@ public class SafeSlingerActivity extends BaseActivity { // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { // get returned data bundle Bundle returnData = message.getData(); if (returnData == null) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java index e19793fd5..4fb2074a5 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java @@ -113,7 +113,7 @@ public class UploadKeyActivity extends BaseActivity { // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { Toast.makeText(UploadKeyActivity.this, R.string.msg_crt_upload_success, Toast.LENGTH_SHORT).show(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java index c94b29bac..56c60506a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java @@ -72,6 +72,7 @@ import org.sufficientlysecure.keychain.provider.KeychainContract; import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.service.KeychainIntentService; import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; +import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler.MessageStatus; import org.sufficientlysecure.keychain.ui.util.FormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils.State; @@ -429,7 +430,7 @@ public class ViewKeyActivity extends BaseActivity implements // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { Bundle data = message.getData(); CertifyResult result = data.getParcelable(CertifyResult.EXTRA_RESULT); @@ -486,7 +487,7 @@ public class ViewKeyActivity extends BaseActivity implements Handler returnHandler = new Handler() { @Override public void handleMessage(Message message) { - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { setResult(RESULT_CANCELED); finish(); } @@ -595,7 +596,7 @@ public class ViewKeyActivity extends BaseActivity implements // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { // get returned data bundle Bundle returnData = message.getData(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java index d22f01a48..e20796f8f 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java @@ -368,7 +368,7 @@ public class ViewKeyTrustFragment extends LoaderFragment implements // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { Bundle returnData = message.getData(); String msg = returnData.getString(KeychainIntentServiceHandler.DATA_MESSAGE); SpannableStringBuilder ssb = new SpannableStringBuilder(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteKeyDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteKeyDialogFragment.java index 32789d53b..20f20c32e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteKeyDialogFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteKeyDialogFragment.java @@ -142,7 +142,7 @@ public class DeleteKeyDialogFragment extends DialogFragment { public void handleMessage(Message message) { super.handleMessage(message); // handle messages by standard KeychainIntentServiceHandler first - if (message.arg1 == MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { try { Message msg = Message.obtain(); msg.copyFrom(message); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ExportHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ExportHelper.java index 1d78ed80e..cda5892fe 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ExportHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ExportHelper.java @@ -124,7 +124,7 @@ public class ExportHelper { // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + if (message.arg1 == MessageStatus.OKAY.ordinal()) { // get returned data bundle Bundle data = message.getData(); -- cgit v1.2.3 From 7d27faf00c42ce1ad6311c5fadc37c62ba999150 Mon Sep 17 00:00:00 2001 From: danielnelz Date: Mon, 9 Mar 2015 20:14:11 +0100 Subject: Added braces to if else. --- .../sufficientlysecure/keychain/service/KeychainIntentService.java | 5 +++-- .../keychain/service/KeychainIntentServiceHandler.java | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java index b0453474e..9f769759e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java @@ -135,10 +135,11 @@ public class KeychainIntentService extends IntentService implements Progressable private static final IOType[] values = values(); public static IOType fromInt(int n) { - if(n >= values.length) + if(n >= values.length) { return UNKNOWN; - else + } else { return values[n]; + } } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java index fe0e7bb90..c102acc32 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java @@ -44,10 +44,11 @@ public class KeychainIntentServiceHandler extends Handler { public static MessageStatus fromInt(int n) { - if(n >= values.length) + if(n >= values.length) { return UNKNOWN; - else + } else { return values[n]; + } } } -- cgit v1.2.3 From f13953e8fc8570a77d3652b9339dd66658c948c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Tue, 10 Mar 2015 11:34:35 +0100 Subject: API 7 --- OpenKeychain/src/main/AndroidManifest.xml | 6 + .../keychain/provider/ProviderHelper.java | 108 +++++----- .../keychain/remote/AccountSettings.java | 38 +--- .../keychain/remote/OpenPgpService.java | 168 +++++++++++----- .../keychain/remote/RemoteService.java | 13 +- .../remote/ui/AccountSettingsActivity.java | 3 +- .../remote/ui/AccountSettingsFragment.java | 66 ------- .../remote/ui/SelectSignKeyIdActivity.java | 145 ++++++++++++++ .../remote/ui/SelectSignKeyIdListFragment.java | 218 +++++++++++++++++++++ .../res/layout/api_account_settings_fragment.xml | 75 ------- .../res/layout/api_select_sign_key_activity.xml | 70 +++++++ OpenKeychain/src/main/res/values/strings.xml | 3 +- 12 files changed, 633 insertions(+), 280 deletions(-) create mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdActivity.java create mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdListFragment.java create mode 100644 OpenKeychain/src/main/res/layout/api_select_sign_key_activity.xml (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/AndroidManifest.xml b/OpenKeychain/src/main/AndroidManifest.xml index fbe89bc28..bbdbdf259 100644 --- a/OpenKeychain/src/main/AndroidManifest.xml +++ b/OpenKeychain/src/main/AndroidManifest.xml @@ -711,6 +711,12 @@ android:label="@string/app_name" android:launchMode="singleTop" android:process=":remote_api" /> + * Operations in this class write logs. These can be obtained from the * OperationResultParcel return values directly, but are also accumulated over * the lifetime of the executing ProviderHelper object unless the resetLog() * method is called to start a new one specifically. - * */ public class ProviderHelper { private final Context mContext; @@ -126,12 +128,13 @@ public class ProviderHelper { } public void log(LogType type) { - if(mLog != null) { + if (mLog != null) { mLog.add(type, mIndent); } } + public void log(LogType type, Object... parameters) { - if(mLog != null) { + if (mLog != null) { mLog.add(type, mIndent, parameters); } } @@ -213,7 +216,7 @@ public class ProviderHelper { } private LongSparseArray getTrustedMasterKeys() { - Cursor cursor = mContentResolver.query(KeyRings.buildUnifiedKeyRingsUri(), new String[] { + Cursor cursor = mContentResolver.query(KeyRings.buildUnifiedKeyRingsUri(), new String[]{ KeyRings.MASTER_KEY_ID, // we pick from cache only information that is not easily available from keyrings KeyRings.HAS_ANY_SECRET, KeyRings.VERIFIED, @@ -288,7 +291,7 @@ public class ProviderHelper { boolean hasAnySecret = cursor.getInt(0) > 0; int verified = cursor.getInt(1); byte[] blob = cursor.getBlob(2); - if(secret &! hasAnySecret) { + if (secret & !hasAnySecret) { throw new NotFoundException("Secret key not available!"); } return secret @@ -305,7 +308,7 @@ public class ProviderHelper { } // bits, in order: CESA. make SURE these are correct, we will get bad log entries otherwise!! - static final LogType LOG_TYPES_FLAG_MASTER[] = new LogType[] { + static final LogType LOG_TYPES_FLAG_MASTER[] = new LogType[]{ LogType.MSG_IP_MASTER_FLAGS_XXXX, LogType.MSG_IP_MASTER_FLAGS_CXXX, LogType.MSG_IP_MASTER_FLAGS_XEXX, LogType.MSG_IP_MASTER_FLAGS_CEXX, LogType.MSG_IP_MASTER_FLAGS_XXSX, LogType.MSG_IP_MASTER_FLAGS_CXSX, @@ -317,7 +320,7 @@ public class ProviderHelper { }; // same as above, but for subkeys - static final LogType LOG_TYPES_FLAG_SUBKEY[] = new LogType[] { + static final LogType LOG_TYPES_FLAG_SUBKEY[] = new LogType[]{ LogType.MSG_IP_SUBKEY_FLAGS_XXXX, LogType.MSG_IP_SUBKEY_FLAGS_CXXX, LogType.MSG_IP_SUBKEY_FLAGS_XEXX, LogType.MSG_IP_SUBKEY_FLAGS_CEXX, LogType.MSG_IP_SUBKEY_FLAGS_XXSX, LogType.MSG_IP_SUBKEY_FLAGS_CXSX, @@ -328,8 +331,9 @@ public class ProviderHelper { LogType.MSG_IP_SUBKEY_FLAGS_XESA, LogType.MSG_IP_SUBKEY_FLAGS_CESA }; - /** Saves an UncachedKeyRing of the public variant into the db. - * + /** + * Saves an UncachedKeyRing of the public variant into the db. + *

* This method will not delete all previous data for this masterKeyId from the database prior * to inserting. All public data is effectively re-inserted, secret keyrings are left deleted * and need to be saved externally to be preserved past the operation. @@ -403,7 +407,7 @@ public class ProviderHelper { if (key.getKeyUsage() == null) { log(LogType.MSG_IP_MASTER_FLAGS_UNSPECIFIED); } else { - log(LOG_TYPES_FLAG_MASTER[(c?1:0) + (e?2:0) + (s?4:0) + (a?8:0)]); + log(LOG_TYPES_FLAG_MASTER[(c ? 1 : 0) + (e ? 2 : 0) + (s ? 4 : 0) + (a ? 8 : 0)]); } } else { if (key.getKeyUsage() == null) { @@ -492,7 +496,7 @@ public class ProviderHelper { try { cert.init(trustedKey); // if it doesn't certify, leave a note and skip - if ( ! cert.verifySignature(masterKey, rawUserId)) { + if (!cert.verifySignature(masterKey, rawUserId)) { log(LogType.MSG_IP_UID_CERT_BAD); continue; } @@ -537,7 +541,7 @@ public class ProviderHelper { ArrayList userAttributes = masterKey.getUnorderedUserAttributes(); // Don't spam the log if there aren't even any attributes - if ( ! userAttributes.isEmpty()) { + if (!userAttributes.isEmpty()) { log(LogType.MSG_IP_UAT_CLASSIFYING); } @@ -592,7 +596,7 @@ public class ProviderHelper { try { cert.init(trustedKey); // if it doesn't certify, leave a note and skip - if ( ! cert.verifySignature(masterKey, userAttribute)) { + if (!cert.verifySignature(masterKey, userAttribute)) { log(LogType.MSG_IP_UAT_CERT_BAD); continue; } @@ -660,7 +664,7 @@ public class ProviderHelper { selfCertsAreTrusted ? Certs.VERIFIED_SECRET : Certs.VERIFIED_SELF)); // iterate over signatures - for (int i = 0; i < item.trustedCerts.size() ; i++) { + for (int i = 0; i < item.trustedCerts.size(); i++) { WrappedSignature sig = item.trustedCerts.valueAt(i); // if it's a revocation if (sig.isRevocation()) { @@ -725,7 +729,7 @@ public class ProviderHelper { public int compareTo(UserPacketItem o) { // revoked keys always come last! //noinspection DoubleNegation - if ( (selfRevocation != null) != (o.selfRevocation != null)) { + if ((selfRevocation != null) != (o.selfRevocation != null)) { return selfRevocation != null ? 1 : -1; } // if one is a user id, but the other isn't, the user id always comes first. @@ -742,7 +746,8 @@ public class ProviderHelper { } } - /** Saves an UncachedKeyRing of the secret variant into the db. + /** + * Saves an UncachedKeyRing of the secret variant into the db. * This method will fail if no corresponding public keyring is in the database! */ private int saveCanonicalizedSecretKeyRing(CanonicalizedSecretKeyRing keyRing) { @@ -789,7 +794,7 @@ public class ProviderHelper { SecretKeyType mode = sub.getSecretKeyType(); values.put(Keys.HAS_SECRET, mode.getNum()); int upd = mContentResolver.update(uri, values, Keys.KEY_ID + " = ?", - new String[]{ Long.toString(id) }); + new String[]{Long.toString(id)}); if (upd == 1) { switch (mode) { case PASSPHRASE: @@ -843,8 +848,9 @@ public class ProviderHelper { return savePublicKeyRing(keyRing, new ProgressScaler()); } - /** Save a public keyring into the database. - * + /** + * Save a public keyring into the database. + *

* This is a high level method, which takes care of merging all new information into the old and * keep public and secret keyrings in sync. */ @@ -949,7 +955,7 @@ public class ProviderHelper { log(LogType.MSG_IS, KeyFormattingUtils.convertKeyIdToHex(masterKeyId)); mIndent += 1; - if ( ! secretRing.isSecret()) { + if (!secretRing.isSecret()) { log(LogType.MSG_IS_BAD_TYPE_PUBLIC); return new SaveKeyringResult(SaveKeyringResult.RESULT_ERROR, mLog, null); } @@ -1420,9 +1426,13 @@ public class ProviderHelper { ContentValues values = new ContentValues(); values.put(KeychainContract.ApiAccounts.ACCOUNT_NAME, accSettings.getAccountName()); values.put(KeychainContract.ApiAccounts.KEY_ID, accSettings.getKeyId()); - values.put(KeychainContract.ApiAccounts.COMPRESSION, accSettings.getCompression()); - values.put(KeychainContract.ApiAccounts.ENCRYPTION_ALGORITHM, accSettings.getEncryptionAlgorithm()); - values.put(KeychainContract.ApiAccounts.HASH_ALORITHM, accSettings.getHashAlgorithm()); + + // DEPRECATED and thus hardcoded + values.put(KeychainContract.ApiAccounts.COMPRESSION, CompressionAlgorithmTags.ZLIB); + values.put(KeychainContract.ApiAccounts.ENCRYPTION_ALGORITHM, + PgpConstants.OpenKeychainSymmetricKeyAlgorithmTags.USE_PREFERRED); + values.put(KeychainContract.ApiAccounts.HASH_ALORITHM, + PgpConstants.OpenKeychainHashAlgorithmTags.USE_PREFERRED); return values; } @@ -1478,12 +1488,6 @@ public class ProviderHelper { cursor.getColumnIndex(KeychainContract.ApiAccounts.ACCOUNT_NAME))); settings.setKeyId(cursor.getLong( cursor.getColumnIndex(KeychainContract.ApiAccounts.KEY_ID))); - settings.setCompression(cursor.getInt( - cursor.getColumnIndexOrThrow(KeychainContract.ApiAccounts.COMPRESSION))); - settings.setHashAlgorithm(cursor.getInt( - cursor.getColumnIndexOrThrow(KeychainContract.ApiAccounts.HASH_ALORITHM))); - settings.setEncryptionAlgorithm(cursor.getInt( - cursor.getColumnIndexOrThrow(KeychainContract.ApiAccounts.ENCRYPTION_ALGORITHM))); } } finally { if (cursor != null) { @@ -1547,26 +1551,32 @@ public class ProviderHelper { } } + public void addAllowedKeyIdForApp(Uri uri, long allowedKeyId) { + ContentValues values = new ContentValues(); + values.put(ApiAllowedKeys.KEY_ID, allowedKeyId); + mContentResolver.insert(uri, values); + } + public Set getAllFingerprints(Uri uri) { - Set fingerprints = new HashSet<>(); - String[] projection = new String[]{KeyRings.FINGERPRINT}; - Cursor cursor = mContentResolver.query(uri, projection, null, null, null); - try { - if(cursor != null) { - int fingerprintColumn = cursor.getColumnIndex(KeyRings.FINGERPRINT); - while(cursor.moveToNext()) { - fingerprints.add( + Set fingerprints = new HashSet<>(); + String[] projection = new String[]{KeyRings.FINGERPRINT}; + Cursor cursor = mContentResolver.query(uri, projection, null, null, null); + try { + if (cursor != null) { + int fingerprintColumn = cursor.getColumnIndex(KeyRings.FINGERPRINT); + while (cursor.moveToNext()) { + fingerprints.add( KeyFormattingUtils.convertFingerprintToHex(cursor.getBlob(fingerprintColumn)) - ); - } - } - } finally { - if (cursor != null) { - cursor.close(); - } - } - return fingerprints; - } + ); + } + } + } finally { + if (cursor != null) { + cursor.close(); + } + } + return fingerprints; + } public byte[] getApiAppSignature(String packageName) { Uri queryUri = ApiApps.buildByPackageNameUri(packageName); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/AccountSettings.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/AccountSettings.java index 6cffeeb53..5d23176be 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/AccountSettings.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/AccountSettings.java @@ -17,17 +17,14 @@ package org.sufficientlysecure.keychain.remote; -import org.spongycastle.bcpg.CompressionAlgorithmTags; -import org.spongycastle.bcpg.HashAlgorithmTags; -import org.spongycastle.openpgp.PGPEncryptedData; import org.sufficientlysecure.keychain.Constants; +/** + * DEPRECATED API + */ public class AccountSettings { private String mAccountName; private long mKeyId = Constants.key.none; - private int mEncryptionAlgorithm; - private int mHashAlgorithm; - private int mCompression; public AccountSettings() { @@ -36,11 +33,6 @@ public class AccountSettings { public AccountSettings(String accountName) { super(); this.mAccountName = accountName; - - // defaults: - this.mEncryptionAlgorithm = PGPEncryptedData.AES_256; - this.mHashAlgorithm = HashAlgorithmTags.SHA256; - this.mCompression = CompressionAlgorithmTags.ZLIB; } public String getAccountName() { @@ -59,28 +51,4 @@ public class AccountSettings { this.mKeyId = scretKeyId; } - public int getEncryptionAlgorithm() { - return mEncryptionAlgorithm; - } - - public void setEncryptionAlgorithm(int encryptionAlgorithm) { - this.mEncryptionAlgorithm = encryptionAlgorithm; - } - - public int getHashAlgorithm() { - return mHashAlgorithm; - } - - public void setHashAlgorithm(int hashAlgorithm) { - this.mHashAlgorithm = hashAlgorithm; - } - - public int getCompression() { - return mCompression; - } - - public void setCompression(int compression) { - this.mCompression = compression; - } - } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java index 390e85ef8..a4bc95602 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java @@ -47,6 +47,7 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainDatabase.Tables; import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.remote.ui.RemoteServiceActivity; +import org.sufficientlysecure.keychain.remote.ui.SelectSignKeyIdActivity; import org.sufficientlysecure.keychain.ui.ImportKeysActivity; import org.sufficientlysecure.keychain.ui.NfcActivity; import org.sufficientlysecure.keychain.ui.PassphraseDialogActivity; @@ -232,8 +233,7 @@ public class OpenPgpService extends RemoteService { } private Intent signImpl(Intent data, ParcelFileDescriptor input, - ParcelFileDescriptor output, AccountSettings accSettings, - boolean cleartextSign) { + ParcelFileDescriptor output, boolean cleartextSign) { InputStream is = null; OutputStream os = null; try { @@ -246,6 +246,17 @@ public class OpenPgpService extends RemoteService { Log.d(Constants.TAG, "nfcSignedHash: null"); } + Intent signKeyIdIntent = getSignKeyMasterId(data); + // NOTE: Fallback to return account settings (Old API) + if (signKeyIdIntent.getIntExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR) + == OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED) { + return signKeyIdIntent; + } + long signKeyId = signKeyIdIntent.getLongExtra(OpenPgpApi.EXTRA_SIGN_KEY_ID, Constants.key.none); + if (signKeyId == Constants.key.none) { + Log.e(Constants.TAG, "No signing key given!"); + } + // carefully: only set if timestamp exists Date nfcCreationDate = null; long nfcCreationTimestamp = data.getLongExtra(OpenPgpApi.EXTRA_NFC_SIG_CREATION_TIMESTAMP, -1); @@ -271,7 +282,7 @@ public class OpenPgpService extends RemoteService { .setDetachedSignature(!cleartextSign) .setVersionHeader(null) .setSignatureHashAlgorithm(PgpConstants.OpenKeychainHashAlgorithmTags.USE_PREFERRED) - .setSignatureMasterKeyId(accSettings.getKeyId()) + .setSignatureMasterKeyId(signKeyId) .setNfcState(nfcSignedHash, nfcCreationDate); // execute PGP operation! @@ -336,8 +347,7 @@ public class OpenPgpService extends RemoteService { } private Intent encryptAndSignImpl(Intent data, ParcelFileDescriptor input, - ParcelFileDescriptor output, AccountSettings accSettings, - boolean sign) { + ParcelFileDescriptor output, boolean sign) { InputStream is = null; OutputStream os = null; try { @@ -347,6 +357,14 @@ public class OpenPgpService extends RemoteService { originalFilename = ""; } + boolean enableCompression = data.getBooleanExtra(OpenPgpApi.EXTRA_ENABLE_COMPRESSION, true); + int compressionId; + if (enableCompression) { + compressionId = CompressionAlgorithmTags.ZLIB; + } else { + compressionId = CompressionAlgorithmTags.UNCOMPRESSED; + } + // first try to get key ids from non-ambiguous key id extra long[] keyIds = data.getLongArrayExtra(OpenPgpApi.EXTRA_KEY_IDS); if (keyIds == null) { @@ -374,14 +392,24 @@ public class OpenPgpService extends RemoteService { PgpSignEncryptInput pseInput = new PgpSignEncryptInput(); pseInput.setEnableAsciiArmorOutput(asciiArmor) .setVersionHeader(null) - .setCompressionId(CompressionAlgorithmTags.UNCOMPRESSED) + .setCompressionId(compressionId) .setSymmetricEncryptionAlgorithm(PgpConstants.OpenKeychainSymmetricKeyAlgorithmTags.USE_PREFERRED) .setEncryptionMasterKeyIds(keyIds) - .setFailOnMissingEncryptionKeyIds(true) - .setAdditionalEncryptId(accSettings.getKeyId()); // add acc key for encryption + .setFailOnMissingEncryptionKeyIds(true); if (sign) { + Intent signKeyIdIntent = getSignKeyMasterId(data); + // NOTE: Fallback to return account settings (Old API) + if (signKeyIdIntent.getIntExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR) + == OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED) { + return signKeyIdIntent; + } + long signKeyId = signKeyIdIntent.getLongExtra(OpenPgpApi.EXTRA_SIGN_KEY_ID, Constants.key.none); + if (signKeyId == Constants.key.none) { + Log.e(Constants.TAG, "No signing key given!"); + } + byte[] nfcSignedHash = data.getByteArrayExtra(OpenPgpApi.EXTRA_NFC_SIGNED_HASH); // carefully: only set if timestamp exists Date nfcCreationDate = null; @@ -392,8 +420,9 @@ public class OpenPgpService extends RemoteService { // sign and encrypt pseInput.setSignatureHashAlgorithm(PgpConstants.OpenKeychainHashAlgorithmTags.USE_PREFERRED) - .setSignatureMasterKeyId(accSettings.getKeyId()) - .setNfcState(nfcSignedHash, nfcCreationDate); + .setSignatureMasterKeyId(signKeyId) + .setNfcState(nfcSignedHash, nfcCreationDate) + .setAdditionalEncryptId(signKeyId); // add sign key for encryption } PgpSignEncryptOperation op = new PgpSignEncryptOperation(this, new ProviderHelper(getContext()), null); @@ -455,8 +484,7 @@ public class OpenPgpService extends RemoteService { } private Intent decryptAndVerifyImpl(Intent data, ParcelFileDescriptor input, - ParcelFileDescriptor output, Set allowedKeyIds, - boolean decryptMetadataOnly) { + ParcelFileDescriptor output, boolean decryptMetadataOnly) { InputStream is = null; OutputStream os = null; try { @@ -470,6 +498,16 @@ public class OpenPgpService extends RemoteService { os = new ParcelFileDescriptor.AutoCloseOutputStream(output); } + String currentPkg = getCurrentCallingPackage(); + Set allowedKeyIds; + if (data.getIntExtra(OpenPgpApi.EXTRA_API_VERSION, -1) < 7) { + allowedKeyIds = mProviderHelper.getAllKeyIdsForApp( + ApiAccounts.buildBaseUri(currentPkg)); + } else { + allowedKeyIds = mProviderHelper.getAllowedKeyIdsForApp( + KeychainContract.ApiAllowedKeys.buildBaseUri(currentPkg)); + } + String passphrase = data.getStringExtra(OpenPgpApi.EXTRA_PASSPHRASE); long inputLength = is.available(); InputData inputData = new InputData(is, inputLength); @@ -516,9 +554,16 @@ public class OpenPgpService extends RemoteService { } } else if (pgpResult.success()) { Intent result = new Intent(); + int resultType = OpenPgpApi.RESULT_TYPE_UNENCRYPTED_UNSIGNED; OpenPgpSignatureResult signatureResult = pgpResult.getSignatureResult(); if (signatureResult != null) { + resultType |= OpenPgpApi.RESULT_TYPE_SIGNED; + if (!signatureResult.isSignatureOnly()) { + resultType |= OpenPgpApi.RESULT_TYPE_ENCRYPTED; + } + result.putExtra(OpenPgpApi.RESULT_TYPE, resultType); + result.putExtra(OpenPgpApi.RESULT_SIGNATURE, signatureResult); if (data.getIntExtra(OpenPgpApi.EXTRA_API_VERSION, -1) < 5) { @@ -615,6 +660,27 @@ public class OpenPgpService extends RemoteService { } } + private Intent getSignKeyIdImpl(Intent data) { + String preferredUserId = data.getStringExtra(OpenPgpApi.EXTRA_USER_ID); + + Intent intent = new Intent(getBaseContext(), SelectSignKeyIdActivity.class); + String currentPkg = getCurrentCallingPackage(); + intent.setData(KeychainContract.ApiApps.buildByPackageNameUri(currentPkg)); + intent.putExtra(SelectSignKeyIdActivity.EXTRA_USER_ID, preferredUserId); + intent.putExtra(SelectSignKeyIdActivity.EXTRA_DATA, data); + + PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0, + intent, + PendingIntent.FLAG_CANCEL_CURRENT); + + // return PendingIntent to be executed by client + Intent result = new Intent(); + result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED); + result.putExtra(OpenPgpApi.RESULT_INTENT, pi); + + return result; + } + private Intent getKeyIdsImpl(Intent data) { // if data already contains key ids extra GET_KEY_IDS has been executed again // after user interaction. Then, we just need to return the array again! @@ -632,6 +698,35 @@ public class OpenPgpService extends RemoteService { } } + private Intent getSignKeyMasterId(Intent data) { + // NOTE: Accounts are deprecated on API version >= 7 + if (data.getIntExtra(OpenPgpApi.EXTRA_API_VERSION, -1) < 7) { + String accName = data.getStringExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME); + // if no account name is given use name "default" + if (TextUtils.isEmpty(accName)) { + accName = "default"; + } + Log.d(Constants.TAG, "accName: " + accName); + // fallback to old API + final AccountSettings accSettings = getAccSettings(accName); + if (accSettings == null || (accSettings.getKeyId() == Constants.key.none)) { + return getCreateAccountIntent(data, accName); + } + + // NOTE: just wrapping the key id + Intent result = new Intent(); + result.putExtra(OpenPgpApi.EXTRA_SIGN_KEY_ID, accSettings.getKeyId()); + return result; + } else { + long signKeyId = data.getLongExtra(OpenPgpApi.EXTRA_SIGN_KEY_ID, Constants.key.none); + if (signKeyId == Constants.key.none) { + return getSignKeyIdImpl(data); + } + + return data; + } + } + /** * Check requirements: * - params != null @@ -657,12 +752,13 @@ public class OpenPgpService extends RemoteService { if (data.getIntExtra(OpenPgpApi.EXTRA_API_VERSION, -1) != 3 && data.getIntExtra(OpenPgpApi.EXTRA_API_VERSION, -1) != 4 && data.getIntExtra(OpenPgpApi.EXTRA_API_VERSION, -1) != 5 - && data.getIntExtra(OpenPgpApi.EXTRA_API_VERSION, -1) != 6) { + && data.getIntExtra(OpenPgpApi.EXTRA_API_VERSION, -1) != 6 + && data.getIntExtra(OpenPgpApi.EXTRA_API_VERSION, -1) != 7) { Intent result = new Intent(); OpenPgpError error = new OpenPgpError (OpenPgpError.INCOMPATIBLE_API_VERSIONS, "Incompatible API versions!\n" + "used API version: " + data.getIntExtra(OpenPgpApi.EXTRA_API_VERSION, -1) + "\n" - + "supported API versions: 3, 4, 5, 6"); + + "supported API versions: 3-7"); result.putExtra(OpenPgpApi.RESULT_ERROR, error); result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR); return result; @@ -677,16 +773,6 @@ public class OpenPgpService extends RemoteService { return null; } - private String getAccountName(Intent data) { - String accName = data.getStringExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME); - // if no account name is given use name "default" - if (TextUtils.isEmpty(accName)) { - accName = "default"; - } - Log.d(Constants.TAG, "accName: " + accName); - return accName; - } - // TODO: multi-threading private final IOpenPgpService.Stub mBinder = new IOpenPgpService.Stub() { @@ -698,41 +784,29 @@ public class OpenPgpService extends RemoteService { return errorResult; } - String accName = getAccountName(data); - final AccountSettings accSettings = getAccSettings(accName); - if (accSettings == null) { - return getCreateAccountIntent(data, accName); - } - String action = data.getAction(); if (OpenPgpApi.ACTION_CLEARTEXT_SIGN.equals(action)) { - return signImpl(data, input, output, accSettings, true); + return signImpl(data, input, output, true); } else if (OpenPgpApi.ACTION_SIGN.equals(action)) { // DEPRECATED: same as ACTION_CLEARTEXT_SIGN Log.w(Constants.TAG, "You are using a deprecated API call, please use ACTION_CLEARTEXT_SIGN instead of ACTION_SIGN!"); - return signImpl(data, input, output, accSettings, true); + return signImpl(data, input, output, true); } else if (OpenPgpApi.ACTION_DETACHED_SIGN.equals(action)) { - return signImpl(data, input, output, accSettings, false); + return signImpl(data, input, output, false); } else if (OpenPgpApi.ACTION_ENCRYPT.equals(action)) { - return encryptAndSignImpl(data, input, output, accSettings, false); + return encryptAndSignImpl(data, input, output, false); } else if (OpenPgpApi.ACTION_SIGN_AND_ENCRYPT.equals(action)) { - return encryptAndSignImpl(data, input, output, accSettings, true); + return encryptAndSignImpl(data, input, output, true); } else if (OpenPgpApi.ACTION_DECRYPT_VERIFY.equals(action)) { - String currentPkg = getCurrentCallingPackage(); - Set allowedKeyIds = - mProviderHelper.getAllKeyIdsForApp( - ApiAccounts.buildBaseUri(currentPkg)); - return decryptAndVerifyImpl(data, input, output, allowedKeyIds, false); + return decryptAndVerifyImpl(data, input, output, false); } else if (OpenPgpApi.ACTION_DECRYPT_METADATA.equals(action)) { - String currentPkg = getCurrentCallingPackage(); - Set allowedKeyIds = - mProviderHelper.getAllKeyIdsForApp( - ApiAccounts.buildBaseUri(currentPkg)); - return decryptAndVerifyImpl(data, input, output, allowedKeyIds, true); - } else if (OpenPgpApi.ACTION_GET_KEY.equals(action)) { - return getKeyImpl(data); + return decryptAndVerifyImpl(data, input, output, true); + } else if (OpenPgpApi.ACTION_GET_SIGN_KEY_ID.equals(action)) { + return getSignKeyIdImpl(data); } else if (OpenPgpApi.ACTION_GET_KEY_IDS.equals(action)) { return getKeyIdsImpl(data); + } else if (OpenPgpApi.ACTION_GET_KEY.equals(action)) { + return getKeyImpl(data); } else { return null; } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/RemoteService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/RemoteService.java index 672f59285..59dafb505 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/RemoteService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/RemoteService.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013-2014 Dominik Schürmann + * Copyright (C) 2013-2015 Dominik Schürmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -154,9 +154,9 @@ public abstract class RemoteService extends Service { } /** - * Retrieves AccountSettings from database for the application calling this remote service + * DEPRECATED API * - * @return + * Retrieves AccountSettings from database for the application calling this remote service */ protected AccountSettings getAccSettings(String accountName) { String currentPkg = getCurrentCallingPackage(); @@ -164,11 +164,12 @@ public abstract class RemoteService extends Service { Uri uri = KeychainContract.ApiAccounts.buildByPackageAndAccountUri(currentPkg, accountName); - AccountSettings settings = mProviderHelper.getApiAccountSettings(uri); - - return settings; // can be null! + return mProviderHelper.getApiAccountSettings(uri); // can be null! } + /** + * Deprecated API + */ protected Intent getCreateAccountIntent(Intent data, String accountName) { String packageName = getCurrentCallingPackage(); Log.d(Constants.TAG, "getCreateAccountIntent accountName: " + accountName); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AccountSettingsActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AccountSettingsActivity.java index 4d6df24d2..507d4dea5 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AccountSettingsActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AccountSettingsActivity.java @@ -89,9 +89,10 @@ public class AccountSettingsActivity extends BaseActivity { @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - case R.id.menu_account_settings_delete: + case R.id.menu_account_settings_delete: { deleteAccount(); return true; + } } return super.onOptionsItemSelected(item); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AccountSettingsFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AccountSettingsFragment.java index a5bc05ba8..940ae27d0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AccountSettingsFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AccountSettingsFragment.java @@ -24,9 +24,6 @@ import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemSelectedListener; -import android.widget.Spinner; import android.widget.TextView; import org.sufficientlysecure.keychain.Constants; @@ -36,10 +33,8 @@ import org.sufficientlysecure.keychain.operations.results.SaveKeyringResult; import org.sufficientlysecure.keychain.pgp.KeyRing; import org.sufficientlysecure.keychain.remote.AccountSettings; import org.sufficientlysecure.keychain.ui.CreateKeyActivity; -import org.sufficientlysecure.keychain.ui.adapter.KeyValueSpinnerAdapter; import org.sufficientlysecure.keychain.ui.widget.KeySpinner; import org.sufficientlysecure.keychain.ui.widget.SignKeySpinner; -import org.sufficientlysecure.keychain.util.AlgorithmNames; import org.sufficientlysecure.keychain.util.Log; public class AccountSettingsFragment extends Fragment { @@ -51,17 +46,10 @@ public class AccountSettingsFragment extends Fragment { // view private TextView mAccNameView; - private Spinner mEncryptionAlgorithm; - private Spinner mHashAlgorithm; - private Spinner mCompression; private SignKeySpinner mSelectKeySpinner; private View mCreateKeyButton; - KeyValueSpinnerAdapter mEncryptionAdapter; - KeyValueSpinnerAdapter mHashAdapter; - KeyValueSpinnerAdapter mCompressionAdapter; - public AccountSettings getAccSettings() { return mAccSettings; } @@ -71,10 +59,6 @@ public class AccountSettingsFragment extends Fragment { mAccNameView.setText(accountSettings.getAccountName()); mSelectKeySpinner.setSelectedKeyId(accountSettings.getKeyId()); - mEncryptionAlgorithm.setSelection(mEncryptionAdapter.getPosition(accountSettings - .getEncryptionAlgorithm())); - mHashAlgorithm.setSelection(mHashAdapter.getPosition(accountSettings.getHashAlgorithm())); - mCompression.setSelection(mCompressionAdapter.getPosition(accountSettings.getCompression())); } /** @@ -90,10 +74,6 @@ public class AccountSettingsFragment extends Fragment { private void initView(View view) { mSelectKeySpinner = (SignKeySpinner) view.findViewById(R.id.api_account_settings_key_spinner); mAccNameView = (TextView) view.findViewById(R.id.api_account_settings_acc_name); - mEncryptionAlgorithm = (Spinner) view - .findViewById(R.id.api_account_settings_encryption_algorithm); - mHashAlgorithm = (Spinner) view.findViewById(R.id.api_account_settings_hash_algorithm); - mCompression = (Spinner) view.findViewById(R.id.api_account_settings_compression); mCreateKeyButton = view.findViewById(R.id.api_account_settings_create_key); mSelectKeySpinner.setOnKeyChangedListener(new KeySpinner.OnKeyChangedListener() { @@ -109,52 +89,6 @@ public class AccountSettingsFragment extends Fragment { createKey(); } }); - - AlgorithmNames algorithmNames = new AlgorithmNames(getActivity()); - - mEncryptionAdapter = new KeyValueSpinnerAdapter(getActivity(), - algorithmNames.getEncryptionNames()); - mEncryptionAlgorithm.setAdapter(mEncryptionAdapter); - mEncryptionAlgorithm.setOnItemSelectedListener(new OnItemSelectedListener() { - - @Override - public void onItemSelected(AdapterView parent, View view, int position, long id) { - mAccSettings.setEncryptionAlgorithm((int) id); - } - - @Override - public void onNothingSelected(AdapterView parent) { - } - }); - - mHashAdapter = new KeyValueSpinnerAdapter(getActivity(), algorithmNames.getHashNames()); - mHashAlgorithm.setAdapter(mHashAdapter); - mHashAlgorithm.setOnItemSelectedListener(new OnItemSelectedListener() { - - @Override - public void onItemSelected(AdapterView parent, View view, int position, long id) { - mAccSettings.setHashAlgorithm((int) id); - } - - @Override - public void onNothingSelected(AdapterView parent) { - } - }); - - mCompressionAdapter = new KeyValueSpinnerAdapter(getActivity(), - algorithmNames.getCompressionNames()); - mCompression.setAdapter(mCompressionAdapter); - mCompression.setOnItemSelectedListener(new OnItemSelectedListener() { - - @Override - public void onItemSelected(AdapterView parent, View view, int position, long id) { - mAccSettings.setCompression((int) id); - } - - @Override - public void onNothingSelected(AdapterView parent) { - } - }); } private void createKey() { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdActivity.java new file mode 100644 index 000000000..8578bb384 --- /dev/null +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdActivity.java @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2015 Dominik Schürmann + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.sufficientlysecure.keychain.remote.ui; + +import android.app.Activity; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +import org.openintents.openpgp.util.OpenPgpApi; +import org.sufficientlysecure.keychain.Constants; +import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.operations.results.OperationResult; +import org.sufficientlysecure.keychain.pgp.KeyRing; +import org.sufficientlysecure.keychain.ui.BaseActivity; +import org.sufficientlysecure.keychain.ui.CreateKeyActivity; +import org.sufficientlysecure.keychain.util.Log; + +public class SelectSignKeyIdActivity extends BaseActivity { + + public static final String EXTRA_USER_ID = OpenPgpApi.EXTRA_USER_ID; + public static final String EXTRA_DATA = "data"; + + private static final int REQUEST_CODE_CREATE_KEY = 0x00008884; + + private Uri mAppUri; + private String mPreferredUserId; + + private SelectSignKeyIdListFragment mListFragment; + private TextView mActionCreateKey; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Inflate a "Done" custom action bar + setFullScreenDialogClose( + new View.OnClickListener() { + @Override + public void onClick(View v) { + setResult(RESULT_CANCELED); + finish(); + } + }); + + mActionCreateKey = (TextView) findViewById(R.id.api_select_sign_key_create_key); + mActionCreateKey.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + createKey(mPreferredUserId); + } + }); + + Intent intent = getIntent(); + mAppUri = intent.getData(); + mPreferredUserId = intent.getStringExtra(EXTRA_USER_ID); + Intent data = intent.getParcelableExtra(EXTRA_DATA); + if (mAppUri == null) { + Log.e(Constants.TAG, "Intent data missing. Should be Uri of app!"); + finish(); + return; + } else { + Log.d(Constants.TAG, "uri: " + mAppUri); + startListFragments(savedInstanceState, mAppUri, data); + } + } + + private void createKey(String userId) { + String[] userIdSplit = KeyRing.splitUserId(userId); + + Intent intent = new Intent(this, CreateKeyActivity.class); + intent.putExtra(CreateKeyActivity.EXTRA_NAME, userIdSplit[0]); + intent.putExtra(CreateKeyActivity.EXTRA_EMAIL, userIdSplit[1]); + startActivityForResult(intent, REQUEST_CODE_CREATE_KEY); + } + + private void startListFragments(Bundle savedInstanceState, Uri dataUri, Intent data) { + // However, if we're being restored from a previous state, + // then we don't need to do anything and should return or else + // we could end up with overlapping fragments. + if (savedInstanceState != null) { + return; + } + + // Create an instance of the fragments + mListFragment = SelectSignKeyIdListFragment.newInstance(dataUri, data); + // Add the fragment to the 'fragment_container' FrameLayout + // NOTE: We use commitAllowingStateLoss() to prevent weird crashes! + getSupportFragmentManager().beginTransaction() + .replace(R.id.api_select_sign_key_list_fragment, mListFragment) + .commitAllowingStateLoss(); + // do it immediately! + getSupportFragmentManager().executePendingTransactions(); + } + + @Override + protected void initLayout() { + setContentView(R.layout.api_select_sign_key_activity); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // if a result has been returned, display a notify + if (data != null && data.hasExtra(OperationResult.EXTRA_RESULT)) { + OperationResult result = data.getParcelableExtra(OperationResult.EXTRA_RESULT); + result.createNotify(this).show(); + } + + switch (requestCode) { + case REQUEST_CODE_CREATE_KEY: { + if (resultCode == Activity.RESULT_OK) { + if (data != null && data.hasExtra(OperationResult.EXTRA_RESULT)) { +// SaveKeyringResult result = data.getParcelableExtra(OperationResult.EXTRA_RESULT); + // TODO: select? +// mSelectKeySpinner.setSelectedKeyId(result.mRingMasterKeyId); + } else { + Log.e(Constants.TAG, "missing result!"); + } + } + break; + } + default: { + super.onActivityResult(requestCode, resultCode, data); + } + } + } + +} diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdListFragment.java new file mode 100644 index 000000000..e547d0145 --- /dev/null +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdListFragment.java @@ -0,0 +1,218 @@ +/* + * Copyright (C) 2015 Dominik Schürmann + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.sufficientlysecure.keychain.remote.ui; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.net.Uri; +import android.os.Bundle; +import android.support.v4.app.LoaderManager; +import android.support.v4.content.CursorLoader; +import android.support.v4.content.Loader; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ListView; + +import org.openintents.openpgp.util.OpenPgpApi; +import org.sufficientlysecure.keychain.Constants; +import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.compatibility.ListFragmentWorkaround; +import org.sufficientlysecure.keychain.provider.KeychainContract; +import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; +import org.sufficientlysecure.keychain.provider.ProviderHelper; +import org.sufficientlysecure.keychain.ui.adapter.SelectKeyCursorAdapter; +import org.sufficientlysecure.keychain.ui.widget.FixedListView; +import org.sufficientlysecure.keychain.util.Log; + +public class SelectSignKeyIdListFragment extends ListFragmentWorkaround implements LoaderManager.LoaderCallbacks { + private static final String ARG_DATA_URI = "uri"; + public static final String ARG_DATA = "data"; + + private SelectKeyCursorAdapter mAdapter; + private ProviderHelper mProviderHelper; + + private Uri mDataUri; + + /** + * Creates new instance of this fragment + */ + public static SelectSignKeyIdListFragment newInstance(Uri dataUri, Intent data) { + SelectSignKeyIdListFragment frag = new SelectSignKeyIdListFragment(); + Bundle args = new Bundle(); + + args.putParcelable(ARG_DATA_URI, dataUri); + args.putParcelable(ARG_DATA, data); + + frag.setArguments(args); + + return frag; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mProviderHelper = new ProviderHelper(getActivity()); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View layout = super.onCreateView(inflater, container, + savedInstanceState); + ListView lv = (ListView) layout.findViewById(android.R.id.list); + ViewGroup parent = (ViewGroup) lv.getParent(); + + /* + * http://stackoverflow.com/a/15880684 + * Remove ListView and add FixedListView in its place. + * This is done here programatically to be still able to use the progressBar of ListFragment. + * + * We want FixedListView to be able to put this ListFragment inside a ScrollView + */ + int lvIndex = parent.indexOfChild(lv); + parent.removeViewAt(lvIndex); + FixedListView newLv = new FixedListView(getActivity()); + newLv.setId(android.R.id.list); + parent.addView(newLv, lvIndex, lv.getLayoutParams()); + return layout; + } + + /** + * Define Adapter and Loader on create of Activity + */ + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + mDataUri = getArguments().getParcelable(ARG_DATA_URI); + final Intent resultData = getArguments().getParcelable(ARG_DATA); + + getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); + getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + long masterKeyId = mAdapter.getMasterKeyId(position); + + Uri allowedKeysUri = mDataUri.buildUpon().appendPath(KeychainContract.PATH_ALLOWED_KEYS).build(); + Log.d(Constants.TAG, "allowedKeysUri: " + allowedKeysUri); + mProviderHelper.addAllowedKeyIdForApp(allowedKeysUri, masterKeyId); + + resultData.putExtra(OpenPgpApi.EXTRA_SIGN_KEY_ID, masterKeyId); + + getActivity().setResult(Activity.RESULT_OK, resultData); + getActivity().finish(); + } + }); + + // Give some text to display if there is no data. In a real + // application this would come from a resource. + setEmptyText(getString(R.string.list_empty)); + + mAdapter = new SecretKeyCursorAdapter(getActivity(), null, 0, getListView()); + + setListAdapter(mAdapter); + + // Start out with a progress indicator. + setListShown(false); + + // Prepare the loader. Either re-connect with an existing one, + // or start a new one. + getLoaderManager().initLoader(0, null, this); + } + + @Override + public Loader onCreateLoader(int id, Bundle args) { + Uri baseUri = KeyRings.buildUnifiedKeyRingsUri(); + + // These are the rows that we will retrieve. + String[] projection = new String[]{ + KeyRings._ID, + KeyRings.MASTER_KEY_ID, + KeyRings.USER_ID, + KeyRings.IS_EXPIRED, + KeyRings.IS_REVOKED, + KeyRings.HAS_ENCRYPT, + KeyRings.VERIFIED, + KeyRings.HAS_ANY_SECRET, + }; + + String selection = KeyRings.HAS_ANY_SECRET + " != 0"; + + String orderBy = KeyRings.USER_ID + " ASC"; + // Now create and return a CursorLoader that will take care of + // creating a Cursor for the data being displayed. + return new CursorLoader(getActivity(), baseUri, projection, selection, null, orderBy); + } + + @Override + public void onLoadFinished(Loader loader, Cursor data) { + // Swap the new cursor in. (The framework will take care of closing the + // old cursor once we return.) + mAdapter.swapCursor(data); + + // The list should now be shown. + if (isResumed()) { + setListShown(true); + } else { + setListShownNoAnimation(true); + } + + } + + @Override + public void onLoaderReset(Loader loader) { + // This is called when the last Cursor provided to onLoadFinished() + // above is about to be closed. We need to make sure we are no + // longer using it. + mAdapter.swapCursor(null); + } + + private class SecretKeyCursorAdapter extends SelectKeyCursorAdapter { + + public SecretKeyCursorAdapter(Context context, Cursor c, int flags, ListView listView) { + super(context, c, flags, listView); + } + + @Override + protected void initIndex(Cursor cursor) { + super.initIndex(cursor); + } + + @Override + public void bindView(View view, Context context, Cursor cursor) { + super.bindView(view, context, cursor); + ViewHolderItem h = (ViewHolderItem) view.getTag(); + + h.selected.setVisibility(View.GONE); + + boolean enabled = false; + if ((Boolean) h.statusIcon.getTag()) { + h.statusIcon.setVisibility(View.GONE); + enabled = true; + } + h.setEnabled(enabled); + } + + } + +} diff --git a/OpenKeychain/src/main/res/layout/api_account_settings_fragment.xml b/OpenKeychain/src/main/res/layout/api_account_settings_fragment.xml index 88b96284f..d8d729fae 100644 --- a/OpenKeychain/src/main/res/layout/api_account_settings_fragment.xml +++ b/OpenKeychain/src/main/res/layout/api_account_settings_fragment.xml @@ -89,79 +89,4 @@ android:layout_height="1dip" android:background="?android:attr/listDivider" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/api_select_sign_key_activity.xml b/OpenKeychain/src/main/res/layout/api_select_sign_key_activity.xml new file mode 100644 index 000000000..0528fc11e --- /dev/null +++ b/OpenKeychain/src/main/res/layout/api_select_sign_key_activity.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 8ac9e8c5c..aca3fdfcd 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -491,7 +491,7 @@ "Hide advanced settings" "No key selected" "Select key" - "Create new key for this account" + "Create new key" "Save" "Account has been saved" "Cancel" @@ -517,6 +517,7 @@ "Please review the list of recipients!" "Please select the recipients!" "Signature check failed! Have you installed this app from a different source? If you are sure that this is not an attack, revoke this app's registration in OpenKeychain and then register the app again." + "Please select one of your existing keys or create a new one." "Share with QR Code" -- cgit v1.2.3 From 7346144ba9b91742cb0440e1067dabc514c5e32f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Tue, 10 Mar 2015 15:18:24 +0100 Subject: Remove unused NFC Beam html --- OpenKeychain/src/main/res/raw-bg/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-cs/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-de/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-es/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-et/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-eu/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-fi/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-fr/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-is/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-it/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-ja/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-nl/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-pl/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-pt/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-ro/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-ru/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-sl/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-sr/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-sv/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-tr/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-uk/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-zh-rTW/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw-zh/nfc_beam_share.html | 11 ----------- OpenKeychain/src/main/res/raw/nfc_beam_share.html | 15 --------------- 24 files changed, 268 deletions(-) delete mode 100644 OpenKeychain/src/main/res/raw-bg/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-cs/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-de/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-es/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-et/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-eu/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-fi/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-fr/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-is/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-it/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-ja/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-nl/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-pl/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-pt/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-ro/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-ru/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-sl/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-sr/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-sv/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-tr/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-uk/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-zh-rTW/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw-zh/nfc_beam_share.html delete mode 100644 OpenKeychain/src/main/res/raw/nfc_beam_share.html (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/res/raw-bg/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-bg/nfc_beam_share.html deleted file mode 100644 index 083e055c7..000000000 --- a/OpenKeychain/src/main/res/raw-bg/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -

    -
  1. Make sure that NFC is turned on in Settings > More > NFC and make sure that Android Beam is also on in the same section.
  2. -
  3. Hold the two devices back to back (they have to be almost touching) and you'll feel a vibration.
  4. -
  5. After it vibrates you'll see the content on your device turn into a card-like object with Star Trek warp speed-looking animation in the background.
  6. -
  7. Tap the card and the content will then load on the other person’s device.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-cs/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-cs/nfc_beam_share.html deleted file mode 100644 index 3998444d0..000000000 --- a/OpenKeychain/src/main/res/raw-cs/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. Ujistěte se, že je NFC zapnuto v Nastavení > Další > NFC a ověřte, že Android Beam je ve stejné sekci také zapnutý.
  2. -
  3. Podržte dvě zařízení zády k sobě (musí se téměř dotýkat) a ucítíte vibraci.
  4. -
  5. Po tom co ucítíte vibraci, uvidíte že se obsah na displeji zařízení vašeho partnera změní na obrázek s animací připomínající rychlost warpu ze Star Treku.
  6. -
  7. Tapněte na kartu a obsah se nahraje do zařízení.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-de/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-de/nfc_beam_share.html deleted file mode 100644 index 8a2e1880e..000000000 --- a/OpenKeychain/src/main/res/raw-de/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. Stellen Sie sicher, dass NFC und Android Beam in den Einstellungen unter > Mehr > NFC eingeschaltet sind
  2. -
  3. Halten sie die zwei Geräte rückseitig aneinander (sodass sie sich fast berühren) und es wird vibrieren
  4. -
  5. Nachdem es vibriert sehen sie wie der Inhalt ihres Gerätes von einer Warp-Geschwindigkeit Animation umgeben wird
  6. -
  7. Drücken Sie auf die Karte und der Inhalt wird auf das Gerät des Anderen geladen.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-es/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-es/nfc_beam_share.html deleted file mode 100644 index b6c2a2278..000000000 --- a/OpenKeychain/src/main/res/raw-es/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. Asegúrate de que NFC está encendido en Ajustes > Más > NFC, y asegúrate de que Android Beam está también activado en ese mismo apartado.
  2. -
  3. Mantén los dos dispositivos con ambos reversos juntos (deben estar casi en contacto) y notarás una vibración.
  4. -
  5. Después de la vibración verás el contenido de tu dispositivo convertirse en una especie de ficha con una animación de Star Trek de fondo.
  6. -
  7. Pulsa la ficha y el contenido será cargado en el dispositivo de la otra persona.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-et/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-et/nfc_beam_share.html deleted file mode 100644 index 083e055c7..000000000 --- a/OpenKeychain/src/main/res/raw-et/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. Make sure that NFC is turned on in Settings > More > NFC and make sure that Android Beam is also on in the same section.
  2. -
  3. Hold the two devices back to back (they have to be almost touching) and you'll feel a vibration.
  4. -
  5. After it vibrates you'll see the content on your device turn into a card-like object with Star Trek warp speed-looking animation in the background.
  6. -
  7. Tap the card and the content will then load on the other person’s device.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-eu/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-eu/nfc_beam_share.html deleted file mode 100644 index 083e055c7..000000000 --- a/OpenKeychain/src/main/res/raw-eu/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. Make sure that NFC is turned on in Settings > More > NFC and make sure that Android Beam is also on in the same section.
  2. -
  3. Hold the two devices back to back (they have to be almost touching) and you'll feel a vibration.
  4. -
  5. After it vibrates you'll see the content on your device turn into a card-like object with Star Trek warp speed-looking animation in the background.
  6. -
  7. Tap the card and the content will then load on the other person’s device.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-fi/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-fi/nfc_beam_share.html deleted file mode 100644 index 083e055c7..000000000 --- a/OpenKeychain/src/main/res/raw-fi/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. Make sure that NFC is turned on in Settings > More > NFC and make sure that Android Beam is also on in the same section.
  2. -
  3. Hold the two devices back to back (they have to be almost touching) and you'll feel a vibration.
  4. -
  5. After it vibrates you'll see the content on your device turn into a card-like object with Star Trek warp speed-looking animation in the background.
  6. -
  7. Tap the card and the content will then load on the other person’s device.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-fr/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-fr/nfc_beam_share.html deleted file mode 100644 index b63c9ac84..000000000 --- a/OpenKeychain/src/main/res/raw-fr/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. Assurez-vous que la NFC est activée dans Paramètres > Paramètres supplémentaires > NFC, ainsi que Android Beam.
  2. -
  3. Tenir les deux appareils dos à dos (se touchant presque) et une vibration sera ressentie.
  4. -
  5. Après la vibration, le contenu de votre appareil deviendra un objet en forme de carte avec une animation à la Star Trek en arrière-plan.
  6. -
  7. Toquer la carte et le contenu se chargera alors sur votre appareil.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-is/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-is/nfc_beam_share.html deleted file mode 100644 index 083e055c7..000000000 --- a/OpenKeychain/src/main/res/raw-is/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. Make sure that NFC is turned on in Settings > More > NFC and make sure that Android Beam is also on in the same section.
  2. -
  3. Hold the two devices back to back (they have to be almost touching) and you'll feel a vibration.
  4. -
  5. After it vibrates you'll see the content on your device turn into a card-like object with Star Trek warp speed-looking animation in the background.
  6. -
  7. Tap the card and the content will then load on the other person’s device.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-it/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-it/nfc_beam_share.html deleted file mode 100644 index e75877efe..000000000 --- a/OpenKeychain/src/main/res/raw-it/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. Assicurati che NFC sia acceso in Impostazioni > Altro > NFC a assicurati che Android Beam sia pure su On nella stessa sezione.
  2. -
  3. Mantieni i due dispositivi vicini (devono quasi toccarsi) e sentirai una vibrazione.
  4. -
  5. Dopo che ha vibrato, vedrai il contenuto del tuo dispositivo diventare come una scheda e nello sfondo apparirà una animazione come la propulsione a curvatura di Star Trek.
  6. -
  7. Tocca la scheda e il contenuto dopo si trasferira' nel dispositivo dell'altra persona.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-ja/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-ja/nfc_beam_share.html deleted file mode 100644 index 422423a5d..000000000 --- a/OpenKeychain/src/main/res/raw-ja/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. 設定 > その他 > NFC からNFCを有効にしてください、そしてAndroid Beamもまた選択してください。
  2. -
  3. 2つのデバイスを背中合せ(ほとんどすべてのタッチ方法)にしてバイブを感じるまで保持しておいてください。
  4. -
  5. バイブの後、相手のデバイスでスタートレック風のバックグラウンドアニメーションしているカード風のコンテンツを見ると思います。
  6. -
  7. カードをタップしコンテンツを他のデバイスに読み込ませてください。
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-nl/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-nl/nfc_beam_share.html deleted file mode 100644 index 5f7a63050..000000000 --- a/OpenKeychain/src/main/res/raw-nl/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. Zorg ervoor dat NFC ingeschakeld is in Instellingen > Meer > NFC en zorg ervoor dat Android Beam ook in dezelfde sectie ingeschakeld is.
  2. -
  3. Houd de twee apparaten met de achterkant tegen elkaar (ze moeten elkaar bijna aanraken) en u zult een trilling voelen.
  4. -
  5. Nadat het trilt zult u de inhoud op uw partners apparaat in een soort kaart zien veranderen met Star Trek warp snelheid-eruitziende animatie op de achtergrond.
  6. -
  7. Druk op de kaart en de inhoud zal dan laden op het apparaat van de andere persoon.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-pl/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-pl/nfc_beam_share.html deleted file mode 100644 index f17e44079..000000000 --- a/OpenKeychain/src/main/res/raw-pl/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. Upewnij się, że NFC (Near Field Communication, pol.: komunikacja bliskiego zasięgu) jest włączone. W tym celu wejdź w Ustawienia > Inne > NFC. Upewnij się również, że włączona jest funkcja Android Beam (znajduje się w tym samym miejscu).
  2. -
  3. Przytrzymaj oba urządzenia plecami do siebie (powinny się niemal dotykać) i poczujesz wibrację.
  4. -
  5. Po zakończeniu wibracji zobaczysz, że zawartość urządzenia partnera zamienia się w obiekt zbliżony do wizytówki, z animacją rodem ze Star Treka w tle.
  6. -
  7. Dotknij wizytówkę, a jej zawartość zostanie wysłana na urządzenie drugiej osoby.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-pt/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-pt/nfc_beam_share.html deleted file mode 100644 index 083e055c7..000000000 --- a/OpenKeychain/src/main/res/raw-pt/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. Make sure that NFC is turned on in Settings > More > NFC and make sure that Android Beam is also on in the same section.
  2. -
  3. Hold the two devices back to back (they have to be almost touching) and you'll feel a vibration.
  4. -
  5. After it vibrates you'll see the content on your device turn into a card-like object with Star Trek warp speed-looking animation in the background.
  6. -
  7. Tap the card and the content will then load on the other person’s device.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-ro/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-ro/nfc_beam_share.html deleted file mode 100644 index 083e055c7..000000000 --- a/OpenKeychain/src/main/res/raw-ro/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. Make sure that NFC is turned on in Settings > More > NFC and make sure that Android Beam is also on in the same section.
  2. -
  3. Hold the two devices back to back (they have to be almost touching) and you'll feel a vibration.
  4. -
  5. After it vibrates you'll see the content on your device turn into a card-like object with Star Trek warp speed-looking animation in the background.
  6. -
  7. Tap the card and the content will then load on the other person’s device.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-ru/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-ru/nfc_beam_share.html deleted file mode 100644 index 584353da4..000000000 --- a/OpenKeychain/src/main/res/raw-ru/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. Убедитесь, что NFC включен в настройках телефона: Настройки > Дополнительно > NFC
  2. -
  3. Поднесите оба устройства вплотную обратными сторонами (до полного касания). Вы почувствуете небольшую вибрацию.
  4. -
  5. Как только устройства завибрируют, на экране появится карточка с передаваемым содержимым.
  6. -
  7. Нажмите на карточку, что бы передать данные (ключи) с одного устройства на другое.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-sl/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-sl/nfc_beam_share.html deleted file mode 100644 index defdb8884..000000000 --- a/OpenKeychain/src/main/res/raw-sl/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. V poglavju 'Nastavitve > Več > NFC' poskrbite, da bo NFC vključen. Prav tako mora biti vključen tudi 'NFC Beam'.
  2. -
  3. S hrbtoma približajte dve napravi (vašo ter vašega partnerja - morata se skoraj dotikati) in začutili boste vibracijo.
  4. -
  5. Po vibraciji se bo vsebina na vaši napravi spremenila v vizitki podoben objekt s 'Star Trek' animacijo v ozadju.
  6. -
  7. Tapnite na vizitko in njena vsebina se bo prenesla na napravo druge osebe.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-sr/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-sr/nfc_beam_share.html deleted file mode 100644 index 0c7e65353..000000000 --- a/OpenKeychain/src/main/res/raw-sr/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. Проверите у Подешавања > Још > НФЦ да ли је НФЦ укључен и уверите се да је „Андроид Сноп“ такође у истом одељку.
  2. -
  3. Држите оба уређаја леђа о леђа (треба да се скоро додирују) и осетићете вибрацију.
  4. -
  5. Након вибрације видећете да се садржај на вашем уређају претвара у нешто што личи на картицу са анимацијом сличном ворп брзини из Звезданих Стаза у позадини.
  6. -
  7. Додирните картицу и садржај ће се потом учитати на уређај друге особе.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-sv/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-sv/nfc_beam_share.html deleted file mode 100644 index b88771e70..000000000 --- a/OpenKeychain/src/main/res/raw-sv/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. Se till att NFC är påslaget i Inställningar > Mer > NFC och se även till att Android Beam är på i samma avdelning.
  2. -
  3. Håll de två enheternas baksidor mot varandra (de måste nästan vidröras) och du känner av en vibration.
  4. -
  5. Efter vibrationen kommer du att se innehållet på din enhet omvandlas till ett kortliknande föremål och en animation i bakgrunden som ser ut som Star Treks warp speed.
  6. -
  7. Tryck på kortet och innehållet kommer att laddas på den andra personens enhet.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-tr/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-tr/nfc_beam_share.html deleted file mode 100644 index 038cc2c2d..000000000 --- a/OpenKeychain/src/main/res/raw-tr/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. NFC'nin Ayarlar > Daha Fazla > NFC menüsünde açık olduğundan emin olun ve aynı sekmede Android Beam'in de açık olduğundan emin olun.
  2. -
  3. İki cihazı arka arkaya tutun (neredeyse temas edecek şekilde) ve bir titreşim hissedeceksiniz.
  4. -
  5. Titreşimden sonra içeriğin sizin cihazda arkaplanında Star Trek ışınlanma animasyonu olan kart'a benzer bir objeye dönüştüğünü göreceksiniz.
  6. -
  7. Kart'a tıklayın ve içerik diğer kişinin cihazına yüklensin.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-uk/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-uk/nfc_beam_share.html deleted file mode 100644 index 4adff525f..000000000 --- a/OpenKeychain/src/main/res/raw-uk/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. Переконайтеся, що NFC увімкнений в налаштуваннях телефону: Налаштування > Додатково > NFC
  2. -
  3. Піднесіть обидва пристрої впритул зворотними сторонами (до повного торкання). Ви відчуєте невелику вібрацію.
  4. -
  5. Як тільки пристрої завібрують, на екрані з'явиться картка з переданими вмістом.
  6. -
  7. Натисніть на картку, що б передати дані з одного пристрою на інший.
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-zh-rTW/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-zh-rTW/nfc_beam_share.html deleted file mode 100644 index c87976b61..000000000 --- a/OpenKeychain/src/main/res/raw-zh-rTW/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. 確定在 \"設定\" \> \"更多內容…\" \> \"NFC\" 裡面已經開啟NFC和Android Beam。
  2. -
  3. 將裝置背對背輕靠,直到感覺到震動。
  4. -
  5. 震動後會發現畫面變成卡片狀,並且背景帶有Star Trek的特效。
  6. -
  7. 輕觸畫面,內容將顯示在對方的畫面上。
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw-zh/nfc_beam_share.html b/OpenKeychain/src/main/res/raw-zh/nfc_beam_share.html deleted file mode 100644 index 99ffe4c12..000000000 --- a/OpenKeychain/src/main/res/raw-zh/nfc_beam_share.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
    -
  1. 確定在 "設定" > "更多內容…" > "NFC" 裡面已經開啟 NFC 和 Android Beam。
  2. -
  3. 將兩部裝置背對背貼近(幾乎接觸),你會感覺到一股震動。
  4. -
  5. 震動之後你會看見你夥伴的畫面變成卡片狀,並且背景帶有如 Star Trek 般的特效。
  6. -
  7. 輕觸卡片,內容隨即顯示在你的裝置上。
  8. -
- - diff --git a/OpenKeychain/src/main/res/raw/nfc_beam_share.html b/OpenKeychain/src/main/res/raw/nfc_beam_share.html deleted file mode 100644 index 873c71777..000000000 --- a/OpenKeychain/src/main/res/raw/nfc_beam_share.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -
    -
  1. Make sure that NFC is turned on in Settings > More > NFC and make sure that Android Beam is also on in the same section.
  2. -
  3. Hold the two devices back to back (they have to be almost touching) and you'll feel a vibration.
  4. -
  5. After it vibrates you'll see the content on your device turn into a card-like object with Star Trek warp speed-looking animation in the background.
  6. -
  7. Tap the card and the content will then load on the other person’s device.
  8. -
- - \ No newline at end of file -- cgit v1.2.3 From 0e32b37f9d7d8c0b054de7e42b665d3a13eb2884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Tue, 10 Mar 2015 15:35:47 +0100 Subject: Changelog 3.2beta1 --- OpenKeychain/src/main/res/raw/help_changelog.html | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/res/raw/help_changelog.html b/OpenKeychain/src/main/res/raw/help_changelog.html index 2cc93bc38..9435441b0 100644 --- a/OpenKeychain/src/main/res/raw/help_changelog.html +++ b/OpenKeychain/src/main/res/raw/help_changelog.html @@ -6,6 +6,20 @@ And don't add newlines before or after p tags because of transifex --> +

3.2beta1

+
    +
  • Material design
  • +
  • Improved key creation wizard
  • +
  • Fix missing contacts after sync
  • +
  • Requires Android 4
  • +
  • Redesigned key screen
  • +
  • Simplify crypto preferences, better selection of secure ciphers
  • +
  • API: Detached signatures, free selection of signing key,...
  • +
  • Fix: Some valid keys were shown revoked or expired
  • +
  • Don't accept signatures by expired or revoked subkeys
  • +
  • Keybase.io support in advanced view
  • +
+

3.1.2

  • Fix key export to files (now for real)
  • -- cgit v1.2.3 From 79a4e7fb9c63aea99bbfae8b712e4ba6dc627ae3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Tue, 10 Mar 2015 15:52:44 +0100 Subject: Fix expiry, revoked checks in OpenPgpSignatureResultBuilder --- .../keychain/pgp/OpenPgpSignatureResultBuilder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/OpenPgpSignatureResultBuilder.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/OpenPgpSignatureResultBuilder.java index 46defebf7..ed4715681 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/OpenPgpSignatureResultBuilder.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/OpenPgpSignatureResultBuilder.java @@ -104,8 +104,8 @@ public class OpenPgpSignatureResultBuilder { setUserIds(signingRing.getUnorderedUserIds()); // either master key is expired/revoked or this specific subkey is expired/revoked - setKeyExpired(signingRing.isExpired() || signingKey.isMaybeExpired()); - setKeyRevoked(signingRing.isRevoked() || signingKey.isMaybeRevoked()); + setKeyExpired(signingRing.isExpired() || signingKey.isExpired()); + setKeyRevoked(signingRing.isRevoked() || signingKey.isRevoked()); } public OpenPgpSignatureResult build() { -- cgit v1.2.3 From 446e16fc62df97ceb554efee5a745e018afcb569 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Tue, 10 Mar 2015 15:55:19 +0100 Subject: Disable maybe methods in ImportKeysListEntry for now --- .../sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java index 79065604a..7dac8b1e0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java @@ -294,8 +294,9 @@ public class ImportKeysListEntry implements Serializable, Parcelable { mKeyId = key.getKeyId(); mKeyIdHex = KeyFormattingUtils.convertKeyIdToHex(mKeyId); - mRevoked = key.isMaybeRevoked(); - mExpired = key.isMaybeExpired(); + // NOTE: Dont use maybe methods for now, they can be wrong. + mRevoked = false; //key.isMaybeRevoked(); + mExpired = false; //key.isMaybeExpired(); mFingerprintHex = KeyFormattingUtils.convertFingerprintToHex(key.getFingerprint()); mBitStrength = key.getBitStrength(); mCurveOid = key.getCurveOid(); -- cgit v1.2.3 From 58d066a54e5ed1d4f7f28f22f49826fe5b69e172 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Tue, 10 Mar 2015 16:19:46 +0100 Subject: Pull from transifex --- OpenKeychain/src/main/res/raw-bg/help_about.html | 20 +- OpenKeychain/src/main/res/raw-bg/help_start.html | 11 +- OpenKeychain/src/main/res/raw-cs/help_about.html | 20 +- OpenKeychain/src/main/res/raw-cs/help_start.html | 11 +- OpenKeychain/src/main/res/raw-de/help_about.html | 26 +- .../src/main/res/raw-de/help_changelog.html | 178 ++++++------ OpenKeychain/src/main/res/raw-de/help_start.html | 17 +- OpenKeychain/src/main/res/raw-es/help_about.html | 20 +- OpenKeychain/src/main/res/raw-es/help_start.html | 11 +- OpenKeychain/src/main/res/raw-et/help_about.html | 20 +- OpenKeychain/src/main/res/raw-et/help_start.html | 11 +- OpenKeychain/src/main/res/raw-eu/help_about.html | 36 +-- OpenKeychain/src/main/res/raw-eu/help_start.html | 19 +- OpenKeychain/src/main/res/raw-fi/help_about.html | 20 +- OpenKeychain/src/main/res/raw-fi/help_start.html | 11 +- OpenKeychain/src/main/res/raw-fr/help_about.html | 20 +- OpenKeychain/src/main/res/raw-fr/help_start.html | 11 +- OpenKeychain/src/main/res/raw-is/help_about.html | 20 +- OpenKeychain/src/main/res/raw-is/help_start.html | 11 +- OpenKeychain/src/main/res/raw-it/help_about.html | 20 +- OpenKeychain/src/main/res/raw-it/help_start.html | 11 +- OpenKeychain/src/main/res/raw-ja/help_about.html | 20 +- OpenKeychain/src/main/res/raw-ja/help_start.html | 11 +- OpenKeychain/src/main/res/raw-nl/help_about.html | 20 +- OpenKeychain/src/main/res/raw-nl/help_start.html | 11 +- OpenKeychain/src/main/res/raw-pl/help_about.html | 20 +- OpenKeychain/src/main/res/raw-pl/help_start.html | 11 +- OpenKeychain/src/main/res/raw-pt/help_about.html | 20 +- OpenKeychain/src/main/res/raw-pt/help_start.html | 11 +- OpenKeychain/src/main/res/raw-ro/help_about.html | 20 +- OpenKeychain/src/main/res/raw-ro/help_start.html | 11 +- OpenKeychain/src/main/res/raw-ru/help_about.html | 20 +- OpenKeychain/src/main/res/raw-ru/help_start.html | 11 +- OpenKeychain/src/main/res/raw-sl/help_about.html | 20 +- OpenKeychain/src/main/res/raw-sl/help_start.html | 11 +- OpenKeychain/src/main/res/raw-sr/help_about.html | 20 +- OpenKeychain/src/main/res/raw-sr/help_start.html | 11 +- OpenKeychain/src/main/res/raw-sv/help_about.html | 20 +- OpenKeychain/src/main/res/raw-sv/help_start.html | 11 +- OpenKeychain/src/main/res/raw-tr/help_about.html | 20 +- OpenKeychain/src/main/res/raw-tr/help_start.html | 11 +- OpenKeychain/src/main/res/raw-uk/help_about.html | 20 +- OpenKeychain/src/main/res/raw-uk/help_start.html | 11 +- .../src/main/res/raw-zh-rTW/help_about.html | 20 +- .../src/main/res/raw-zh-rTW/help_start.html | 11 +- OpenKeychain/src/main/res/raw-zh/help_about.html | 20 +- .../src/main/res/raw-zh/help_changelog.html | 4 +- OpenKeychain/src/main/res/raw-zh/help_start.html | 13 +- OpenKeychain/src/main/res/values-bg/strings.xml | 1 + OpenKeychain/src/main/res/values-cs/strings.xml | 35 +-- OpenKeychain/src/main/res/values-de/strings.xml | 261 +++++++++-------- OpenKeychain/src/main/res/values-es/strings.xml | 124 ++++---- OpenKeychain/src/main/res/values-et/strings.xml | 4 +- OpenKeychain/src/main/res/values-eu/strings.xml | 313 +++++++++++++++++++++ OpenKeychain/src/main/res/values-fi/strings.xml | 20 +- OpenKeychain/src/main/res/values-fr/strings.xml | 149 +++++----- OpenKeychain/src/main/res/values-is/strings.xml | 1 + OpenKeychain/src/main/res/values-it/strings.xml | 41 +-- OpenKeychain/src/main/res/values-ja/strings.xml | 116 ++++---- OpenKeychain/src/main/res/values-nl/strings.xml | 104 +++---- OpenKeychain/src/main/res/values-pl/strings.xml | 37 +-- OpenKeychain/src/main/res/values-pt/strings.xml | 1 + OpenKeychain/src/main/res/values-ro/strings.xml | 1 + OpenKeychain/src/main/res/values-ru/strings.xml | 89 +++--- OpenKeychain/src/main/res/values-sl/strings.xml | 41 +-- OpenKeychain/src/main/res/values-sv/strings.xml | 40 +-- OpenKeychain/src/main/res/values-tr/strings.xml | 35 +-- OpenKeychain/src/main/res/values-uk/strings.xml | 36 +-- .../src/main/res/values-zh-rTW/strings.xml | 28 +- OpenKeychain/src/main/res/values-zh/strings.xml | 21 +- OpenKeychain/src/main/res/values/strings.xml | 2 +- 71 files changed, 1328 insertions(+), 1105 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/res/raw-bg/help_about.html b/OpenKeychain/src/main/res/raw-bg/help_about.html index 2c6c5b3c4..cf77cf11d 100644 --- a/OpenKeychain/src/main/res/raw-bg/help_about.html +++ b/OpenKeychain/src/main/res/raw-bg/help_about.html @@ -31,27 +31,31 @@

    Libraries

    diff --git a/OpenKeychain/src/main/res/raw-bg/help_start.html b/OpenKeychain/src/main/res/raw-bg/help_start.html index 92fd4a92a..58f3fae40 100644 --- a/OpenKeychain/src/main/res/raw-bg/help_start.html +++ b/OpenKeychain/src/main/res/raw-bg/help_start.html @@ -1,11 +1,14 @@ -

    Getting started

    -

    First you need a personal key. Create one via the menu in "Keys" or import existing secret keys. Afterwards, you can download your friends' keys or exchange them via QR Codes or NFC.

    - -

    On Android lower 4.4, it is recommended that you install OI File Manager for enhanced file selection.

    +

    How do I activate OpenKeychain in K-9 Mail?

    +

    To use OpenKeychain with K-9 Mail, you want to follow these steps:

    +
      +
    1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
    2. +
    3. Select "Account settings" and scroll to the very bottom and click "Cryptography".
    4. +
    5. Click on "OpenPGP Provider" and select OpenKeychain from the list.
    6. +

    I found a bug in OpenKeychain!

    Please report the bug using the issue tracker of OpenKeychain.

    diff --git a/OpenKeychain/src/main/res/raw-cs/help_about.html b/OpenKeychain/src/main/res/raw-cs/help_about.html index 0b9cfa582..e4ec46f0d 100644 --- a/OpenKeychain/src/main/res/raw-cs/help_about.html +++ b/OpenKeychain/src/main/res/raw-cs/help_about.html @@ -31,27 +31,31 @@

    Knihovny

    diff --git a/OpenKeychain/src/main/res/raw-cs/help_start.html b/OpenKeychain/src/main/res/raw-cs/help_start.html index 5a665ea24..acbc80735 100644 --- a/OpenKeychain/src/main/res/raw-cs/help_start.html +++ b/OpenKeychain/src/main/res/raw-cs/help_start.html @@ -1,11 +1,14 @@ -

    Začínáme

    -

    First you need a personal key. Create one via the menu in "Keys" or import existing secret keys. Afterwards, you can download your friends' keys or exchange them via QR Codes or NFC.

    - -

    On Android lower 4.4, it is recommended that you install OI File Manager for enhanced file selection.

    +

    How do I activate OpenKeychain in K-9 Mail?

    +

    To use OpenKeychain with K-9 Mail, you want to follow these steps:

    +
      +
    1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
    2. +
    3. Select "Account settings" and scroll to the very bottom and click "Cryptography".
    4. +
    5. Click on "OpenPGP Provider" and select OpenKeychain from the list.
    6. +

    Našel jsem chybu v OpenKeychain!

    Nahlašte prosím chybu na bug trackeru OpenKeychain.

    diff --git a/OpenKeychain/src/main/res/raw-de/help_about.html b/OpenKeychain/src/main/res/raw-de/help_about.html index 880e5673f..7b613ec20 100644 --- a/OpenKeychain/src/main/res/raw-de/help_about.html +++ b/OpenKeychain/src/main/res/raw-de/help_about.html @@ -31,27 +31,31 @@

    Bibliotheken

    diff --git a/OpenKeychain/src/main/res/raw-de/help_changelog.html b/OpenKeychain/src/main/res/raw-de/help_changelog.html index aae29a2a6..a54052fef 100644 --- a/OpenKeychain/src/main/res/raw-de/help_changelog.html +++ b/OpenKeychain/src/main/res/raw-de/help_changelog.html @@ -4,23 +4,23 @@

    3.1.2

      -
    • Behoben: Schlüsselexport in Datei (Jetzt wirklich)
    • +
    • Behoben: Schlüsselexport in Datei (jetzt wirklich)

    3.1.1

    • Behoben: Schlüsselexport in Datei (wurde nur teilweise geschrieben)
    • -
    • Absturz auf Android 2.3 behoben
    • +
    • Behoben: Absturz auf Android 2.3

    3.1

      -
    • Absturz auf Android 5 behoben
    • -
    • New certify screen
    • -
    • Secure Exchange directly from key list (SafeSlinger library)
    • -
    • New QR Code program flow
    • -
    • Redesigned decrypt screen
    • -
    • New icon usage and colors
    • -
    • Fix import of secret keys from Symantec Encryption Desktop
    • -
    • Subkey IDs on Yubikeys are now checked correctly
    • +
    • Behoben: Absturz auf Android 5
    • +
    • Neuer Beglaubigungsbildschirm
    • +
    • Sicherer Austausch direkt aus der Schlüsselliste (SafeSlinger-Bibliothek)
    • +
    • Neuer Programmablauf für QR-Codes
    • +
    • Neugestaltung des Entschlüsselungsbildschirms
    • +
    • Verwendung neuer Icons und neuer Farben
    • +
    • Behoben: Import geheimer Schlüssel von Symantec Encryption Desktop
    • +
    • Unterschlüssel-IDs auf Yubikeys werden nun richtig geprüft

    3.0.1

      @@ -30,49 +30,49 @@

      3.0

      • Volle Unterstützung für Yubikey-Signaturerzeugung und Entschlüsselung!
      • -
      • Kompatible, installierbare Apps in der Apps Liste anzeigen.
      • -
      • Neues Design der Entschlüsselungsseite
      • -
      • Many fixes for key import, also fixes stripped keys
      • -
      • Honor and display key authenticate flags
      • +
      • Kompatible, installierbare Apps in der App-Liste anzeigen
      • +
      • Neues Design für den Entschlüsselungsbildschirm
      • +
      • Viele Fehlerbehebungen für den Schlüsselimport, auch bei gekürzten Schlüsseln
      • +
      • Schlüsselauthentifizierungs-Flags berücksichtigen und anzeigen
      • Benutzeroberfläche zum Erzeugen benutzerdefinierter Schlüssel
      • -
      • Fixing user id revocation certificates
      • -
      • Neue Suche in der Cloud (sucht über traditionelle Schlüsselserver und über keybase.io)
      • -
      • Support for stripping keys inside OpenKeychain
      • +
      • Behoben: Benutzer-ID-Widerrufszertifikate
      • +
      • Neue Cloudsuche (sucht über traditionelle Schlüsselserver und über keybase.io)
      • +
      • Unterstützung für das Kürzen von Schlüsseln innerhalb von OpenKeychain

      2.9.2

        -
      • Defekte Schlüssel aus 2.9.1 behoben
      • +
      • Behoben: Beschädigung von Schlüsseln in 2.9.1
      • Yubikey-Entschlüsselung funktioniert nun über die API

      2.9.1

      • Verschlüsselungsbildschirm auf zwei aufgeteilt
      • -
      • Handhabung von Schlüsselflags ausgebessert (Unterstützt nun Mailvelope 0.7 Schlüssel)
      • -
      • Handhabung von Passphrasen verbessert
      • +
      • Behoben: Handhabung von Schlüsselflags (Unterstützt nun Mailvelope 0.7 Schlüssel)
      • +
      • Handhabung von Passwörtern verbessert
      • Schlüsselaustausch mit SafeSlinger
      • -
      • Yubikey: Einstellung für andere PINs, zur Zeit funktioniert das Signieren nur mit der OpenPGP API, nicht innerhalb von OpenKeychain
      • -
      • Verwendung von gekürzten Schlüsseln behoben
      • -
      • Standardmäßig SHA256 aufgrund von Kompatibilität
      • -
      • Änderungen an der Intent API, siehe https://github.com/open-keychain/open-keychain/wiki/Intent-API
      • -
      • Das OpenPGP-API kann nun mit widerrufenen/abgelaufenen Schlüsseln umgehen und liefert alle Benutzerkennungen zurück
      • +
      • Yubikey: neue Einstellung zur PIN-Änderung, zur Zeit funktioniert das Signieren nur mit der OpenPGP-API, nicht innerhalb von OpenKeychain
      • +
      • Behoben: Verwendung von gekürzten Schlüsseln
      • +
      • Standardmäßige Nutzung von SHA256 aus Kompatibilitätsgründen
      • +
      • Änderungen an der Intent-API, siehe https://github.com/open-keychain/open-keychain/wiki/Intent-API
      • +
      • OpenPGP-API kann nun mit widerrufenen/abgelaufenen Schlüsseln umgehen und liefert alle Benutzer-IDs zurück

      2.9

        -
      • Mit v2.8 eingeführte Abstürze behoben
      • +
      • Behoben: Mit v2.8 eingeführte Abstürze
      • Experimentelle ECC-Unterstützung
      • -
      • Experimentelle Yubikey Unterstützung (Nur Signieren mit importierten Schlüsseln)
      • +
      • Experimentelle Yubikey-Unterstützung (nur Signieren mit importierten Schlüsseln)

      2.8

      • Es wurden in dieser Version so viele Fehler behoben, dass wir uns besser auf die neuen Funktionen konzentrieren
      • Schlüsselbearbeitung: tolles neues Design und Schlüsselrückruf
      • -
      • Schlüsselimport: tolles neues Design, gesicherte Verbindungen zum Schlüsselserver über HKPS, Schlüsselserver [?] über DNS SRV Einträge
      • -
      • Neuer Bildschirm bei der ersten Öffnung
      • -
      • Neuer Schlüsselerzeugungsbildschirm: Automatische Vorschläge für Name und E-Mail basierend auf Ihren persönlichen Android-Konten
      • -
      • Dateiverschlüsselung: tolles neues Design, Unterstützung für mehrere Dateien
      • -
      • Neue Symbole zum Anzeigen des Schlüsselstatus' (von Brennan Novak)
      • +
      • Schlüsselimport: tolles neues Design, gesicherte Verbindungen zum Schlüsselserver über HKPS, Namensauflösung der Schlüsselserver über DNS SRV-Einträge
      • +
      • Neuer Bildschirm für ersten Start der App
      • +
      • Neuer Schlüsselerzeugungsbildschirm: Automatische Vorschläge für Name und E-Mail basierend auf deinen persönlichen Android-Konten
      • +
      • Dateiverschlüsselung: tolles neues Design, Unterstützung für Verschlüsselung mehrerer Dateien
      • +
      • Neue Symbole zum Anzeigen des Schlüsselstatus (von Brennan Novak)
      • Wichtige Fehlerbehebung: Importieren größerer Schlüsselsammlungen aus einer Datei ist nun möglich
      • -
      • Benachrichtigung, die die Passphrasen im Cache anzeigt
      • +
      • Benachrichtigung, die zwischengespeicherte Passwörter anzeigt
      • Schlüssel sind mit den Android-Kontakten verbunden

      Diese Version wäre ohne die Arbeit von Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray und Thialfihar nicht möglich

      @@ -82,109 +82,109 @@
    • Lila! (Dominik, Vincent)
    • Neues Schlüsselansicht-Design (Dominik, Vincent)
    • Neue flache Android-Schaltflächen (Dominik, Vincent)
    • -
    • API-Fehler behoben (Dominik)
    • +
    • API-Fehlerbehebungen (Dominik)
    • Import aus keybase.io (Tim Bray)

    2.6.1

      -
    • Einige Behebungen für Regressionsfehler
    • +
    • Einige Korrekturen für Regressionsfehler

    2.6

      -
    • Schlüsselzertifizierungen (danke an Vincent Breitmoser)
    • +
    • Schlüsselbeglaubigungen (danke an Vincent Breitmoser)
    • Unterstützung für GnuPG-Teilschlüssel (Dank an Vincent Breitmoser)
    • -
    • Neues Design für Signaturverifikation
    • +
    • Neues Design für Signaturprüfung
    • Benutzerdefinierte Schlüssellänge (Dank an Greg Witczak)
    • Fehler bei der Teilen-Funktion von anderen Apps behoben

    2.5

      -
    • Fix decryption of symmetric OpenPGP messages/files
    • -
    • Refaktorisierter Schlüsselbearbeitungsbildschirm (Dank an Ash Hughes)
    • -
    • Neues modernes Design für Verschlüsselungs-/Entschlüsselungs-Bildschirme
    • -
    • OpenPGP API Version 3 (mehrfache API-Konten, interne Fehlerbehebungen, Schlüsselsuche)
    • +
    • Behoben: Entschlüsselung von symmetrischen OpenPGP-Nachrichten/-Dateien
    • +
    • Umgestaltung des Schlüsselbearbeitungsbildschirms (Dank an Ash Hughes)
    • +
    • Neues modernes Design für Verschlüsselungs-/Entschlüsselungsbildschirme
    • +
    • OpenPGP-API Version 3 (mehrerer API-Konten, interne Fehlerbehebungen, Schlüsselsuche)

    2.4

    -

    Danke an alle Bewerber beim Google Summer of Code 2014, die diese Version funktionsreich und fehlerfrei gemacht haben. +

    Danke an alle Bewerber des Google Summer of Code 2014, die diese Version funktionsreich und fehlerfrei gemacht haben. Neben mehreren kleinen Updates sind eine beachtliche Anzahl von Updates von den folgenden Personen gemacht worden (in alphabetischer Reihenfolge): Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.

    • Neue einheitliche Schlüsselliste
    • Eingefärbter Schlüsselfingerabdruck
    • Unterstützung für Schlüsselserverports
    • -
    • Möglichkeit zum Erzeugen von schwachen Schlüssels deaktiviert
    • +
    • Möglichkeit zum Erzeugen von schwachen Schlüsseln deaktiviert
    • Viel mehr interne Arbeit an der API
    • -
    • Benutzerkennungen zertifizieren
    • +
    • Benutzerkennungen beglaubigen
    • Schlüsselserver-Suchanfrage basierend auf maschinenlesbarer Ausgabe
    • -
    • Lock navigation drawer on tablets
    • -
    • Suggestions for emails on creation of keys
    • +
    • "Navigation Drawer" auf Tablets sperren
    • +
    • Vorschläge für E-Mails bei Schlüsselerzeugung
    • Suche in öffentlichen Schlüssellisten
    • Und viele weitere Verbesserungen und Fehlerbehebungen...

    2.3.1

      -
    • Hotfix for crash when upgrading from old versions
    • +
    • Hotfix für Absturz beim Aktualisieren von alten Versionen

    2.3

      -
    • Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)
    • -
    • Fix setting expiry dates on keys (thanks to Ash Hughes)
    • -
    • More internal fixes when editing keys (thanks to Ash Hughes)
    • -
    • Querying keyservers directly from the import screen
    • -
    • Anordnung und Dialogstil auf Android 2.2-3.0 behoben
    • -
    • Absturz bei leeren Benutzerkennungen behoben
    • -
    • Fix crash and empty lists when coming back from signing screen
    • -
    • Bouncy Castle (Kryptographie Bibliothek) upgedatet von 1.47 auf 1.50 und vom Quellcode kompiliert.
    • -
    • Fix upload of key from signing screen
    • +
    • Kein unnötiger Export öffentlicher Schlüssel beim Export der geheimen Schlüssel (Dank an Ash Hughes)
    • +
    • Behoben: Setzen des Schlüsselablaufdatums (Dank an Ash Hughes)
    • +
    • Weitere interne Fehlerbehebungen für das Editieren von Schlüsseln (Dank an Ash Hughes)
    • +
    • Schlüsselserverabfrage direkt aus dem Importbildschirm
    • +
    • Behoben: Layout und Dialogstil auf Android 2.2-3.0
    • +
    • Behoben: Absturz bei leeren Benutzer-IDs
    • +
    • Behoben: Absturz nach Rückkehr vom Signierenbildschirm, außerdem wurden die Listen nicht geleert
    • +
    • Bouncy Castle (Kryptographie-Bibliothek) von 1.47 auf 1.50 aktualisiert und aus Quellcode kompiliert.
    • +
    • Behoben: Hochladen des Schlüssels aus dem Signierenbildschirm

    2.2

      -
    • New design with navigation drawer
    • -
    • New public key list design
    • +
    • Neues Design mit "Navigation Drawer"
    • +
    • Neues Design der Liste öffentlicher Schlüssel
    • Neue Ansicht für öffentliche Schlüssel
    • -
    • Fehler beim Schlüsselimport behoben
    • -
    • Key cross-certification (thanks to Ash Hughes)
    • -
    • Handle UTF-8 passwords properly (thanks to Ash Hughes)
    • -
    • First version with new languages (thanks to the contributors on Transifex)
    • -
    • Sharing of keys via QR Codes fixed and improved
    • -
    • Package signature verification for API
    • +
    • Behoben: Fehler beim Schlüsselimport
    • +
    • Schlüsselbeglaubigungen über Kreuz, "Key cross-certification" (Dank an Ash Hughes)
    • +
    • Korrekte Verarbeitung von UTF-8-Passwörtern (Dank an Ash Hughes)
    • +
    • Erste Version mit neuen Sprachen (Dank an die Unterstützer auf Transifex)
    • +
    • Behoben und verbessert: Teilen von Schlüsseln über QR-Codes
    • +
    • Paket-Signaturprüfung für API

    2.1.1

      -
    • API-Aktualisierungen, Vorbereitung für die K-9 Mail-Integration
    • +
    • API-Aktualisierungen, Vorbereitung für die "K-9 Mail"-Integration

    2.1

    • Viele Fehlerbehebungen
    • Neue API für Entwickler
    • -
    • PRNG-Fehlerbehebungen von Google
    • +
    • PRNG-Fehlerbehebung von Google

    2.0

      -
    • Complete redesign
    • -
    • Öffentliche Schlüssel mit QR Codes oder NFC Beam teilen
    • +
    • Komplette Neugestaltung
    • +
    • Öffentliche Schlüssel über QR-Codes oder NFC-Beam teilen
    • Schlüssel signieren
    • -
    • Schlüssel auf den Server hochladen
    • -
    • Importprobleme behoben
    • +
    • Schlüssel auf Server hochladen
    • +
    • Behoben: Importprobleme
    • Neue AIDL-API

    1.0.8

    • Grundlegende Schlüsselserverunterstützung
    • App2sd
    • -
    • Mehr Auswahlmöglichkeiten für den Passphrasencache: 1, 2, 4, 8, Stunden
    • -
    • Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)
    • +
    • Mehr Auswahlmöglichkeiten für den Passwortzwischenspeicher: 1, 2, 4, 8, Stunden
    • +
    • Übersetzungen: Norwegisch (Dank an Sander Danielsen), Chinesisch (Dank an Zhang Fredrick)
    • Fehlerbehebungen
    • Optimierungen

    1.0.7

      -
    • Fixed problem with signature verification of texts with trailing newline
    • -
    • More options for passphrase cache time to live (20, 40, 60 mins)
    • +
    • Behoben: Problem mit Signaturprüfung von Texten mit angehängtem Zeilenvorschub
    • +
    • Mehr Optionen für die Länge der Passwortzwischenspeicherung (20, 40, 60 Minuten)

    1.0.6

      -
    • Account adding crash on Froyo fixed
    • +
    • Behoben: Absturz bei Kontenerstellung unter Froyo
    • Sichere Dateilöschung
    • Option zum Löschen der Schlüsseldatei nach dem Import
    • Streamverschlüsselung/-entschlüsselung (Galerie, usw.)
    • @@ -195,37 +195,37 @@ Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Pa

      1.0.5

      • Deutsche und Italienische Übersetzung
      • -
      • Much smaller package, due to reduced BC sources
      • -
      • New preferences GUI
      • -
      • Layout adjustment for localization
      • -
      • Fehler bei Signatur behoben
      • +
      • Viel kleineres Paket durch reduzierte BC-Quellen
      • +
      • Neue Einstellungsoberfläche
      • +
      • Layoutanpassungen für Übersetzungen
      • +
      • Behoben: Signaturfehler

      1.0.4

        -
      • Fixed another crash caused by some SDK bug with query builder
      • +
      • Behoben: Absturz durch einen SDK-Fehler mit "query builder"

      1.0.3

        -
      • Fixed crashes during encryption/signing and possibly key export
      • +
      • Behoben: Abstürze während Verschlüsselung/Beglaubigung und möglicherweise Schlüsselexport

      1.0.2

        -
      • Filterable key lists
      • -
      • Smarter pre-selection of encryption keys
      • +
      • Filterbare Schlüsselliste
      • +
      • Intelligentere Vorauswahl von Verschlüsselungsschlüsseln
      • New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers
      • -
      • Fixes and additional features (key preselection) for K-9 Mail, new beta build available
      • +
      • Fehlerbehebungen und zusätzliche Funktionen für K-9-Mail (Schlüsselvorauswahl), neuer Beta-Build verfügbar

      1.0.1

        -
      • GMail Account auflistung war nicht in Ordnung in 1.0.0, wieder behoben.
      • +
      • Behoben: GMail-Konto-Auflistung in 1.0.0 fehlerhaft

      1.0.0

        -
      • K-9 Mail integration, APG unterstützt beta build von K-9 Mail
      • -
      • Support of more file managers (including ASTRO)
      • +
      • "K-9 Mail"-Integration, APG-unterstützendes Beta-Build von K-9 Mail
      • +
      • Unterstützung weiterer Dateimanager (inklusive ASTRO)
      • Slowenische Übersetzung
      • -
      • New database, much faster, less memory usage
      • -
      • Defined Intents and content provider for other apps
      • +
      • Neue Datenbank, viel schneller, geringere Speichernutzung
      • +
      • "Intents" und Inhaltsprovider für andere Apps definiert
      • Fehlerbehebungen
      diff --git a/OpenKeychain/src/main/res/raw-de/help_start.html b/OpenKeychain/src/main/res/raw-de/help_start.html index 9d37a4cc6..676922dbf 100644 --- a/OpenKeychain/src/main/res/raw-de/help_start.html +++ b/OpenKeychain/src/main/res/raw-de/help_start.html @@ -1,19 +1,22 @@ -

      Los geht's

      -

      Zuerst wird ein geheimer Schlüssel benötigt. Erstelle einen über das Menü "Keys" oder importiere einen bereits existierenden geheimen Schlüssel. Anschließend kannst du die Schlüssel deiner Freunde herunterladen oder über QR-Codes oder NFC austauschen.

      - -

      Auf Android-Geräte mit einer kleineren Versionsnummer als 4.4 wird empfohlen den Datei-Browser OI File Manager zu installieren.

      +

      Wie kann ich OpenKeychain in K-9 Mail nutzen?

      +

      Um OpenKeychain in K-9 Mail nutzen zu können, sind folgende Schritte nötig:

      +
        +
      1. Öffne K-9 Mail und drücke lange auf den Account, mit dem du OpenKeychain nutzen willst.
      2. +
      3. Wähle "Kontoeinstellungen", blättere ganz nach unten und klicke auf "Kryptographie".
      4. +
      5. Klicke auf "OpenPGP-Provider" und wähle OpenKeychain aus der Liste.
      6. +

      Ich habe einen Fehler in OpenKeychain gefunden!

      -

      Bitte berichten Sie Bugs mithilfe des Issue Trackers der OpenKeychain.

      +

      Bitte sende uns einen Fehlerbericht mithilfe des Problem-Trackers von OpenKeychain.

      Unterstützen

      -

      Wenn Sie uns bei der Entwickelung von OpenKeychain durch das Beisteuern von Code helfen wollen, schauen Sie unsere kurze Anleitung auf Github an.

      +

      Wenn du uns bei der Entwicklung von OpenKeychain, z.B. durch das Beisteuern von Code, helfen willst, schau dir unsere kurze Anleitung auf GitHub an.

      Übersetzungen

      -

      Hilf mit, OpenKeychain zu übersetzten! Jeder kann auf OpenKeychain auf Transifex mitmachen.

      +

      Hilf mit OpenKeychain zu übersetzten! Jeder kann mitmachen, besucheOpenKeychain auf Transifex.

      diff --git a/OpenKeychain/src/main/res/raw-es/help_about.html b/OpenKeychain/src/main/res/raw-es/help_about.html index 3c06f7b15..7ea723e76 100644 --- a/OpenKeychain/src/main/res/raw-es/help_about.html +++ b/OpenKeychain/src/main/res/raw-es/help_about.html @@ -31,27 +31,31 @@

      Librerías

      diff --git a/OpenKeychain/src/main/res/raw-es/help_start.html b/OpenKeychain/src/main/res/raw-es/help_start.html index c3755f014..b0df960ee 100644 --- a/OpenKeychain/src/main/res/raw-es/help_start.html +++ b/OpenKeychain/src/main/res/raw-es/help_start.html @@ -1,11 +1,14 @@ -

      Primeros pasos

      -

      Primero, necesita una clave personal. Cree una a través del menú en "Claves" o importe claves secretas (privadas) existentes. Después, puede descargar las claves de sus amigos o intercambiarlas mediante códigos QR o transmisión NFC.

      - -

      En Android inferior a 4.4, se recomienda que instale OI File Manager para una selección de ficheros mejorada.

      +

      ¿Cómo activo OpenKeychain in K-9 Mail?

      +

      Para utilizar OpenKeychain con K-9 Mail, querrá seguir estos pasos:

      +
        +
      1. Abra K-9 Mail y realice una pulsación larga en la cuenta con la que quiera utilizar OpenKeychain.
      2. +
      3. Seleccione "Configuración de cuenta", deplácese al fondo del todo y haga clic en "Criptografía".
      4. +
      5. Haga clic en "Proveedor OpenPGP" y de la lista seleccione OpenKeychain.
      6. +

      ¡He encontrado un bug en OpenKeychain!

      Por favor, informa de errores usando el seguimiento de incidencias de OpenKeychain.

      diff --git a/OpenKeychain/src/main/res/raw-et/help_about.html b/OpenKeychain/src/main/res/raw-et/help_about.html index 2c6c5b3c4..cf77cf11d 100644 --- a/OpenKeychain/src/main/res/raw-et/help_about.html +++ b/OpenKeychain/src/main/res/raw-et/help_about.html @@ -31,27 +31,31 @@

      Libraries

      diff --git a/OpenKeychain/src/main/res/raw-et/help_start.html b/OpenKeychain/src/main/res/raw-et/help_start.html index 92fd4a92a..58f3fae40 100644 --- a/OpenKeychain/src/main/res/raw-et/help_start.html +++ b/OpenKeychain/src/main/res/raw-et/help_start.html @@ -1,11 +1,14 @@ -

      Getting started

      -

      First you need a personal key. Create one via the menu in "Keys" or import existing secret keys. Afterwards, you can download your friends' keys or exchange them via QR Codes or NFC.

      - -

      On Android lower 4.4, it is recommended that you install OI File Manager for enhanced file selection.

      +

      How do I activate OpenKeychain in K-9 Mail?

      +

      To use OpenKeychain with K-9 Mail, you want to follow these steps:

      +
        +
      1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
      2. +
      3. Select "Account settings" and scroll to the very bottom and click "Cryptography".
      4. +
      5. Click on "OpenPGP Provider" and select OpenKeychain from the list.
      6. +

      I found a bug in OpenKeychain!

      Please report the bug using the issue tracker of OpenKeychain.

      diff --git a/OpenKeychain/src/main/res/raw-eu/help_about.html b/OpenKeychain/src/main/res/raw-eu/help_about.html index 2c6c5b3c4..6f19ccaad 100644 --- a/OpenKeychain/src/main/res/raw-eu/help_about.html +++ b/OpenKeychain/src/main/res/raw-eu/help_about.html @@ -2,12 +2,12 @@

      http://www.openkeychain.org

      -

      OpenKeychain is an OpenPGP implementation for Android.

      -

      License: GPLv3+

      +

      OpenKeychain Android-rako OpenPGP inplemetazio bat da.

      +

      Baimena: GPLv3+

      -

      Developers

      +

      Garatzaileak

        -
      • Dominik Schürmann (Maintainer)
      • +
      • Dominik Schürmann (Mantentzailea)
      • Art O Cathain
      • Ash Hughes
      • Brian C. Barnes
      • @@ -28,30 +28,34 @@
      • Tim Bray
      • Vincent Breitmoser
      -

      Libraries

      +

      Liburutegiak

      diff --git a/OpenKeychain/src/main/res/raw-eu/help_start.html b/OpenKeychain/src/main/res/raw-eu/help_start.html index 92fd4a92a..0e05e3790 100644 --- a/OpenKeychain/src/main/res/raw-eu/help_start.html +++ b/OpenKeychain/src/main/res/raw-eu/help_start.html @@ -1,19 +1,22 @@ -

      Getting started

      -

      First you need a personal key. Create one via the menu in "Keys" or import existing secret keys. Afterwards, you can download your friends' keys or exchange them via QR Codes or NFC.

      -

      On Android lower 4.4, it is recommended that you install OI File Manager for enhanced file selection.

      - -

      I found a bug in OpenKeychain!

      +

      How do I activate OpenKeychain in K-9 Mail?

      +

      To use OpenKeychain with K-9 Mail, you want to follow these steps:

      +
        +
      1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
      2. +
      3. Select "Account settings" and scroll to the very bottom and click "Cryptography".
      4. +
      5. Click on "OpenPGP Provider" and select OpenKeychain from the list.
      6. +
      +

      Akats bat aurkitu dut OpenKeychain-en!

      Please report the bug using the issue tracker of OpenKeychain.

      -

      Contribute

      +

      Lagundu

      If you want to help us developing OpenKeychain by contributing code follow our small guide on Github.

      -

      Translations

      -

      Help translating OpenKeychain! Everybody can participate at OpenKeychain on Transifex.

      +

      Itzulpenak

      +

      Lagundu OpenKeychain itzultzen! Edonork eskuhartu dezake hemen OpenKeychainTransifex-en.

      diff --git a/OpenKeychain/src/main/res/raw-fi/help_about.html b/OpenKeychain/src/main/res/raw-fi/help_about.html index 2c6c5b3c4..cf77cf11d 100644 --- a/OpenKeychain/src/main/res/raw-fi/help_about.html +++ b/OpenKeychain/src/main/res/raw-fi/help_about.html @@ -31,27 +31,31 @@

      Libraries

      diff --git a/OpenKeychain/src/main/res/raw-fi/help_start.html b/OpenKeychain/src/main/res/raw-fi/help_start.html index 92fd4a92a..58f3fae40 100644 --- a/OpenKeychain/src/main/res/raw-fi/help_start.html +++ b/OpenKeychain/src/main/res/raw-fi/help_start.html @@ -1,11 +1,14 @@ -

      Getting started

      -

      First you need a personal key. Create one via the menu in "Keys" or import existing secret keys. Afterwards, you can download your friends' keys or exchange them via QR Codes or NFC.

      - -

      On Android lower 4.4, it is recommended that you install OI File Manager for enhanced file selection.

      +

      How do I activate OpenKeychain in K-9 Mail?

      +

      To use OpenKeychain with K-9 Mail, you want to follow these steps:

      +
        +
      1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
      2. +
      3. Select "Account settings" and scroll to the very bottom and click "Cryptography".
      4. +
      5. Click on "OpenPGP Provider" and select OpenKeychain from the list.
      6. +

      I found a bug in OpenKeychain!

      Please report the bug using the issue tracker of OpenKeychain.

      diff --git a/OpenKeychain/src/main/res/raw-fr/help_about.html b/OpenKeychain/src/main/res/raw-fr/help_about.html index 8e87a1c65..82f86dc22 100644 --- a/OpenKeychain/src/main/res/raw-fr/help_about.html +++ b/OpenKeychain/src/main/res/raw-fr/help_about.html @@ -31,27 +31,31 @@

      Bibliothèques

      diff --git a/OpenKeychain/src/main/res/raw-fr/help_start.html b/OpenKeychain/src/main/res/raw-fr/help_start.html index 030a429e0..00d801e46 100644 --- a/OpenKeychain/src/main/res/raw-fr/help_start.html +++ b/OpenKeychain/src/main/res/raw-fr/help_start.html @@ -1,11 +1,14 @@ -

      Commencer

      -

      Vous avez d'abord besoin d'une clef personnelle. Créez-en une avec l'option du menu « Clefs » ou importez des clefs secrètes existantes. Ensuite vous pourrez télécharger les clefs de vos amis, ou les échanger par codes QR ou NFC.

      - -

      Sur les versions d'Android antérieures à 4.4, il vous est recommandé d'installer legestionnaire de fichiers OI pour une sélection améliorée des fichiers.

      +

      Comment puis-je activer OpenKeychain dans K-9 Mail ?

      +

      Pour utiliser OpenKeychain avec K-9 Mail, vous devez suivre ces étapes :

      +
        +
      1. Ouvrez K-9 Mail et toquez longuement sur le compte avec lequel vous voulez utiliser OpenKeychain.
      2. +
      3. Sélectionnez « Paramètres du compte », faite défiler vers le bas et cliquez sur « Cryptographie».
      4. +
      5. Cliquez sur « Fournisseur OpenPGP » et sélectionnez OpenKeychain dans la liste.
      6. +

      J'ai trouvé un bogue dans OpenKeychain !

      Veuillez rapporter le bogue en utilisant le gestionnaire de bogue d'OpenKeychain.

      diff --git a/OpenKeychain/src/main/res/raw-is/help_about.html b/OpenKeychain/src/main/res/raw-is/help_about.html index 2c6c5b3c4..cf77cf11d 100644 --- a/OpenKeychain/src/main/res/raw-is/help_about.html +++ b/OpenKeychain/src/main/res/raw-is/help_about.html @@ -31,27 +31,31 @@

      Libraries

      diff --git a/OpenKeychain/src/main/res/raw-is/help_start.html b/OpenKeychain/src/main/res/raw-is/help_start.html index 92fd4a92a..58f3fae40 100644 --- a/OpenKeychain/src/main/res/raw-is/help_start.html +++ b/OpenKeychain/src/main/res/raw-is/help_start.html @@ -1,11 +1,14 @@ -

      Getting started

      -

      First you need a personal key. Create one via the menu in "Keys" or import existing secret keys. Afterwards, you can download your friends' keys or exchange them via QR Codes or NFC.

      - -

      On Android lower 4.4, it is recommended that you install OI File Manager for enhanced file selection.

      +

      How do I activate OpenKeychain in K-9 Mail?

      +

      To use OpenKeychain with K-9 Mail, you want to follow these steps:

      +
        +
      1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
      2. +
      3. Select "Account settings" and scroll to the very bottom and click "Cryptography".
      4. +
      5. Click on "OpenPGP Provider" and select OpenKeychain from the list.
      6. +

      I found a bug in OpenKeychain!

      Please report the bug using the issue tracker of OpenKeychain.

      diff --git a/OpenKeychain/src/main/res/raw-it/help_about.html b/OpenKeychain/src/main/res/raw-it/help_about.html index d44174182..0f24b7918 100644 --- a/OpenKeychain/src/main/res/raw-it/help_about.html +++ b/OpenKeychain/src/main/res/raw-it/help_about.html @@ -31,27 +31,31 @@

      Librerie

      diff --git a/OpenKeychain/src/main/res/raw-it/help_start.html b/OpenKeychain/src/main/res/raw-it/help_start.html index ecf52eadd..026690b5a 100644 --- a/OpenKeychain/src/main/res/raw-it/help_start.html +++ b/OpenKeychain/src/main/res/raw-it/help_start.html @@ -1,11 +1,14 @@ -

      Per iniziare

      -

      In primo luogo è necessaria una chiave segreta personale. Creane una tramite il menu opzioni sotto la voce "Chiavi" o importa chiavi segrete già esistenti. Successivamente, è possibile scaricare le chiavi dei vostri amici o scambiarle con i codici QR o NFC.

      - -

      On Android lower 4.4, it is recommended that you install OI File Manager for enhanced file selection.

      +

      How do I activate OpenKeychain in K-9 Mail?

      +

      To use OpenKeychain with K-9 Mail, you want to follow these steps:

      +
        +
      1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
      2. +
      3. Select "Account settings" and scroll to the very bottom and click "Cryptography".
      4. +
      5. Click on "OpenPGP Provider" and select OpenKeychain from the list.
      6. +

      Ho trovato un bug in OpenKeychain!

      Per favore riporta i bug usando il issue tracker di OpenKeychain.

      diff --git a/OpenKeychain/src/main/res/raw-ja/help_about.html b/OpenKeychain/src/main/res/raw-ja/help_about.html index 6a5882640..77c774cf6 100644 --- a/OpenKeychain/src/main/res/raw-ja/help_about.html +++ b/OpenKeychain/src/main/res/raw-ja/help_about.html @@ -31,27 +31,31 @@

      ライブラリ

      diff --git a/OpenKeychain/src/main/res/raw-ja/help_start.html b/OpenKeychain/src/main/res/raw-ja/help_start.html index d9f73428a..6b8d1dbcd 100644 --- a/OpenKeychain/src/main/res/raw-ja/help_start.html +++ b/OpenKeychain/src/main/res/raw-ja/help_start.html @@ -1,11 +1,14 @@ -

      入門

      -

      最初にあなたの個人用鍵ペアが必要になります。メニューの"鍵"で生成するか、既存の鍵ペアをインポートします。その後、あなたの友人の鍵をダウンロード、もしくはQRコードやNFCで交換します。

      - -

      Android 4.4 未満の場合、拡張したファイルの選択のためにはOI File Managerのインストールを推奨します。

      +

      How do I activate OpenKeychain in K-9 Mail?

      +

      To use OpenKeychain with K-9 Mail, you want to follow these steps:

      +
        +
      1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
      2. +
      3. Select "Account settings" and scroll to the very bottom and click "Cryptography".
      4. +
      5. Click on "OpenPGP Provider" and select OpenKeychain from the list.
      6. +

      OpenKeychainでバグを見付けた!

      OpenKeychainのIssueトラッカーを使ってバグレポートを送ってください。

      diff --git a/OpenKeychain/src/main/res/raw-nl/help_about.html b/OpenKeychain/src/main/res/raw-nl/help_about.html index 33622b7c5..abcbf7087 100644 --- a/OpenKeychain/src/main/res/raw-nl/help_about.html +++ b/OpenKeychain/src/main/res/raw-nl/help_about.html @@ -31,27 +31,31 @@

      Bibliotheken

      diff --git a/OpenKeychain/src/main/res/raw-nl/help_start.html b/OpenKeychain/src/main/res/raw-nl/help_start.html index fda3c97b1..04fc9c263 100644 --- a/OpenKeychain/src/main/res/raw-nl/help_start.html +++ b/OpenKeychain/src/main/res/raw-nl/help_start.html @@ -1,11 +1,14 @@ -

      Aan de slag

      -

      Eerst heb je een persoonlijke sleutel nodig. Maak er een aan via het menu in 'Sleutels' of importeer bestaande geheime sleutels. Nadien kan je de sleutels van je vrienden downloaden of ze uitwisselen via QR codes of NFC.

      - -

      Op Android-versies lager dan 4.4 raden we aan dat je OI File Manager installeert voor een verbeterde bestandsselectie.

      +

      Hoe activeer ik OpenKeychain in K-9 Mail?

      +

      Volg deze stappen om OpenKeychain te gebruiken met K-9 Mail:

      +
        +
      1. Open K-9 Mail en druk lang op de account waarmee je OpenKeychain wil gebruiken.
      2. +
      3. Selecteer "Accountinstellingen", scroll helemaal naar beneden en klik op "Cryptografie".
      4. +
      5. Klik op "OpenPGP-provider" en selecteer OpenKeychain in de lijst.
      6. +

      Ik heb een bug in OpenKeychain gevonden!

      Rapporteer de bug met de problemen tracker van OpenKeychain.

      diff --git a/OpenKeychain/src/main/res/raw-pl/help_about.html b/OpenKeychain/src/main/res/raw-pl/help_about.html index bdc48756d..ba319afca 100644 --- a/OpenKeychain/src/main/res/raw-pl/help_about.html +++ b/OpenKeychain/src/main/res/raw-pl/help_about.html @@ -31,27 +31,31 @@

      Biblioteki

      diff --git a/OpenKeychain/src/main/res/raw-pl/help_start.html b/OpenKeychain/src/main/res/raw-pl/help_start.html index 400a89e60..f5cd3a9aa 100644 --- a/OpenKeychain/src/main/res/raw-pl/help_start.html +++ b/OpenKeychain/src/main/res/raw-pl/help_start.html @@ -1,11 +1,14 @@ -

      Pierwsze kroki

      -

      Najpierw będziesz potrzebował osobistego klucza. Stwórz go wybierając z menu "Klucze" lub zaimportuj istniejące tajne klucze. Później możesz pobrać klucze swoich znajomych lub wymienić się używając kodów QR lub NFC.

      - -

      On Android lower 4.4, it is recommended that you install OI File Manager for enhanced file selection.

      +

      How do I activate OpenKeychain in K-9 Mail?

      +

      To use OpenKeychain with K-9 Mail, you want to follow these steps:

      +
        +
      1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
      2. +
      3. Select "Account settings" and scroll to the very bottom and click "Cryptography".
      4. +
      5. Click on "OpenPGP Provider" and select OpenKeychain from the list.
      6. +

      Znalazłem błąd w OpenKeychain!

      Zgłoś błąd korzystając z systemu śledzenia błędów OpenKeychain.

      diff --git a/OpenKeychain/src/main/res/raw-pt/help_about.html b/OpenKeychain/src/main/res/raw-pt/help_about.html index 2c6c5b3c4..cf77cf11d 100644 --- a/OpenKeychain/src/main/res/raw-pt/help_about.html +++ b/OpenKeychain/src/main/res/raw-pt/help_about.html @@ -31,27 +31,31 @@

      Libraries

      diff --git a/OpenKeychain/src/main/res/raw-pt/help_start.html b/OpenKeychain/src/main/res/raw-pt/help_start.html index 92fd4a92a..58f3fae40 100644 --- a/OpenKeychain/src/main/res/raw-pt/help_start.html +++ b/OpenKeychain/src/main/res/raw-pt/help_start.html @@ -1,11 +1,14 @@ -

      Getting started

      -

      First you need a personal key. Create one via the menu in "Keys" or import existing secret keys. Afterwards, you can download your friends' keys or exchange them via QR Codes or NFC.

      - -

      On Android lower 4.4, it is recommended that you install OI File Manager for enhanced file selection.

      +

      How do I activate OpenKeychain in K-9 Mail?

      +

      To use OpenKeychain with K-9 Mail, you want to follow these steps:

      +
        +
      1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
      2. +
      3. Select "Account settings" and scroll to the very bottom and click "Cryptography".
      4. +
      5. Click on "OpenPGP Provider" and select OpenKeychain from the list.
      6. +

      I found a bug in OpenKeychain!

      Please report the bug using the issue tracker of OpenKeychain.

      diff --git a/OpenKeychain/src/main/res/raw-ro/help_about.html b/OpenKeychain/src/main/res/raw-ro/help_about.html index 2c6c5b3c4..cf77cf11d 100644 --- a/OpenKeychain/src/main/res/raw-ro/help_about.html +++ b/OpenKeychain/src/main/res/raw-ro/help_about.html @@ -31,27 +31,31 @@

      Libraries

      diff --git a/OpenKeychain/src/main/res/raw-ro/help_start.html b/OpenKeychain/src/main/res/raw-ro/help_start.html index 92fd4a92a..58f3fae40 100644 --- a/OpenKeychain/src/main/res/raw-ro/help_start.html +++ b/OpenKeychain/src/main/res/raw-ro/help_start.html @@ -1,11 +1,14 @@ -

      Getting started

      -

      First you need a personal key. Create one via the menu in "Keys" or import existing secret keys. Afterwards, you can download your friends' keys or exchange them via QR Codes or NFC.

      - -

      On Android lower 4.4, it is recommended that you install OI File Manager for enhanced file selection.

      +

      How do I activate OpenKeychain in K-9 Mail?

      +

      To use OpenKeychain with K-9 Mail, you want to follow these steps:

      +
        +
      1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
      2. +
      3. Select "Account settings" and scroll to the very bottom and click "Cryptography".
      4. +
      5. Click on "OpenPGP Provider" and select OpenKeychain from the list.
      6. +

      I found a bug in OpenKeychain!

      Please report the bug using the issue tracker of OpenKeychain.

      diff --git a/OpenKeychain/src/main/res/raw-ru/help_about.html b/OpenKeychain/src/main/res/raw-ru/help_about.html index 0ffa75945..52a85c45d 100644 --- a/OpenKeychain/src/main/res/raw-ru/help_about.html +++ b/OpenKeychain/src/main/res/raw-ru/help_about.html @@ -31,27 +31,31 @@

      Компоненты

      diff --git a/OpenKeychain/src/main/res/raw-ru/help_start.html b/OpenKeychain/src/main/res/raw-ru/help_start.html index 1463d374d..dbfb87503 100644 --- a/OpenKeychain/src/main/res/raw-ru/help_start.html +++ b/OpenKeychain/src/main/res/raw-ru/help_start.html @@ -1,11 +1,14 @@ -

      Приступая

      -

      Для начала Вам нужен свой секретный ключ. Создайте его в меню раздела "Ключи" или импортируйте ранее созданный ключ. Позже вы сможете поделиться данными своего ключа с друзьями с помощью QR кода или NFC.

      - -

      На Android ниже 4.4, рекомендуется установить OI File Manager для выбора файлов.

      +

      How do I activate OpenKeychain in K-9 Mail?

      +

      To use OpenKeychain with K-9 Mail, you want to follow these steps:

      +
        +
      1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
      2. +
      3. Select "Account settings" and scroll to the very bottom and click "Cryptography".
      4. +
      5. Click on "OpenPGP Provider" and select OpenKeychain from the list.
      6. +

      Я нашел ошибку в OpenKeychain!

      Пожалуйста, сообщайте о возникших проблемах и найденных ошибках в разделе Решение проблем OpenKeychain.

      diff --git a/OpenKeychain/src/main/res/raw-sl/help_about.html b/OpenKeychain/src/main/res/raw-sl/help_about.html index a34746c51..36ce2c104 100644 --- a/OpenKeychain/src/main/res/raw-sl/help_about.html +++ b/OpenKeychain/src/main/res/raw-sl/help_about.html @@ -31,27 +31,31 @@

      Knjižnice

      diff --git a/OpenKeychain/src/main/res/raw-sl/help_start.html b/OpenKeychain/src/main/res/raw-sl/help_start.html index 2d0b763e0..84a2fc8f7 100644 --- a/OpenKeychain/src/main/res/raw-sl/help_start.html +++ b/OpenKeychain/src/main/res/raw-sl/help_start.html @@ -1,11 +1,14 @@ -

      Kako začeti

      -

      First you need a personal key. Create one via the menu in "Keys" or import existing secret keys. Afterwards, you can download your friends' keys or exchange them via QR Codes or NFC.

      - -

      On Android lower 4.4, it is recommended that you install OI File Manager for enhanced file selection.

      +

      How do I activate OpenKeychain in K-9 Mail?

      +

      To use OpenKeychain with K-9 Mail, you want to follow these steps:

      +
        +
      1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
      2. +
      3. Select "Account settings" and scroll to the very bottom and click "Cryptography".
      4. +
      5. Click on "OpenPGP Provider" and select OpenKeychain from the list.
      6. +

      Našel sem 'hrošča' v aplikaciji OpenKeychain!

      Za poročanje o 'hroščih' uporabite sledilnik težav za OpenKeychain.

      diff --git a/OpenKeychain/src/main/res/raw-sr/help_about.html b/OpenKeychain/src/main/res/raw-sr/help_about.html index a2ad13d25..0d2f9d697 100644 --- a/OpenKeychain/src/main/res/raw-sr/help_about.html +++ b/OpenKeychain/src/main/res/raw-sr/help_about.html @@ -31,27 +31,31 @@

      Библиотеке

      diff --git a/OpenKeychain/src/main/res/raw-sr/help_start.html b/OpenKeychain/src/main/res/raw-sr/help_start.html index a2f337a2f..e1d5c7726 100644 --- a/OpenKeychain/src/main/res/raw-sr/help_start.html +++ b/OpenKeychain/src/main/res/raw-sr/help_start.html @@ -1,11 +1,14 @@ -

      Први кораци

      -

      Најпре требате лични кључ. Направите један преко менија у „Кључеви“ или увезите постојеће тајне кључеве. Након тога, можете да преузмете пријатељеве кључеве или да их размените преко бар-кодова или НФЦ-а.

      - -

      За Андроид старији од 4.4 препоручује се да инсталирате ОИ Менаџер фајлова за побољшани избор фаjлова.

      +

      Како да активирам Отворени кључарник у К-9 Пошти?

      +

      Да бисте користили Отворени кључарник са К-9 Поштом, пратите ове кораке:

      +
        +
      1. Отворите К-9 Пошту и притисните дуго на налог са којим желите да користите Отворени кључарник.
      2. +
      3. Изаберите „поставке налога“ и клизајте на дно и притисните „криптографија“.
      4. +
      5. Кликните на „ОпенПГП апликација“ и изаберите Отворени кључарник са списка.
      6. +

      Пронађох грешку у Отвореном кључарнику!

      Пријавите грешку на пратиоцу проблема за Отворени кључарник.

      diff --git a/OpenKeychain/src/main/res/raw-sv/help_about.html b/OpenKeychain/src/main/res/raw-sv/help_about.html index 74c704010..3c401f4b1 100644 --- a/OpenKeychain/src/main/res/raw-sv/help_about.html +++ b/OpenKeychain/src/main/res/raw-sv/help_about.html @@ -31,27 +31,31 @@

      Bibliotek

      diff --git a/OpenKeychain/src/main/res/raw-sv/help_start.html b/OpenKeychain/src/main/res/raw-sv/help_start.html index da1d90308..5de9f23f0 100644 --- a/OpenKeychain/src/main/res/raw-sv/help_start.html +++ b/OpenKeychain/src/main/res/raw-sv/help_start.html @@ -1,11 +1,14 @@ -

      Kom igång

      -

      Först behöver du en personlig nyckel. Skapa en via menyn i "Nycklar" eller importera en befintlig privat nyckel. Efteråt så kan du ladda ner dina vänners nycklar eller utbyta dem via QR-koder eller NFC.

      - -

      I Android lägre än 4.4 rekommenderas det att du installerar OI File Manager för förbättrad filurval.

      +

      How do I activate OpenKeychain in K-9 Mail?

      +

      To use OpenKeychain with K-9 Mail, you want to follow these steps:

      +
        +
      1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
      2. +
      3. Select "Account settings" and scroll to the very bottom and click "Cryptography".
      4. +
      5. Click on "OpenPGP Provider" and select OpenKeychain from the list.
      6. +

      Jag hittade en bugg i OpenKeychain!

      Rapporterar buggen med felrapporteringssystemen av OpenKeychain.

      diff --git a/OpenKeychain/src/main/res/raw-tr/help_about.html b/OpenKeychain/src/main/res/raw-tr/help_about.html index 0c7d40dca..9933e24a9 100644 --- a/OpenKeychain/src/main/res/raw-tr/help_about.html +++ b/OpenKeychain/src/main/res/raw-tr/help_about.html @@ -31,27 +31,31 @@

      Kütüphaneler

      diff --git a/OpenKeychain/src/main/res/raw-tr/help_start.html b/OpenKeychain/src/main/res/raw-tr/help_start.html index bbcd0326c..868c2bbcb 100644 --- a/OpenKeychain/src/main/res/raw-tr/help_start.html +++ b/OpenKeychain/src/main/res/raw-tr/help_start.html @@ -1,11 +1,14 @@ -

      Başlarken

      -

      Öncelikle kişisel bir anahtara ihtiyacınız var. "Anahtarlar" içindeki menüden bir tane oluşturabilir veya var olan gizli anahtarınızı içe aktarabilirsiniz. Daha sonra arkadaşlarınızın anahtarlarını indirebilir ya da QR Kodları veya NFC aracılığıyla değiş tokuş edebilirsiniz.

      - -

      On Android lower 4.4, it is recommended that you install OI File Manager for enhanced file selection.

      +

      How do I activate OpenKeychain in K-9 Mail?

      +

      To use OpenKeychain with K-9 Mail, you want to follow these steps:

      +
        +
      1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
      2. +
      3. Select "Account settings" and scroll to the very bottom and click "Cryptography".
      4. +
      5. Click on "OpenPGP Provider" and select OpenKeychain from the list.
      6. +

      OpenKeychain'de bir bug buldum!

      Lütfen bulduğunuz hataları OpenKeychain sorun izleyici kullanarak rapor edin.

      diff --git a/OpenKeychain/src/main/res/raw-uk/help_about.html b/OpenKeychain/src/main/res/raw-uk/help_about.html index 8fbb7bcb8..a9a181525 100644 --- a/OpenKeychain/src/main/res/raw-uk/help_about.html +++ b/OpenKeychain/src/main/res/raw-uk/help_about.html @@ -31,27 +31,31 @@

      Бібліотеки

      diff --git a/OpenKeychain/src/main/res/raw-uk/help_start.html b/OpenKeychain/src/main/res/raw-uk/help_start.html index 19197f6df..5b336ed99 100644 --- a/OpenKeychain/src/main/res/raw-uk/help_start.html +++ b/OpenKeychain/src/main/res/raw-uk/help_start.html @@ -1,11 +1,14 @@ -

      Приступаючи до роботи

      -

      First you need a personal key. Create one via the menu in "Keys" or import existing secret keys. Afterwards, you can download your friends' keys or exchange them via QR Codes or NFC.

      - -

      On Android lower 4.4, it is recommended that you install OI File Manager for enhanced file selection.

      +

      How do I activate OpenKeychain in K-9 Mail?

      +

      To use OpenKeychain with K-9 Mail, you want to follow these steps:

      +
        +
      1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
      2. +
      3. Select "Account settings" and scroll to the very bottom and click "Cryptography".
      4. +
      5. Click on "OpenPGP Provider" and select OpenKeychain from the list.
      6. +

      Я знайшов помилку в OpenPGP Keychain!

      Будь ласка, повідомте про ваду за допомогою відстежувача проблем OpenPGP Keychain.

      diff --git a/OpenKeychain/src/main/res/raw-zh-rTW/help_about.html b/OpenKeychain/src/main/res/raw-zh-rTW/help_about.html index 37b3a2ec6..0aaebdae3 100644 --- a/OpenKeychain/src/main/res/raw-zh-rTW/help_about.html +++ b/OpenKeychain/src/main/res/raw-zh-rTW/help_about.html @@ -31,27 +31,31 @@

      函式庫

      diff --git a/OpenKeychain/src/main/res/raw-zh-rTW/help_start.html b/OpenKeychain/src/main/res/raw-zh-rTW/help_start.html index 44835cc46..6ba9afe7a 100644 --- a/OpenKeychain/src/main/res/raw-zh-rTW/help_start.html +++ b/OpenKeychain/src/main/res/raw-zh-rTW/help_start.html @@ -1,11 +1,14 @@ -

      快速上手

      -

      首先你需要一支個人金鑰,通過選單來建立一支金鑰或是匯入現有私鑰。接下來,你可以下載你朋友的金鑰,或是通過QR條碼和NFC進行交換。

      - -

      On Android lower 4.4, it is recommended that you install OI File Manager for enhanced file selection.

      +

      How do I activate OpenKeychain in K-9 Mail?

      +

      To use OpenKeychain with K-9 Mail, you want to follow these steps:

      +
        +
      1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
      2. +
      3. Select "Account settings" and scroll to the very bottom and click "Cryptography".
      4. +
      5. Click on "OpenPGP Provider" and select OpenKeychain from the list.
      6. +

      我在OpenKeychain發現問題!

      請通過OpenKeychain問題追蹤回報問題。

      diff --git a/OpenKeychain/src/main/res/raw-zh/help_about.html b/OpenKeychain/src/main/res/raw-zh/help_about.html index 7c3813133..9fa512604 100644 --- a/OpenKeychain/src/main/res/raw-zh/help_about.html +++ b/OpenKeychain/src/main/res/raw-zh/help_about.html @@ -31,27 +31,31 @@

      函式庫

      diff --git a/OpenKeychain/src/main/res/raw-zh/help_changelog.html b/OpenKeychain/src/main/res/raw-zh/help_changelog.html index 7bba18be8..af25ad08e 100644 --- a/OpenKeychain/src/main/res/raw-zh/help_changelog.html +++ b/OpenKeychain/src/main/res/raw-zh/help_changelog.html @@ -9,11 +9,11 @@

      3.1.1

      • Fix key export to files (they were written partially)
      • -
      • Fix crash on Android 2.3
      • +
      • 解决在 Android 2.3 下的崩溃

      3.1

        -
      • Fix crash on Android 5
      • +
      • 解决在 Android 5 下的崩溃
      • New certify screen
      • Secure Exchange directly from key list (SafeSlinger library)
      • New QR Code program flow
      • diff --git a/OpenKeychain/src/main/res/raw-zh/help_start.html b/OpenKeychain/src/main/res/raw-zh/help_start.html index 1290e109a..cf1b84941 100644 --- a/OpenKeychain/src/main/res/raw-zh/help_start.html +++ b/OpenKeychain/src/main/res/raw-zh/help_start.html @@ -1,18 +1,21 @@ -

        快速上手指南

        -

        首先你需要一个个人密钥。可以通过菜单创建一个密钥或者导入已有密钥。之后你就可以从网络下载朋友的密钥或者通过二维码和NFC功能交换密钥。

        - -

        On Android lower 4.4, it is recommended that you install OI File Manager for enhanced file selection.

        +

        How do I activate OpenKeychain in K-9 Mail?

        +

        To use OpenKeychain with K-9 Mail, you want to follow these steps:

        +
          +
        1. Open K-9 Mail and long-tap on the account you want to use OpenKeychain with.
        2. +
        3. Select "Account settings" and scroll to the very bottom and click "Cryptography".
        4. +
        5. Click on "OpenPGP Provider" and select OpenKeychain from the list.
        6. +

        我在OpenKeychain發現問題!

        請利用 OpenKeychain 項目回報系統回報問題。

        發布

        帮助我们开发 Github.

        -

        翻譯

        +

        翻译

        帮助翻译 OpenKeychain。 OpenKeychain on Transifex.

        diff --git a/OpenKeychain/src/main/res/values-bg/strings.xml b/OpenKeychain/src/main/res/values-bg/strings.xml index 233347bd3..518b80f47 100644 --- a/OpenKeychain/src/main/res/values-bg/strings.xml +++ b/OpenKeychain/src/main/res/values-bg/strings.xml @@ -59,6 +59,7 @@ + diff --git a/OpenKeychain/src/main/res/values-cs/strings.xml b/OpenKeychain/src/main/res/values-cs/strings.xml index ce4f1cdcf..380dadb54 100644 --- a/OpenKeychain/src/main/res/values-cs/strings.xml +++ b/OpenKeychain/src/main/res/values-cs/strings.xml @@ -6,8 +6,6 @@ Vybrat klíče Vybrat svůj klíč - Zašifrovat text - Zašifrovat soubory Rozšifrovat Odemknout klíč Přidat podklíč @@ -19,7 +17,6 @@ Sdílet otisk s... Sdílet klíč s... Sdílet soubor s... - Sdílet zprávu s... Zašifrovat do souboru Rozšifrovat do souboru Importovat klíče @@ -28,7 +25,6 @@ Exportovat klíče Klíč nebyl nalezen Nahrát na keyserver - Certifikovat identity Detaily klíče Nápověda Log @@ -43,20 +39,16 @@ Výchozí hodnoty Pokročilé Cache hesel - Certifikovat Akce Klíč - Klíč použitý pro certifikaci Synchronizovat klíč Keyserver Otisk - Klíče k ověření Soubory Text Certifikáty Dešifrovat, ověřit a uložit soubor - Dešifrovat a ověřit zpávu Zaširovat a uložit soubor Zašifrovat a sdílet soubor Uložit @@ -68,7 +60,6 @@ Další Zpět Vyhledat klíč - Zašifrovat a sdílet zprávu Zobrazit klíč certifikátu Vytvořit klíč Přidat soubor(y) @@ -91,7 +82,6 @@ Exportovat všechny klíče Zobrazit pokročilé info - Zpráva Soubor Soubor(y) Soubor: @@ -116,7 +106,6 @@ Zašifrovat heslem Čas vypršení pro cache Pamatovat si heslo podle podklíče - Komprimovat zprávu Komprimovat soubor Keyservery ID klíče @@ -136,13 +125,6 @@ upřednostněno <beze jména> <žádný> - <žádný klíč> - slouží k šifrovní - slouží k podpisu - může ověřit - nemůže ověřit - po epiraci - revokovat 1 klíč %d klíče @@ -174,7 +156,6 @@ ECDH ECDSA Otevřít... - Varovnání Chyba Chyba: %s @@ -193,19 +174,14 @@ Zadejte PIN pro přístup k YubiKey pro \'%s\' Přidržte YubiKey u zadní strany vašeho přístroje. Chcete opravdu smazat\n%s? - Úspěšně smazáno. Nejprve vyberte soubor. Úspěšně podepsáno a/nebo zašifrováno. Úspěšně podepsání a/nebo zašifrováno do schránky. - Heslo zadejte dvakrát. Vyberte alespoň jeden šifrovací klíč. Vyberte alespoň jeden šifrovací nebo podpisový klíč. Prosím specifikujte do kterého souboru zašifrovat.\nVAROVÁNÍ: Pokud soubor již existuje, bude přepsán. Prosím specifikujte do kterého souboru rozšifrovat.\nVAROVÁNÍ: Pokud soubor již existuje, bude přepsán. Prosím specifikujte do kterého souboru exportovat.\nVAROVÁNÍ: Pokud soubor již existuje, bude přepsán. - Opravdu si přejete smazat všechny vybrané veřejné klíče?\nToto nebude možné vzít zpět! - Opravdu chcete smazat TAJNÝ klíč \'%s\'?\nTuto operaci nelze vzít zpět! - Opravdu chcete smazat veřejný klíč \'%s\'?\nToto nelze vzít zpět! Zárověň exportovat tajný klíč Narazili jste na známou chybu v Androidu. Přeinstalujte prosím OpenKeychain pokud chcete své propojit kontakty s klíči. Úspěšně exportován 1 klíč. @@ -217,13 +193,11 @@ Úspěšně odeslaný klíč pomocí NFC Beam! Klíč byl zkopírován do schránky! Fingerprint byl zkopírován do schránky! - Prosím vyberte klíč pro ověření! Klíč je příliš velký aby byl sdílen pomocí této metody! Text byl zkopírován do schránky! - mazání \'%s\' selhalo soubor nenalezen žádný vhodný tajný klíč nenalezen externí úložiště není připraveno @@ -305,8 +279,6 @@ mažu \'%s\' bezpečně... mažu klíče... - Jméno/Email/ID klíče - Jméno/Email/Důkaz/Klíč... 512 768 @@ -334,7 +306,6 @@ Začít FAQ - Síť důvěry NFC Beam Historie změn O aplikaci @@ -414,7 +385,6 @@ Editovat klíč Zašifrovat text soubory - Certifikovat identity Aktualizuji z keyserveru Sdílet pomocí... Sdílet přes NFC @@ -457,15 +427,12 @@ Přidejte alespoň jednu identitu! Přidejte alespoň jeden podklíč! - Aktualizovat klíč na keyserver Toto pole je vyžadováno Heslo nesouhlasí Zadali jste následující identitu: Vytvoření klíče může chvíli trvat, mezitím si dejte třeba šálek dobré kávy... (3 podklíče, RSA, 4096 bit) (uživatelská konfigurace klíče) - Zadejte své celé jméno, emailovou adresu a zvolte heslo. - Celé jméno, např. Jan Novák Změnit konfiguraci klíče @@ -513,6 +480,7 @@ Účet uložen + Kliknout pro vymazání načtených hesel Smazat cache @@ -527,7 +495,6 @@ <neznámý> Žádné certifikáty pro tento klíč Důvod revokace - Stav ověření Typ Klíč nenalezen! Chyba zpracování klíče! diff --git a/OpenKeychain/src/main/res/values-de/strings.xml b/OpenKeychain/src/main/res/values-de/strings.xml index 245de82ec..98066b1e8 100644 --- a/OpenKeychain/src/main/res/values-de/strings.xml +++ b/OpenKeychain/src/main/res/values-de/strings.xml @@ -6,8 +6,6 @@ Wähle Schlüssel Wähle Deinen Schlüssel - Text Verschlüsseln - Dateien verschlüsseln Entschlüsseln Schlüssel entsperren Unterschlüssel hinzufügen @@ -20,7 +18,6 @@ Teile Fingerabdruck über… Teile Schlüssel über... Datei teilen mit… - Teile Nachricht über… In eine Datei verschlüsseln In eine Datei entschlüsseln Schlüssel importieren @@ -29,7 +26,7 @@ Schlüssel exportieren Schlüssel nicht gefunden Auf Schlüsselserver hochladen - Identitäten beglaubigen + Schlüssel bestätigen Schlüsseldetails Hilfe Log @@ -37,30 +34,33 @@ Schlüssel austauschen Erweiterte Schlüsselinformation Schlüssel + DEINEN Schlüssel löschen \'%s\'? Identitäten + Sollten Sie diesem Schlüssel vertrauen? + Nachweis überprüfen + Nachweise aus der Cloud Unterschlüssel Cloudsuche Allgemein Standardwerte Fortgeschrittene Einstellungen Passwort Zwischenspeicher - Beglaubigen + Bestätigen Aktionen Schlüssel - Mit diesem Schlüssel beglaubigen Schlüssel synchronisieren Schlüsselserver Fingerabdruck - Zu beglaubigender Schlüssel Dateien Text Zertifikate Verschlüsseln Entschlüsseln + Aktuelles Ablaufdatum + Neues Ablaufdatum Datei entschlüsseln, verifizieren und speichern - Entschlüsseln und verifizieren Datei verschlüsseln und speichern Datei verschlüsseln und teilen Speichern @@ -71,8 +71,9 @@ Auf Schlüsselserver hochladen Weiter Zurück + Nein + Fingerabdrücke stimmen überein Schlüssel nachschlagen - Verschlüsseln und teilen Beglaubigungsschlüssel anzeigen Schlüssel erzeugen Datei(en) hinzufügen @@ -90,6 +91,7 @@ Erzeuge meinen Schlüssel Von Datei importieren Suchen + NFC-Einstellungen Beam-Einstellungen Abbrechen Verschlüsseln nach… @@ -99,7 +101,6 @@ Alle Schlüssel exportieren Erweiterte Infos anzeigen - Nachricht Datei Datei(en) Datei: @@ -114,7 +115,7 @@ Fügt \'OpenKeychain v2.7\' zu OpenPGP-Signaturen, Daten und exportierten Schlüsseln hinzu Standard-YubiKey-PIN verwenden Zifferntastatur für YubiKey PIN verwenden - Verwendet Standard-PIN (123456) zum Zugriff auf YubiKeys über NFC + Verwendet zum Zugriff auf YubiKeys über NFC die Standard-PIN (123456) Signiert von: Verschlüsselt an: Datei nach Verschlüsselung löschen @@ -122,9 +123,8 @@ Verschlüsselungsalgorithmus Hash-Algorithmus Mit Passwort verschlüsseln - Länge der Zwischenspeicherung + Zwischenspeicherdauer Passwort pro Unterschlüssel zwischenspeichern - Nachrichten Kompression Datei Kompression Schlüsselserver Schlüssel-ID @@ -144,13 +144,6 @@ bevorzugt <kein Name> <keine> - <kein Schlüssel> - kann verschlüsseln - kann signieren - kann beglaubigen - kann nicht beglaubigen - abgelaufen - widerrufen 1 Schlüssel %d Schlüssel @@ -180,7 +173,6 @@ ECDH ECDSA Öffnen... - Warnung Fehler Fehler: %s @@ -199,19 +191,16 @@ PIN für Zugriff auf Yubikey für \'%s\' eingeben Halten Sie den YubiKey gegen die Rückseite Ihres Geräts. %s wirklich löschen? - Erfolgreich gelöscht. Zuerst eine Datei auswählen. Erfolgreich signiert und/oder verschlüsselt. Erfolgreich in die Zwischenablage signiert und/oder verschlüsselt. - Das Passwort bitte zweimal eingeben. Mindestens einen Schlüssel zum Verschlüsseln auswählen. Mindestens einen Schlüssel zum Verschlüsseln oder einen zum Signieren auswählen. Bitte angeben in welche Datei verschlüsselt werden soll.\nWARNUNG: Datei wird überschrieben, wenn sie bereits existiert. Bitte angeben in welche Datei entschlüsselt werden soll.\nWARNUNG: Datei wird überschrieben, wenn sie bereits existiert. Bitte angeben in welche Datei exportiert werden soll.\nWARNUNG: Datei wird überschrieben, wenn sie bereits existiert. - Möchtest du wirklich alle ausgewählten öffentlichen Schlüssel löschen?\nDies kann nicht rückgängig gemacht werden! - Soll der PRIVATE Schlüssel \'%s\' wirklich gelöscht werden?\nDies kann nicht rückgängig gemacht werden! - Soll der öffentliche Schlüssel \'%s\' wirklich gelöscht werden?\nDies kann nicht rückgängig gemacht werden! + Möchtest du wirklich alle ausgewählten Schlüssel löschen? + Schlüssel löschen \'%s\'? Exportiere auch private Schlüssel Sie sind auf einen Fehler in Android gestoßen. Installieren Sie OpenKeychain erneut, wenn Sie Ihre Kontakte mit Schlüsseln verbinden wollen. 1 Schlüssel erfolgreich exportiert. @@ -227,13 +216,11 @@ Schlüssel erfolgreich mit NFC-Beam gesendet! Schlüssel wurde in die Zwischenablage kopiert! Fingerabdruck wurde in die Zwischenablage kopiert! - Bitte wähle einen Schlüssel um zu Beglaubigen! Schlüssel ist zu groß um so geteilt zu werden! Text wurde in Zwischenablage kopiert! - Löschen von \'%s\' ist fehlgeschlagen Datei nicht gefunden kein geeigneter privater Schlüssel gefunden Externes Laufwerk ist nicht bereit @@ -249,6 +236,8 @@ Privater Schlüssel konnte nicht extrahiert werden Android 4.1 wird benötigt um Androids NFC Beam nutzen zu können! + NFC muss aktiviert sein! + Beam muss aktiviert sein! Keine Schlüssel gefunden! Abrufen der Schlüsselkennung von den Kontakten ist fehlgeschlagen! Ein allgemeiner Fehler trat auf, bitte schreiben Sie einen neuen Bugreport für OpenKeychain. @@ -318,8 +307,7 @@ Zusammenführung: Im Cache speichern... Zusammenführung: Neuimportierung... - Name/Email/Schlüssel ID... - Name/Email/Nachweis/Schlüssel... + Suche via Name, E-Mail... 512 768 @@ -347,7 +335,6 @@ Start FAQ - Web of Trust NFC-Beam Changelog Über @@ -384,12 +371,12 @@ %1$d Schlüssel erfolgreich aktualisiert: %2$s. - Importieren von einen Schlüssel fehlgeschlagen! - Importieren von %d Schlüsseln fehlgeschlagen! + Import eines Schlüssels fehlgeschlagen! + Import von %d Schlüsseln fehlgeschlagen! - Importieren fehlgeschlagen! - Importieren von %d Schlüsseln fehlgeschlagen! + Import fehlgeschlagen! + Import von %d Schlüsseln fehlgeschlagen! Nichts zu importieren. Import abgebrochen. @@ -478,7 +465,7 @@ Schlüssel bearbeiten Text Verschlüsseln Dateien - Identitäten beglaubigen + Schlüssel bestätigen Von Schlüsselserver aktualisieren Teilen über... Über NFC teilen @@ -487,8 +474,9 @@ Teilen Unterschlüssel Beglaubigungen - Wiederrufen - Diese Identität wurde durch den Schlüsselinhaber wiederrufen. Sie ist nicht mehr gültig. + Keybase.io + Widerrufen + Diese Identität wurde vom Schlüsselinhaber widerrufen. Sie ist nicht mehr gültig. Beglaubigt Diese Identität wurde von Ihnen beglaubigt. Nicht beglaubigt @@ -496,7 +484,41 @@ Ungültig Irgend etwas ist mit dieser Identität nicht in Ordnung! + Dies ist einer deiner Schlüssel! + Dieser Schlüssel wurde vom Schlüsselinhaber widerrufen. Du solltest ihm nicht vertrauen. + Dieser Schlüssel ist abgelaufen. Du solltest ihm nicht vertrauen. + Kein Nachweis aus der Cloud zur Vertrauenswürdigkeit dieses Schlüssels. + Suche beginnen + Keybase.io bietet \"Nachweise\" die versichern, dass der Schlüsselinhaber: + Schreibt auf Twitter als + Ist auf GitHub bekannt als + Kontrolliert diese Domainnamen + Kann auf diesen Webseiten veröffentlichen + Veröffentlicht auf Reddit als + Ist auf Coinbase bekannt als + Veröffentlicht auf Hacker News als + Unbekannter Nachweistyp + Leider kann dieser Nachweis nicht überprüft werden. + Unbekanntes Problem mit dem Nachweis-Prüfer + Problem mit dem Nachweis + Schlüssel-Fingerabdruck stimmt nicht mit dem Fingerabdruck im Nachweis überein + Abfrage des DNS-TXT-Eintrags fehlgeschlagen + Kein Nachweis-Prüfer gefunden für + Entschlüsselter Nachweis entspricht nicht dem erwarteten Wert + Hole Nachweis + Dieser Nachweis wurde überprüft! + Ein Posting + abgerufen von + für die Domain + enthält eine Nachricht, die nur vom Schlüsselinhaber hätte erzeugt werden können. + Ein Tweet + Ein DNS-TXT-Eintrag + Eine Textdatei + Ein Gist + Eine JSON-Datei + von Reddit zugeordnet an + Überprüfen Passwort ändern Identität hinzufügen @@ -521,17 +543,19 @@ Füge mindestens eine Identität hinzu! Fügen Sie mindestens einen Unterschlüssel hinzu! - Schlüssel auf Schlüsselserver hochladen + Mit der Cloud synchronisieren Dieses Feld wird benötigt Passwörter stimmen nicht überein Du hast folgende Identität eingegeben: Einen Schlüssel zu erzeugen braucht eine Weile, trink in der Zeit einen Kaffee... (3 Unterschlüssel, RSA, 4096 Bit) (Benutzerdefinierte Schlüsseleinstellung) - Vollen Namen und Emailadresse angeben und Passwort wählen. - Vollständiger Name, z.B. Max Mustermann Schlüsselkonfiguration ändern + Widerrufen: Schlüssel darf nicht mehr genutzt werden! + Abgelaufen: Der Kontakt muss die Gültigkeit des Schlüssels verlängern! + Abgelaufen: Du kannst die Gültigkeit des Schlüssels verlängern indem du ihn editierst. + Mein Schlüssel Schlüssel Verschlüsseln/Entschlüsseln @@ -564,7 +588,7 @@ Vorgang aufgrund eines Datenbankfehlers fehlgeschlagen Vorgang augrund internem Fehler fehlgeschlagen Importiere öffentlichen Schlüsselbund %s - Schlüsselbund-daten werden kodiert + Schlüsselbunddaten werden kodiert Analysiere Schlüssel Datenbank-Transaktionen werden vorbereitet Hauptschlüssel %s wird verarbeitet @@ -623,14 +647,14 @@ Ignoriere eine Beglaubigung, ausgestellt von unbekanntm öffentlichen Schlüssel Ignoriere %s Beglaubigungen, ausgestellt von unbekannten öffentlichen Schlüsseln - Benutzerkennungen werden klassifiziert (keine vertrauenswürdigen Schlüssel verfügbar) + User-IDs werden klassifiziert (keine vertrauenswürdigen Schlüssel verfügbar) - Benutzerkennungen werden klassifiziert (ein vertrauenswürdiger Schlüssel wird verwendet) - Benutzerkennungen werden klassifiziert (%s vertrauenswürdige Schlüssel werden verwendet) + User-ID wird klassifiziert (verwende einen vertrauenswürdigen Schlüssel) + User-IDs werden klassifiziert (verwende %s vertrauenswürdige Schlüssel) - Benutzerkennungen werden neu geordnet - Benutzerkennung %s wird verarbeitet - Nutzer ID wiederrufen + User-IDs werden neu geordnet + User-ID %s wird verarbeitet + User-ID wurde widerrufen Bilder werden verarbeitet Unbekannte Benutzerattribute werden verarbeitet Ungültiges Zertifikat gefunden! @@ -659,32 +683,31 @@ Generiere öffentlichen Schlüsselbund aus geheimem Schlüsselbund Unterschlüssel %s in privatem Schlüssel nicht verfügbar. Geheimen Unterschlüssel %s als verfügbar markiert - Geheimen Unterschlüssel %s als verfügbar markiert, ohne Passphrase + Geheimen Unterschlüssel %s als verfügbar markiert, ohne Passwort Geheimen Unterschlüssel %s als verfügbar markiert, mit PIN Privater Unterschlüssel %s als gekürzt markiert - Privater Unterschlüssel %s als \'Umleiten zu Smartcard/NFC\' markiert - Schlüsselbund enthält keine neuen Daten, es gibt nichts zu tun. + Privater Unterschlüssel %s als \'Umgeleitet zu Smartcard/NFC\' markiert + Schlüsselbund enthält keine neuen Daten, es gibt nichts zu tun Geheimer Schlüsselbund erfolgreich importiert Öffentlicher Schlüsselbund %s wird in vorschriftsgemäße Form gebracht Geheimer Schlüsselbund %s wird in vorschriftsgemäße Form gebracht Dies ist ein OpenPGP Schlüssel der Version 3, welche hinfällig sind und nicht weiter unterstützt werden! - Schlüsselbund hat keine gültigen Benutzerkennungen! + Schlüsselbund hat keine gültigen User-IDs! Der Hauptschlüssel verwendet einen unbekannten (%s) Algorithmus! Unterschlüssel %s kommt zweimal im Schlüsselbund vor. Schlüsselbund ist fehlerhaft, wird nicht importiert! Verarbeite Hauptschlüssel Hauptschlüsselbeglaubigung unbekannter Art wird entfernt (%s) - Hauptschlüsselbeglaubigung mit \'Lokal\'-Attribut wird entfernt + Entferne Hauptschlüsselbeglaubigung mit \'Local\'-Attribut Fehlerhafte Hauptschlüsselbeglaubigung wird entfernt Schlüsselbund-Widerrufszertifikat mit zukünftigem Zeitstempel wird entfernt - Benutzerkennungsbeglaubigung an falscher Position wird entfernt + User-ID-Beglaubigung an falscher Position wird entfernt Fehlerhafte Hauptschlüsselbeglaubigung wird entfernt - Hauptschlüsselbeglaubigung mit \'Lokal\'-Attribut wird entfernt - Entferne redundantes Schlüsselbund Widerrufszertifikat + Entferne Hauptschlüsselbeglaubigung mit \'Local\'-Attribut + Entferne redundantes Schlüsselbund-Widerrufszertifikat Verarbeite Unterschlüssel %s Entferne ungültige Unterschlüssel Zwischenbeglaubigung Entferne fehlerhafte Unterschlüssel Zwischenbeglaubigung - Entferne Unterschlüssel Zwischenzertifikat mit \"Lokal\" Attribut Ungleiche Zwischenausstellerkennung beim Unterschlüssels Entferne Unterschlüssel Zwischenbeglaubigung mit zukünftigem Zeitstempel Unbekannte Unterschlüsselbeglaubigungart: %s @@ -692,7 +715,7 @@ Entferne Unterschlüssel Zwischenbeglaubigung aufgrund ungültiger primärer Zwischenbeglaubigung Entferne Unterschlüssel Zwischenbeglaubigung aufgrund fehlerhafter primärer Zwischenbeglaubigung Entferne Unterschlüssel Zwischenbeglaubigung aufgrund fehlender primärer Zwischenbeglaubigung - Keine gültige Beglaubigung für %s gefunden, entferne vom Ring + Keine gültige Beglaubigung für %s gefunden, entferne vom Schlüsselbund Entferne fehlerhaftes Unterschlüssel Widerrufszertifikat Entferne fehlerhaftes Unterschlüssel Widerrufszertifikat Entferne redundantes Unterschlüssel Widerrufszertifikat @@ -709,19 +732,18 @@ Schlüsselbund wurde erfolgreich in vorschriftsgemäße Form gebracht, eine redundante Beglaubigung entfernt Schlüsselbund wurde erfolgreich in vorschriftsgemäße Form gebracht, %d redundante Beglaubigungen entfernt - Fehlerhafte Eigenbeglaubigung für Benutzerkennung \'%s\' wird entfernt - Benutzerkennungsbeglaubigung mit \'Lokal\'-Attribut wird entfernt - Benutzerkennung mit zukünftigem Zeitstempel wird entfernt - Benutzerkennungsbeglaubigung unbekannter Art wird entfernt (%s) - Fehlerhafte Eigenbeglaubigung für Benutzerkennung \'%s\' wird entfernt - Abgelaufene Eigenbeglaubigung für Benutzerkennung \'%s\' wird entfernt - Fremde Benutzerkennungsbeglaubigung von \'%s\' wird entfernt - Redundantes Widerrufszertifikat für Benutzerkennung \'%s\' wird entfernt - Abgelaufenes Widerrufszertifikat für Benutzerkennung \'%s\' wird entfernt - Keine gültige Eigenbeglaubigung für Benutzerkennung \'%s\' gefunden, wird vom Bund entfernt - Ungültige Benutzerkennung \'%s\' wird entfernt - Doppelte Benutzerkennung \'%s\' wird entfernt. Der geheime Schlüssel enthielt zwei davon. Hieraus könnten fehlende Beglaubigungen resultieren! - Benutzerkennung nicht als UTF-8 bestätigt! + Fehlerhafte Eigenbeglaubigung für User-ID \'%s\' wird entfernt + User-ID-Beglaubigung mit \'Lokal\'-Attribut wird entfernt + User-ID mit zukünftigem Zeitstempel wird entfernt + User-ID-Beglaubigung unbekannter Art wird entfernt (%s) + Fehlerhafte Eigenbeglaubigung für User-ID \'%s\' wird entfernt + Abgelaufene Eigenbeglaubigung für User-ID \'%s\' wird entfernt + Fremde User-ID-Beglaubigung von \'%s\' wird entfernt + Redundantes Widerrufszertifikat für User-ID \'%s\' wird entfernt + Abgelaufenes Widerrufszertifikat für User-ID \'%s\' wird entfernt + Keine gültige Eigenbeglaubigung für User-ID \'%s\' gefunden, wird aus Schlüsselbund entfernt + Ungültige User-ID \'%s\' wird entfernt + Doppelte User-ID \'%s\' wird entfernt. Der Schlüsselbund enthielt zwei davon. Hieraus könnten fehlende Beglaubigungen resultieren! Das Benutzerattribut JPEG wird verarbeitet Ein unbekanntes Benutzerattribut wird verarbeitet Entferne fehlerhafte Eigenbeglaubigung für Benutzerattribut @@ -730,17 +752,18 @@ Entferne Benutzerattributbeglaubigung unbekannter Art (%s) Entferne fehlerhafte Eigenbeglaubigung für Benutzerattribut Entferne abgelaufene Eigenbeglaubigung für Benutzerattribut + Doppeltes Benutzerattribut wird entfernt. Der Schlüsselbund enthielt zwei davon. Hieraus könnten fehlende Beglaubigungen resultieren! Entferne fremdes Benutzerattributszertifikat von Entferne redundantes Widerrufszertifikat für Benutzerkennung Entferne abgelaufenes Widerrufszertifikat für Benutzerkennung - Keine gültigen Eigenbeglaubigungen für das Benutzerattribut gefunden, entferne vom Ring + Keine gültige Eigenbeglaubigung für das Benutzerattribut gefunden, wird aus Schlüsselbund entfernt Ungültiges Benutzerattribut wird entfernt - Benutzerkennung nicht als UTF-8 bestätigt! Neuer öffentlicher Unterschlüssel gefunden, aber Erstellung von geheimen Unterschlüsseldummys wird nicht unterstützt! - Versucht Schlüsselbunde mit unterschiedlichen Fingerabdrücken zusammenzufügen! + Versuch Schlüsselbünde mit unterschiedlichen Fingerabdrücken zusammenzuführen! Schwerer Fehler bei Kodierung der Signatur! - Vereine in öffentlichen Schlüsselbund %s + Wird in öffentlichen Schlüsselbund %s eingefügt + Wird in geheimen Schlüsselbund %s eingefügt Neuer Unterschlüssel %s wird hinzugefügt %s neue Beglaubigungen in Schlüsselbund gefunden @@ -748,7 +771,7 @@ Neuer Masterschlüssel wird erzeugt Keine Hauptschlüsseloptionen definiert! - Schlüsselbund muss mit mindestens einer Benutzerkennung erstellt werden! + Schlüsselbünde müssen mit mindestens einer User-ID erstellt werden! Hauptschlüssel benötigt das Attribut beglaubigen! Ablaufdatum kann bei Schlüsselerstellung nicht \'gleiche wie vorher\' sein. Das ist ein Programmierfehler, bitte reiche einen Fehlerbericht ein. Schlüsselgröße muss größer/gleich 512 sein! @@ -767,9 +790,9 @@ Keine Schlüssel ID. Dies ist ein interner Fehler, bitte reiche einen Fehlerbericht ein. Interner Fehler, Integritätsprüfung fehlgeschlagen! Keine Hauptbeglaubigung zum arbeiten gefunden! (Alle widerrufen?) - Falsche primäre Benutzerkennung festgelegt! - Falsche Benutzerkennung für Widerruf definiert! - Widerrufene Benutzerkennungen können keine Primäre sein! + Falsche primäre User-ID festgelegt! + Falsche User-ID für Widerruf festgelegt! + Widerrufene User-IDs können nicht primäre IDs sein! Ablaufdatum kann bei Unterschlüsselerstellung nicht \'gleiche wie vorher\' sein. Das ist ein Programmierfehler, bitte reiche einen Fehlerbericht ein. Schwerer Fehler beim Entschlüsseln des Hauptschlüssels! Dies ist wahrscheinlich ein Programmierfehler, bitte reiche einen Fehlerbericht ein. Interner OpenPGP Fehler! @@ -779,8 +802,8 @@ Erneute Verschlüsselung des Unterschlüssels %s mit neuem Passwort Setzen des neuen Passworts fehlgeschlagen, versuche es nochmal mit leerem altem Passwort Passwort für Unterschlüssel konnte nicht geändert werden! (Hat er ein anderes als die anderen Schlüssel?) - Beglaubigung von vorheriger primärer Benutzerkennung wird ersetzt - Neue Beglaubigung für neue primäre Benutzerkennung wird erzeugt + Beglaubigung von vorheriger primärer User-ID wird ersetzt + Neue Beglaubigung für neue primäre User-ID wird erzeugt Unterschlüssel %s wird geändert Versuch mit fehlendem Unterschlüssel %s zu arbeiten! Füge neuen Unterschlüssel vom Typ %s hinzu @@ -789,10 +812,10 @@ Widerrufe Unterschlüssel %s Kürze Unterschlüssel %s Schlüsselbund erfolgreich verändert - Benutzerkennung %s wird hinzugefügt - Primäre Benutzerkenung wird auf %s geändert - Benutzerkennung %s wird widerrufen - Benutzerkennung darf nicht leer sein! + User-ID %s wird hinzugefügt + Primäre User-ID wird geändert zu %s + Widerrufe User-ID %s + User-ID darf nicht leer sein! Benutzerattribut darf nicht leer sein! Benutzerattribut vom Typ Bild wird hinzugefügt Benutzerattribut unbekannter Art wird hinzugefügt @@ -818,30 +841,32 @@ Zusammenführungsvorgang wird fortgesetzt Zusammenführungsvorgang aus unbekanntem Zustand wird fortgesetzt - Wiederimport eines öffentlichen Schlüssels - Reimport von %d öffentlichen Schlüsseln + Reimportiere einen öffentlichen Schlüssel + Reimportiere %d öffentliche Schlüssel - Keine öffentlichen Schlüssel für reimport, überspringe... + Keine öffentlichen Schlüssel für Reimport, überspringe... - Wiederimport eines geheimen Schlüssels - Reimport von %d geheimen Schlüsseln + Reimportiere einen geheimen Schlüssel + Reimportiere %d geheime Schlüssel - Keine geheimen Schlüssel für reimport, überspringe... + Keine geheimen Schlüssel für Reimport, überspringe... Fehler beim Löschen der Öffentlichen Cache-Datei Fehler beim Löschen der Geheimen Cache-Datei Schlüsselvorgang wird durchgeführt Neues Passwort wird zwischengespeichert + SaveKeyringParcel fehlt! (Dies ist ein Bug, bitte melden.) Schlüssel nicht gefunden! Zu ändernder Schlüssel wird abgerufen (%s) Schlüsselvorgang erfolgreich + Befördere öffentlichen Schlüssel zum geheimen Schlüssel Der Schlüssel ist bereits ein geheimer Schlüssel! Schlüssel nicht gefunden! Zu ändernder Schlüssel wird abgerufen (%s) - Schlüssel erfolgreich eingebracht + Schlüssel erfolgreich befördert - Bearbeiten von NFC Schlüsseln wird (noch) nicht unterstützt! + Bearbeiten von NFC-Schlüsseln wird (noch) nicht unterstützt! Kann Schlüsselbund nicht mit gekürztem Hauptschlüssel bearbeiten! Schlüssel nicht gefunden! @@ -854,7 +879,7 @@ Dateiname: %s MIME-Typ: %s Dateigröße: %s - Dateigröße ist unbekannt + Dateigröße unbekannt Änderungszeit: %s Signaturprüfung NICHT OK! Überprüfe Signaturdaten @@ -871,9 +896,8 @@ Es ist ein OpenPGP-Ausnahmefehler während des Vorgangs aufgetreten! Integritätsprüfung OK! Es wurden nur Metadaten angefragt, überspringe Entschlüsselung - OK Verwende Passwort aus Zwischenspeicher - NFC Token benötigt, verlange Benutzereingabe... + NFC-Token benötigt, verlange Benutzereingabe... Passwort benötigt, verlange Benutezreingabe... Bereite Datenkette Starte Entschlüsselungsvorgang... @@ -884,10 +908,19 @@ Anhängende Daten unbekannter Art gefunden Geheimer Schlüssel wird entsperrt + Dateiname: %s + MIME-Typ: %s + Änderungszeit: %s + Dateigröße: %s + Überprüfe Signaturdaten + OK Starte Signier-/Verschlüsselungsvorgang + Verarbeite Eingabe aus Bytearray + Verarbeite Eingabe von URI Keine Eingabe gegeben! - Fehler beim öffnen der Uri zum lesen! + Fehler beim öffnen der URI zum lesen! + Fehler beim öffnen der URI zum schreiben! Signier-/Verschlüsselungsvorgang erfolgreich! Bereite öffentliche Schlüssel für Verschlüsselung vor @@ -900,7 +933,7 @@ Gewählter Signaturschlüssel kann keine Daten signieren! Fehler bei Abruf des Signaturschlüssels! NFC-Datenfehler! - Kein Passwort bereitgestellt! + Kein Passwort angegeben! Interner OpenPGP Fehler! OpenPGP-Signaturfehler aufgetreten! Unbekannter Fehler bei Schlüsselentsperrung! @@ -908,7 +941,7 @@ Fehlender Schlüssel für Verschlüsselung: %s Falscher Schlüssel für Verschlüsselung: %s Signierungs-/Verschlüsselungsvorgang erfolgreich! - NFC Token benötigt, verlange Benutzereingabe... + NFC-Token benötigt, verlange Benutzereingabe... Passwort benötigt, verlange Benutzereingabe... Signiere Daten (ohne Verschlüsselung) Erstelle Klartextsignatur @@ -917,20 +950,15 @@ Starte Signier- und/oder Verschlüsselungsvorgang Bereite symmetrische Verschlüsselung vor Zertifizierungen werden erzeugt - Alle Benutzerkennungen für Schlüssel %s werden beglaubigt - - Eine Benutzerkennung für Schlüssel %2$s wird beglaubigt - %1$d Benutzerkennungen für Schlüssel %2$s werden beglaubigt - Auf diese Art und Weise kann keine Eigenbeglaubigung ausgestellt werden! Hauptschlüssel nicht gefunden! Keine beglaubigten Schlüssel! Fehler beim Entsperren des Hauptschlüssels! - Beglaubigung mit NFC wird (noch) nicht unterstützt! - Schlüsselbund wird beglaubigt + Beglaubigung über NFC wird (noch) nicht unterstützt! + Schlüsselbünde werden beglaubigt Beglaubigender Hauptschlüssel wird abgerfufen Beglaubigter Schlüssel %s wird gespeichert - Schlüsselbunde werden gespeichert + Schlüsselbünde werden gespeichert Hauptschlüssel wird entsperrt Identitäten erfolgreich beglaubigt Schlüssel nicht gefunden! @@ -1000,8 +1028,10 @@ Schlüsselsuchanfrage lieferte zu viele Kandidaten. Bitte verfeinern Sie Ihre Anfrage! Entweder keine oder zu viele Schlüssel wurden gefunden. Bitte verbessern Sie Ihre Anfrage! Beim suchen der Schlüssel ist ein Fehler aufgetreten. + + Kein Dateiname angegeben! - Klicken um Passworte aus Zwischenspeicher zu leeren + Klicken um Passworte aus Zwischenspeicher zu löschen OpenKeychain hat %d Passworte zwischengespeichert Zwischengespeicherte Passworte: Cache löschen @@ -1019,14 +1049,15 @@ Keine Beglaubigungen für diesen Schlüssel Nur geprüfte Eigenbeglaubigungen und geprüfte Beglaubigungen welche mit deinen Schlüsseln erstellt wurden werden hier angezeigt. Identitäten für + Vergleiche den angezeigten Fingerabdruck zeichenweise mit dem, der auf dem Gerät deines Gegenübers angezeigt wird. + Stimmen die angezeigten Fingerabdrücke überein? Widerrufsgrund - Verifikationsstatus Typ Schlüssel nicht gefunden! Fehler bei der Verarbeitung des Schlüssels! nicht verfügbar - Übergebe an SmartCard/NFC - Kein Passwort + Umgeleitet zu SmartCard/NFC + kein Passwort nicht verfügbar Deine eigenen Schlüssel können nur einzeln gelöscht werden! Zertifikatdetails anzeigen @@ -1049,22 +1080,22 @@ Passwort Kein Passwort Kein Passwort gesetzt - Die Passwörter stimmten nicht überein. + Die Passwörter stimmten nicht überein Passwort gespeichert Falsches Passwort Fehlendes Passwort Wiederholen Entsperrcode - NFc + Entsperrcode + NFC + Entsperrcode Entsperrmethode Passwort setzen Zeichne Entsperrcode NFC Falscher Tag. Bitte versuche es erneut. - Aktiviere NFC in deinen Einstellungen. + Bitte aktiviere NFC in deinen Einstellungen. Dieses Gerät unterstützt kein NFC - Erfolgreich auf den NFC Tag geschrieben + Erfolgreich auf den NFC-Tag geschrieben Entsperrt Einstellungen diff --git a/OpenKeychain/src/main/res/values-es/strings.xml b/OpenKeychain/src/main/res/values-es/strings.xml index d5d8440af..92b958ad8 100644 --- a/OpenKeychain/src/main/res/values-es/strings.xml +++ b/OpenKeychain/src/main/res/values-es/strings.xml @@ -6,8 +6,6 @@ Seleccionar claves Seleccionar su clave - Cifrar texto - Cifrar ficheros Descifrar Desbloquear clave Añadir subclave @@ -20,7 +18,6 @@ Compartir huella de validación de clave con... Compartir clave con... Compartir fichero con... - Compartir mensaje con... Cifrar hacia archivo Descifrar hacia archivo Importar claves @@ -29,7 +26,7 @@ Exportar claves Clave no encontrada Cargar al servidor de claves - Certificar identificaciones + Confirmar clave Detalles de la clave Ayuda Registro (log) @@ -37,33 +34,34 @@ Intercambiar claves Información avanzada de clave Claves + ¿Borrar SU clave \'%s\'? + Exportar registro (log) Identificaciones ¿Debe confiar en esta clave? - Prueba de verificación - Evidencia desde la nube + Comprobante de verificación + Comprobantes desde la nube Subclaves Búsqueda en la nube General Predeterminados Avanzado Caché de frase-contraseña - Certificar + Confirmar Acciones Clave - Tu clave usada para las certificaciones Sincronizar clave Servidor de claves Huella de validación de clave - Clave a ser certificada Ficheros Texto Certificados Cifrar Descifrar + Caducidad actual + Nueva caducidad Descifrar, verificar, y guardar fichero - Descifrar y verificar mensaje Cifrar y guardar fichero Cifrar y compartir fichero Guardar @@ -75,9 +73,8 @@ Siguiente Volver No - Las huellas de validación son coincidentes + Las huellas de validación coinciden Buscar clave - Cifrar y compartir mensaje Ver clave de verificación Crear clave Añadir fichero(s) @@ -104,9 +101,9 @@ Buscar en la nube Exportar todas las claves Mostrar información avanzada - Verificar vía comparación de huellas de validación + Confirmar mediante comparación de la huella de validación (fingerprint) + Exportar registro (log) - Mensaje Archivo Fichero(s) Fichero: @@ -131,7 +128,6 @@ Cifrar con frase-contraseña Duración en caché Almacenar en caché frases-contraseña por subclave - Compresión del mensaje Compresión del fichero Servidores de claves ID de clave @@ -149,15 +145,9 @@ Establer la fecha de vencimiento (Se prefiere el primer servidor de claves listado) preferido + Habilitar compresión <sin nombre> <ninguna> - <sin clave> - se puede cifrar - se puede firmar - puede certificarse - no puede certificarse - caducado - revocado 1 clave %d claves @@ -187,7 +177,6 @@ ECDH (intercambio Diffie-Hellman con curva elíptica) ECDSA (algoritmo de firma digital con curva elíptica) Abrir... - Advertencia Error Error: %s @@ -206,19 +195,17 @@ Introduzca el PIN para acceder a la YubiKey para \'%s\' Sostenga la YubiKey contra el reverso de su dispositivo. ¿Está seguro de que quiere eliminar\n%s? - Borrado satisfactoriamente. Selecciona un archivo antes. Firmado y/o cifrado con éxito. Firmado y/o cifrado del portapapeles con éxito. - Introduce la frase de contraseña dos veces. Selecciona al menos una clave de cifrado. Selecciona al menos una clave de cifrado o de firma. Por favor especifique hacia qué fichero cifrar.\nADVERTENCIA: El fichero se sobreescribirá si existe. Por favor especifique hacia que fichero descifrar.\nADVERTENCIA: El fichero se sobreescribirá si existe. Por favor especifique hacia qué fichero exportar.\nADVERTENCIA: El fichero se sobreescribirá si existe. - ¿De verdad quiere eliminar todas las claves públicas seleccionadas?\n¡No puede deshacer esto! - ¿De verdad quiere eliminar la clave SECRETA (privada) \'%s\'?\n¡No puede deshacer esto! - ¿De verdad quiere eliminar la clave pública \'%s\'?\n¡No puede deshacer esto! + ¿De verdad quiere borrar todas las claves seleccionadas? + ¡Después del borrado no podrá leer mensajes cifrados con esta clave y perderá todas las confirmaciones de clave hechas con ella! + ¿Borrar clave \'%s\'? Exportar también claves secretas (privadas) Ha encontrado un conocido fallo con Android. Por favor reinstale OpenKeychain si quiere enlazar sus contactos con las claves. Se ha exportado 1 clave satisfactoriamente. @@ -226,6 +213,7 @@ No se han exportado claves. Nota: Sólo las subclaves soportan ElGamal. No se puede encontrar la clave %08X. + Por favor especifique el fichero al que exportar. \nADVERTENCIA: El fichero se sobreescribirá si existe. %d clave secreta (privada) defectuosa ignorada. Quizá exportó con la opción\n --export-secret-subkeys\nAsegúrese de que exporta con\n --export-secret-keys\nen su lugar.\" %d claves secretas (privadas) defectuosas ignoradas. Quizá exportó con la opción\n --export-secret-subkeys\nAsegúrese de que exporta con\n --export-secret-keys\nen su lugar.\" @@ -234,13 +222,12 @@ ¡Clave enviada con éxito vía NFC Beam (haz NFC)! ¡La clave ha sido copiada al portapapeles! ¡La huella de validación de clave se ha copiado al portapapeles! - Por favor ¡seleccione una clave para ser usada en certificación! + ¡Por favor seleccione una clave a usar para confirmación! ¡La clave es demasiado grande para ser compartida de esta forma! ¡El texto se ha copiado al portapapeles! - ha fallado el borrado de \'%s\' archivo no encontrado no se ha encontrado una clave secreta adecuada el almacenamiento externo no está preparado @@ -327,8 +314,7 @@ consolidación: guardando en caché... consolidación: reimportando - Nombre/Correo electrónico/Identificación de clave... - Nombre/Correo/Prueba/Clave... + Buscar mediante Nombre, Correo electrónico... 512 768 @@ -356,7 +342,7 @@ Comenzar FAQ - Anillo de confianza + Confirmación de clave NFC Beam Registro de cambios A cerca de @@ -487,7 +473,7 @@ Editar clave Cifrar texto ficheros - Certificar identificación + Confirmar clave Actualizar desde el servidor de claves Compartir con... Compartir por NFC @@ -506,15 +492,15 @@ No válida ¡Hay algo mal con esta identificación! - ¡Ya ha certificado esta clave! + ¡Ya ha confirmado esta clave! ¡Esta es una de sus claves! - Esta clave no está revocada ni caducada.\nNo la ha certificado, pero puede elegir confiar en ella. + Esta clave no está revocada ni ha caducado.\nNo la ha confirmado, pero puede elegir confiar en ella. Esta clave ha sido revocada por su propietario. No debe confiar en ella. Esta clave ha caducado. No debe confiar en ella. - Puede ser correcto usar esta para descifrar un mensaje antiguo que date del momento en que esta clave estaba vigente. - No hay evidencia desde la nube de la fiabilidad de esta clave. + No hay comprobantes desde la nube sobre la confiabilidad de esta clave. Comenzar búsqueda - Keybase.io ofrece \"pruebas\" que sostienen que el propietario de esta clave: + Keybase.io ofrece \"comprobantes\" que sostienen que el propietario de esta clave: + Nota: Los comprobantes de Keybase.io son una característica experimental de OpenKeychain. Le animamos a que escanee los Códigos QR o intercambie claves vía NFC además de confirmarlas. Publica en Twitter como Es conocido en GitHub como @@ -523,16 +509,16 @@ Publica en Reddit como Es conocido en Coinbase como Publica en Hacker News como - Tipo de prueba desconocido - Desafortunadamente esta prueba no puede ser verificada. - Problema no reconocido con el verificador de la prueba - Problema con la evidencia de la prueba - La huella de validación de clave no coincide con aquella en el post de la prueba + Tipo de comprobante desconocido + Desafortunadamente este comprobante no se puede verificar. + Problema no reconocido con el chequeador del comprobante + Problema con el comprobante + La huella de validación de clave no coincide con aquella en el post del comprobante Fallo al obtener registro DNS TXT - No se encontró verificador de prueba para - El post de la prueba descifrada no coincide con el valor esperado - Descargado evidencia de la prueba - ¡Esta prueba ha sido verificada! + No se encontró chequeador del comprobante + El post del comprobante descrifrado no coincide con el valor esperado + Descargando comprobante + ¡Este comprobante ha sido verificado! Un post descargada desde para el dominio @@ -568,23 +554,21 @@ ¡Añadir al menos una identificación! ¡Añadir al menos una subclave! - Subir clave al servidor de claves + Sincronizar con la nube Este campo es obligatorio Las frases-contraseña no coinciden Ha introducido la siguiente identificación: Crear una clave puede llevar un tiempo, tómese una taza de café entre tanto... (3 subclaves, RSA, 4096 bits) (configuración de clave personalizada) - Introduzca su nombre completo, dirección de correo electrónico, y elija una frase contraseña. - Nombre completo, ej. Max Mustermann Cambiar configuración de clave Revocada: ¡La clave no debe volver a ser usada! - Caducada: ¡El contacto necesita extender la vigencia de las claves! + Caducada: ¡El contacto necesita extender la vigencia de la clave! Caducada: ¡Puede extender la vigencia de las claves al editarlas! Mi clave - Clave verificada - No verificada: ¡Escanee el código QR para verificar la clave! + Clave confirmada + No confirmada: ¡Escanee el código QR para confirmar clave! Claves Cifrar/Descifrar @@ -727,19 +711,19 @@ La subclave %s aparece dos veces en el juego de claves (keyring). El juego de claves está mal formado, ¡no se va a importar! Procesando clave maestra Eliminando certificado de clave maestra de tipo desconocido (%s) - Eliminando certificado de clave maestra con distintivo \"local\" + Eliminando certificado de clave maestra con distintivo \'local\' Eliminando certificado de clave maestra defectuoso Eliminando certificado de revocación de juego de claves con marca de tiempo en el futuro Eliminando certificado de identificación de usuario en posición incorrecta Eliminando certificado de clave maestra defectuoso - Eliminando certificado de clave maestra con distitivo \"local\" + Eliminando certificado de clave maestra con distintitivo \'local\' Eliminando certificado redundante de revocación de juego de claves Eliminando certificado de notación redundante Eliminando certificado de notación vacía Procesando subclave %s Eliminando certificado no vigente de vinculación de subclave Eliminando certificado defectuoso de vinculación de subclave - Eliminando certificado de vinculación de subclave, con distintivo \"local\" + Eliminando certificado de vinculación de subclave con distintivo \'local\' La identificación del publicante de la vinculación de subclave no coincide Eliminando certificado de vinculación de subclave, con marca de tiempo futura Tipo de certificado de subclave desconocido: %s @@ -776,7 +760,7 @@ No se encontró auto-certificado vigente para la identificación de usuario \'%s\', eliminándola del juego de claves Eliminando identificación de usuario \'%s\' no válida Eliminando identificaciones de usuario duplicadas \'%s\'. El juego de claves contenía dos de ellas. ¡Esto puede resultar en certificados perdidos! - ¡La identificación de usuario no se verifica como UTF-8! + ¡La identificación de usuario no se confirma como UTF-8! Procesando atributo de usuario del tipo JPEG Procesando atributo de usuario de tipo desconocido Eliminando auto certificados defectuosos para el atributo de usuario @@ -791,7 +775,7 @@ Eliminando certificado de revocación desactualizado para el atributo de usuario No se encontró auto certificado válido para el atributo de usuario, eliminándolo del juego de claves Eliminando atributo de usuario no válido - ¡La identificación de usuario no se verifica con formato UTF-8! + ¡La identificación de usuario no se confirma como UTF-8! Nueva subclave pública encontrada, ¡pero la generación de subclaves secretas (privadas) ficticias no está soportada! ¡Se intentaron fusionar juegos de claves con diferentes huellas de validación! @@ -920,6 +904,7 @@ Tamaño de fichero desconocido Hora de la modificación: %s ¡Comprobación de firma NO CORRECTA! + ¡Algoritmo de identificador criptográfico (hash) no soportado y potencialmente inseguro! Verificando datos de firma Comprobación de firma CORRECTA Guardando datos de firma para más tarde @@ -935,7 +920,7 @@ ¡Se encontró una excepción OpenPGP durante la operación! ¡Comprobación de integridad CORRECTA! Sólo fueron solicitados los metadatos, omitiendo descifrado - CORRECTO + Descifrado/Verificación finalizado Usando frase-contraseña desde caché Se requiere credencial NFC, solicitando su introducción por el usuario... Se requiere frase-contraseña, solicitando su introducción por el usuario... @@ -947,6 +932,7 @@ Se encontró huella, datos cifrados simétricamente Se encontró huella, datos de tipo desconocido Desbloqueando clave secreta (privada) + ¡Se ha usado un algoritmo de cifrado potencialmente inseguro! Comenzando comprobación de firma No hay lista de firmas en los datos literales firmados @@ -962,7 +948,7 @@ Iniciando operación de firmado/cifrado Procesando entrada de matriz de bytes - Procesando entrada de URI + Procesar entrada desde URI ¡No se proporcionó entrada! ¡Error al abrir URI para lectura! ¡Error al abrir URI para escritura! @@ -997,11 +983,14 @@ Iniciando operación de firmado y/o cifrado Preparando cifrado simétrico Generando certificaciones - Certificando todas las identificaciones de usuario para la clave %s - + Certificando una identificación de usuario para la clave %2$s Certificando %1$d identificaciones de usuario para la clave %2$s + + Certificando un atributo de usuario para la clave %2$s + Certificando %1$d atributos de usuario para la clave %2$s + ¡No se puede emitir un auto-certificado como este! ¡Clave maestra no encontrada! ¡No se certificaron claves! @@ -1080,6 +1069,12 @@ La solicitud de búsqueda de clave devolvió demasiados candidatos. ¡Por favor refine su petición! O bien no hay claves o se han encontrado demasiadas. ¡Por favor mejore su petición! Ocurrió un error al buscar claves. + + Exportando registro (log) + Error abriendo fichero + ¡No se especificó nombre de fichero! + ¡Error de E/S al escribir al fichero! + ¡Registro (log) exportado con éxito! Haga clic para eliminar las frases-contraseña almacenadas en caché OpenKeychain ha almacenado en caché %d frases-contraseña @@ -1099,11 +1094,10 @@ No hay certificados para esta clave Aquí sólo se muestran auto-certificados validados y certificados validados creados con sus claves. Identificaciones para - Las claves que está importando contienen \"identificaciones\": nombres y correos electrónicos. Para certificación seleccione exactamente aquellas que coinciden con lo que usted esperaba. + Las claves que está importando contienen \"identidades\": nombres y correos electrónicos. Seleccione exactamente aquellos para confirmación que coinciden con lo que esperaba. Compare la huella de validación mostrada, caracter por caracter, con la que se muestra en el dispositivo de su colega. ¿Coinciden las huellas de validación mostradas? Razón de la revocación - Estado de la verificación Tipo ¡Clave no encontrada! ¡Error procesando clave! diff --git a/OpenKeychain/src/main/res/values-et/strings.xml b/OpenKeychain/src/main/res/values-et/strings.xml index 057eb8e00..15b0c6c1e 100644 --- a/OpenKeychain/src/main/res/values-et/strings.xml +++ b/OpenKeychain/src/main/res/values-et/strings.xml @@ -26,7 +26,6 @@ Kustuta võti Otsi - Sõnum Fail Salasõnet pole Salasõne @@ -38,7 +37,6 @@ Nimi Kommentaar E-mail - aegunud Salajane võti: 15 sekundit @@ -56,7 +54,6 @@ ElGamal RSA Ava... - Hoiatus Viga Viga: %s @@ -113,6 +110,7 @@ + diff --git a/OpenKeychain/src/main/res/values-eu/strings.xml b/OpenKeychain/src/main/res/values-eu/strings.xml index 233347bd3..a09e3fdc5 100644 --- a/OpenKeychain/src/main/res/values-eu/strings.xml +++ b/OpenKeychain/src/main/res/values-eu/strings.xml @@ -2,50 +2,360 @@ + OpenKeychain + Hautatu Giltzak + Hautatu Zure Giltza + Dekriptatu + Desblokeatu Giltza + Gehitu azpigiltza + Editatu Giltza + Ezarpenak + Hodei Bilaketa Hobespenak + Aplikazioak + Giltza-zerbitzariak + Aldatu Sar-esaldia + Elkarbanatu giltza honekin... + Elkarbanatu agiria honekin... + Enkriptatu Agirira + Dekriptatu Agirira + Inportatu Giltzak + Gehitu Giltzak + Esportatu Giltza + Esportatu Giltzak + Giltza Ez da Aurkitu + Igo Giltza-zerbitzarira + Giltzaren Xehetasunak + Laguntza + Oharra + Sortu Giltza + Giltza Argibide Aurreratuak + Giltzak + Nortasunak + Fildatu behar zara giltza honetaz? + Azpigiltzak + Hodei bilaketa + Orokorra + Berezkoak + Aurreratua + Sar-esaldi Katxea + Ekintzak + Giltza + Aldiberetu Giltza + Giltza-zerbitzaria + Agiriak + Idazkia + Egiaztagiriak + Enkriptatu + Dekriptatu + Dekriptatu, egiaztatu eta gorde agiria + Enkriptatu eta gorde agiria + Enkriptatu eta elkarbanatu agiria + Gorde + Ezeztatu + Ezabatu + Epemuga gabe + Ongi + Igo Giltza-zerbitzarira + Hurrengoa + Atzera + Ez + Ikusi egiaztagiri giltza + Sortu giltza + Gehitu agiria(k) + Elkarbanatu dekriptaturiko idazkia + Dekriptatu idazkia gakotik + eta egiaztatu sinadurak + Dekriptatu agiriak + Enkriptatu agiriak + Enkriptatu idazkia + Ezarpenak + Laguntza + Esportatu agirira + Ezabatu giltza + Sortu nire giltza + inportatu agiritik + Bilatu + NFC ezarpenak + Beam ezarpenak + Ezeztatu + Enkriptatu hona... + Hautatu denak + Gehitu giltzak + Bilatu hodeian + Esportatu giltza guztiak + Erakutsi argibide aurreratuak + Agiria + Agiria(k) + Agiria: + Sar-esaldirik ez + Sar-esaldia + Desblokeatzen... + Berregin Sar-esaldia + Algoritmoa + Gaitu ASCII Armor + Erabili berezko YubiKey PIN-a + Sinatzailea: + Enkriptatu hona: + Ezabatu agiria enkriptatu ondoren + Ezabatu dekriptatu ondoren + Enkriptaketa algoritmoa + Hash algoritmoa + Enkriptatu sar-esaldiarekin + Katxe denbora + Agiri konpresioa + Giltza-zerbitzariak + Giltza ID-a + Sortzea + Epemuga + Erabilpena + Giltza Neurria + Bihurgune Eliptikoa + Lehen nortasuna + Izena + Aipamena + Post@ + Aldiberetu hodeiarekin + Ezarri epemuga eguna + hobetsia + Giltza Sekretua: + Ezer ez + 15 seg + 1 min + 3 min + 5 min + 10 min + 20 min + 40 min + 1 ordu + 2 ordu + 4 ordu + 8 ordu + betirako + DSA + ElGamal + RSA + ECDH + ECDSA + Ireki... + Akatsa + Akatsa: %s + Egiaztatu + Sinatu + Enkriptatu + Egiaztatu + Sar-esaldi okerra. + Ez dago agiri kudeatzaile bateragarririk ezarrita. + Sar-esaldiak ez datoz bat. + Mesedez sartu sar-esaldi bat. + Enkriptaketa simetrikoa. + Zerrenda hau hutsik dago! + Idazkia gakora kopiatu da! + agiria ez da aurkitu + giltzaren neurria gutxienez 512bitekoa izan behar da + algoritmo ezezagun hautapena + ez da post@rik aurkitu + gutxienez nortasun bat behar da + ez da sar-esaldirik behar + ez da sinadura giltzarik eman + osotasun egiaztapen hutsigitea! Datuak aldatuak izan dira! + sar-esaldi okerra + ezin da giltza pribatua atera + NFC gaitua izan behar da! + Beam gaitua izan behar da! + Ez da giltzarik aurkitu! + Sinatu Gabe + Sinadura baliogabea! + Sinatzailea (egiaztatu gabea!) + Sinatzailea + Giltzaren epemuga gaindituta! + Giltza publiko ezezaguna + Enkriptatuta + Enkriptatu Gabea + Erakutsi + Nire giltza: + Eginda. + Ezeztatu + ezeztatzen... + gordetzen... + inportatzen... + esportatzen... + igotzen... + giltza eraikitzen... + RSA giltza berria sortzen... + DSA giltza berria sortzen... + EIGamal giltza berria sortzen... + ECDSA giltza berria sortzen... + ECDH giltza berria sortzen... + erabiltzaile ID-ak gehitzen... + erabiltzaile ezaugarriak gehitzen... + lehen erabiltzaile ID-a aldatzen... + azpigiltzak aldatzen... + azpigiltzak gehitzen... + sar-esaldia aldatzen... + + giltza esportatzen + giltzak esportatzen + + sinadura giltza ateratzen... + giltza ateratzen... + jarioak gertatzen... + datuak enkriptatzen... + datuak dekriptatzen... + sinadura gertatzen... + sinadura sortzen... + sinadura prozesatzen... + sinadura egiaztatzen... + sinatzen... + egiaztagiritzen... + datuak irakurtzen... + giltza bilatzen... + datuak deskonprimitzen... + osotasuna egiaztatzen... + \'%s\' segurtasunez ezabatzen... + giltzak ezabatzen... + Bilatu Izena, Post@... bidez + 512 + 768 + 1024 + 1536 + 2048 + 3072 + 4096 + 8192 + Norbere giltza neurria + Idatzi norbere giltza luzera (bitetan): + NIST P-256 + NIST P-384 + NIST P-521 + azkarra + oso astiroa + Hasi + SEG + NFC Beam + Aldaketa-oharra + Honi buruz + Bertsioa: + Giltza-zerbitzaria + Agiria/Gakoa + QR Kodea/NFC + Inportatu hautaturiko giltzak + Eskaneatu QR Kodea + Jarri zure kamera QR Kodearen gainean! + Xehetasunak + , kontuz oharrekin + Ez dago ezer inportatzeko. + Inportazioa ezeztatuta. + Ez dago ezer ezabatzeko + Ezabapen eragiketa ezeztaturik. + Inportatu Giltza OpenKeychain-rekin + Enkriptatu OpenKeychain-rekin + Dekriptatu OpenKeychain-rekin + Erakutsi argibide aurreratuak + Ezkutatu argibide aurreratuak + Erakutsi ezarpen aurreratuak + Ezkutatu ezarpen aurreratuak + Ez da giltzarik hautatu + Hautatu giltza + Sortu giltza berria kontu honentzat + Gorde + Kontua gorde da + Ezeztatu + Ukatu sarbidea + Abiarazi aplikazioa + Ezabatu kontua + Pakete Izena + Argibide Aurreratuak + Ahalbidetutako Giltzak + Ezarpenak + Kontuaren giltza: + Ez dago konturik app honi erantsita. + Ahalbidetu sarbidea + Ez ahalbidetu sarbidea + Mesedez hautatu giltza bat! + Mesedz berrikusi jasotzaile zerrenda! + Mesedez hautatu jasotzaileak! + Elkarbanatu NFC-rekin + Ez da giltzarik aurkitu! + Erakutsi giltza guztiak + Erakutsi egiaztaturiko giltzak bakarrik + Editatu giltza + Enkriptatu idazkia + agiriak + Eguneratu giltza-zerbitzaritik + Elkarbanatu honekin... + Elkarbanatu NFC gain + Igo giltza-zerbitzarira + Argibide Nagusiak + Elkarbanatu + Azpigiltzak + Egiaztagiriak + Egiaztuta + Nortasun hau zeuk egiaztatua da. + Egiaztatu gabea + Baliogabea + azpigiltza berria + Nire Giltza + Giltzak + Enkriptatu/Dekriptatu + Aplikazioak + Ireki nabigazio marraztzailea + Itxi nabigazio marraztzailea + Nire Giltzak + Idatzi idazkia + berezkoa + ezer ez + Ongi + hutsegitea! + akatsa! + giltza eskuraezina + Barneko akatsa! + Eragiketa ezeztaturik. + Giltzak aztertzen + Datubase eragiketak gertatzen @@ -59,11 +369,14 @@ + + NFC + Ezarpenak diff --git a/OpenKeychain/src/main/res/values-fi/strings.xml b/OpenKeychain/src/main/res/values-fi/strings.xml index 804383637..4313caf15 100644 --- a/OpenKeychain/src/main/res/values-fi/strings.xml +++ b/OpenKeychain/src/main/res/values-fi/strings.xml @@ -5,8 +5,6 @@ Valitse Avaimet Valitse Oma Avain - Salaa Tekstiä - Salaa Tiedostoja Pura Salaus Avaa Avain Lisää aliavain @@ -18,7 +16,6 @@ Jaa sormenjälki... Jaa avain... Jaa tiedosto... - Jaa viesti... Salaa Tiedostoon Pura Tiedostoon Tuo Avaimia @@ -27,7 +24,6 @@ Vie Avaimia Avainta Ei Löydy Lähetä Avainpalvelimelle - Varmenna Identiteetit Avaimen Tiedot Apua Loki @@ -42,20 +38,16 @@ Vakiot Lisäasetukset Salasanavälimuisti - Varmenna Toiminteet Avain - Varmentamiseen käytetty Avaimesi Synkronoi Avain Avainpalvelin Sormenjälki - Varmennettava avain Tiedostot Teksti Varmenteet Pura, todenna ja tallenna tiedosto - Pura ja todenna viesti Salaa ja tallenna tiedosto Salaa ja jaa tiedosto Tallenna @@ -67,7 +59,6 @@ Seuraava Takaisin Etsi avain - Salaa ja jaa viesti Näytä varmennusavain Luo avain Lisää tiedosto(ja) @@ -91,7 +82,6 @@ Vie kaikki avaimet Näytä lisäinformaatio - Viesti Tiedosto Tiedosto(t) Tiedosto: @@ -116,7 +106,6 @@ Salaa salasanalla Välimuistiaika Väliaikaistalleta salasanat aliavaimen mukaan - Viestin pakkaus Tiedoston pakkaus Avainpalvelimet Avaimen ID @@ -136,13 +125,6 @@ ensisijainen <ei nimeä> <ei mitään> - <ei avainta> - voi salata - voi allekirjoittaa - voi varmentaa - ei voi varmentaa - umpeutunut - peruutettu 1 avain %d avainta @@ -172,7 +154,6 @@ ECDH ECDSA Avaa... - Varoitus Virhe Virhe: %s @@ -237,6 +218,7 @@ + diff --git a/OpenKeychain/src/main/res/values-fr/strings.xml b/OpenKeychain/src/main/res/values-fr/strings.xml index 8cc1cc735..f9ef4d41d 100644 --- a/OpenKeychain/src/main/res/values-fr/strings.xml +++ b/OpenKeychain/src/main/res/values-fr/strings.xml @@ -6,8 +6,6 @@ Choisir des clefs Choisir ma clef - Chiffrer un texte - Chiffrer des fichiers Déchiffrer Déverrouiller la clef Ajouter une sous-clef @@ -20,7 +18,6 @@ Partager l\'empreinte avec... Partager la clef avec... Partager le fichier avec... - Partager le message avec... Chiffrer vers un fichier Déchiffrer vers un fichier importer des clefs @@ -29,7 +26,7 @@ Exporter les clefs Clef introuvable Téléverser vers le serveur de clefs - Certifier les identités + Confirmer la clef Détails sur la clef Aide Journal @@ -37,33 +34,34 @@ Échanger des clefs Infos avancées sur les clefs Clefs + Supprimer VOTRE clef \'%s\' ? + Exporter le journal identités Devriez-vous faire confiance à cette clef ? Vérification de preuve - Preuve provenant du nuage + Preuves provenant du nuage Sous-clefs Recherche nuagique Général Valeurs par défaut Avancé Cache de la phrase de passe - Certifier + Confirmer Actions Clef - Votre clef utilisée pour la certification Synchroniser la clef Serveur de clefs Empreinte - Clef à certifier ! Fichiers Texte Certificats Chiffrer Déchiffrer + Expiration actuelle + Nouvelle expiration Déchiffrer, vérifier et enregistrer le fichier - Déchiffrer et enregistrer le message Chiffrer et enregistrer le fichier Chiffrer et partager le fichier Enregistrer @@ -77,7 +75,6 @@ Non Les empreintes correspondent Rechercher la clef - Chiffrer et partager le message Voir la clef de certification Créer la clef Ajouter un/des fichier(s) @@ -104,9 +101,9 @@ Rechercher dans le nuage Exporter toutes les clefs Afficher les infos avancées - Vérifier par comparaison d\'empreintes + Confirmer par une comparaison d\'empreinte + Exporter le journal - Message Fichier Fichier(s) Fichier : @@ -131,7 +128,6 @@ Chiffrer avec une phrase de passe Durée du cache Mettre en cache une phrase de passe par sous-clef - Compression des messages Compression des fichiers Serveurs de clefs ID de clef @@ -149,15 +145,9 @@ Définir une date d\'expiration (Le premier serveur de clefs listé est préféré) préféré + Activer la compression <aucun nom> <aucune> - <pas de clef> - peut chiffrer - peut signer - peut certifier - ne peut pas certifier - expiré - révoquée 1 clef %d clefs @@ -187,7 +177,6 @@ ECDH ECDSA Ouvrir... - Avertissement Erreur Erreur : %s @@ -206,19 +195,17 @@ Saisir le NIP pour accéder à la Yubikey pour « %s » Tenez la YubiKey contre le dos de votre appareil. Êtes-vous certain de vouloir supprimer\n%s? - Supprimé avec succès. Choisir d\'abord un fichier. Signé et/ou chiffré avec succès. Signé et/ou chiffré vers le presse-papiers avec succès. - Saisir la phrase de passe deux fois. Choisir au moins une clef de chiffrement. Choisir au moins une clef de chiffrement ou de signature. Veuillez spécifier vers quel fichier chiffrer.\nAVERTISSEMENT ! Le fichier sera écrasé s\'il existe. Veuillez spécifier vers quel fichier déchiffrer.\nAVERTISSEMENT : le fichier sera écrasé s\'il existe. Veuillez spécifier vers quel fichier exporter.\nAVERTISSEMENT ! Le fichier sera écrasé s\'il existe. - Voulez-vous vraiment supprimer toutes les clefs publiques choisies ?\nCeci est irréversible ! - Voulez-vous vraiment supprimer la clef SECRÈTE « %s » ?\nCeci est irréversible ! - Voulez-vous vraiment supprimer la clef publique « %s » ?\nCeci est irréversible ! + Voulez-vous vraiment supprimer toutes les clefs sélectionnées ? + Après suppression vous ne pourrez plus lire les messages chiffrés avec cette clef et vous perdrez toutes les confirmations de clefs faites avec elle ! + Supprimer la clef \'%s\' ? Importer aussi les clefs secrètes Vous venez de rencontrer un bogue connu d\'Android. Veuillez réinstaller OpenKeychain si voulez relier vos contacts avec des clefs. 1 clef exportée avec succès. @@ -226,6 +213,7 @@ Aucune clef exportée. Note : seules les sous-clefs prennent en charge ElGamal. Clef %08X introuvable. + Veuillez spécifier le fichier vers lequel exporter. \nAVERTISSEMENT : le fichier sera écrasé s\'il existe. %d mauvaise clef secrète ignorée. Vous avez peut-être exporté avec l\'option\n --export-secret-subkeys\nAssurez-vous d\'exporter plutôt avec\n --export-secret-keys. %d mauvaises clefs secrètes ignorées. Vous avez peut-être exporté avec l\'option\n --export-secret-subkeys\nAssurez-vous d\'exporter plutôt avec\n --export-secret-keys. @@ -234,13 +222,12 @@ Clef envoyée par Beam NFC avec succès | La clef a été copié vers le presse-papiers ! L\'empreinte a été copié vers le presse-papiers ! - Veuillez choisir une clef à utiliser pour la certification ! + Veuillez sélectionner une clef à utiliser pour la confirmation ! La clef est trop grosse pour être partagée ainsi ! La texte a été copié vers le presse-papiers ! - échec lors de la suppression de « %s » fichier introuvable aucune clefs secrète adéquate n\'a été trouvée le stockage externe n\'est pas prêt @@ -327,8 +314,7 @@ consolider : enregistrement dans le cache... consolider : réimportation... - Nom/courriel/ID de clef... - Nom/Courriel/Preuve/Clef... + Chercher par nom, adresse courriel... 512 768 @@ -356,7 +342,7 @@ Commencer FAQ - Toile de confiance + Confirmation de la clef NFC Beam Journal des changements À propos de @@ -416,8 +402,8 @@ %1$d key%2$s supprimées avec succès. - Erreur lors de la suppression d\'une key%2$s. - Erreur lors de la suppression de %1$d clefs. + Erreur de suppression d\'une key%2$s. + Erreur de suppression de %1$d clefs. Rien à supprimer. Opération de suppression annulée. @@ -487,7 +473,7 @@ Modifier la clef Chiffrer un texte fichiers - Certifier les identités + Confirmer la clef Mise à jour depuis le serveur de clefs Partager avec... Partager par la NFC @@ -506,15 +492,15 @@ Invalide Quelque chose ne va pas avec cette identité ! - Vous avez déjà certifié cette clef ! + Vous avez déjà confirmé cette clef ! C\'est une de vos clefs ! - Cette clef n\'est ni révoquée, ni expirée.\nVous ne l\'avez pas certifiée, mais vous pourriez décider de lui faire confiance. + Cette clef n\'est ni révoquée, ni expirée.\nVous ne l\'avez pas confirmée, mais vous pourriez décider de lui faire confiance. Cette clef a été révoquée par son propriétaire. Vous ne devriez pas lui faire confiance. Cette clef est expirée. Vous ne devriez pas lui faire confiance. - Vous pourriez l\'utiliser pour déchiffrer un ancien message datant de la période de validité de la clef. Aucune preuve de fiabilité provenant du nuage pour cette clef. Lancer la recherche Keybase.io offre des « preuves » affirmant que le propriétaire de cette clef : + Note : les preuves de keybase.io sont une fonction expérimentales d\'OpenKeychain. Nous vous encourageons à balayer des codes QR ou à échanger des clefs via NFC en plus de les confirmer. Publie vers Twitter en tant que Est connu sur GitHub en tant que @@ -526,11 +512,13 @@ Type de preuve inconnu Malheureusement cette preuve ne peut pas être vérifiée. Problème inconnu avec le vérificateur de preuve + Problème avec la preuve L\'empreinte de clef ne correspondant pas à celle du billet de preuve Échec lors de la récupération de l\'enregistrement DNS TXT Aucun vérificateur de preuve trouvé pour Le billet de preuve déchiffré ne correspond pas à la valeur attendue - Cette preuve a été vérifié ! + Récupération de la preuve + Cette preuve a été vérifiée ! Un billet récupéré de pour le domaine @@ -566,23 +554,21 @@ Ajouter au moins une identité ! Ajouter au moins une sous-clef ! - Téléverser la clef vers le serveur de clefs + Synchroniser avec le nuage Ce champ est exigé Les phrases de passe ne correspondent pas Vous avez saisie l\'identité suivante : Créer une clef peut prendre du temps, prenez donc un café en attendant... (3 sous-clefs, RSA, 4096 bits) (configuration personnalisée de la clef) - Saisissez votre nom complet, votre adresse courriel et choisissez votre phrase de passe. - Nom complet, p. ex. Marc-Olivier Lagacé Changer la configuration de la clef Révoquée : la clef ne doit plus être utilisée ! Expirée : le contact doit prolonger la validité de la clef ! Expirée : vous pouvez prolonger la validité de la clef en la modifiant ! Ma clef - Clef vérifiée - Non vérifiée : balayez le code QR pour vérifier la clef ! + Confirmer la clef + Non vérifiée : balayez le code QR pour confirmer la clef ! Clefs Chiffrer/déchiffrer @@ -685,7 +671,7 @@ Traitement de l\'attribut utilisateur de type image Traitement de l\'attribut utilisateur de type inconnu Mauvais certificat rencontré ! - Erreur lors du traitement du certificat ! + Erreur de traitement du certificat ! A déjà un certificat non-révocable, étape ignorée. Le certificat est plus ancien que le précédent, étape ignorée. Le certificat est plus récent, remplacement du précédent. @@ -703,7 +689,7 @@ Importation de la clef secrète %s Erreur de base de données! Traitement des sous-clefs secrètes - Erreur lors de l\'encodage du trousseau + Erreur d\'encodage du trousseau Fusion des données importées dans le trousseau public existant Fusion des données importées dans le trousseau public existant Fusion des données du trousseau public dans les auto-certificats @@ -725,7 +711,7 @@ La sous-clef %s se présente deux fois dans le trousseau. Le trousseau est mal formé, pas d\'importation ! Traitement de la clef maîtresse Suppression du certificat de clef maîtresse de type inconnu (%s) - Suppression du certificat clef maîtresse ayant le drapeau « local » + Suppression du certificat de clef maîtresse ayant le drapeau « local » Suppression du mauvais certificat de clef maîtresse Suppression du certificat de révocation du trousseau ayant une estampille temporelle dans le futur Suppression du certificat de l\'ID utilisateur en mauvaise position @@ -774,7 +760,7 @@ Aucun auto-certificat valide trouvé pour l\'ID utilisateur « %s », qui est maintenant enlevé du trousseau Suppression de l\'ID utilisateur invalide « %s » Suppression de l\'ID d\'utilisateur en double « %s ». Le trousseau en contenait deux. Ceci pourrait entraîner des certificats manquants ! - L\'ID utilisateur ne passe pas le test UTF-8 ! + L\'ID d\'utilisateur ne passe pas le test UTF-8 ! Traitement de l\'attribut utilisateur de type JPEG Traitement de l\'attribut utilisateur de type inconnu Suppression du mauvais auto-certificat pour l\'attribut utilisateur @@ -789,11 +775,11 @@ Suppression de l\'auto-certificat périmé pour l\'attribut utilisateur Aucun auto-certificat valide trouvé pour l\'attribut utilisateur, qui est maintenant enlevé du trousseau Suppression de l\'attribut utilisateur invalide - L\'ID utilisateur ne passe pas le test UTF-8 ! + L\'ID d\'utilisateur ne passe pas le test UTF-8 ! Une nouvelle sous-clef publique a été trouvée, mais la génération de sous-clef secrète factice n\'est pas prise en charge ! Il a été tenté de fusionner des trousseaux avec des empreintes différentes ! - Erreur fatale lors de l\'encodage de la signature ! + Erreur fatale d\'encodage de la signature ! Fusion vers le trousseau public %s Fusion vers le trousseau secret %s Ajout de la nouvelle sous-clef %s @@ -854,7 +840,7 @@ L\'attribut utilisateur ne peut pas être vide ! Ajout de l\'attribut utilisateur de type image Ajout de l\'attribut utilisateur de type inconnu - Erreur lors du déverrouillage du trousseau ! + Erreur de déverrouillage du trousseau ! Déverrouillage du trousseau Consolidation de la base de données @@ -868,11 +854,11 @@ Fin de la phase critique Suppression du fichier de cache du trousseau public Suppression du fichier de cache du trousseau secret - Erreur lors de l\'ouverture de la base de données ! - Erreur E/S lors de l\'écriture des clefs publiques vers le cache ! - Erreur E/S lors de l\'écriture des clefs secrètes vers le cache ! - Erreur lors de la réimportation des clefs publiques ! - Erreur lors de la réimportation des clefs secrètes ! + Erreur d\'ouverture de la base de données ! + Erreur E/S d\'écriture des clefs publiques vers le cache ! + Erreur E/S d\'écriture des clefs secrètes vers le cache ! + Erreur de réimportation des clefs publiques ! + Erreur de réimportation des clefs secrètes ! Reprise du processus de consolidation Consolidation récursive ignorée Reprise du processus de consolidation à partir d\'un état inconnu @@ -915,15 +901,16 @@ Nom de fichier : %s Type MIME : %s Taille de fichier : %s - La taille de fichier est inconnue + La taille du fichier est inconnue Heure de modification : %s La vérification de la signature n\'est PAS CORRECTE ! + Algorithme de hachage non pris en charge et potentiellement non sécurisé ! Vérification des données de signature La vérification de la signature OK Enregistrement des données de signature pour plus tard Traitement des données de texte en clair - Erreur lors du déverrouillage de la clef, phrase de passe erronée ! - Erreur inconnue lors du déverrouillage de la clef ! + Erreur de déverrouillage de la clef, phrase de passe erronée ! + Erreur inconnue de déverrouillage de la clef ! Erreur de vérification de l\'intégrité ! Vérification de l\'intégrité absente ! Ceci peut arriver car l\'application n\'est pas à jour, ou à cause d\'une attaque par mise à niveau inférieur. Aucune donnée de signature valide trouvée ! @@ -933,7 +920,7 @@ Une exception OpenPGP a été rencontrée durant l\'opération ! Vérification de l\'intégrité OK ! Seules les métadonnées ont été demandées, déchiffrement ignoré - OK + Déchiffrement/Vérification terminé Utilisation de la phrase de passe du cache Jeton NFC exigé, demande de saisie à l\'utilisateur... Phrase de passe exigée, demande de saisie à l\'utilisateur... @@ -945,15 +932,25 @@ Des données traînantes chiffrées symétriquement ont été rencontrées Des données traînantes de type inconnu ont été rencontrées Déverrouillage de la clef secrète + Un algorithme de chiffrement possiblement non sécurisé à été utilisé ! Lancement de la vérification de la signature + Aucune liste de signatures dans les données littérales signées + Le message n\'est pas signé avec la bonne clef + Nom de fichier : %s + Type MIME : %s + Heure de modification : %s + Taille de fichier : %s + Vérification des données de signature + Erreur de vérification de l\'intégrité ! + OK Début de l\'opération de signature/chiffrement Traitement de l\'entrée du tableau de bytes Traitement de l\'entrée de l\'URI Aucune entrée donnée ! - Erreur lors de l\'ouverture de l\'URI en lecture ! - Erreur lors de l\'ouverture de l\'URI en écriture ! + Erreur d\'ouverture de l\'URI en lecture ! + Erreur d\'ouverture de l\'URI en écriture ! Plus d\'entrées spécifiées que de sorties ! Ceci est probablement une erreur de programmation, veuillez remplir un rapport de bogue ! Il reste des sorties mais pas d\'entrée. Ceci est probablement une erreur de programmation, veuillez remplir un rapport de bogue ! Opération de signature/chiffrement réussie @@ -966,12 +963,12 @@ L’algorithme de hachage demandé n\'est pas pris en charge par cette clef ! Une exception E/S a été rencontrée durant l\'opération ! La clef de signature choisie ne peut pas signer les données ! - Erreur lors de la récupération de la clef de signature ! + Erreur de récupération de la clef de signature ! Erreur de données NFC ! Aucune phrase de passe fournie ! Erreur interne OpenPGP ! Une exception de signature OpenPGP a été rencontrée ! - Erreur inconnue lors du déverrouillage de la clef ! + Erreur inconnue de déverrouillage de la clef ! Chiffrement pour la clef : %s Clef manquante pour le chiffrement : %s Clef erronée pour le chiffrement : %s @@ -985,15 +982,10 @@ Début de l\'opération de signature et/ou de chiffrement Préparation du chiffrement symétrique Générations des certifications - Certification de tous les ID utilisateurs pour la clef %s - - Certification d\'un ID utilisateur pour la clef %2$s - Certification de %1$d ID utilisateurs pour la clef %2$s - Un auto-certificat ne peut pas être délivré ainsi ! Clef maîtresse introuvable ! Aucune clef certifiée ! - Erreur lors du déverrouillage de la clef maîtresse ! + Erreur de déverrouillage de la clef maîtresse ! La certification par la NFC n\'est pas (encore) prise en charge ! Certification des trousseaux Récupération de la clef maîtresse de certification @@ -1009,7 +1001,7 @@ Importation de la clef Importation de %d clefs - Erreur lors du décodage du trousseau récupéré ! + Erreur de décodage du trousseau récupéré ! La clef n\'a pas pu être récupérée ! (problèmes réseau ?) Récupération depuis keybase.io : %s Impossible de récupérer la clef à partir de la base de clefs ! @@ -1031,13 +1023,13 @@ Exportation de la clef publique %s Exportation de la clef secrète %s Aucun nom de fichier spécifié ! - Erreur lors de l\'ouverture du fichier ! + Erreur d\'ouverture du fichier ! Aucun URI spécifié ! - Erreur lors de l\'ouverture du flux de l\'URI ! + Erreur d\'ouverture du flux de l\'URI ! Le stockage n\'est pas prêt pour l\'écriture ! Erreur de base de données ! Erreur d\'entrée/sortie ! - Erreur lors du prétraitement des données de la clef ! + Erreur de prétraitement des données de la clef ! Opération d\'exportation réussie ! Rien à supprimer ! Les clefs secrètes ne peuvent être supprimées qu\'individuellement ! @@ -1068,6 +1060,12 @@ La requête de recherche de clef a retourné trop de candidats. Veuillez raffiner votre requête ! Soit aucune clef ou trop de clefs ont été trouvées. Veuillez améliorer votre requête ! Une erreur est survenue lors de la recherche de clefs. + + Exportation du journal + Erreur d\'ouverture du fichier ! + Aucun nom de fichier spécifié ! + Erreur E/S d\'écriture vers le fichier ! + Journal exporté avec succès ! Cliquer ici pour effacer les phrases de passe mises en cache OpenKeychain a mis en cache %d phrases de passe @@ -1087,14 +1085,13 @@ Aucun certificat pour cette clef Seuls les auto-certificats et les certificats validés créés avec vos clefs sont affichés ici. Identités pour - Les clefs que vous importez contiennent des « identités » : des noms et des adresses courriel. Choisissez exactement ceux qui correspondent à ce que vous attendiez. + Les clefs que vous importez contiennent des « identités » : des noms et des adresses courriel. Pour la confirmation, choisissez exactement celles qui correspondent à ce que vous attendiez. Comparez l\'empreinte affichée, caractère par caractère, à celle affichée sur l\'appareil de l\'autre personne. Est-ce que les empreintes affichées correspondent ? Raison de la révocation - État de vérification Type Clef introuvable ! - Erreur lors du traitement de la clef ! + Erreur de traitement de la clef ! dépouillée dévier vers la carte intelligente/la NFC aucune phrase de passe diff --git a/OpenKeychain/src/main/res/values-is/strings.xml b/OpenKeychain/src/main/res/values-is/strings.xml index 233347bd3..518b80f47 100644 --- a/OpenKeychain/src/main/res/values-is/strings.xml +++ b/OpenKeychain/src/main/res/values-is/strings.xml @@ -59,6 +59,7 @@ + diff --git a/OpenKeychain/src/main/res/values-it/strings.xml b/OpenKeychain/src/main/res/values-it/strings.xml index f55d16dfc..24c8a5657 100644 --- a/OpenKeychain/src/main/res/values-it/strings.xml +++ b/OpenKeychain/src/main/res/values-it/strings.xml @@ -6,8 +6,6 @@ Seleziona chiavi Seleziona la tua chiave - Testo cifrato - File cifrati Decodifica Aggiungi Sottochiave Modifica Chiave @@ -17,7 +15,6 @@ Condivi impronta con... Condividi chiave con... Condividi file con... - Condividi messaggio con... Codifica File Decodifica File Importa Chiavi @@ -26,7 +23,6 @@ Esporta Chiavi Chiave Non Trovata Carica sul Server delle Chiavi - Certifica identità Dettagli Chiave Aiuto Registro @@ -41,20 +37,16 @@ Predefiniti Avanzato Cache Frase di Accesso - Certifica Azioni Chiave - La Tua Chiave usata per la certificazione Sincronizza Chiave Server delle Chiavi Impronta - Chiave da certificare Files Testo Certificati Decodifica, verifica e salva su file - Decodifica e verifica messaggio Codifica e salva file Codifica e condividi file Salva @@ -66,7 +58,6 @@ Prossimo Precedente Chiave di ricerca - Codifica e condividi messaggio Mostra chiave di certificazione Crea chiave Aggiungi file(s) @@ -89,7 +80,6 @@ Esporta tutte le chiavi Mostra informazioni avanzate - Messaggio File File(s) File: @@ -112,7 +102,6 @@ Algoritmo Hash Cifra con password Memorizza password tramite sottochiave - Compressione messaggio Compressione file Server Chiavi ID Chiave @@ -132,13 +121,6 @@ preferiti <nessun nome> <nessuno> - <nessuna chiave> - puo\' codificare - puo\' firmare - può certificare - non può certificare - scaduto - revocato 1 chiave %d chiavi @@ -168,7 +150,6 @@ ECDH ECDSA Apri... - Attenzione Errore Errore: %s @@ -184,11 +165,9 @@ Codifica Simmetrica. Inserisci la frase di accesso per \'%s\' Sei sicuro di voler eliminare\n%s? - Eliminato correttamente. Seleziona un file prima. Firmato e/o codificato con successo. Firmato e/o codificato con successo negli appunti. - Inserisci la frase di accesso due volte. Seleziona almeno una chiave di codifica. Seleziona almeno una chiave di codifica o di firma. Perfavore specifica il file da codificare. @@ -197,12 +176,6 @@ ATTENZIONE: Il file sara\' sovrascritto se esistente. ATTENZIONE: Il file sara\' sovrascritto se esistente. Perfavore specifica il file da esportare. ATTENZIONE: Il file sara\' sovrascritto se esistente. - Vuoi veramente eliminare tutte le chiavi pubbliche selezionate? -Non potrai annullare! - Vuoi veramente eliminare la chiave PRIVATA \'%s\'? -Non potrai annullare! - Vuoi veramente eliminare la chiave pubblica \'%s\'? -Non potrai annullare! Esporta anche chiave segreta Hai riscontrato un bug noto con Android. Si prega di reinstallare OpenKeychain se vuoi collegare i tuoi contatti con le chiavi. 1 chiave esportata correttamente. @@ -218,13 +191,11 @@ Non potrai annullare! Chiave correttamente inviata tramite NFC Beam! Chiave copiata negli appunti! Impronta copiata negli appunti! - Per favore seleziona una chiave per la certificazione! Chiave troppo grande per essere condivisa in questo modo! Il testo è stato copiato sulla lavagna! - Cancellazione di \'%s\' fallita File non trovato nessuna chiave privata adatta trovata memoria esterna non pronta @@ -305,8 +276,6 @@ Non potrai annullare! consolidazione: salvataggio della cache... consolidazione: reimportazione... - Nome/Email/ID Chiave... - Nome/Email/Certificato/Chiave... 512 768 @@ -334,7 +303,6 @@ Non potrai annullare! Inizia FAQ - Rete di Fiducia NFC Beam Novita\' Info @@ -432,7 +400,6 @@ Permetti accesso?\n\nATTENZIONE: Se non sai perche\' questo schermata e\' appars Modifica chiave Codifica Testo documenti - Certifica identità Aggiorna dal server delle chiavi Condividi con... Condividi tramite NFC @@ -475,15 +442,12 @@ Permetti accesso?\n\nATTENZIONE: Se non sai perche\' questo schermata e\' appars Aggiungi almeno una identità Aggiungi almeno una sottochiave! - Carica chiave nel server delle chiavi Questo campo è necessario Le frasi di accesso non coincidono. Hai inserito la seguente identità: La creazione di una chiave richiede un po\' di tempo, prendi un caffè nel frattempo... (3 sottochiavi, RSA, 4096 bit) (personalizza la configurazione della chiave) - Inserisci Nome Completo, Email e scegli una Frase di Accesso. - Nome completo, es: Mario Rossi Cambia configurazione della chiave @@ -597,7 +561,6 @@ Permetti accesso?\n\nATTENZIONE: Se non sai perche\' questo schermata e\' appars Elaborazione sottochiave %s Rimozione certificato vincolante di sottochiave non valido Rimozione certificato vincolante di sottochiave corrotto - Rimozione certificato di sottochiave con caratteristica \"locale\" ID emittente vincolante della sottochiave non corrispondente Rimozione certificato vincolante della sottochiave con marca temporale futura Tipo di certificato della sottochiave sconosciuto: %s @@ -695,14 +658,12 @@ Permetti accesso?\n\nATTENZIONE: Se non sai perche\' questo schermata e\' appars Nome file: %s Tipo MIME: %s - Dimensione file: %s Ultima modifica: %s Controllo firma NON OK! Verifica dati firma Controllo firma OK Errore di controllo di integrità! Controllo integrità OK! - OK Uso della frase di accesso dalla cache Inizio operazione di decodifica... Dati simmetrici non permessi, proseguo... @@ -720,6 +681,7 @@ Permetti accesso?\n\nATTENZIONE: Se non sai perche\' questo schermata e\' appars parte del file caricato e\' un oggetto OpenPGP valido, ma non una chave OpenPGP parti del file caricato sono oggetti OpenPGP validi, ma non chavi OpenPGP + Clicca per rimuovere la frase di accesso nella cache OpenKeychain ha memorizzato nella cache %d frasi di accesso @@ -737,7 +699,6 @@ Permetti accesso?\n\nATTENZIONE: Se non sai perche\' questo schermata e\' appars <sconosciuto> Nessun certificato per questa chiave Ragione della Revoca - Stato Verifica Tipo Chiave non trovata! Errore di elaborazione chiave! diff --git a/OpenKeychain/src/main/res/values-ja/strings.xml b/OpenKeychain/src/main/res/values-ja/strings.xml index ef817f398..8a4778989 100644 --- a/OpenKeychain/src/main/res/values-ja/strings.xml +++ b/OpenKeychain/src/main/res/values-ja/strings.xml @@ -6,8 +6,6 @@ 鍵を選択 あなたの鍵を選択 - テキスト暗号化 - ファイル暗号化 復号化 鍵のロック解除 副鍵の追加 @@ -20,7 +18,6 @@ ...で指紋の共有 ...で鍵の共有 ...でファイルの共有 - ...でメッセージを共有 暗号化してファイルに 復号化してファイルに 鍵のインポート @@ -29,7 +26,7 @@ 複数鍵のエクスポート 鍵が見当りません 鍵サーバへアップロード - ユーザID検証 + 鍵の確認 鍵の概要 ヘルプ ログ @@ -37,30 +34,34 @@ 鍵の交換 鍵の詳細情報 + あなたの鍵 \'%s\' を削除しますか? + エクスポートログ ユーザID + この鍵を信頼しますか? + 証明検証 + クラウドからの証明 副鍵 クラウド検索 一般 デフォルト 拡張 パスフレーズキャッシュ - 検証 + 確認 アクション - あなたの鍵を証明に利用します 鍵の同期 鍵サーバ 指紋 - 鍵は検証されています。 ファイル テキスト 証明 暗号化 復号化 + 現在の期限 + 新しい期限 復号化と検証、そしてファイルの保存 - メッセージの復号化と検証 暗号化してファイルを保存 暗号化してファイルを共有 保存 @@ -72,9 +73,8 @@ 戻る なし - 指紋が一致 + 指紋一致 鍵検出 - 暗号化してメッセージを共有 検証した鍵を見る 鍵の生成 ファイルの追加 @@ -101,9 +101,9 @@ クラウドを検索 すべての鍵のエクスポート 詳細情報を表示 - 指紋比較による検証 + 指紋比較による確認 + エクスポートログ - メッセージ ファイル ファイル ファイル: @@ -128,7 +128,6 @@ パスフレーズで暗号化 キャッシュ時間 副鍵のパスフレーズをキャッシュ - メッセージの圧縮 ファイルの圧縮 鍵サーバ 鍵ID @@ -146,15 +145,9 @@ 期限日時を設定 (リストの最初の鍵サーバが優先されます) 優先 + 圧縮を有効 <名前なし> <無し> - <鍵無し> - 暗号化可能 - 署名可能 - 検証可能 - 検証不能 - 期限切れ - 破棄 %d個の鍵 @@ -182,7 +175,6 @@ ECDH ECDSA 開く... - 注意 エラー エラー: %s @@ -202,11 +194,9 @@ あなたのデバイスの背面にYubiKeyを固定してください。 %s を削除してもかまいませんか? - 削除に成功しました。 最初にファイルを選択してください。 署名/暗号化に成功しました。 クリップボードの中身の署名/暗号化に成功しました。 - もう一度パスフレーズを入れてください。 少なくとも1つの暗号化鍵を選択して下さい。 少なくとも1つの暗号化鍵か署名鍵を選択して下さい。 どのファイルを暗号化するか決めてください。 @@ -215,12 +205,7 @@ 注意: 既存のファイルがあると上書きされます。 どのファイルをエクスポートするか決めてください。 注意: 既存のファイルがあると上書きされます。 - 選択したすべての公開鍵を削除して本当に良いのですか? -これは元に戻せません! - 秘密鍵\'%s\'を本当に削除してもよいですか? -これは元に戻せません! - 公開鍵\'%s\'を本当に削除してもよいですか? -これは元に戻せません! + 鍵 \'%s\' を削除しますか? 秘密鍵もエクスポートします あなたは既知のAndroidのバグに遭遇しました。もし鍵とあなたの連絡先をリンクさせたいならOpenKeychainを再インストールしてください。 1つの鍵をエクスポートしました。 @@ -239,13 +224,12 @@ NFCビームで鍵を送信しました! 鍵はクリップボードにコピーされました! 指紋はクリップボードにコピーされました! - 検証に使う鍵を選択して下さい! + 確認に使う鍵を選択して下さい! この共有方法では鍵が大きすぎます! 鍵はクリップボードにコピーされました! - \'%s\' の削除に失敗 ファイルが見付かりません 組になっている秘密鍵が見付かりません 外部ストレージが準備できていません @@ -331,8 +315,7 @@ 統合: キャッシュへ保存… 統合: 再インポート中… - 名前/メール/鍵ID... - 名前/メール/証明/鍵... + 名前、Email...で検索 512 768 @@ -360,7 +343,7 @@ 開始 FAQ - 信頼の輪 + 鍵確認 NFC Beam Changelog これについて @@ -482,7 +465,7 @@ 鍵の編集 テキスト暗号化 ファイル - ユーザID検証 + 鍵の確認 鍵サーバからの更新 ...で共有 NFC越しに共有 @@ -491,6 +474,7 @@ 共有 副鍵 証明 + Keybase.io 破棄 このIDは鍵の所有者により破棄されています。もう適正ではありません。 検証済み @@ -500,7 +484,28 @@ 無効 このIDではなにかしら問題があります! + 鍵はすでに確認されています! + これはあなたの鍵の内のひとつです! + このIDは鍵の所有者により破棄されています。信頼することはできません。 + この鍵は期限切れです。信頼することができません。 + 検索開始 + Twitterへ以下のIDで投稿 + Githubでは以下のIDで知られています + 制御下にあるドメイン名(たち) + Redditへ以下のIDで投稿 + Coinbaseでは以下で知られています + Hacker Newsへ以下のIDで投稿 + 不明な確認種別 + 確認に問題があります + DNS TXTレコードの確認に失敗 + この証明は検証されています! + ツィート + DNSのTXTレコード + テキストファイル + gist + JSONファイル + 検証 パスフレーズの変更 ユーザIDの追加 @@ -525,23 +530,19 @@ 最低でも1つのユーザIDを追加! 最低でも1つの副鍵を追加! - 鍵サーバへアップロード + クラウドとの同期 このフィールドは必須です パスフレーズが一致しない あたなが入力したIDは以下です: しばらくの間鍵を生成しています、その間はコーヒーでもどうぞ.... (3副鍵、RSA, 4096 bit) (個別の鍵設定) - フルネーム、Eメールアドレスを入力そしてパスフレーズを選択してください。 - フルネーム、例えば Max Mustermann 鍵の設定変更 破棄: 鍵はもう使われません! - 期限切れ: この連絡先は鍵の妥当性を拡張する必要があります! 期限切れ: 編集で鍵の妥当性を拡張することができます! 自分の鍵 - 検証済みの鍵 - 未検証: QRコードをスキャンして鍵を検証! + 確認済みの鍵 暗号化/復号化 @@ -693,7 +694,6 @@ 副鍵 %s の処理中 証明が付随する無効な副鍵を破棄中 証明が付随する問題のある副鍵を破棄中 - ローカルフラグ付きの証明が付随する副鍵を破棄中 副鍵の発行者のIDと付随するIDがミスマッチ 未来にタイムスタンプがある証明が付随する副鍵を破棄中 不明な検証のタイプ: %sの副鍵 @@ -728,7 +728,7 @@ ユーザID \'%s\' の正常な自己署名が見付かりませんでした、鍵輪から除去しました 無効なユーザID \'%s\' を破棄中 重複したユーザID \'%s\' を削除中。IDを二つもっています。この結果は署名を失っているためかもしれません! - ユーザIDがUTF-8で検証できませんでした! + ユーザIDをUTF-8として検証できませんでした! JPEG型のユーザー属性の処理中 不明な型のユーザー属性の処理中 ユーザ属性で問題のある自己検証を破棄中 @@ -743,7 +743,7 @@ ユーザ属性の期限の切れた破棄証明を破棄中 ユーザー属性として正常な自己署名が見付かりませんでした、鍵輪から除去しました 無効なユーザ属性を破棄中 - ユーザIDがUTF-8として検証できませんでした! + ユーザIDをUTF-8として検証できませんでした! 新しい公開鍵の副鍵を見付けました、しかしダミー生成の秘密鍵の副鍵でサポートされません。! 指紋が異なる鍵輪をマージしようとしています! @@ -870,6 +870,7 @@ ファイルサイズが不明 更新日時: %s 署名の確認がOKではありません! + サポート外かつセキュアでない可能性があるハッシュアルゴリズム! 署名データの検証中 署名の確認はOKです 後程署名データを保存します @@ -885,7 +886,7 @@ 操作中にPGP例外に当たりました! 完全性チェックOK! メタデータだけが要求され、暗号化をスキップしました - OK + 復号化/検証完了 キャッシュからパスフレーズを利用します。 NFCトークンが必要、ユーザー入力を要求中... パスフレーズが必要、ユーザー入力を要求中... @@ -897,14 +898,21 @@ 追跡で遭遇、対称暗号化されたデータ 追跡で未知のタイプのデータに遭遇 秘密鍵のロック解除 + セキュアでない可能性がある暗号化アルゴリズムが利用されています! + 署名の確認開始 + 署名済み固定データにペイロードがありません + ファイル名: %s + MIME種別: %s + 更新日時: %s + ファイルサイズ: %s + 署名データの検証中 + 完全性チェックエラー! + OK 署名/暗号化操作を開始します バイト配列からの入力処理中 - URIからの入力処理中 入力がありません! - 読み出すためにURIを開く時にエラー! - 書き込むためにURIを開く時にエラー! 不明な出力以上の入力過多です! これはプログラミングのエラーで、バグレポートの提出をお願いします! 得られた出力が入力から乖離している。これはプログラミングのエラーで、バグレポートの提出をお願いします! 署名/暗号化操作に成功! @@ -936,10 +944,6 @@ 署名/暗号化操作を開始します 対称暗号の準備 検証の生成中 - 鍵 %s ですべてのユーザIDの検証中 - - 鍵 %2$s で %1$d 個のユーザIDの検証中 - 自己証明書的な発行は行えません! 主鍵が見当りません! 検証できた鍵がない! @@ -1012,6 +1016,12 @@ 鍵検索のクエリが沢山の候補を返しました。クエリを精密化してください! 鍵がまったく無いか、多すぎる鍵が見付かりました。クエリを改善してください! 鍵の検索時にエラーが発生しました。 + + ログのエクスポート + ファイルオープン中のエラー + 指定のファイル名のファイルはありません! + ファイルへの書き込みでI/Oエラー! + ログのエクスポートに成功しました! クリックしてパスフレーズのキャッシュをクリア OpenKeychainは %d のパスフレーズをキャッシュしています @@ -1031,11 +1041,9 @@ この鍵に証明がない あなたの検証された自己証明とあなたの鍵で生成された証明がここに表示されます ユーザID - インポートした鍵には\"アイデンティティ\": 名前とメールアドレス を含みます。正確に期待したものと一致しているか認定されているものを選択します。 表示している指紋を、文字対文字で、あなたのパートナーの表示しているものと比較 表示している指紋は一致しましたか? 破棄の理由 - 検証ステータス 種別 鍵が見当りません! 鍵処理中のエラー! diff --git a/OpenKeychain/src/main/res/values-nl/strings.xml b/OpenKeychain/src/main/res/values-nl/strings.xml index f8ee75750..4c1a6a8d1 100644 --- a/OpenKeychain/src/main/res/values-nl/strings.xml +++ b/OpenKeychain/src/main/res/values-nl/strings.xml @@ -6,8 +6,8 @@ Selecteer sleutels Selecteer je sleutel - Versleutel tekst - Versleutel bestanden + Versleutelen + Versleutelen Ontsleutelen Ontgrendel sleutel Voeg subsleutel toe @@ -20,7 +20,7 @@ Vingerafdruk delen met… Sleutel delen met… Bestand delen met… - Bericht delen met… + Tekst delen met… Versleutelen naar bestand Ontsleutelen naar bestand Sleutels importeren @@ -29,7 +29,7 @@ Sleutels exporteren Sleutel niet gevonden Upload naar sleutelserver - Certifieer Identiteiten + Sleutel bevestigen Sleutel Details Help Log @@ -37,35 +37,38 @@ Sleutels uitwisselen Geavanceerde sleutelinfo Sleutels + JOUW sleutel \'%s\' verwijderen? + Log exporteren Identiteiten Zou je deze sleutel vertrouwen? Bewijs van verificatie - Bewijs van de cloud + Bewijzen van de cloud Subsleutels Cloud zoeken Algemeen Standaard Geavanceerd Wachtwoordcache - Certificeren + Bevestigen Acties Sleutel - Uw Sleutel die u gebruikt voor certificatie Synchroniseer sleutel Sleutelserver Vingerafdruk - Sleutel om te certificeren Bestanden Tekst Certificaten Versleutelen Ontsleutelen + Huidige verloopdatum + Nieuwe verloopdatum Decodeer, verifiëer en sla bestand op - Decodeer en verifiëer bericht + Tekst ontsleutelen en verifiëren Codeer en sla bestanden op Bestand versleutelen en delen + Bestand versleutelen en opslaan Opslaan Annuleren Verwijderen @@ -77,7 +80,8 @@ Nee Vingerafdrukken komen overeen Opzoeksleutel - Bericht versleutelen en delen + Tekst versleutelen en opslaan + Tekst versleutelen en kopiëren Toon certificatiesleutel Sleutel aanmaken Bestand(en) toevoegen @@ -104,9 +108,10 @@ Zoeken Alle sleutels exporteren Geavanceerde info tonen - Verifiëren door vingerafdrukken te vergelijken + Bevestigen door vingerafdrukken te vergelijken + Log exporteren - Bericht + Tekst Bestand Bestand(en) Bestand: @@ -114,6 +119,7 @@ Wachtwoord Bezig met ontgrendelen… Herhaal wachtwoord + Wachtwoord weergeven Algoritme Bestand ASCII Armor ASCII Armor aanzetten @@ -131,7 +137,7 @@ Versleutelen met wachtwoord Cachetijd Cache wachtwoorden per subsleutel - Berichtscompressie + Tekstcompressie Bestandscompressie Sleutelservers Sleutel-id @@ -149,15 +155,9 @@ Bepaal verloopdatum (Voorkeur gaat uit naar de eerste keyserver in de lijst) voorkeur + Compressie aanzetten <no naam> <geen> - <geen sleutel> - versleutelbaar - ondertekenbaar - kan certificeren - kan niet certificeren - verlopen - ingetrokken 1 sleutel %d sleutels @@ -187,7 +187,6 @@ ECDH ECDSA Openen… - Waarschuwing Fout Fout: %s @@ -206,19 +205,18 @@ Voer PIN in om toegang te verkrijgen tot YubiKey voor \'%s\' Hou YubiKey tegen de achterkant van je toestel Ben je zeker dat je %s wil verwijderen? - Succesvol verwijderd. + \'%s\' is verwijderd. Selecteer eerst een bestand. Succesvol gesigneerd en/of gecodeerd. Succesvol gesigneerd en/of gecodeerd naar klembord. - Voer het wachtwoord tweemaal in. Selecteer ten minste één versleutelingssleutel. Selecter ten minste één versleutelings-/ondertekeningssleutel. Gelieve aan te geven naar welk bestand versleuteld moet worden.\nWAARSCHUWING: Als het bestand al bestaat, zal het overschreven worden. Gelieve aan te geven naar welk bestand ontcijferd moet worden.\nWAARSCHUWING: Als het bestand al bestaat, zal het overschreven worden. Gelieve aan te geven naar welk bestand geëxporteerd moet worden.\nWAARSCHUWING: Als het bestand al bestaat, zal het overschreven worden. - Ben je zeker dat je alle geselecteerde publieke sleutels wil verwijderen?\nJe kan dit niet ongedaan maken! - Ben je zeker dat je de GEHEIME sleutel \'%s\' wil verwijderen?\nJe kan dit niet ongedaan maken! - Ben je zeker dat je de publieke sleutel \'%s\' wil verwijderen?\nJe kan dit niet ongedaan maken! + Ben je zeker dat je alle geselecteerde sleutels wil verwijderen? + Na verwijderen zal je niet langer berichten versleuteld met deze sleutel kunnen lezen, en alle sleutelbevestigingen die ermee gedaan zijn verliezen! + Sleutel \'%s\' verwijderen? Exporteer ook geheime sleutels Je bent een gekende Android-bug tegengekomen. Gelieve OpenKeychain opnieuw te installeren als je je contacten met sleutels wil verbinden. 1 sleutel succesvol geëxporteerd. @@ -226,6 +224,7 @@ Geen sleutels geëxporteerd. Opmerking: alleen subsleutels ondersteunen ElGamal. Kan de sleutel %08X niet vinden. + Gelieve aan te geven naar welk bestand geëxporteerd moet worden.\nWAARSCHUWING: Als het bestand al bestaat, zal het overschreven worden. %d slechte geheime sleutel genegeerd. Misschien heb je geëxporteerd met de optie\n--export-secret-subkeys\nZorg ervoor dat je in plaats daarvan met --export-secret-keys exporteert. %d slechte geheime sleutels genegeerd. Misschien heb je geëxporteerd met de optie\n--export-secret-subkeys\nZorg ervoor dat je in plaats daarvan met --export-secret-keys exporteert. @@ -234,13 +233,13 @@ Succesvol sleutel verstuurd met NFC Beam! Sleutel is gekopieerd naar het klembord! Sleutel is gekopieerd naar het klembord! - Selecteer een sleutel die gebruikt moet worden voor certificatie! + Gelieve een sleutel te selecteren om te gebruiken voor bevestiging! Sleutel is te groot om op deze manier gedeeld te worden! Tekst is gekopieerd naar klembord! - verwijderen \'%s\' mislukt + Verwijderen van \'%s\' mislukt. Gelieve dit handmatig te doen! bestand niet gevonden geen geschikte privésleutel gevonden externe opslag niet gereed @@ -327,8 +326,7 @@ consolidatie: bezig met opslaan naar cache… consolidatie: bezig met opnieuw importeren… - Naam/E-mail/Sleutel ID… - Name/E-mail/Bewijs/Sleutel… + Zoeken via naam, e-mail, ... 512 768 @@ -356,7 +354,7 @@ Beginnen FAQ - Web van Vertrouwen + Sleutelbevestiging NFC Beam Lijst van wijzigingen Over @@ -487,7 +485,7 @@ Sleutel bewerken Versleutel tekst bestanden - Certifiëer identiteiten + Sleutel bevestigen Update van sleutelserver Delen met… Delen over NFC @@ -506,15 +504,15 @@ Ongeldig Er is iets mis met deze identiteit! - Je hebt deze sleutel al gecertificeerd! + Je hebt deze sleutel al bevestigd! Dit is een van jouw sleutels! - Deze sleutel is ingetrokken noch verlopen.\nJe hebt ze niet gecertificeerd, maar je kan kiezen ze te vertrouwen. + Deze sleutel is ingetrokken noch verlopen.\nJe hebt ze niet bevestigd, maar je kan kiezen ze te vertrouwen. Deze sleutel is door de eigenaar ingetrokken. Je zou ze niet moeten vertrouwen. Deze sleutel is verlopen. Je zou ze niet moeten vertrouwen. - Het kan oké zijn deze sleutel te gebruiken om een oud bericht te ontsleutelen van een moment waarop de sleutel nog geldig was. Geen bewijs van de cloud voor de betrouwbaarheid van deze sleutel. Zoeken starten Keybase.io geeft “bewijzen” die stellen dat de eigenaar van deze sleutel: + Let op: Keybase.io-bewijzen zijn een experimentele functie van OpenKeychain. We moedigen je aan QR-codes te scannen of sleutels uit te wisselen via NFC bovenop het bevestigen ervan. Post op Twitter als Bekend is op GitHub als @@ -526,12 +524,12 @@ Onbekend bewijstype Helaas kan dit bewijs niet geverifieerd worden. Niet-herkend probleem met de bewijschecker - Probleem met bewijs van bewijs + Probleem met bewijs Sleutelvingerafdruk komt niet overeen met die in bewijspost DNS TXT record ophalen mislukt Geen bewijschecker gevonden voor Ontsleuteld bewijs komt niet overeen met verwachte waarde - Bezig met ophalen van bewijs van bewijs + Bezig met ophalen van bewijs Dit bewijs is geverifieerd! Een post opgehaald van @@ -568,23 +566,23 @@ Voeg minstens een identiteit toe! Voeg minstens een subsleutel toe! - Upload sleutel naar sleutelserver + Synchroniseren met de cloud Dit veld moet ingevuld worden Wachtwoorden komen niet overeen Je hebt volgende identiteit ingevoerd: Een sleutel aanmaken kan even duren, maak intussen een tasje thee klaar… (3 subsleutels, RSA, 4096 bit) (aangepaste sleutelconfiguratie) - Voer je volledige naam en e-mailadres in, en kies een wachtwoord. - Volledige naam, bv. Max Mustermann Sleutelconfiguratie wijzigen + E-mailadres toevoegen Ingetrokken: sleutel mag niet meer gebruikt worden! - Verlopen: het contact moet de geldigheid van de sleutels verlengen! + Verlopen: het contact moet de geldigheid van de sleutel verlengen! Verlopen: je kan de geldigheid van de sleutels verlengen door ze te bewerken! Mijn sleutel - Geverifieerde sleutels - Niet geverifieerd: scan QR-code om de sleutel te verifiëren! + Bevestigde sleutel + Niet bevestigd: scan QR-code om de sleutel te bevestigen! + <geen> Sleutels Versleutelen/Ontsleutelen @@ -920,6 +918,7 @@ Bestandsgrootte onbekend Wijzigingstijd: %s Ondertekeningscontrole NIET OKÉ! + Niet ondersteund en mogelijk onveilig hash-algoritme! Bezig met verifiëren van ondertekeningsgegevens Ondertekeningscontrole OKÉ Bezig met opslaan van ondertekeningsgegevens voor later @@ -935,7 +934,7 @@ OpenPGP-uitzondering tegengekomen tijdens bewerking! Integriteitscontrole OKÉ! Enkel metadata opgevraagd, ontcijferen wordt overgeslaan - Oké + Ontsleuteling/verificatie voltooid Wachtwoord wordt uit cache gebruikt NFC token vereist, gebruikersinput wordt gevraagd… Wachtwoord vereist, gebruikersinput wordt gevraagd… @@ -947,6 +946,7 @@ Achterlopende, symmetrisch versleutelde gegevens tegengekomen Achterlopende gegevens van onbekend type tegengekomen Bezig met ontgrendelen van geheime sleutel + Mogelijk onveilig versleutelingsalgoritme gebruikt! Ondertekeningscontrole wordt gestart Geen ondertekeningslijst in ondertekende letterlijke gegevens @@ -997,11 +997,14 @@ Ondertekening en/of versleuteling wordt gestart Bezig met voorbereiden van symmetrische versleuteling Bezig met aanmaken van certificaten - Bezig met certificeren van alle gebruikers-ID\'s voor sleutel %s - + Bezig met certificeren van een gebruikers-ID voor sleutel %2$s Bezig met certificeren van %1$d gebruikers-ID\'s voor sleutel %2$s + + Bezig met certificeren van een gebruikersattribuut voor sleutel %2$s + Bezig met certificeren van %1$d gebruikersattributen voor sleutel %2$s + Kan self-certificaat zo niet uitgeven! Hoofdsleutel niet gevonden! Geen sleutels gecertificeerd! @@ -1080,6 +1083,12 @@ Zoekopdracht gaf te veel kandidaten. Gelieve je zoekopdracht te verfijnen! Geen of te veel sleutels werden gevonden. Gelieve je zoekopdracht te verfijnen! Er trad een fout op bij het zoeken naar sleutels. + + Bezig met exporteren van log + Fout bij openen van bestand + Geen bestandsnaam opgegeven! + I/O-fout bij schrijven naar bestand! + Log succesvol geëxporteerd! Klik om de gecachete wachtwoorden te wissen OpenKeychain heeft %d wachtwoorden gecachet @@ -1099,11 +1108,10 @@ Geen certificaten voor deze sleutel Enkel gevalideerde self-certificaten en gevalideerde certificaten gemaakt met jouw sleutels worden hier weergegeven. Identiteiten voor - De sleutels die je importeert bevatten \'identiteiten\': namen en e-mailadressen. Selecteer precies die voor certificatie die overeenkomen met wat je had verwacht. + De sleutels die je importeert bevatten \'identiteiten\': namen en e-mailadressen. Selecteer precies die voor bevestiging die overeenkomen met wat je had verwacht. Vergelijk de weergegeven vingerafdruk, karakter per karakter, met die weergegeven op het toestel van je partner. Komen de weergegeven vingerafdrukken overeen? Intrek Reden - Verificatie Status Type Sleutel niet gevonden! Fout bij verwerken sleutel! diff --git a/OpenKeychain/src/main/res/values-pl/strings.xml b/OpenKeychain/src/main/res/values-pl/strings.xml index 46dd8c313..8c0fc23d2 100644 --- a/OpenKeychain/src/main/res/values-pl/strings.xml +++ b/OpenKeychain/src/main/res/values-pl/strings.xml @@ -6,8 +6,6 @@ Wybierz klucze Wybierz swój klucz - Szyfruj tekst - Szyfruj pliki Odszyfruj Odblokuj klucz Dodaj pod-klucz @@ -20,7 +18,6 @@ Podziel się odciskiem klucza przez... Podziel się kluczem przez... Podziel się plikiem przez... - Podziel się wiadomością przez... Zaszyfruj do pliku Odszyfruj do pliku Importuj klucze @@ -29,7 +26,6 @@ Eksportuj klucze Nie znaleziono klucza Wyślij do serwera kluczy - Certyfikuj tożsamości Szczegóły klucza Pomoc Logi @@ -45,14 +41,11 @@ Domyślne Zaawansowane Pamięć cache hasła - Certyfikuj Działania Klucz - Twój klucz użyty do certyfikacji Synchronizuj Klucz Serwer kluczy Odcisk klucza - Klucz do certyfikacji Pliki Tekst Certyfikaty @@ -60,7 +53,6 @@ Odszyfruj Odszyfruj, weryfikuj i zapisz plik - Odszyfruj i weryfikuj wiadomość Szyfruj i zapisz plik Szyfruj i podziel się plikiem Zapisz @@ -72,7 +64,6 @@ Dalej Wstecz Sprawdź klucz - Szyfruj i podziel się wiadomością Wyświetl klucz certyfikacji Utwórz klucz Dodaj plik(i) @@ -98,7 +89,6 @@ Eksportuj wszystkie klucze Pokaż zaawansowane informacje - Wiadomość Plik Plik(i) Plik: @@ -123,7 +113,6 @@ Szyfruj z hasłem Czas pamięci cache Pamiętaj hasła względem pod-klucza: - Kompresja wiadomości Kompresja pliku Serwery kluczy Identyfikator klucza @@ -143,13 +132,6 @@ preferowany <bez nazwy> <żaden> - <brak klucza> - może szyfrować - może podpisywać - może certyfikować - nie może certyfikować - wygasły - unieważniony 1 klucz %d klucze @@ -181,7 +163,6 @@ ECDH ECDSA Otwórz... - Ostrzeżenie Błąd Błąd: %s @@ -199,19 +180,14 @@ Wpisz PIN dla \'%s\' Trzymaj YubiKey z tyłu Twojego urządzenia. Czy jesteś pewny, że chcesz usunąć\n%s? - Usunięto pomyślnie. Najpierw wskaż plik. Pomyślnie podpisano i/lub zaszyfrowano. Pomyslnie podpisano i/lub zaszyfrowano do schowka. - Podaj hasło dwukrotnie. Wybierz co najmniej jeden klucz szyfrujący. Wybierz co najmniej jeden klucz szyfrujący lub klucz podpisujący. Wskaż, do którego pliku zapisać zaszyfrowane dane.\nOSTRZEŻENIE: Plik zostanie nadpisany, jeżeli istnieje. Wskaż, do którego pliku zapisać odszyfrowane dane.\nOSTRZEŻENIE: Plik zostanie nadpisany, jeżeli istnieje. Wskaż, do którego pliku wyeksportować dane.\nOSTRZEŻENIE: Plik zostanie nadpisany, jeżeli istnieje. - Czy na pewno chcesz usunąć wszystkie zaznaczone klucze publiczne?\nTej operacji nie można cofnąć! - Czy na pewno chcesz usunąć TAJNY klucz \'%s\'?\nNie można cofnąć tej operacji! - Czy na pewno chcesz usunąć klucz publiczny \'%s\'?\nNie można cofnąć tej operacji! Także eksportuj tajne klucze Napotkałeś się na znany błąd w Androidzie. Proszę ponownie zainstalować OpenKeychain jeśli chcesz połączyć kontakty z kluczami. Pomyślnie wyeksportowano 1 klucz. @@ -228,13 +204,11 @@ Pomyślnie wysłano klucz przez NFC Beam! Klucz został skopiowany do schowka! Odcisk klucza został skopiowany do schowka! - Proszę wybrać klucz który będzie użyty do certyfikacji! Klucz ma za duży rozmiar by być udostępniony w ten sposób! Tekst został skopiowany do schowka! - usuwanie \'%s\' zakończone niepowodzeniem plik nie znaleziony nie znaleziono pasującego klucza prywatnego zewnętrzne urządzenie jest niegotowe @@ -316,8 +290,6 @@ usuwanie \'%s\' bezpiecznie… usuwanie kluczy... - Nazwa/Email/ID klucza... - Nazwa/Email/Dowód/Klucz... 512 768 @@ -345,7 +317,6 @@ Początek FAQ - Sieć zaufania NFC Beam Dziennik zmian O programie @@ -490,7 +461,6 @@ OSTRZEŻENIE: Jeżeli nie wiesz, czemu wyświetlił się ten komunikat, nie zezw Edytuj klucz Szyfruj tekst pliki - Certyfikuj tożsamości Aktualizuj z serwera kluczy Podziel się z... Udostępnij używając NFC @@ -533,15 +503,12 @@ OSTRZEŻENIE: Jeżeli nie wiesz, czemu wyświetlił się ten komunikat, nie zezw Dodaj przynajmniej jedną tożsamość! Dodaj przynajmniej jeden pod-klucz! - Wyślij klucz do serwera kluczy Dane pole jest wymagane Hasła nie zgadzają się Wpisałeś następującą tożsamość: Tworzenie klucza może zająć trochę czasu... w międzyczasie idź się napij kawy. (3 pod-klucze, RSA, 4096 bit) (niestandardowa konfiguracja kluczy) - Wpisz swoje imię, adres email oraz wybierz hasło. - Imię i nazwisko, na przykład, Jan Kowalski Zmień klucz konfiguracji @@ -602,13 +569,11 @@ OSTRZEŻENIE: Jeżeli nie wiesz, czemu wyświetlił się ten komunikat, nie zezw Rozpakowywanie skompresowanych danych Nazwa pliku: %s Typ MIME: %s - Rozmiar pliku: %s Czas modyfikacji: %s Sprawdzanie podpisu NIE JEST OK Weryfikowanie danych podpisu... Sprawdzanie podpisu jest OK Tylko metadane były wymagane, pomijanie odszyfrowania - OK Użycie hasła z pamięci cache Hasło wymagane, wymagana reakcja użytkownika... Rozpoczynanie operacji odszyfrowania... @@ -657,6 +622,7 @@ OSTRZEŻENIE: Jeżeli nie wiesz, czemu wyświetlił się ten komunikat, nie zezw Część wczytanego pliku to poprawne obiekty OpenPGP, ale nie są kluczami OpenPGP Część wczytanego pliku to poprawne obiekty OpenPGP, ale nie są kluczami OpenPGP + Kliknij, aby wyczyścić zapamiętane hasła OpenKeychain zapamiętał %d haseł @@ -675,7 +641,6 @@ OSTRZEŻENIE: Jeżeli nie wiesz, czemu wyświetlił się ten komunikat, nie zezw Nie ma certyfikatów dla tego klucza Tożsamości dla Powód odwołania - Stan weryfikacji Typ Nie znaleziono klucza! Błąd przy przetwarzaniu klucza! diff --git a/OpenKeychain/src/main/res/values-pt/strings.xml b/OpenKeychain/src/main/res/values-pt/strings.xml index 233347bd3..518b80f47 100644 --- a/OpenKeychain/src/main/res/values-pt/strings.xml +++ b/OpenKeychain/src/main/res/values-pt/strings.xml @@ -59,6 +59,7 @@ + diff --git a/OpenKeychain/src/main/res/values-ro/strings.xml b/OpenKeychain/src/main/res/values-ro/strings.xml index 233347bd3..518b80f47 100644 --- a/OpenKeychain/src/main/res/values-ro/strings.xml +++ b/OpenKeychain/src/main/res/values-ro/strings.xml @@ -59,6 +59,7 @@ + diff --git a/OpenKeychain/src/main/res/values-ru/strings.xml b/OpenKeychain/src/main/res/values-ru/strings.xml index 211433d26..f6658ded0 100644 --- a/OpenKeychain/src/main/res/values-ru/strings.xml +++ b/OpenKeychain/src/main/res/values-ru/strings.xml @@ -6,8 +6,6 @@ Выберите ключи Выберите Ваш ключ - Зашифровать текст - Зашифровать файлы Расшифровать Разблокировать ключ Добавить доп. ключ @@ -20,7 +18,6 @@ Отправить отпечаток... Отправить ключ... Отправить файл... - Отправить сообщение... Зашифровать в файл Расшифровать в файл Импорт ключей @@ -29,7 +26,6 @@ Экспорт ключей Ключ не найден Загрузить на сервер ключей - Сертифицировать Сведения о ключе Помощь Журнал @@ -39,28 +35,29 @@ Ключи Идентификаторы + Должны ли Вы доверять этому ключу? + Подтвердить верификацию + Подтвердить из облака Доп. ключи Облачный поиск Приложение Алгоритмы Дополнительно Кэш пароля - Удостоверить Действия Ключ - Ваш ключ для сертификации Синхронизировать ключ Сервер ключей Отпечаток ключа - Сертифицируемый ключ Файлы Текст Сертификаты Зашифровать Расшифровать + Текущий срок годности + Новый срок годности Расшифровать, проверить и сохранить файл - Расшифровать и проверить сообщение Зашифровать и сохранить файл Зашифровать и отправить файл Сохранить @@ -74,7 +71,6 @@ Нет Отпечатки совпадают Найти ключ - Зашифровать и отправить сообщение Просмотр ключа Создать ключ Добавить файл(ы) @@ -101,9 +97,7 @@ Поиск в облаке Экспорт всех ключей Подробные данные - Сверить отпечатки - Сообщение Файл Файл(ы) Файл: @@ -128,7 +122,6 @@ Зашифровать паролем Время хранения в кэше Кэшировать пароли по доп. ключу - Сжимать сообщение Сжатие файла Серверы ключей ID ключа @@ -148,13 +141,6 @@ предпочитаемый <нет имени> <нет> - <нет ключа> - шифрование - подпись - сертификация - не для сертификации - просрочен - отозван 1 ключ %d ключей @@ -186,7 +172,6 @@ ECDH ECDSA Открыть... - Внимание Ошибка Ошибка: %s @@ -208,19 +193,14 @@ \'%s\' Держите YubiKey возле задней части вашего устройства. Вы уверены, что хотите удалить\n%s? - Удалено. Сначала выберите файл. Успешно подписано и/или зашифровано. Успешно подписано и/или зашифровано в буфер обмена. - Дважды введите пароль. Укажите хотя бы один ключ. Выберите хотя бы один ключ для шифрования или подписи. Пожалуйста, выберите файл для шифрования.\nВНИМАНИЕ! Файл будет перезаписан если он уже существует. Пожалуйста, выберите файл для расшифровки.\nВНИМАНИЕ! Файл будет перезаписан если он уже существует. Пожалуйста, выберите файл для экспорта.\nВНИМАНИЕ! Файл будет перезаписан если он уже существует. - Вы уверены, что хотите удалить ВСЕ выбранные Публичные ключи?\nЭто действие нельзя отменить! - Вы уверены, что хотите удалить СЕКРЕТНЫЙ ключ \'%s\'?\nЭто действие нельзя отменить! - Вы правда хотите удалить публичный ключ \'%s\'?\nЭто действие нельзя отменить! Экспортировать секретные ключи Вы столкнулись с багом Андроид. Пожалуйста, переустановите OpenKeychain чтобы связать ваши контакты и ключи. Успешный экспорт 1 ключа. @@ -232,13 +212,11 @@ Ключ успешно передан через NFC! Ключ скопирован в буфер обмена! Отпечаток ключа скопирован в буфер обмена! - Выберите ключ, используемый для сертификации! Ключ слишком большой для этого способа передачи! Тест скопирован в буфер обмена! - ошибка удаления \'%s\' файл не найден нет подходящего секретного ключа внешняя память не готова @@ -326,8 +304,7 @@ объединение: сохранение в кэш... объединение: реимпорт... - Имя/Email/ID ключа… - Имя/Email/Проверка/Ключ... + Искать через Имя, Email... 512 768 @@ -355,7 +332,6 @@ Начать ЧаВо - Сеть доверия (WoT) NFC Beam Изменения О программе @@ -440,7 +416,6 @@ Изменить ключ Зашифровать текст файлы - Сертифицировать Обновить с сервера ключей Отправить... Отправить через NFC @@ -449,6 +424,7 @@ Отправить... Доп. ключи Сертификация + Keybase.io Аннулировано Этот идентификатор отозван владельцем ключа. Он больше недействителен. Сертифицировано @@ -458,7 +434,24 @@ Недействительно Что-то не так с идентификатором! + Это один из ваших ключей! + Этот ключ отозван владельцем. Вы не должны доверять ему. + У этого ключа истек срок годности. Вы не должны доверять ему. + Начать поиск + Отправить в Твиттер как + Это известно на GitHub как + Управлять доменным именем(именами) + Опубликовать на Reddit как + Опубликовать на Hacker News как + Неизвестный тип доказательства + К сожалению это доказательство не может быть верифицировано. + Неопознанная проблема с проверкой доказательства + Проблема с доказательством + Отпечаток ключа не совпадает с таковым в доказательной записи. + Не найдено проверки доказательства для + Расшифрованная доказательная запись не соответствует ожидаемому значению + JSON file Изменить пароль Добавить идентификатор @@ -483,23 +476,17 @@ Добавьте хотя бы один идентификатор! Добавьте хотя бы один доп. ключ! - Загрузить ключ на сервер Это обязательне поле Пароли не совпадают. Вы указали следующие данные: Создание ключа займет некоторое время, можете пока выпить чашечку кофе... (3 доп. ключа, RSA, 4096 bit) (произвольная конфигурация ключа) - Укажите полное имя, адрес почты и придумайте надежный пароль. - Полное имя, напр. Иван Хлестаков Изменить конфигурацию ключа Аннулирован: Ключ не должен использоваться когда-либо в будущем! - Срок годности истёк: Контакт должен продлить срок! Срок годности истёк: Вы можете продлить срок, изменив ключ! Мой ключ - Подтвержденный ключ - Достоверность: Сканируйте QR код для проверки ключа! Ключи Зашифровать/Расшифровать @@ -630,19 +617,16 @@ Доп. ключ %s найден дважды в связке. Связка некорректна, не импортируется! Подготовка основного ключа Удаление сертификата основного ключа неизвестного типа (%s) - Удаление сертификата основного ключа с \"локальным\" флагом Удаление плохого сертификата основного ключа Удаление сертификата аннулирования ключа с отметкой времени, находящейся в будущем Удаление сертификата ID в некорректном положении Удаление плохого сертификата основного ключа - Удаление сертификата основного ключа с \"локальным\" флагом Удаление лишнего сертификата аннулирования ключа Удаление лишнего сертификата обозначения Удаление пустого сертификата обозначения Обработка доп. ключа %s Удаление неверного сертификата связывания доп. ключа Удаление плохого сертификата связывания доп. ключа - Удаление сертификата связывания доп. ключа с \"локальным\" флагом Несоответствие id издателя связывания доп. ключа Удаление сертификата связывания доп. ключа с отметкой времени, находящейся в будущем Неизвестный тип сертификата доп. ключа: %s @@ -671,7 +655,6 @@ Нет допустимого самостоятельного сертификата для ID \'%s\', удаление из связки Удаление неверного ID \'%s\' Удаление повторяющегося ID \'%s\'. Связка содержит их два. Это может привести к отсутствию сертификатов! - ID пользователя не соответствует UTF-8! Обработка атрибута пользователя типа JPEG Обработка атрибута пользователя неизвестного типа Удаление плохого самостоятельного сертификата для атрибута пользователя @@ -686,7 +669,6 @@ Удаление устаревшего сертификата аннулирования для атрибута пользователя Нет допустимого самостоятельного сертификата для атрибута пользователя, удаление из связки Удаление неверного атрибута пользователя - ID пользователя не соответствует UTF-8! Найден новый публичный доп. ключ, но фиктивное создание секретного доп. ключа не поддерживается! Попытка объединить связки с различными отпечатками! @@ -738,28 +720,47 @@ Консолидация базы данных Консолидация началась но база не кэширована! Это программная ошибка, пожалуйста, сообщите об этом. + Ошибка открытия базы данных! + Ключ не найден! Ключ не найден! Редактирование NFC ключей (еще) не поддерживается! Ключ не найден! - OK Разблокировка секретного ключа + Проверка подписи данных + ОК + Начало операции подписи/шифровки + Обработка ввода из массива байт + Обработка ввода из URI + Входных данных не получено! + Ошибка при открытии URI для чтения! + Ошибка при открытии URI для записи! + Входов больше, чем выходов! Скорее всего это программная ошибка, пожалуйста сообщите нам об этом! + Операция подписи/шифрования успешна! + Подготовка публичных ключей для шифрования + Подписание пустого текста не поддерживается! Подготовка сжатия Шифрование данных Неправильный пароль! + Запрашиваемый алгоритм хеширования не поддерживается этим ключом! + Обнаружена исключительная ситуация ввода\вывода во время выполнения операции! + Выбранным ключом подписи нельзя подписать данные! + Ошибка при выборке ключа подписи! Ошибка данных NFC! + Парольных фраз не найдено! Внутренняя ошибка OpenPGP! Сохранение связки Разблокировка основного ключа Ключ не найден! Создание сертификата не удалось! Ключ успешно загружен на сервер + Проверка отпечатка успешна Ошибка открытия файла! Ошибка базы данных! Ошибка ввода/вывода! @@ -770,6 +771,7 @@ части загруженного файла содержат данные OpenPGP, но это не ключ части загруженного файла содержат данные OpenPGP, но это не ключ + Кэшированные пароли: Очистить кэш @@ -786,7 +788,6 @@ <неизв.> Этот ключ не сертифицирован Причина отзыва - Статус верификации Тип Ключ не найден! Ошибка обработки ключа! diff --git a/OpenKeychain/src/main/res/values-sl/strings.xml b/OpenKeychain/src/main/res/values-sl/strings.xml index 5d6581bfc..06f14a483 100644 --- a/OpenKeychain/src/main/res/values-sl/strings.xml +++ b/OpenKeychain/src/main/res/values-sl/strings.xml @@ -6,19 +6,18 @@ Izberi ključe Izberi zasebni ključ - Šifriraj besedilo - Šifriraj datoteko Dešifriraj Odkleni ključ Dodaj podključ Uredi ključ + Nastavitve Nastavitve iskanja v oblaku Aplikacije + Strežniki javnih ključev Spremeni geslo Deli prstni odtis z... Deli ključ z... Deli datoteko z... - Deli sporočilo z... Šifriraj v datoteko Dešifriraj v datoteko Uvozi ključe @@ -27,33 +26,35 @@ Izvozi ključe Ključ ni bil najden Naloži na strežnik - Overi identiteto + Potrdi ključ Podrobnosti o ključu Pomoč Dnevnik Ustvari kluč Izmenjava ključev Napredne informacije o ključu + Ključi + Izbrišem VAŠ ključ \'%s\'? Identitete + Ali zaupate temu ključu? Podključi Iskanje v oblaku Splošno Privzeto Napredno - Overjanje + Potrdi Ravnanja Ključ - Vaš ključ, uporabljan za overitev Strežnik Prstni odtis - Ključi za overjanje Datoteke Besedilo Certifikati + Šifriraj + Dešifriraj Dešifriraj, preveri in shrani - Dešifriraj in preveri sporočilo Šifriraj in shrani datoteko Šifriraj in deli datoteko Shrani @@ -65,7 +66,6 @@ Naprej Nazaj Išči ključ - Šifriraj in deli sporočilo Poglej ključ za overjanje Ustvari ključ Dodaj datoteko @@ -86,7 +86,6 @@ Izvozi vse ključe Prikaži dodatne informacije - Sporočilo Datoteka Datoteke Datoteka: @@ -106,7 +105,6 @@ Šifrirni algoritem Zgostitveni algoritem Šifriranje z geslom - Stiskanje sporočil Stiskanje datotek Strežniki ID ključa @@ -123,13 +121,6 @@ Določi datum poteka veljavnosti <brez imena> <nič> - <brez ključa> - lahko šifrira - lahko podpisuje - lahko overovi - ne more overoviti - potečen - preklican 1 ključ %d ključa @@ -163,7 +154,6 @@ ECDH ECDSA Odpri... - Opozorilo Napaka Napaka: %s @@ -179,11 +169,9 @@ Simetrično šifriranje. Vnesite geslo za \'%s\' Ste prepričani, da želite izbrisati\n%s? - Uspešno izbrisano. Najprej izberite datoteko. Uspešno podpisano in/ali šifrirano. Uspešno podpisano in/ali šifrirano ter poslano v odložišče. - Dvakrat vnesite geslo. Izberite vsaj en šifrirni ključ. Vnesite vsaj en šifrirni ključ ali ključ za podpisovanje. Določite datoteko, v katero želite šifrirati vsebino.\nPOZOR: če datoteka že obstaja, bo prepisana. @@ -198,13 +186,11 @@ Ključ uspešno poslan preko NFC Beam! Ključ je bil prekopiran v odložišče! Prstni odtis je bil prekopiran v odložišče! - Izberite ključ, ki ga boste uporabljali za overjanje! Ključ je prevelik za delitev na ta način! Besedilo je bilo prekopirano v odložišče! - izbris \'%s\' ni uspel ne najdem datoteke ne najdem ustreznega zasebnega ključa zunanja shramba ni na voljo @@ -279,8 +265,6 @@ varno brišem \'%s\'… brisanje ključev... - Ime/e-pošta/ID ključa - Ime/E-pošta/Dokaz/Ključ... 512 768 @@ -308,7 +292,6 @@ Start Pogosta vprašanja - Omrežje zaupanja NFC Beam Dnevnik sprememb O aplikaciji @@ -368,7 +351,6 @@ Uredi ključ Šifriraj besedilo datoteke - Overi identitete Posodobi s strežnika Deli z... Deli preko NFC @@ -392,10 +374,8 @@ Izberite dejanje! - Naloži ključ na strežnik ključev To polje je obvezno Gesli se ne ujemata - Polno ime, npr. Janez Vzorec Ključi @@ -445,7 +425,6 @@ Obdelujem podključ %s Umikam neveljaven certifikat za povezovanje podključev Umikam slab certifikat za povezovanje podključev - Umikam certifikat za povezovanje podključev z oznako \"lokalno\" Umikam certifikat za povezovanje podključev z časovno znamko v prihodnosti @@ -469,6 +448,7 @@ Deli naložene datoteke so veljavni objekti OpenPGP a niso ključi. Deli naložene datoteke so veljavni objekti OpenPGP a niso ključi. + Kliknite za izbris zapomnjenih gesel OpenKeychain pomni gesla: %d @@ -486,7 +466,6 @@ <neznan> Ni potrdil za ta ključ Razlog za preklic - Status preverjanja Vrsta Ključ ni bil najden! Napaka pri obdelavi ključa! diff --git a/OpenKeychain/src/main/res/values-sv/strings.xml b/OpenKeychain/src/main/res/values-sv/strings.xml index d22eea22a..e74a2104f 100644 --- a/OpenKeychain/src/main/res/values-sv/strings.xml +++ b/OpenKeychain/src/main/res/values-sv/strings.xml @@ -6,8 +6,6 @@ Välj nycklar Välj din nyckel - Kryptera text - Kryptera filer Dekryptera Lås upp nyckel Lägg till undernyckel @@ -20,7 +18,6 @@ Dela fingeravtryck med… Dela nyckel med… Dela fil med… - Dela meddelande med… Kryptera till fil Dekryptera till fil Importera nycklar @@ -29,7 +26,6 @@ Exportera nycklar Nyckel hittades inte Ladda upp till nyckelserver - Certifiera identiteter Nyckelinformation Hjälp Logg @@ -45,14 +41,11 @@ Förval Avancerat Cache för lösenordsfras - Certifiera Åtgärder Nyckel - Din nyckel för att certifiera Synkronisera nyckel Nyckelserver Fingeravtryck - Nyckel att certifiera Filer Text Certifikat @@ -60,7 +53,6 @@ Dekryptera Dekryptera, verifiera och spara fil - Dekryptera och verifiera meddelande Kryptera och spara fil Kryptera och dela fil Spara @@ -72,7 +64,6 @@ Nästa Föregående Sök efter nyckel - Kryptera och dela meddelande Visa nyckel för certifiering Skapa nyckel Lägg till fil(er) @@ -99,7 +90,6 @@ Exportera alla nycklar Visa avancerad information - Meddelande Fil Fil(er) Fil: @@ -124,7 +114,6 @@ Kryptera med lösenordsfras Tid i cache Cacha lösenordsfraser efter undernyckel - Meddelandekompression Filkompression Nyckelservrar Nyckel-ID @@ -143,13 +132,6 @@ föredraget <inget namn> <ingen> - <ingen nyckel> - kan kryptera - kan signera - kan certifiera - kan inte certifiera - utgången - återkallad 1 nyckel %d nycklar @@ -179,7 +161,6 @@ ECDH ECDSA Öppna… - Varning Fel Fel: %s @@ -198,19 +179,14 @@ Ange PIN för att få åtkomst till YubiKey för \'%s\' Håll YubiKey mot baksidan av din enhet. Vill du verkligen radera\n%s? - Raderades. Välj en fil först. Signerades och/eller krypterades. Signerades och/eller krypterades till urklipp. - Ange lösenordsfrasen två gånger. Välj åtminstone en krypteringsnyckel. Välj åtminstone en krypterings- eller signeringsnyckel. Ange vilken fil som du vill kryptera till.\nVARNING: Om filen redan finns kommer den att skrivas över. Ange vilken fil som du vill dekryptera till.\nVARNING: Om filen redan finns kommer den att skrivas över. Ange vilken fil som du vill exportera till.\nVARNING: Om filen redan finns kommer den att skrivas över. - Vill du verkligen radera alla markerade publika nycklar?\nDu kan inte ångra detta! - Vill du verkligen radera den PRIVATA nyckeln \'%s\'?\nDu kan inte ångra detta! - Vill du verkligen radera den publika nyckeln \'%s\'?\nDu kan inte ångra detta! Exportera även privata nycklar Du stötte på en känd bugg hos Android. Installera om OpenKeychain om du vill koppla ihop dina kontaker med nycklar. Exporterade 1 nyckel. @@ -226,13 +202,11 @@ Skickade nyckel med NFC Beam! Nyckel har kopierats till urklipp! Fingeravtryck har kopierats till urklipp! - Välj en nyckel att använda för certifiering! Nyckeln är för stor för att dela på detta sätt! Text har kopierats till urklipp! - det gick inte att radera \'%s\' fil hittades inte ingen passande privat nyckel hittades extern lagring inte redo @@ -317,8 +291,6 @@ konsolidera: sparar till cache… konsolidera: återimporterar… - Namn/e-post/nyckel-ID… - Namn/e-post/bevis/nyckel… 512 768 @@ -345,7 +317,6 @@ väldigt långsam Vanliga frågor - Tillitsnät NFC Beam Ändringslogg Om @@ -476,7 +447,6 @@ Redigera nyckel Kryptera text filer - Certifiera identiteter Uppdatera från nyckelserver Dela med… Dela via NFC @@ -514,15 +484,12 @@ Lägg till åtminstone en identitet! Lägg till åtminstone en undernyckel! - Ladda upp nyckel till nyckelserver Detta fält krävs Lösenordsfraser stämmer inte överens Du angav följande identitet: Att skapa en nyckel kan ta ett tag, drick en kopp kaffe under tiden… (3 undernycklar, RSA, 4096 bit) (anpassad nyckelkonfiguration) - Ange ditt fullständiga namn, e-postadress och välj en lösenordsfras. - Fullständigt namn, t.ex. Kalle Svensson Ändra nyckelkonfiguration @@ -652,11 +619,9 @@ Den här huvudnyckeln använder en okänd (%s) algoritm! Bearbetar huvudnyckel Tar bort huvudnyckelcertifikat av okänd typ (%s) - Tar bort huvudnyckelcertifikat med flaggan \"local\" Tar bort dåligt huvudnyckelcertifikat Tar bort återkallelsecertifikat för nyckelring med framtida tidstämpel Tar bort dåligt huvudnyckelcertifikat - Tar bort huvudnyckelcertifikat med flaggan \"local\" Tar bort överflödigt återkallelsecertifikat för nyckelring Bearbetar undernyckel %s Inget giltigt certifikat hittades för %s, tar bort från nyckelring @@ -672,7 +637,6 @@ Tar bort föråldrat återkallelsecertifikat för användar-ID \'%s\' Inget giltigt eget-certifikat hittades för användar-ID \'%s\', tar bort från nyckelring Tar bort ogiltigt användar-ID \'%s\' - Användar-ID verifierar inte som UTF-8! Tar bort ogiltigt användarattribut Försökte att slå ihop nyckelringar med olika fingeravtryck! @@ -757,7 +721,6 @@ Packar upp komprimerad data Filnamn: %s MIME-typ: %s - Filstorlek: %s Signaturkontroll INTE OK! Verifierar signaturdata Signaturkontroll OK @@ -766,7 +729,6 @@ Okänt fel vid upplåsning av nyckel Fel vid integritetskontroll! Endast metadata krävdes, hoppar över dekryptering - OK Använder lösenordsfras från cache Förbereder strömmar för dekryptering Startar dekrypteringsoperation… @@ -842,6 +804,7 @@ en del av den inlästa filen är ett giltigt OpenPGP-objekt men inte en OpenPGP-nyckel delar av den inlästa filen är giltiga OpenPGP-objekt men inte OpenPGP-nycklar + Klicka för att rensa cachade lösenordsfraser OpenKeychain har cachat %d lösenordsfraser @@ -860,7 +823,6 @@ Inga certifikat för den här nyckeln Identiteter för Anledning till återkallelse - Verifieringsstatus Typ Nyckel hittades inte! Fel vid bearbetning av nyckel! diff --git a/OpenKeychain/src/main/res/values-tr/strings.xml b/OpenKeychain/src/main/res/values-tr/strings.xml index ee5306cc7..a5ab9ca63 100644 --- a/OpenKeychain/src/main/res/values-tr/strings.xml +++ b/OpenKeychain/src/main/res/values-tr/strings.xml @@ -6,8 +6,6 @@ Anahtarları Seç Anahtarını Seç - Metni Şifrele - Dosyaları Şifrele Şifre çöz Alt anahtar ekle Anahtarı düzenle @@ -17,7 +15,6 @@ Parmak izini paylaş... Anahtarı paylaş... Dosyayı paylaş... - Mesajı paylaş... Dosyaya Şifrele Dosyaya Çözümle Anahtarları Al @@ -26,7 +23,6 @@ Anahtarları Ver Anahtar Bulunamadı Anahtar Sunucusuna Yükle - Kimlikleri Tasdikle Anahtar Detayları Yardım Günlük @@ -41,20 +37,16 @@ Varsayılanlar Gelişmiş Parola Önbelleği - Tasdik et Eylemler Anahtar - Tasdik işlemi için kullanılan anahtarınız Anahtarı Eşitle Anahtar Sunucusu Parmak izi - Tasdik edilecek anahtar Dosyalar Metin Sertifikalar Şifreyi çöz, doğrula ve dosyayı kaydet - Şifreyi çöz ve mesajı doğrula Şifrele ve dosyayı kaydet Şifrele ve dosyayı paylaş Kaydet @@ -66,7 +58,6 @@ İleri Geri Anahtarı ara - Şifrele ve mesajı paylaş Tasdikleme anahtarını görüntüle Anahtar oluştur Dosya(lar) ekle @@ -89,7 +80,6 @@ Tüm anahtarları ver Gelişmiş bilgiyi göster - Mesaj Dosya Dosya(lar) Dosya: @@ -114,7 +104,6 @@ Parolayla şifrele Önbellek zamanı Parolaları altanahtarlara göre önbellekle - Mesaj sıkıştırma Dosya sıkıştırma Anahtar Sunucuları Anahtar ID @@ -134,13 +123,6 @@ tercih edilen <isimsiz> <hiçbiri> - <anahtar yok> - şifreleyebilir - imzalayabilir - tasdikleyebilir - tasdikleyemez - zaman aşımına uğramış - yürürlükten kaldırılmış 1 anahtar %d anahtar @@ -170,7 +152,6 @@ ECDH ECDSA Aç... - Uyarı Hata Hata: %s @@ -187,19 +168,14 @@ \'%s\' için bir parola girin YubiKey\'inizi cihazınızın arkasında tutun. Silmek istediğinize emin misiniz\n%s? - Başarıyla silindi. Önce bir dosya seçin. Başarıyla imzalandı ve/veya şifrelendi. Kopyalama önbelleğine başarıyla imzalandı ve/veya şifrelendi. - Parolanızı iki kere girin. En az bir şifreleme anahtarı seçiniz. En az bir şifreleme anahtarı veya imza anahtarı seçiniz. Lütfen şifreleme sonucu hangi dosyanın oluşturulması gerektiğini belirtin.\nUYARI: Eğer dosya mevcutsa üzerine yazılacaktır. Lütfen şifre çözme sonucu hangi dosyanın oluşturulması gerektiğini belirtin.\nUYARI: Eğer dosya mevcutsa üzerine yazılacaktır. Lütfen dışa aktarım için hangi dosyanın kullanılması gerektiğini belirtin.\nUYARI: Eğer dosya mevcutsa üzerine yazılacaktır. - Seçilen tüm genel anahtarları gerçekten silmek istiyor musunuz?\nBu işlemi geri alamazsınız! - \'%s\' ÖZEL anahtarını gerçekten silmek istiyor musunuz?\nBu işlemi geri alamazsınız! - \'%s\' genel anahtarını gerçekten silmek istiyor musunuz?\nBu işlemi geri alamazsınız! Özel anahtarları da dışa aktar Android için bilinen bir hataya denk geldiniz. Eğer kişilerinizi anahtarlarla eşlemek istiyorsanız, lütfen OpenKeychain uygulamasını yeniden yükleyin. 1 anahtar başarıyla dışa aktarıldı. @@ -215,13 +191,11 @@ Anahtar NFC Beam ile başarıyla gönderildi! Anahtar kopyalama önbelleğine kopyalandı! Parmak izi kopyalama önbelleğine kopyalandı! - Lütfen tasdikleme için kullanılacak bir anahtar seçin! Anahtar bu yolla paylaşılamayacak kadar büyük! Metin kopyalama önbelleğine kopyalandı! - \'%s\' silmesi başarısız oldu dosya bulunamadı uygun bir özel anahtar bulunamadı harici depolama hazır değil @@ -305,8 +279,6 @@ birleştir: önbelleğe kaydediliyor... birleştir: yeniden içe aktarılıyor... - İsim/Eposta/Anahtar ID... - İsim/Eposta/Kanıt/Anahtar... 512 768 @@ -334,7 +306,6 @@ Başla SSS - Güven Ağı NFC Beam Sürüm Notları Hakkında @@ -408,7 +379,6 @@ Anahtarı düzenle Metni şifrele dosyalar - Kimlikleri Tasdikle Anahtar sunucusundan güncelle Şu şekilde paylaş... NFC üzerinden Paylaş @@ -442,15 +412,12 @@ En az bir kimlik ekleyin! En az bir alt anahtar ekleyin! - Anahtarı anahtar sunucusuna yükle Bu alan zorunludur Parolalar eşleşmedi Şu kimliği girdiniz: Anahtar oluşturma biraz zaman alabilir, bu sırada bir çay için... (3 alt anahtar, RSA, 4096 bit) (özel anahtar yapılandırması) - Tam isminizi, e-posta adresinizi girin ve bir parola seçin. - Tam Ad, örneğin: Max Mustermann Anahtar yapılandırmasını değiştir. @@ -508,6 +475,7 @@ Silinecek bir şey yok! Hesap kaydedildi Başarıyla indirildi! + Önbelleği Temizle Parola @@ -522,7 +490,6 @@ <bilinmeyen> Bu anahtar için sertifika yok Yürürlükten Kaldırma Nedeni - Doğrulama Durumu Tip Anahtar bulunamadı! Anahtar işlenirken hata! diff --git a/OpenKeychain/src/main/res/values-uk/strings.xml b/OpenKeychain/src/main/res/values-uk/strings.xml index 365821f4a..ed5012edb 100644 --- a/OpenKeychain/src/main/res/values-uk/strings.xml +++ b/OpenKeychain/src/main/res/values-uk/strings.xml @@ -6,8 +6,6 @@ Вибрати ключі Виберіть ваш ключ - Зашифрувати текст… - Зашифрувати файли Розшифрувати Додати підключ Редагувати ключ @@ -17,7 +15,6 @@ Поділитися відбитком із… Поділитися ключем з… Поширити файл з… - Поширити повідомлення із… Зашифрувати до файлу Розшифрувати до файлу Імпортувати ключі @@ -26,7 +23,6 @@ Експортувати ключі Ключ не знайдено Завантажити на сервер ключів - Сертифікувати сутності Подробиці про ключ Довідка Журнал @@ -41,20 +37,16 @@ Типове Додаткове Кеш парольної фрази - Сертифікувати Дії Ключ - Ваш ключ використаний для сертифікації Синхронізувати ключ Сервер ключів Відбиток - Ключ для сертикації Файли Текст Сертифікати Розшифрувати, перевірити та зберегти файл - Розшифрувати і перевірити повідомлення Шифрувати і зберегти файл Зашифрувати та поширити файл Зберегти @@ -66,7 +58,6 @@ Далі Назад Шукати ключ - Зашифрувати і поширити повідомлення Переглянути ключ сертифікації Створити ключ Додати файл(и) @@ -89,7 +80,6 @@ Експортувати усі ключі Показати додаткову інформацію - Повідомлення Файл Файл(и) Файл: @@ -114,7 +104,6 @@ Зашифрувати з парольною фразою Кешувати час Кешувати парольні фрази за підключем - Стиснення повідомлення Стиснення файлу Сервери ключів ІД ключа @@ -134,13 +123,6 @@ бажаний <без імені> <жоден> - <без ключа> - можна зашифрувати - можна підписати - можна сертифікувати - не можна сертифікувати - закінчився - скасовано 1 ключ %d ключі @@ -172,7 +154,6 @@ ECDH ECDSA Відкрити… - Попередження Помилка Помилка: %s @@ -188,19 +169,14 @@ Симетричне шифрування. Введіть парольну фразу для \'%s\' Ви справді хочете вилучити\n%s? - Успішно вилучено. Виберіть спершу файл. Успішно підписано та/або перевірено. Успішно підписано та/або зашифровано до буфера обміну. - Введіть двічі парольну фразу. Виберіть принаймні один ключ шифрування. Виберіть принаймні один ключ шифрування або ключ підпису. Будь ласка, виберіть файл для шифрування.\nУВАГА! Якщо файл існує, то він буде переписаний. Будь ласка, виберіть файл для розшифрування.\nУВАГА! Якщо файл існує, то він буде переписаний. Будь ласка, виберіть файл для експорту.\nУВАГА! Якщо файл існує, то він буде переписаний. - Ви справді хочете вилучити усі вибрані відкриті ключі?\nВи не зможете це відмінити! - Ви справді хочете вилучити секретний ключ \'%s\'?\nВи не зможете це відмінити! - Ви справді хочете вилучити відкритий ключ \'%s\'?\nВи не зможете це відмінити! Також експортувати секретні ключі Успішно експортовано 1 ключ. Успішно експортовано %d ключів. @@ -219,13 +195,11 @@ Успішно надіслано ключ через промінь NFC! Ключ вже скопійовано у буфер обміну! Відбиток вже скопійовано до буфера обміну! - Будь ласка, виберіть ключ для використання у сертифікації! Ключ надто великий для цього способу поширення! Текст вже скопійовано у буфер обміну! - вилучення \'%s\' провалилося файл не знайдено відповідного секретного ключа не знайдено зовнішній носій не готовий @@ -303,7 +277,6 @@ consolidate: зберігається у кеші… consolidate: повторний імпорт… - Назва/Ел. пошта/ІД ключа… 512 768 @@ -331,7 +304,6 @@ Початок ЧАП - Мережа довіри NFC промінь Журнал змін Про @@ -416,7 +388,6 @@ Редагувати ключ Зашифрувати текст файли - Сертифікувати сутності Оновити із сервера ключів Поділитися із… Поділитися через NFC @@ -445,12 +416,9 @@ Додати хоча б одну сутність! Додати хоча б один підключ! - Відвантажити ключ на сервер ключів Це поле - обов\'язкове Паролі фрази не збігаються Ви ввели наступну сутність: - Введіть ваше повне ім\'я, електронну адреса та оберіть парольну фразу. - Повне ім\'я, наприклад Степан Бандера Ключі @@ -584,10 +552,8 @@ Назва файла: %s Тип MIME: %s - Розмір файла: %s Час зміни: %s Помилка перевірки цілісності! - Гаразд @@ -596,6 +562,7 @@ частини завантаженого файлу є вірним об\'єктом OpenPGP, але не ключем OpenPGP частин завантаженого файлу є вірним об\'єктом OpenPGP, але не ключем OpenPGP + Клацніть для очищення кешованих парольних фраз OpenKeychain має %d кешованих парольних фраз @@ -612,7 +579,6 @@ <невідомо> Немає сертифікатів для цього ключа Причина відхилення - Стан перевірки Тип Ключ не знайдено! Помилка опрацювання ключа! diff --git a/OpenKeychain/src/main/res/values-zh-rTW/strings.xml b/OpenKeychain/src/main/res/values-zh-rTW/strings.xml index b5b57d91f..9b6ef4c91 100644 --- a/OpenKeychain/src/main/res/values-zh-rTW/strings.xml +++ b/OpenKeychain/src/main/res/values-zh-rTW/strings.xml @@ -6,8 +6,6 @@ 選擇金鑰 選擇私鑰 - 加密文字 - 加密檔案 解密 新增子金鑰 編輯金鑰 @@ -17,7 +15,6 @@ 分享指紋… 分享金鑰… 分享檔案… - 分享訊息… 加密到檔案 解密到檔案 匯入金鑰 @@ -26,7 +23,6 @@ 匯出所有金鑰 找不到金鑰 上傳到金鑰伺服器 - 簽署身份 金鑰內容 說明 紀錄 @@ -41,15 +37,12 @@ 預設 進階 口令快取 - 用來簽署的私鑰 金鑰伺服器 指紋 - 要簽署的金鑰 檔案 文字 解密並驗證檔案 - 解密並驗證訊息 加密檔案 加密並分享檔案 儲存 @@ -61,7 +54,6 @@ 下一步 返回 尋找金鑰 - 加密並分享訊息 檢視簽署的金鑰 建立金鑰 加入檔案 @@ -83,7 +75,6 @@ 匯出所有金鑰 顯示進階資訊 - 訊息 檔案 檔案 沒有口令 @@ -100,7 +91,6 @@ 雜湊演算法 使用口令加密 快取時間 - 訊息壓縮 檔案壓縮 金鑰伺服器 金鑰ID @@ -116,12 +106,6 @@ 與雲端同步 指紋 設定效期 - 可以加密 - 可以簽名 - 可以簽署 - 無法簽署 - 已過期 - 已撤銷 密鑰: 15秒 @@ -142,7 +126,6 @@ ECDH ECDSA 開啟… - 警告 錯誤 錯誤: %s @@ -157,32 +140,25 @@ 請輸入口令。 對稱加密。 你確定要刪除\n%s? - 刪除成功。 請先選擇檔案。 成功簽名並/或加密。 成功簽名並/或加密到剪貼簿。 - 重複輸入口令 選擇至少一把加密金鑰。 選擇至少一把加密或簽名金鑰。 請選擇要將檔案加密到哪。\n警告:已經存在的檔案將被覆蓋。 請選擇要將檔案解密到哪。\n警告:已經存在的檔案將被覆蓋。 請選擇要將檔案匯出到哪。\n警告:已經存在的檔案將被覆蓋。 - 你確定要刪除選擇的公鑰?\n此動作無法復原! - 你確定要刪除密鑰\'%s\'?\n此動作無法復原! - 你確定要刪除公鑰\'%s\'?\n此動作無法復原! 一併匯出私鑰 成功匯出 1 把金鑰。 成功匯出 %d 把金鑰。 NFC Beam發送金鑰成功! 金鑰已複製到剪貼簿! 指紋已複製到剪貼簿! - 請選擇要用來認證的金鑰! 金鑰太大無法使用此方式分享! 文字已複製到剪貼簿! - 刪除%s失敗 找不到檔案 沒有適合的私鑰 外部儲存空間尚未就緒 @@ -274,7 +250,6 @@ 快速上手 常見問題 - 信任網 NFC Beam 更新紀錄 關於 @@ -373,11 +348,9 @@ 新增至少一組身分識別! 新增至少一組子金鑰! - 上傳到金鑰伺服器 必填欄位 口令不相符 建立金鑰可能需要一點時間,來杯咖啡吧… - 輸入你的全名、電子郵件,並選擇一組口令。 金鑰 @@ -430,6 +403,7 @@ 下載成功! 在檔案/剪貼簿中找不到有效的金鑰! 查詢金鑰的時候發生錯誤。 + OpenKeychain快取了%d個口令 已快取的口令: diff --git a/OpenKeychain/src/main/res/values-zh/strings.xml b/OpenKeychain/src/main/res/values-zh/strings.xml index 209350332..a255362fb 100644 --- a/OpenKeychain/src/main/res/values-zh/strings.xml +++ b/OpenKeychain/src/main/res/values-zh/strings.xml @@ -3,17 +3,16 @@ + 选择密钥 选择私钥 - 加密文本 - 加密文件 解密 + 添加子密钥 编辑密钥 已注册应用 变更密码 分享签名 分享密钥 分享文件 - 分享信息 加密至文件 解密至文件 导入密钥 @@ -21,7 +20,6 @@ 导出密钥 无法找到密钥 上传到密钥服务器 - 验证密钥 密钥详情 帮助 创建密钥 @@ -32,14 +30,12 @@ 常规 缺省 高级 - 签署密钥 密钥服务器 签名 解密文件 解密文本 解密并验证文件 - 解密并验证信息 加密文件 加密并分享文件 保存 @@ -71,7 +67,6 @@ 导出全部密钥 高级 - 讯息 文件 多个文件 没有密码 @@ -87,11 +82,6 @@ 指纹 有效期 首选服务器 - 可以加密 - 可以签署 - 可以验证 - 过期了 - 已被废弃 其他 @@ -114,7 +104,6 @@ 8小时 永远 打开... - 警告 错误 @@ -124,14 +113,11 @@ 密码不能为空 对称加密 密码 - 删除成功 先选择一个文件 加密并签名成功 加密签名并复制到剪贴板成功 - 输入两次密钥 选择至少一个加密密钥 选择至少一个加密密钥或者签名密钥 - 确认删除公钥 同时导出密钥 成功地导出了1个密钥 成功导出多个密钥 @@ -144,13 +130,11 @@ NFC成功 复制密钥到剪贴板 复制签名到剪贴板 - 选择验证密钥 密钥太长 复制文本到剪贴板 - 文件删除失败 没有找到文件 没有找到私钥 外置存储没有准备好 @@ -236,6 +220,7 @@ + diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index aca3fdfcd..920fbf2a8 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -42,7 +42,7 @@ "Exchange Keys" "Advanced Key Info" "Keys" - "Delete YOUR key \'%s\'?" + "Delete YOUR key '%s'?" "Export Log" -- cgit v1.2.3 From 4ed1bf0ca455cb365b544c31f772d585a52dc3ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Tue, 10 Mar 2015 16:30:00 +0100 Subject: Version 3.2beta2 --- OpenKeychain/src/main/AndroidManifest.xml | 4 ++-- OpenKeychain/src/main/res/raw/help_changelog.html | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/AndroidManifest.xml b/OpenKeychain/src/main/AndroidManifest.xml index bbdbdf259..5d3a106de 100644 --- a/OpenKeychain/src/main/AndroidManifest.xml +++ b/OpenKeychain/src/main/AndroidManifest.xml @@ -3,8 +3,8 @@ xmlns:tools="http://schemas.android.com/tools" package="org.sufficientlysecure.keychain" android:installLocation="auto" - android:versionCode="31201" - android:versionName="3.2beta1"> + android:versionCode="31202" + android:versionName="3.2beta2"> -

        3.2beta1

        +

        3.2beta2

        • Material design
        • +
        • Integration of QR Scanner (New permissions required)
        • Improved key creation wizard
        • Fix missing contacts after sync
        • Requires Android 4
        • -- cgit v1.2.3 From 471f92a9677acdd235b0a3627dc2413b58973557 Mon Sep 17 00:00:00 2001 From: Raoul Date: Tue, 10 Mar 2015 22:06:17 -0400 Subject: Check if NFC is available on device --- .../java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java index c94b29bac..637496c61 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java @@ -25,6 +25,7 @@ import android.annotation.TargetApi; import android.app.Activity; import android.app.ActivityOptions; import android.content.Intent; +import android.content.pm.PackageManager; import android.database.Cursor; import android.graphics.Bitmap; import android.net.Uri; @@ -373,6 +374,11 @@ public class ViewKeyActivity extends BaseActivity implements @TargetApi(Build.VERSION_CODES.LOLLIPOP) private void invokeNfcBeam() { + //Check if device supports NFC + if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC)) { + Toast.makeText(this, R.string.no_nfc_support, Toast.LENGTH_SHORT).show(); + return; + } // Check for available NFC Adapter mNfcAdapter = NfcAdapter.getDefaultAdapter(this); if (mNfcAdapter == null || !mNfcAdapter.isEnabled()) { -- cgit v1.2.3 From 82a2a76a33e72d2a2ad98b06504196dc0c15d496 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Wed, 11 Mar 2015 14:37:23 +0100 Subject: make constant for certify hash algo --- .../keychain/pgp/CanonicalizedSecretKey.java | 15 ++++----------- .../org/sufficientlysecure/keychain/pgp/PgpConstants.java | 2 ++ 2 files changed, 6 insertions(+), 11 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKey.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKey.java index c3fccc789..ab91d7747 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKey.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKey.java @@ -18,9 +18,7 @@ package org.sufficientlysecure.keychain.pgp; -import org.spongycastle.bcpg.HashAlgorithmTags; import org.spongycastle.bcpg.S2K; -import org.spongycastle.bcpg.SymmetricKeyAlgorithmTags; import org.spongycastle.openpgp.PGPException; import org.spongycastle.openpgp.PGPPrivateKey; import org.spongycastle.openpgp.PGPPublicKey; @@ -31,7 +29,6 @@ import org.spongycastle.openpgp.PGPSignatureGenerator; import org.spongycastle.openpgp.PGPSignatureSubpacketGenerator; import org.spongycastle.openpgp.PGPSignatureSubpacketVector; import org.spongycastle.openpgp.PGPUserAttributeSubpacketVector; -import org.spongycastle.openpgp.PGPUtil; import org.spongycastle.openpgp.operator.PBESecretKeyDecryptor; import org.spongycastle.openpgp.operator.PGPContentSignerBuilder; import org.spongycastle.openpgp.operator.PublicKeyDataDecryptorFactory; @@ -43,13 +40,11 @@ import org.spongycastle.openpgp.operator.jcajce.NfcSyncPublicKeyDataDecryptorFac import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException; -import org.sufficientlysecure.keychain.util.IterableIterator; import org.sufficientlysecure.keychain.util.Log; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; -import java.util.LinkedList; import java.util.List; /** @@ -287,9 +282,8 @@ public class CanonicalizedSecretKey extends CanonicalizedPublicKey { // create a signatureGenerator from the supplied masterKeyId and passphrase PGPSignatureGenerator signatureGenerator; { - // TODO: SHA256 fixed? - PGPContentSignerBuilder contentSignerBuilder = getContentSignerBuilder(PGPUtil.SHA256, - nfcSignedHash, nfcCreationTimestamp); + PGPContentSignerBuilder contentSignerBuilder = getContentSignerBuilder( + PgpConstants.CERTIFY_HASH_ALGO, nfcSignedHash, nfcCreationTimestamp); signatureGenerator = new PGPSignatureGenerator(contentSignerBuilder); try { @@ -351,9 +345,8 @@ public class CanonicalizedSecretKey extends CanonicalizedPublicKey { // create a signatureGenerator from the supplied masterKeyId and passphrase PGPSignatureGenerator signatureGenerator; { - // TODO: SHA256 fixed? - PGPContentSignerBuilder contentSignerBuilder = getContentSignerBuilder(PGPUtil.SHA256, - nfcSignedHash, nfcCreationTimestamp); + PGPContentSignerBuilder contentSignerBuilder = getContentSignerBuilder( + PgpConstants.CERTIFY_HASH_ALGO, nfcSignedHash, nfcCreationTimestamp); signatureGenerator = new PGPSignatureGenerator(contentSignerBuilder); try { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpConstants.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpConstants.java index 90991ba15..aef9a5cdb 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpConstants.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpConstants.java @@ -58,6 +58,8 @@ public class PgpConstants { sPreferredCompressionAlgorithms.add(CompressionAlgorithmTags.ZIP); } + public static final int CERTIFY_HASH_ALGO = HashAlgorithmTags.SHA256; + /* * Note: s2kcount is a number between 0 and 0xff that controls the * number of times to iterate the password hash before use. More -- cgit v1.2.3 From bb018b8fc1996ea264771f73da9b3f28550d3b2c Mon Sep 17 00:00:00 2001 From: Manoj Khanna Date: Wed, 11 Mar 2015 19:55:31 +0530 Subject: Updated fix for Issue #1116 --- .../keychain/ui/EncryptFilesActivity.java | 39 +++++--- .../keychain/ui/EncryptFilesFragment.java | 7 ++ .../ui/dialog/DeleteFileDialogFragment.java | 104 ++++++++++++++------- OpenKeychain/src/main/res/values-cs/strings.xml | 6 +- OpenKeychain/src/main/res/values-de/strings.xml | 4 +- OpenKeychain/src/main/res/values-es/strings.xml | 4 +- OpenKeychain/src/main/res/values-et/strings.xml | 8 +- OpenKeychain/src/main/res/values-eu/strings.xml | 2 + OpenKeychain/src/main/res/values-fi/strings.xml | 8 +- OpenKeychain/src/main/res/values-fr/strings.xml | 4 +- OpenKeychain/src/main/res/values-it/strings.xml | 6 +- OpenKeychain/src/main/res/values-ja/strings.xml | 5 +- OpenKeychain/src/main/res/values-nl/strings.xml | 8 +- OpenKeychain/src/main/res/values-pl/strings.xml | 6 +- OpenKeychain/src/main/res/values-ru/strings.xml | 4 +- OpenKeychain/src/main/res/values-sl/strings.xml | 6 +- OpenKeychain/src/main/res/values-sr/strings.xml | 8 +- OpenKeychain/src/main/res/values-sv/strings.xml | 4 +- OpenKeychain/src/main/res/values-tr/strings.xml | 6 +- OpenKeychain/src/main/res/values-uk/strings.xml | 6 +- .../src/main/res/values-zh-rTW/strings.xml | 6 +- OpenKeychain/src/main/res/values-zh/strings.xml | 4 +- OpenKeychain/src/main/res/values/strings.xml | 7 +- 23 files changed, 162 insertions(+), 100 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java index d95b5cda3..b862d5b11 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java @@ -36,7 +36,6 @@ import org.sufficientlysecure.keychain.pgp.SignEncryptParcel; import org.sufficientlysecure.keychain.ui.dialog.DeleteFileDialogFragment; import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.util.Log; -import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.ShareHelper; import java.util.ArrayList; @@ -177,22 +176,36 @@ public class EncryptFilesActivity extends EncryptActivity implements EncryptActi } @Override - public void onEncryptSuccess(SignEncryptResult result) { + public void onEncryptSuccess(final SignEncryptResult result) { if (mDeleteAfterEncrypt) { - for (Uri inputUri : mInputUris) { - DeleteFileDialogFragment deleteFileDialog = DeleteFileDialogFragment.newInstance(inputUri); - deleteFileDialog.show(getSupportFragmentManager(), "deleteDialog"); - } + final Uri[] inputUris = mInputUris.toArray(new Uri[mInputUris.size()]); + DeleteFileDialogFragment deleteFileDialog = DeleteFileDialogFragment.newInstance(inputUris); + deleteFileDialog.setOnDeletedListener(new DeleteFileDialogFragment.OnDeletedListener() { + + @Override + public void onDeleted() { + if (mShareAfterEncrypt) { + // Share encrypted message/file + startActivity(sendWithChooserExcludingEncrypt()); + } else { + // Save encrypted file + result.createNotify(EncryptFilesActivity.this).show(); + } + } + + }); + deleteFileDialog.show(getSupportFragmentManager(), "deleteDialog"); + mInputUris.clear(); notifyUpdate(); - } - - if (mShareAfterEncrypt) { - // Share encrypted message/file - startActivity(sendWithChooserExcludingEncrypt()); } else { - // Save encrypted file - result.createNotify(EncryptFilesActivity.this).show(); + if (mShareAfterEncrypt) { + // Share encrypted message/file + startActivity(sendWithChooserExcludingEncrypt()); + } else { + // Save encrypted file + result.createNotify(EncryptFilesActivity.this).show(); + } } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java index ace58b165..48737d223 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java @@ -114,6 +114,13 @@ public class EncryptFilesFragment extends Fragment implements EncryptActivityInt return; } + if (mEncryptInterface.getInputUris().contains(inputUri)) { + Notify.showNotify(getActivity(), + getActivity().getString(R.string.error_file_added_already, FileHelper.getFilename(getActivity(), inputUri)), + Notify.Style.ERROR); + return; + } + mEncryptInterface.getInputUris().add(inputUri); mEncryptInterface.notifyUpdate(); mSelectedFiles.requestFocus(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java index c4b437593..bd506f648 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java @@ -18,7 +18,6 @@ package org.sufficientlysecure.keychain.ui.dialog; import android.app.Dialog; -import android.content.ContentResolver; import android.content.DialogInterface; import android.net.Uri; import android.os.Build; @@ -34,18 +33,22 @@ import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.Log; import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; public class DeleteFileDialogFragment extends DialogFragment { - private static final String ARG_DELETE_URI = "delete_uri"; + private static final String ARG_DELETE_URIS = "delete_uris"; + + private OnDeletedListener onDeletedListener; /** * Creates new instance of this delete file dialog fragment */ - public static DeleteFileDialogFragment newInstance(Uri deleteUri) { + public static DeleteFileDialogFragment newInstance(Uri... deleteUris) { DeleteFileDialogFragment frag = new DeleteFileDialogFragment(); Bundle args = new Bundle(); - args.putParcelable(ARG_DELETE_URI, deleteUri); + args.putParcelableArray(ARG_DELETE_URIS, deleteUris); frag.setArguments(args); @@ -59,12 +62,20 @@ public class DeleteFileDialogFragment extends DialogFragment { public Dialog onCreateDialog(Bundle savedInstanceState) { final FragmentActivity activity = getActivity(); - final Uri deleteUri = getArguments().getParcelable(ARG_DELETE_URI); - final String deleteFilename = FileHelper.getFilename(getActivity(), deleteUri); + final Uri[] deleteUris = (Uri[]) getArguments().getParcelableArray(ARG_DELETE_URIS); + + final StringBuilder deleteFileNames = new StringBuilder(); + //Retrieving file names after deletion gives unexpected results + final HashMap deleteFileNameMap = new HashMap<>(); + for (Uri deleteUri : deleteUris) { + String deleteFileName = FileHelper.getFilename(getActivity(), deleteUri); + deleteFileNames.append('\n').append(deleteFileName); + deleteFileNameMap.put(deleteUri, deleteFileName); + } CustomAlertDialogBuilder alert = new CustomAlertDialogBuilder(activity); - alert.setMessage(this.getString(R.string.file_delete_confirmation, deleteFilename)); + alert.setMessage(this.getString(R.string.file_delete_confirmation, deleteFileNames.toString())); alert.setPositiveButton(R.string.btn_delete, new DialogInterface.OnClickListener() { @@ -72,43 +83,56 @@ public class DeleteFileDialogFragment extends DialogFragment { public void onClick(DialogInterface dialog, int id) { dismiss(); - // NOTE: Use Toasts, not Snackbars. When sharing to another application snackbars - // would not show up! + ArrayList failedFileNameList = new ArrayList<>(); + + for (Uri deleteUri : deleteUris) { + // Use DocumentsContract on Android >= 4.4 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + try { + if (DocumentsContract.deleteDocument(getActivity().getContentResolver(), deleteUri)) { + continue; + } + } catch (Exception e) { + Log.d(Constants.TAG, "Catched UnsupportedOperationException, can happen when delete is not supported!", e); + } + } - // Use DocumentsContract on Android >= 4.4 - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { try { - if (DocumentsContract.deleteDocument(getActivity().getContentResolver(), deleteUri)) { - Toast.makeText(getActivity(), getActivity().getString(R.string.file_delete_successful, - deleteFilename), Toast.LENGTH_LONG).show(); - return; + if (getActivity().getContentResolver().delete(deleteUri, null, null) > 0) { + continue; } - } catch (UnsupportedOperationException e) { + } catch (Exception e) { Log.d(Constants.TAG, "Catched UnsupportedOperationException, can happen when delete is not supported!", e); } - } - try { - if (getActivity().getContentResolver().delete(deleteUri, null, null) > 0) { - Toast.makeText(getActivity(), getActivity().getString(R.string.file_delete_successful, - deleteFilename), Toast.LENGTH_LONG).show(); - return; + // some Uri's a ContentResolver fails to delete is handled by the java.io.File's delete + // via the path of the Uri + if (new File(deleteUri.getPath()).delete()) { + continue; } - } catch (UnsupportedOperationException e) { - Log.d(Constants.TAG, "Catched UnsupportedOperationException, can happen when delete is not supported!", e); + + // Note: We can't delete every file... + + failedFileNameList.add(deleteFileNameMap.get(deleteUri)); } - // some Uri's a ContentResolver fails to delete is handled by the java.io.File's delete - // via the path of the Uri - if (new File(deleteUri.getPath()).delete()) { - Toast.makeText(getActivity(), getActivity().getString(R.string.file_delete_successful, - deleteFilename), Toast.LENGTH_LONG).show(); - return; + StringBuilder failedFileNames = new StringBuilder(); + if (!failedFileNameList.isEmpty()) { + for (String failedFileName : failedFileNameList) { + failedFileNames.append('\n').append(failedFileName); + } + failedFileNames.append('\n').append(getActivity().getString(R.string.error_file_delete_failed)); } - // Note: We can't delete every file... - Toast.makeText(getActivity(), getActivity().getString(R.string.error_file_delete_failed, - deleteFilename), Toast.LENGTH_LONG).show(); + // NOTE: Use Toasts, not Snackbars. When sharing to another application snackbars + // would not show up! + Toast.makeText(getActivity(), getActivity().getString(R.string.file_delete_successful, + deleteUris.length - failedFileNameList.size(), deleteUris.length, failedFileNames.toString()), + Toast.LENGTH_LONG).show(); + + if (onDeletedListener != null) { + onDeletedListener.onDeleted(); + } } }); alert.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @@ -120,4 +144,18 @@ public class DeleteFileDialogFragment extends DialogFragment { return alert.show(); } + + public void setOnDeletedListener(OnDeletedListener onDeletedListener) { + this.onDeletedListener = onDeletedListener; + } + + /** + * Callback for performing tasks after the deletion of files + */ + public interface OnDeletedListener { + + public void onDeleted(); + + } + } diff --git a/OpenKeychain/src/main/res/values-cs/strings.xml b/OpenKeychain/src/main/res/values-cs/strings.xml index 380dadb54..9c16fa413 100644 --- a/OpenKeychain/src/main/res/values-cs/strings.xml +++ b/OpenKeychain/src/main/res/values-cs/strings.xml @@ -173,8 +173,7 @@ Zadat PIN pro \'%s\' Zadejte PIN pro přístup k YubiKey pro \'%s\' Přidržte YubiKey u zadní strany vašeho přístroje. - Chcete opravdu smazat\n%s? - Nejprve vyberte soubor. + Nejprve vyberte soubor. Úspěšně podepsáno a/nebo zašifrováno. Úspěšně podepsání a/nebo zašifrováno do schránky. Vyberte alespoň jeden šifrovací klíč. @@ -507,7 +506,8 @@ Není dostupný šifrovací podklíč! Zobrazit klíč (%s) Potáhnout dolů pro aktualizaci z keyserveru - + + diff --git a/OpenKeychain/src/main/res/values-de/strings.xml b/OpenKeychain/src/main/res/values-de/strings.xml index 98066b1e8..fbae159a3 100644 --- a/OpenKeychain/src/main/res/values-de/strings.xml +++ b/OpenKeychain/src/main/res/values-de/strings.xml @@ -190,8 +190,7 @@ PIN für \'%s\' eingeben PIN für Zugriff auf Yubikey für \'%s\' eingeben Halten Sie den YubiKey gegen die Rückseite Ihres Geräts. - %s wirklich löschen? - Zuerst eine Datei auswählen. + Zuerst eine Datei auswählen. Erfolgreich signiert und/oder verschlüsselt. Erfolgreich in die Zwischenablage signiert und/oder verschlüsselt. Mindestens einen Schlüssel zum Verschlüsseln auswählen. @@ -1098,4 +1097,5 @@ Erfolgreich auf den NFC-Tag geschrieben Entsperrt Einstellungen + diff --git a/OpenKeychain/src/main/res/values-es/strings.xml b/OpenKeychain/src/main/res/values-es/strings.xml index 92b958ad8..d7557074a 100644 --- a/OpenKeychain/src/main/res/values-es/strings.xml +++ b/OpenKeychain/src/main/res/values-es/strings.xml @@ -194,8 +194,7 @@ Introduzca el PIN para \'%s\' Introduzca el PIN para acceder a la YubiKey para \'%s\' Sostenga la YubiKey contra el reverso de su dispositivo. - ¿Está seguro de que quiere eliminar\n%s? - Selecciona un archivo antes. + Selecciona un archivo antes. Firmado y/o cifrado con éxito. Firmado y/o cifrado del portapapeles con éxito. Selecciona al menos una clave de cifrado. @@ -1145,4 +1144,5 @@ Se escribió con éxito en la etiqueta NFC Desbloqueado Configuración + diff --git a/OpenKeychain/src/main/res/values-et/strings.xml b/OpenKeychain/src/main/res/values-et/strings.xml index 15b0c6c1e..f67ffb328 100644 --- a/OpenKeychain/src/main/res/values-et/strings.xml +++ b/OpenKeychain/src/main/res/values-et/strings.xml @@ -61,9 +61,11 @@ Vale salasõne Salasõned ei ühti. Sümmeetriline krüpteering - + + + diff --git a/OpenKeychain/src/main/res/values-eu/strings.xml b/OpenKeychain/src/main/res/values-eu/strings.xml index a09e3fdc5..32fdfc4cb 100644 --- a/OpenKeychain/src/main/res/values-eu/strings.xml +++ b/OpenKeychain/src/main/res/values-eu/strings.xml @@ -379,4 +379,6 @@ NFC Ezarpenak + + diff --git a/OpenKeychain/src/main/res/values-fi/strings.xml b/OpenKeychain/src/main/res/values-fi/strings.xml index 4313caf15..4b75d203d 100644 --- a/OpenKeychain/src/main/res/values-fi/strings.xml +++ b/OpenKeychain/src/main/res/values-fi/strings.xml @@ -169,9 +169,11 @@ Symmetrinen salaus. Syötä salasana \'%s\':lle Syötä PIN \'%s\':lle - + + + diff --git a/OpenKeychain/src/main/res/values-fr/strings.xml b/OpenKeychain/src/main/res/values-fr/strings.xml index f9ef4d41d..ba6f2e2af 100644 --- a/OpenKeychain/src/main/res/values-fr/strings.xml +++ b/OpenKeychain/src/main/res/values-fr/strings.xml @@ -194,8 +194,7 @@ Saisir le NIP pour « %s » Saisir le NIP pour accéder à la Yubikey pour « %s » Tenez la YubiKey contre le dos de votre appareil. - Êtes-vous certain de vouloir supprimer\n%s? - Choisir d\'abord un fichier. + Choisir d\'abord un fichier. Signé et/ou chiffré avec succès. Signé et/ou chiffré vers le presse-papiers avec succès. Choisir au moins une clef de chiffrement. @@ -1136,4 +1135,5 @@ Écrit avec succès sur la balise NFC Déverrouillé Paramètres + diff --git a/OpenKeychain/src/main/res/values-it/strings.xml b/OpenKeychain/src/main/res/values-it/strings.xml index 24c8a5657..5de5a1579 100644 --- a/OpenKeychain/src/main/res/values-it/strings.xml +++ b/OpenKeychain/src/main/res/values-it/strings.xml @@ -164,8 +164,7 @@ Si prega di inserire una frase di accesso. Codifica Simmetrica. Inserisci la frase di accesso per \'%s\' - Sei sicuro di voler eliminare\n%s? - Seleziona un file prima. + Seleziona un file prima. Firmato e/o codificato con successo. Firmato e/o codificato con successo negli appunti. Seleziona almeno una chiave di codifica. @@ -715,7 +714,8 @@ Permetti accesso?\n\nATTENZIONE: Se non sai perche\' questo schermata e\' appars Seleziona almeno un file da codificare! Il salvataggio di più file non è supportato. Questa è una limitazione corrente di Android. Chiave: - + + diff --git a/OpenKeychain/src/main/res/values-ja/strings.xml b/OpenKeychain/src/main/res/values-ja/strings.xml index 8a4778989..183938811 100644 --- a/OpenKeychain/src/main/res/values-ja/strings.xml +++ b/OpenKeychain/src/main/res/values-ja/strings.xml @@ -192,9 +192,7 @@ \'%s\' にPINを入力してください \'%s\' の Yubikey にアクセスするためのPINを入力してください あなたのデバイスの背面にYubiKeyを固定してください。 - %s -を削除してもかまいませんか? - 最初にファイルを選択してください。 + 最初にファイルを選択してください。 署名/暗号化に成功しました。 クリップボードの中身の署名/暗号化に成功しました。 少なくとも1つの暗号化鍵を選択して下さい。 @@ -1092,4 +1090,5 @@ NFCタグに書けました! アンロック 設定 + diff --git a/OpenKeychain/src/main/res/values-nl/strings.xml b/OpenKeychain/src/main/res/values-nl/strings.xml index 4c1a6a8d1..0d3cb0094 100644 --- a/OpenKeychain/src/main/res/values-nl/strings.xml +++ b/OpenKeychain/src/main/res/values-nl/strings.xml @@ -204,9 +204,7 @@ Voer PIN in voor \'%s\' Voer PIN in om toegang te verkrijgen tot YubiKey voor \'%s\' Hou YubiKey tegen de achterkant van je toestel - Ben je zeker dat je %s wil verwijderen? - \'%s\' is verwijderd. - Selecteer eerst een bestand. + Selecteer eerst een bestand. Succesvol gesigneerd en/of gecodeerd. Succesvol gesigneerd en/of gecodeerd naar klembord. Selecteer ten minste één versleutelingssleutel. @@ -239,8 +237,7 @@ - Verwijderen van \'%s\' mislukt. Gelieve dit handmatig te doen! - bestand niet gevonden + bestand niet gevonden geen geschikte privésleutel gevonden externe opslag niet gereed sleutelgrootte moet minstens 512-bits zijn @@ -1159,4 +1156,5 @@ Succesvol geschreven op NFC-tag Ontgrendeld Instellingen + diff --git a/OpenKeychain/src/main/res/values-pl/strings.xml b/OpenKeychain/src/main/res/values-pl/strings.xml index 8c0fc23d2..1ee5a86e7 100644 --- a/OpenKeychain/src/main/res/values-pl/strings.xml +++ b/OpenKeychain/src/main/res/values-pl/strings.xml @@ -179,8 +179,7 @@ Podaj hasło dla \'%s\' Wpisz PIN dla \'%s\' Trzymaj YubiKey z tyłu Twojego urządzenia. - Czy jesteś pewny, że chcesz usunąć\n%s? - Najpierw wskaż plik. + Najpierw wskaż plik. Pomyślnie podpisano i/lub zaszyfrowano. Pomyslnie podpisano i/lub zaszyfrowano do schowka. Wybierz co najmniej jeden klucz szyfrujący. @@ -657,7 +656,8 @@ OSTRZEŻENIE: Jeżeli nie wiesz, czemu wyświetlił się ten komunikat, nie zezw Wybierz przynajmniej jeden plik, aby szyfrować! Klucz: Rozpocznij wymianę - + + diff --git a/OpenKeychain/src/main/res/values-ru/strings.xml b/OpenKeychain/src/main/res/values-ru/strings.xml index f6658ded0..9559ecf51 100644 --- a/OpenKeychain/src/main/res/values-ru/strings.xml +++ b/OpenKeychain/src/main/res/values-ru/strings.xml @@ -192,8 +192,7 @@ Введите PIN для доступа к YubiKey для \'%s\' Держите YubiKey возле задней части вашего устройства. - Вы уверены, что хотите удалить\n%s? - Сначала выберите файл. + Сначала выберите файл. Успешно подписано и/или зашифровано. Успешно подписано и/или зашифровано в буфер обмена. Укажите хотя бы один ключ. @@ -811,4 +810,5 @@ Разблокирован Настройки + diff --git a/OpenKeychain/src/main/res/values-sl/strings.xml b/OpenKeychain/src/main/res/values-sl/strings.xml index 06f14a483..3eb8eeba8 100644 --- a/OpenKeychain/src/main/res/values-sl/strings.xml +++ b/OpenKeychain/src/main/res/values-sl/strings.xml @@ -168,8 +168,7 @@ Vnesite geslo. Simetrično šifriranje. Vnesite geslo za \'%s\' - Ste prepričani, da želite izbrisati\n%s? - Najprej izberite datoteko. + Najprej izberite datoteko. Uspešno podpisano in/ali šifrirano. Uspešno podpisano in/ali šifrirano ter poslano v odložišče. Izberite vsaj en šifrirni ključ. @@ -479,7 +478,8 @@ Ni nobenega podključa za šifriranje! Prikaži ključ (%s) Ključ: - + + diff --git a/OpenKeychain/src/main/res/values-sr/strings.xml b/OpenKeychain/src/main/res/values-sr/strings.xml index 73094c5a4..b5ba0b361 100644 --- a/OpenKeychain/src/main/res/values-sr/strings.xml +++ b/OpenKeychain/src/main/res/values-sr/strings.xml @@ -204,9 +204,7 @@ Унесите ПИН за „%s“ Унесите ПИН за приступ Јубикључу за „%s“ Држите Јубикључ на полеђини вашег уређаја. - Желите ли заиста да обришете\n%s? - Брисање је успело. - Најпре изаберите фајл. + Најпре изаберите фајл. Потписивање и/или шифровање је успело. Потписивање и/или шифровање на клипборд је успело. Унесите лозинку два пута. @@ -240,8 +238,7 @@ - брисање „%s“ није успело - фајл није нађен + фајл није нађен одговарајући тајни кључ није нађен спољашње складиште није спремно величина кључа мора да буде најмање 512 бита @@ -1145,4 +1142,5 @@ Успешно уписах на НФЦ ознаку Откључан Поставке + diff --git a/OpenKeychain/src/main/res/values-sv/strings.xml b/OpenKeychain/src/main/res/values-sv/strings.xml index e74a2104f..93b833590 100644 --- a/OpenKeychain/src/main/res/values-sv/strings.xml +++ b/OpenKeychain/src/main/res/values-sv/strings.xml @@ -178,8 +178,7 @@ Ange PIN för \'%s\' Ange PIN för att få åtkomst till YubiKey för \'%s\' Håll YubiKey mot baksidan av din enhet. - Vill du verkligen radera\n%s? - Välj en fil först. + Välj en fil först. Signerades och/eller krypterades. Signerades och/eller krypterades till urklipp. Välj åtminstone en krypteringsnyckel. @@ -864,4 +863,5 @@ Denna enhet stöder inte NFC Upplåst Inställningar + diff --git a/OpenKeychain/src/main/res/values-tr/strings.xml b/OpenKeychain/src/main/res/values-tr/strings.xml index a5ab9ca63..2b60c9758 100644 --- a/OpenKeychain/src/main/res/values-tr/strings.xml +++ b/OpenKeychain/src/main/res/values-tr/strings.xml @@ -167,8 +167,7 @@ Simetrik şifreleme. \'%s\' için bir parola girin YubiKey\'inizi cihazınızın arkasında tutun. - Silmek istediğinize emin misiniz\n%s? - Önce bir dosya seçin. + Önce bir dosya seçin. Başarıyla imzalandı ve/veya şifrelendi. Kopyalama önbelleğine başarıyla imzalandı ve/veya şifrelendi. En az bir şifreleme anahtarı seçiniz. @@ -509,7 +508,8 @@ Birden çok dosyanın kaydedilmesi desteklenmiyor. Bu şu anki Android\'in bir kısıtlamasıdır. Anahtar: Anahtar değiş tokuşu başlatmak için sağ taraftan katılımcıların sayısını seçin ve \"Değiş tokuşu başlat\" tuşuna tıklayın.\n\nSadece istenilen katılımcıların değişim işleminde olduğundan ve parmak izlerinin doğruluğundan emin olmak için size iki soru daha sorulacak. - + + diff --git a/OpenKeychain/src/main/res/values-uk/strings.xml b/OpenKeychain/src/main/res/values-uk/strings.xml index ed5012edb..b3a161758 100644 --- a/OpenKeychain/src/main/res/values-uk/strings.xml +++ b/OpenKeychain/src/main/res/values-uk/strings.xml @@ -168,8 +168,7 @@ Будь ласка, введіть парольну фразу. Симетричне шифрування. Введіть парольну фразу для \'%s\' - Ви справді хочете вилучити\n%s? - Виберіть спершу файл. + Виберіть спершу файл. Успішно підписано та/або перевірено. Успішно підписано та/або зашифровано до буфера обміну. Виберіть принаймні один ключ шифрування. @@ -589,7 +588,8 @@ не можна підписати Жодний підключ шифрування недоступний! Показати ключ (%s) - + + diff --git a/OpenKeychain/src/main/res/values-zh-rTW/strings.xml b/OpenKeychain/src/main/res/values-zh-rTW/strings.xml index 9b6ef4c91..286e98b79 100644 --- a/OpenKeychain/src/main/res/values-zh-rTW/strings.xml +++ b/OpenKeychain/src/main/res/values-zh-rTW/strings.xml @@ -139,8 +139,7 @@ 口令不相符。 請輸入口令。 對稱加密。 - 你確定要刪除\n%s? - 請先選擇檔案。 + 請先選擇檔案。 成功簽名並/或加密。 成功簽名並/或加密到剪貼簿。 選擇至少一把加密金鑰。 @@ -422,7 +421,8 @@ 沒有可供加密的子金鑰! 請不要自行建立OpenKeychain帳戶。\n更多資訊請參考說明。 要發起金鑰交換,先在右邊選擇與會人數,然後點選〝開始交換〞。\n\n接下來會詢問你兩個問題,以確保會議成員與交換的指紋是正確的。 - + + diff --git a/OpenKeychain/src/main/res/values-zh/strings.xml b/OpenKeychain/src/main/res/values-zh/strings.xml index a255362fb..d59b2a2e0 100644 --- a/OpenKeychain/src/main/res/values-zh/strings.xml +++ b/OpenKeychain/src/main/res/values-zh/strings.xml @@ -195,7 +195,9 @@ 请重审收件人列表 使用NFC分享 - + + + diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 920fbf2a8..c5dfdcaa1 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -222,8 +222,8 @@ "Enter PIN for '%s'" "Enter PIN to access YubiKey for '%s'" "Hold YubiKey against the back of your device." - "Are you sure you want to delete\n%s?" - "'%s' has been deleted." + "Are you sure you want to delete the following files?%s" + "%1$d out of %2$d files have been deleted.%3$s" "Select a file first." "Successfully signed and/or encrypted." "Successfully signed and/or encrypted to clipboard." @@ -264,7 +264,8 @@ no punctuation, all lowercase, they will be put after "error_message", e.g. "Error: file not found" --> - "Deleting '%s' failed. Please do this manually!" + "are not deleted." + %s has been added already. "file not found" "no suitable secret key found" "external storage not ready" -- cgit v1.2.3 From 9ff4d7b2bc0830e96c7d844f2ffc7d5da798b646 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Wed, 11 Mar 2015 18:28:36 +0100 Subject: change user_id primary key in database, use keyring rather than unified query in consolidate --- .../keychain/pgp/WrappedUserAttribute.java | 9 +++++++++ .../keychain/provider/KeychainDatabase.java | 14 ++++++++++---- .../keychain/provider/ProviderHelper.java | 17 +++++++---------- 3 files changed, 26 insertions(+), 14 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedUserAttribute.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedUserAttribute.java index 8e23d36d9..2c7f0187a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedUserAttribute.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedUserAttribute.java @@ -109,6 +109,15 @@ public class WrappedUserAttribute implements Serializable { } + public byte[][] getSubpackets() { + UserAttributeSubpacket[] subpackets = mVector.toSubpacketArray(); + byte[][] ret = new byte[subpackets.length][]; + for (int i = 0; i < subpackets.length; i++) { + ret[i] = subpackets[i].getData(); + } + return ret; + } + private void readObjectNoData() throws ObjectStreamException { } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainDatabase.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainDatabase.java index b88cd6006..4a162989f 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainDatabase.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainDatabase.java @@ -53,7 +53,7 @@ import java.io.IOException; */ public class KeychainDatabase extends SQLiteOpenHelper { private static final String DATABASE_NAME = "openkeychain.db"; - private static final int DATABASE_VERSION = 8; + private static final int DATABASE_VERSION = 9; static Boolean apgHack = false; private Context mContext; @@ -61,7 +61,7 @@ public class KeychainDatabase extends SQLiteOpenHelper { String KEY_RINGS_PUBLIC = "keyrings_public"; String KEY_RINGS_SECRET = "keyrings_secret"; String KEYS = "keys"; - String USER_PACKETS = "user_ids"; + String USER_PACKETS = "user_packets"; String CERTS = "certs"; String API_APPS = "api_apps"; String API_ACCOUNTS = "api_accounts"; @@ -119,8 +119,7 @@ public class KeychainDatabase extends SQLiteOpenHelper { + UserPacketsColumns.IS_REVOKED + " INTEGER, " + UserPacketsColumns.RANK+ " INTEGER, " - + "PRIMARY KEY(" + UserPacketsColumns.MASTER_KEY_ID + ", " + UserPacketsColumns.USER_ID + "), " - + "UNIQUE (" + UserPacketsColumns.MASTER_KEY_ID + ", " + UserPacketsColumns.RANK + "), " + + "PRIMARY KEY(" + UserPacketsColumns.MASTER_KEY_ID + ", " + UserPacketsColumns.RANK + "), " + "FOREIGN KEY(" + UserPacketsColumns.MASTER_KEY_ID + ") REFERENCES " + Tables.KEY_RINGS_PUBLIC + "(" + KeyRingsColumns.MASTER_KEY_ID + ") ON DELETE CASCADE" + ")"; @@ -267,6 +266,13 @@ public class KeychainDatabase extends SQLiteOpenHelper { } catch (Exception e) { // never mind, the column probably already existed } + case 9: + // tbale name for user_ids changed to user_packets + db.execSQL("DROP TABLE IF EXISTS certs"); + db.execSQL("DROP TABLE IF EXISTS user_ids"); + db.execSQL(CREATE_USER_PACKETS); + db.execSQL(CREATE_CERTS); + } // always do consolidate after upgrade diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java index 6cd251be5..1d3934620 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java @@ -1082,9 +1082,8 @@ public class ProviderHelper { log.add(LogType.MSG_CON_SAVE_SECRET, indent); indent += 1; - final Cursor cursor = mContentResolver.query(KeyRings.buildUnifiedKeyRingsUri(), new String[]{ - KeyRings.PRIVKEY_DATA, KeyRings.FINGERPRINT, KeyRings.HAS_ANY_SECRET - }, KeyRings.HAS_ANY_SECRET + " = 1", null, null); + final Cursor cursor = mContentResolver.query(KeyRingData.buildSecretKeyRingUri(), + new String[]{ KeyRingData.KEY_RING_DATA }, null, null, null); if (cursor == null) { log.add(LogType.MSG_CON_ERROR_DB, indent); @@ -1106,8 +1105,7 @@ public class ProviderHelper { if (cursor.isAfterLast()) { return false; } - ring = new ParcelableKeyRing(KeyFormattingUtils.convertFingerprintToHex(cursor.getBlob(1)), cursor.getBlob(0) - ); + ring = new ParcelableKeyRing(cursor.getBlob(0)); cursor.moveToNext(); return true; } @@ -1144,9 +1142,9 @@ public class ProviderHelper { log.add(LogType.MSG_CON_SAVE_PUBLIC, indent); indent += 1; - final Cursor cursor = mContentResolver.query(KeyRings.buildUnifiedKeyRingsUri(), new String[]{ - KeyRings.PUBKEY_DATA, KeyRings.FINGERPRINT - }, null, null, null); + final Cursor cursor = mContentResolver.query( + KeyRingData.buildPublicKeyRingUri(), + new String[]{ KeyRingData.KEY_RING_DATA }, null, null, null); if (cursor == null) { log.add(LogType.MSG_CON_ERROR_DB, indent); @@ -1168,8 +1166,7 @@ public class ProviderHelper { if (cursor.isAfterLast()) { return false; } - ring = new ParcelableKeyRing(KeyFormattingUtils.convertFingerprintToHex(cursor.getBlob(1)), cursor.getBlob(0) - ); + ring = new ParcelableKeyRing(cursor.getBlob(0)); cursor.moveToNext(); return true; } -- cgit v1.2.3 From 45eea9b5b8d803996f5f89caf7e7cea0089af7f7 Mon Sep 17 00:00:00 2001 From: Adithya Abraham Philip Date: Wed, 11 Mar 2015 23:10:32 +0530 Subject: corrected linked system contact display name --- .../keychain/ui/ViewKeyFragment.java | 23 +++++++------ .../keychain/util/ContactHelper.java | 40 ++++++++++++++++++++-- 2 files changed, 49 insertions(+), 14 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java index bb3df2541..eae283269 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java @@ -53,7 +53,7 @@ public class ViewKeyFragment extends LoaderFragment implements //private ListView mLinkedSystemContact; boolean mIsSecret = false; - private String mName; + boolean mSystemContactLoaded = false; LinearLayout mSystemContactLayout; ImageView mSystemContactPicture; @@ -120,17 +120,17 @@ public class ViewKeyFragment extends LoaderFragment implements * Checks if a system contact exists for given masterKeyId, and if it does, sets name, picture * and onClickListener for the linked system contact's layout * - * @param name * @param masterKeyId */ - private void loadLinkedSystemContact(String name, final long masterKeyId) { + private void loadLinkedSystemContact(final long masterKeyId) { final Context context = mSystemContactName.getContext(); final ContentResolver resolver = context.getContentResolver(); final long contactId = ContactHelper.findContactId(resolver, masterKeyId); + final String contactName = ContactHelper.getContactName(resolver, contactId); - if (contactId != -1) {//contact exists for given master key - mSystemContactName.setText(name); + if (contactName != null) {//contact name exists for given master key + mSystemContactName.setText(contactName); Bitmap picture = ContactHelper.loadPhotoByMasterKeyId(resolver, masterKeyId, true); if (picture != null) mSystemContactPicture.setImageBitmap(picture); @@ -141,6 +141,7 @@ public class ViewKeyFragment extends LoaderFragment implements launchContactActivity(contactId, context); } }); + mSystemContactLoaded = true; } } @@ -238,14 +239,14 @@ public class ViewKeyFragment extends LoaderFragment implements switch (loader.getId()) { case LOADER_ID_UNIFIED: { if (data.moveToFirst()) { - - mIsSecret = data.getInt(INDEX_HAS_ANY_SECRET) != 0; - if (mName == null) {//to ensure we load the linked system contact only once - String[] mainUserId = KeyRing.splitUserId(data.getString(INDEX_USER_ID)); - mName = mainUserId[0]; + //TODO system to allow immediate refreshing of system contact on verification + if (!mSystemContactLoaded) {//ensure we load linked system contact only once long masterKeyId = data.getLong(INDEX_MASTER_KEY_ID); - loadLinkedSystemContact(mName, masterKeyId); + loadLinkedSystemContact(masterKeyId); } + + mIsSecret = data.getInt(INDEX_HAS_ANY_SECRET) != 0; + // load user ids after we know if it's a secret key mUserIdsAdapter = new UserIdsAdapter(getActivity(), null, 0, !mIsSecret, null); mUserIds.setAdapter(mUserIdsAdapter); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java index 1413273e8..b3eb36157 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java @@ -296,6 +296,34 @@ public class ContactHelper { return contactId; } + /** + * Returns the display name of the system contact associated with contactId, null if the + * contact does not exist + * + * @param resolver + * @param contactId + * @return primary display name of system contact associated with contactId, null if it does + * not exist + */ + public static String getContactName(ContentResolver resolver, long contactId) { + String contactName = null; + Cursor raw = resolver.query(ContactsContract.Contacts.CONTENT_URI, + new String[]{ + ContactsContract.Contacts.DISPLAY_NAME_PRIMARY + }, + ContactsContract.Contacts._ID + "=?", + new String[]{//"0" for "not deleted" + Long.toString(contactId) + }, null); + if (raw != null) { + if (raw.moveToNext()) { + contactName = raw.getString(0); + } + raw.close(); + } + return contactName; + } + public static Bitmap getCachedPhotoByMasterKeyId(ContentResolver contentResolver, long masterKeyId) { if (masterKeyId == -1) { return null; @@ -333,12 +361,16 @@ public class ContactHelper { KeychainContract.KeyRings.MASTER_KEY_ID, KeychainContract.KeyRings.USER_ID, KeychainContract.KeyRings.IS_EXPIRED, - KeychainContract.KeyRings.IS_REVOKED}; + KeychainContract.KeyRings.IS_REVOKED, + KeychainContract.KeyRings.VERIFIED, + KeychainContract.KeyRings.HAS_SECRET}; public static final int INDEX_MASTER_KEY_ID = 0; public static final int INDEX_USER_ID = 1; public static final int INDEX_IS_EXPIRED = 2; public static final int INDEX_IS_REVOKED = 3; + public static final int INDEX_VERIFIED = 4; + public static final int INDEX_HAS_SECRET = 5; /** * Write/Update the current OpenKeychain keys to the contact db @@ -373,6 +405,8 @@ public class ContactHelper { String keyIdShort = KeyFormattingUtils.convertKeyIdToHexShort(cursor.getLong(INDEX_MASTER_KEY_ID)); boolean isExpired = cursor.getInt(INDEX_IS_EXPIRED) != 0; boolean isRevoked = cursor.getInt(INDEX_IS_REVOKED) > 0; + boolean isVerified = cursor.getInt(INDEX_VERIFIED) > 0; + boolean isSecret = cursor.getInt(INDEX_HAS_SECRET) != 0; Log.d(Constants.TAG, "masterKeyId: " + masterKeyId); @@ -385,8 +419,8 @@ public class ContactHelper { ArrayList ops = new ArrayList<>(); // Do not store expired or revoked keys in contact db - and remove them if they already exist - if (isExpired || isRevoked) { - Log.d(Constants.TAG, "Expired or revoked: Deleting rawContactId " + rawContactId); + if (isExpired || isRevoked || !isVerified&&!isSecret) { + Log.d(Constants.TAG, "Expired or revoked or unverified: Deleting rawContactId " + rawContactId); if (rawContactId != -1) { deleteRawContactById(resolver, rawContactId); } -- cgit v1.2.3 From 08972de68f4b617beb151e656cc3e2303aee0b54 Mon Sep 17 00:00:00 2001 From: Adithya Abraham Philip Date: Wed, 11 Mar 2015 23:11:01 +0530 Subject: added contact sync at end of CertifyOperation --- .../org/sufficientlysecure/keychain/operations/CertifyOperation.java | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/CertifyOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/CertifyOperation.java index 2e9551826..65bc6381b 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/CertifyOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/CertifyOperation.java @@ -20,6 +20,7 @@ import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.provider.ProviderHelper.NotFoundException; import org.sufficientlysecure.keychain.service.CertifyActionsParcel; import org.sufficientlysecure.keychain.service.CertifyActionsParcel.CertifyAction; +import org.sufficientlysecure.keychain.service.ContactSyncAdapterService; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.util.Log; @@ -191,6 +192,9 @@ public class CertifyOperation extends BaseOperation { } log.add(LogType.MSG_CRT_SUCCESS, 0); + //since only verified keys are synced to contacts, we need to initiate a sync now + ContactSyncAdapterService.requestSync(); + return new CertifyResult(CertifyResult.RESULT_OK, log, certifyOk, certifyError, uploadOk, uploadError); } -- cgit v1.2.3 From 52200edfd738eb4019f3aac4fba659fe721e98d1 Mon Sep 17 00:00:00 2001 From: danielnelz Date: Wed, 11 Mar 2015 21:32:20 +0100 Subject: Fixed possible ArrayIndexOutOfBoundsException. --- .../org/sufficientlysecure/keychain/service/KeychainIntentService.java | 2 +- .../keychain/service/KeychainIntentServiceHandler.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java index 9f769759e..bf6a62782 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java @@ -135,7 +135,7 @@ public class KeychainIntentService extends IntentService implements Progressable private static final IOType[] values = values(); public static IOType fromInt(int n) { - if(n >= values.length) { + if(n < 0 || n >= values.length) { return UNKNOWN; } else { return values[n]; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java index c102acc32..bd047518d 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java @@ -44,7 +44,7 @@ public class KeychainIntentServiceHandler extends Handler { public static MessageStatus fromInt(int n) { - if(n >= values.length) { + if(n < 0 || n >= values.length) { return UNKNOWN; } else { return values[n]; -- cgit v1.2.3 From dae48e84c8fe8e68ff27b52022005f075374d64d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Thu, 12 Mar 2015 13:18:31 +0100 Subject: Improve file deletion strings --- .../keychain/ui/dialog/DeleteFileDialogFragment.java | 6 +++--- OpenKeychain/src/main/res/values/strings.xml | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java index bd506f648..7737523e3 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java @@ -75,7 +75,8 @@ public class DeleteFileDialogFragment extends DialogFragment { CustomAlertDialogBuilder alert = new CustomAlertDialogBuilder(activity); - alert.setMessage(this.getString(R.string.file_delete_confirmation, deleteFileNames.toString())); + alert.setTitle(getString(R.string.file_delete_confirmation_title)); + alert.setMessage(getString(R.string.file_delete_confirmation, deleteFileNames.toString())); alert.setPositiveButton(R.string.btn_delete, new DialogInterface.OnClickListener() { @@ -112,7 +113,6 @@ public class DeleteFileDialogFragment extends DialogFragment { } // Note: We can't delete every file... - failedFileNameList.add(deleteFileNameMap.get(deleteUri)); } @@ -127,7 +127,7 @@ public class DeleteFileDialogFragment extends DialogFragment { // NOTE: Use Toasts, not Snackbars. When sharing to another application snackbars // would not show up! Toast.makeText(getActivity(), getActivity().getString(R.string.file_delete_successful, - deleteUris.length - failedFileNameList.size(), deleteUris.length, failedFileNames.toString()), + deleteUris.length - failedFileNameList.size(), deleteUris.length, failedFileNames.toString()), Toast.LENGTH_LONG).show(); if (onDeletedListener != null) { diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index c5dfdcaa1..0affa9073 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -222,7 +222,8 @@ "Enter PIN for '%s'" "Enter PIN to access YubiKey for '%s'" "Hold YubiKey against the back of your device." - "Are you sure you want to delete the following files?%s" + "Delete original files?" + "The following files will be deleted:%s" "%1$d out of %2$d files have been deleted.%3$s" "Select a file first." "Successfully signed and/or encrypted." @@ -264,8 +265,8 @@ no punctuation, all lowercase, they will be put after "error_message", e.g. "Error: file not found" --> - "are not deleted." - %s has been added already. + "have not been deleted. Delete them manually!" + %s has already been added. "file not found" "no suitable secret key found" "external storage not ready" -- cgit v1.2.3 From 27027b8ee55dd0245632bca6b647477d810ce077 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Thu, 12 Mar 2015 13:39:20 +0100 Subject: Use notify instead of Toast for NFC check --- .../main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java index 5ba9a95c6..b25f6bbf2 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java @@ -375,9 +375,9 @@ public class ViewKeyActivity extends BaseActivity implements @TargetApi(Build.VERSION_CODES.LOLLIPOP) private void invokeNfcBeam() { - //Check if device supports NFC + // Check if device supports NFC if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC)) { - Toast.makeText(this, R.string.no_nfc_support, Toast.LENGTH_SHORT).show(); + Notify.createNotify(this, R.string.no_nfc_support, Notify.LENGTH_LONG, Notify.Style.ERROR).show(); return; } // Check for available NFC Adapter -- cgit v1.2.3 From b953623802a5446a0e86b37d35afda623c316d4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Thu, 12 Mar 2015 14:34:58 +0100 Subject: Clarify logs in DeleteFileDialog --- .../keychain/ui/dialog/DeleteFileDialogFragment.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java index 7737523e3..bd4e5577b 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java @@ -94,7 +94,7 @@ public class DeleteFileDialogFragment extends DialogFragment { continue; } } catch (Exception e) { - Log.d(Constants.TAG, "Catched UnsupportedOperationException, can happen when delete is not supported!", e); + Log.d(Constants.TAG, "Catched Exception, can happen when delete is not supported!", e); } } @@ -103,7 +103,7 @@ public class DeleteFileDialogFragment extends DialogFragment { continue; } } catch (Exception e) { - Log.d(Constants.TAG, "Catched UnsupportedOperationException, can happen when delete is not supported!", e); + Log.d(Constants.TAG, "Catched Exception, can happen when delete is not supported!", e); } // some Uri's a ContentResolver fails to delete is handled by the java.io.File's delete -- cgit v1.2.3 From 5b5e5b498101dd9d9dcc7285e586f394d5dd546c Mon Sep 17 00:00:00 2001 From: Manoj Khanna Date: Fri, 13 Mar 2015 00:53:05 +0530 Subject: Fix for Issue #1115 --- .../sufficientlysecure/keychain/operations/SignEncryptOperation.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/SignEncryptOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/SignEncryptOperation.java index e98f6b150..af60ea5ee 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/SignEncryptOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/SignEncryptOperation.java @@ -48,6 +48,7 @@ public class SignEncryptOperation extends BaseOperation { byte[] inputBytes = input.getBytes(); byte[] outputBytes = null; + int total = inputBytes != null ? 1 : inputUris.size(), count = 0; ArrayList results = new ArrayList<>(); do { @@ -104,7 +105,7 @@ public class SignEncryptOperation extends BaseOperation { } PgpSignEncryptOperation op = new PgpSignEncryptOperation(mContext, mProviderHelper, - new ProgressScaler(), mCancelled); + new ProgressScaler(mProgressable, 100 * count / total, 100 * ++count / total, 100), mCancelled); PgpSignEncryptResult result = op.execute(input, inputData, outStream); results.add(result); log.add(result, 2); -- cgit v1.2.3 From d4375b7dfc23213caca1b4eb2e86c54338e86605 Mon Sep 17 00:00:00 2001 From: Adithya Abraham Philip Date: Fri, 13 Mar 2015 03:13:22 +0530 Subject: links own keys to me profile in contacts --- OpenKeychain/src/main/AndroidManifest.xml | 1 + .../keychain/util/ContactHelper.java | 127 +++++++++++++++++++-- 2 files changed, 119 insertions(+), 9 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/AndroidManifest.xml b/OpenKeychain/src/main/AndroidManifest.xml index 5d3a106de..0e7baf039 100644 --- a/OpenKeychain/src/main/AndroidManifest.xml +++ b/OpenKeychain/src/main/AndroidManifest.xml @@ -65,6 +65,7 @@ + deletedKeys = getRawContactMasterKeyIds(resolver); + writeKeysToMainProfileContact(context); + if (Constants.DEBUG_SYNC_REMOVE_CONTACTS) { debugDeleteRawContacts(resolver); } @@ -395,9 +399,13 @@ public class ContactHelper { // e.printStackTrace(); // } - // Load all Keys from OK - Cursor cursor = resolver.query(KeychainContract.KeyRings.buildUnifiedKeyRingsUri(), KEYS_TO_CONTACT_PROJECTION, - null, null, null); + // Load all public Keys from OK + // TODO: figure out why using selectionArgs does not work in this case + Cursor cursor = resolver.query(KeychainContract.KeyRings.buildUnifiedKeyRingsUri(), + KEYS_TO_CONTACT_PROJECTION, + KeychainContract.KeyRings.HAS_ANY_SECRET + "=0", + null, null); + if (cursor != null) { while (cursor.moveToNext()) { long masterKeyId = cursor.getLong(INDEX_MASTER_KEY_ID); @@ -406,7 +414,6 @@ public class ContactHelper { boolean isExpired = cursor.getInt(INDEX_IS_EXPIRED) != 0; boolean isRevoked = cursor.getInt(INDEX_IS_REVOKED) > 0; boolean isVerified = cursor.getInt(INDEX_VERIFIED) > 0; - boolean isSecret = cursor.getInt(INDEX_HAS_SECRET) != 0; Log.d(Constants.TAG, "masterKeyId: " + masterKeyId); @@ -418,8 +425,9 @@ public class ContactHelper { ArrayList ops = new ArrayList<>(); - // Do not store expired or revoked keys in contact db - and remove them if they already exist - if (isExpired || isRevoked || !isVerified&&!isSecret) { + // Do not store expired or revoked or unverified keys in contact db - and + // remove them if they already exist. Secret keys do not reach this point + if (isExpired || isRevoked || !isVerified) { Log.d(Constants.TAG, "Expired or revoked or unverified: Deleting rawContactId " + rawContactId); if (rawContactId != -1) { deleteRawContactById(resolver, rawContactId); @@ -455,6 +463,83 @@ public class ContactHelper { } } + public static void writeKeysToMainProfileContact(Context context) { + ContentResolver resolver = context.getContentResolver(); + Set keysToDelete = getMainProfileMasterKeyIds(resolver); + + // get all keys which have associated secret keys + // TODO: figure out why using selectionArgs does not work in this case + Cursor cursor = resolver.query(KeychainContract.KeyRings.buildUnifiedKeyRingsUri(), + KEYS_TO_CONTACT_PROJECTION, + KeychainContract.KeyRings.HAS_ANY_SECRET + "!=0", + null, null); + if (cursor != null) { + while (cursor.moveToNext()) { + long masterKeyId = cursor.getLong(INDEX_MASTER_KEY_ID); + + boolean existsInMainProfile = keysToDelete.remove(masterKeyId); + if (!existsInMainProfile) { + long rawContactId = -1;//new raw contact + + String keyIdShort = KeyFormattingUtils.convertKeyIdToHexShort(masterKeyId); + Log.d(Constants.TAG, "masterKeyId with secret " + masterKeyId); + + ArrayList ops = new ArrayList<>(); + insertMainProfileRawContact(ops, masterKeyId); + writeContactKey(ops, context, rawContactId, masterKeyId, keyIdShort); + + try { + resolver.applyBatch(ContactsContract.AUTHORITY, ops); + } catch (Exception e) { + Log.w(Constants.TAG, e); + } + } + } + } + + for (long masterKeyId : keysToDelete) { + deleteMainProfileRawContactByMasterKeyId(resolver, masterKeyId); + Log.d(Constants.TAG, "Delete main profile raw contact with masterKeyId " + masterKeyId); + } + } + + /** + * Inserts a raw contact into the table defined by ContactsContract.Profile + * + * @param ops + * @param masterKeyId + */ + private static void insertMainProfileRawContact(ArrayList ops, + long masterKeyId) { + ops.add(ContentProviderOperation.newInsert(ContactsContract.Profile.CONTENT_RAW_CONTACTS_URI) + .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, Constants.ACCOUNT_NAME) + .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, Constants.ACCOUNT_TYPE) + .withValue(ContactsContract.RawContacts.SOURCE_ID, Long.toString(masterKeyId)) + .build()); + } + + /** + * deletes a raw contact from the profile table + * + * @param resolver + * @param masterKeyId + * @return + */ + private static int deleteMainProfileRawContactByMasterKeyId(ContentResolver resolver, + long masterKeyId) { + //allows us to actually wipe the RawContact from the device, otherwise would be just flagged + //for deletion + Uri deleteUri = ContactsContract.Profile.CONTENT_RAW_CONTACTS_URI.buildUpon(). + appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build(); + + return resolver.delete(deleteUri, + ContactsContract.RawContacts.ACCOUNT_TYPE + "=? AND " + + ContactsContract.RawContacts.SOURCE_ID + "=?", + new String[]{ + Constants.ACCOUNT_TYPE, Long.toString(masterKeyId) + }); + } + /** * Delete all raw contacts associated to OpenKeychain. */ @@ -479,7 +564,8 @@ public class ContactHelper { appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build(); return resolver.delete(deleteUri, - ContactsContract.RawContacts.ACCOUNT_TYPE + "=? AND " + ContactsContract.RawContacts._ID + "=?", + ContactsContract.RawContacts.ACCOUNT_TYPE + "=? AND " + + ContactsContract.RawContacts._ID + "=?", new String[]{ Constants.ACCOUNT_TYPE, Long.toString(rawContactId) }); @@ -492,7 +578,8 @@ public class ContactHelper { appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build(); return resolver.delete(deleteUri, - ContactsContract.RawContacts.ACCOUNT_TYPE + "=? AND " + ContactsContract.RawContacts.SOURCE_ID + "=?", + ContactsContract.RawContacts.ACCOUNT_TYPE + "=? AND " + + ContactsContract.RawContacts.SOURCE_ID + "=?", new String[]{ Constants.ACCOUNT_TYPE, Long.toString(masterKeyId) }); @@ -520,6 +607,28 @@ public class ContactHelper { return result; } + /** + * @return a set of all key master key ids currently present in the contact db + */ + private static Set getMainProfileMasterKeyIds(ContentResolver resolver) { + HashSet result = new HashSet<>(); + Cursor masterKeyIds = resolver.query(ContactsContract.Profile.CONTENT_RAW_CONTACTS_URI, + new String[]{ + ContactsContract.RawContacts.SOURCE_ID + }, + ContactsContract.RawContacts.ACCOUNT_TYPE + "=?", + new String[]{ + Constants.ACCOUNT_TYPE + }, null); + if (masterKeyIds != null) { + while (masterKeyIds.moveToNext()) { + result.add(masterKeyIds.getLong(0)); + } + masterKeyIds.close(); + } + return result; + } + /** * This will search the contact db for a raw contact with a given master key id * -- cgit v1.2.3 From 759009ddb4ac11f4065ecfa14e17ed330bd01989 Mon Sep 17 00:00:00 2001 From: Adithya Abraham Philip Date: Fri, 13 Mar 2015 04:04:11 +0530 Subject: added own profile support in linekd system contact --- .../keychain/ui/ViewKeyFragment.java | 32 ++++++++++++++---- .../keychain/util/ContactHelper.java | 39 ++++++++++++++++++++-- 2 files changed, 61 insertions(+), 10 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java index eae283269..68da3b58c 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java @@ -44,6 +44,8 @@ import org.sufficientlysecure.keychain.ui.dialog.UserIdInfoDialogFragment; import org.sufficientlysecure.keychain.util.ContactHelper; import org.sufficientlysecure.keychain.util.Log; +import java.util.List; + public class ViewKeyFragment extends LoaderFragment implements LoaderManager.LoaderCallbacks { @@ -126,19 +128,35 @@ public class ViewKeyFragment extends LoaderFragment implements final Context context = mSystemContactName.getContext(); final ContentResolver resolver = context.getContentResolver(); - final long contactId = ContactHelper.findContactId(resolver, masterKeyId); - final String contactName = ContactHelper.getContactName(resolver, contactId); + long contactId; + String contactName = null; + + if(mIsSecret) { + contactId = ContactHelper.getMainProfileContactId(resolver); + List mainProfileNames = ContactHelper.getMainProfileContactName(context); + if(mainProfileNames!=null) contactName = mainProfileNames.get(0); + + } else { + contactId = ContactHelper.findContactId(resolver, masterKeyId); + contactName = ContactHelper.getContactName(resolver, contactId); + } if (contactName != null) {//contact name exists for given master key mSystemContactName.setText(contactName); - Bitmap picture = ContactHelper.loadPhotoByMasterKeyId(resolver, masterKeyId, true); + Bitmap picture; + if(mIsSecret) { + picture = ContactHelper.loadMainProfilePhoto(resolver, false); + } else { + picture = ContactHelper.loadPhotoByMasterKeyId(resolver,masterKeyId,false); + } if (picture != null) mSystemContactPicture.setImageBitmap(picture); + final long finalContactId = contactId; mSystemContactLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - launchContactActivity(contactId, context); + launchContactActivity(finalContactId, context); } }); mSystemContactLoaded = true; @@ -239,14 +257,14 @@ public class ViewKeyFragment extends LoaderFragment implements switch (loader.getId()) { case LOADER_ID_UNIFIED: { if (data.moveToFirst()) { + + mIsSecret = data.getInt(INDEX_HAS_ANY_SECRET) != 0; + //TODO system to allow immediate refreshing of system contact on verification if (!mSystemContactLoaded) {//ensure we load linked system contact only once long masterKeyId = data.getLong(INDEX_MASTER_KEY_ID); loadLinkedSystemContact(masterKeyId); } - - mIsSecret = data.getInt(INDEX_HAS_ANY_SECRET) != 0; - // load user ids after we know if it's a secret key mUserIdsAdapter = new UserIdsAdapter(getActivity(), null, 0, !mIsSecret, null); mUserIds.setAdapter(mUserIdsAdapter); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java index 1b52e4e6b..cb6c39188 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java @@ -190,7 +190,7 @@ public class ContactHelper { * @param context * @return */ - private static List getMainProfileContactName(Context context) { + public static List getMainProfileContactName(Context context) { ContentResolver resolver = context.getContentResolver(); Cursor profileCursor = resolver.query( ContactsContract.Profile.CONTENT_URI, @@ -214,6 +214,38 @@ public class ContactHelper { return new ArrayList<>(names); } + public static long getMainProfileContactId(ContentResolver resolver) { + Cursor profileCursor = resolver.query( + ContactsContract.Profile.CONTENT_URI, + new String[]{ + ContactsContract.Profile._ID + }, + null, null, null); + if (profileCursor == null) { + return -1; + } + + profileCursor.moveToNext(); + return profileCursor.getLong(0); + } + + public static Bitmap loadMainProfilePhoto(ContentResolver contentResolver, boolean highRes) { + try { + long mainProfileContactId = getMainProfileContactId(contentResolver); + + Uri contactUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, + Long.toString(mainProfileContactId)); + InputStream photoInputStream = + ContactsContract.Contacts.openContactPhotoInputStream(contentResolver, contactUri, highRes); + if (photoInputStream == null) { + return null; + } + return BitmapFactory.decodeStream(photoInputStream); + } catch (Throwable ignored) { + return null; + } + } + public static List getContactMails(Context context) { ContentResolver resolver = context.getContentResolver(); Cursor mailCursor = resolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, @@ -269,7 +301,7 @@ public class ContactHelper { /** * returns the CONTACT_ID of the raw contact to which a masterKeyId is associated, if the - * raw contact has not been marked for deletion + * raw contact has not been marked for deletion. * * @param resolver * @param masterKeyId @@ -428,7 +460,8 @@ public class ContactHelper { // Do not store expired or revoked or unverified keys in contact db - and // remove them if they already exist. Secret keys do not reach this point if (isExpired || isRevoked || !isVerified) { - Log.d(Constants.TAG, "Expired or revoked or unverified: Deleting rawContactId " + rawContactId); + Log.d(Constants.TAG, "Expired or revoked or unverified: Deleting rawContactId " + + rawContactId); if (rawContactId != -1) { deleteRawContactById(resolver, rawContactId); } -- cgit v1.2.3 From d7ef2c1b9ed9a98c33049c9dc8b43611cf5b99ce Mon Sep 17 00:00:00 2001 From: Adithya Abraham Philip Date: Fri, 13 Mar 2015 04:49:34 +0530 Subject: added some documentation --- .../keychain/ui/ViewKeyFragment.java | 9 +- .../keychain/util/ContactHelper.java | 105 ++++++++++++++++----- 2 files changed, 87 insertions(+), 27 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java index 68da3b58c..18f1ef8a7 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java @@ -121,6 +121,7 @@ public class ViewKeyFragment extends LoaderFragment implements /** * Checks if a system contact exists for given masterKeyId, and if it does, sets name, picture * and onClickListener for the linked system contact's layout + * In the case of a secret key, "me" contact details are loaded * * @param masterKeyId */ @@ -131,10 +132,10 @@ public class ViewKeyFragment extends LoaderFragment implements long contactId; String contactName = null; - if(mIsSecret) { + if (mIsSecret) {//all secret keys are linked to "me" profile in contacts contactId = ContactHelper.getMainProfileContactId(resolver); List mainProfileNames = ContactHelper.getMainProfileContactName(context); - if(mainProfileNames!=null) contactName = mainProfileNames.get(0); + if (mainProfileNames != null) contactName = mainProfileNames.get(0); } else { contactId = ContactHelper.findContactId(resolver, masterKeyId); @@ -145,10 +146,10 @@ public class ViewKeyFragment extends LoaderFragment implements mSystemContactName.setText(contactName); Bitmap picture; - if(mIsSecret) { + if (mIsSecret) { picture = ContactHelper.loadMainProfilePhoto(resolver, false); } else { - picture = ContactHelper.loadPhotoByMasterKeyId(resolver,masterKeyId,false); + picture = ContactHelper.loadPhotoByMasterKeyId(resolver, masterKeyId, false); } if (picture != null) mSystemContactPicture.setImageBitmap(picture); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java index cb6c39188..c07d7a36b 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java @@ -214,6 +214,13 @@ public class ContactHelper { return new ArrayList<>(names); } + /** + * returns the CONTACT_ID of the main ("me") contact + * http://developer.android.com/reference/android/provider/ContactsContract.Profile.html + * + * @param resolver + * @return + */ public static long getMainProfileContactId(ContentResolver resolver) { Cursor profileCursor = resolver.query( ContactsContract.Profile.CONTENT_URI, @@ -229,6 +236,14 @@ public class ContactHelper { return profileCursor.getLong(0); } + /** + * loads the profile picture of the main ("me") contact + * http://developer.android.com/reference/android/provider/ContactsContract.Profile.html + * + * @param contentResolver + * @param highRes true for large image if present, false for thumbnail + * @return bitmap of loaded photo + */ public static Bitmap loadMainProfilePhoto(ContentResolver contentResolver, boolean highRes) { try { long mainProfileContactId = getMainProfileContactId(contentResolver); @@ -496,6 +511,12 @@ public class ContactHelper { } } + /** + * Links all keys with secrets to the main ("me") contact + * http://developer.android.com/reference/android/provider/ContactsContract.Profile.html + * + * @param context + */ public static void writeKeysToMainProfileContact(Context context) { ContentResolver resolver = context.getContentResolver(); Set keysToDelete = getMainProfileMasterKeyIds(resolver); @@ -509,22 +530,28 @@ public class ContactHelper { if (cursor != null) { while (cursor.moveToNext()) { long masterKeyId = cursor.getLong(INDEX_MASTER_KEY_ID); + boolean isExpired = cursor.getInt(INDEX_IS_EXPIRED) != 0; + boolean isRevoked = cursor.getInt(INDEX_IS_REVOKED) > 0; - boolean existsInMainProfile = keysToDelete.remove(masterKeyId); - if (!existsInMainProfile) { - long rawContactId = -1;//new raw contact + if (!isExpired && !isRevoked) { + // if expired or revoked will not be removed from keysToDelete or inserted + // into main profile ("me" contact) + boolean existsInMainProfile = keysToDelete.remove(masterKeyId); + if (!existsInMainProfile) { + long rawContactId = -1;//new raw contact - String keyIdShort = KeyFormattingUtils.convertKeyIdToHexShort(masterKeyId); - Log.d(Constants.TAG, "masterKeyId with secret " + masterKeyId); + String keyIdShort = KeyFormattingUtils.convertKeyIdToHexShort(masterKeyId); + Log.d(Constants.TAG, "masterKeyId with secret " + masterKeyId); - ArrayList ops = new ArrayList<>(); - insertMainProfileRawContact(ops, masterKeyId); - writeContactKey(ops, context, rawContactId, masterKeyId, keyIdShort); + ArrayList ops = new ArrayList<>(); + insertMainProfileRawContact(ops, masterKeyId); + writeContactKey(ops, context, rawContactId, masterKeyId, keyIdShort); - try { - resolver.applyBatch(ContactsContract.AUTHORITY, ops); - } catch (Exception e) { - Log.w(Constants.TAG, e); + try { + resolver.applyBatch(ContactsContract.AUTHORITY, ops); + } catch (Exception e) { + Log.w(Constants.TAG, e); + } } } } @@ -538,6 +565,7 @@ public class ContactHelper { /** * Inserts a raw contact into the table defined by ContactsContract.Profile + * http://developer.android.com/reference/android/provider/ContactsContract.Profile.html * * @param ops * @param masterKeyId @@ -552,7 +580,8 @@ public class ContactHelper { } /** - * deletes a raw contact from the profile table + * deletes a raw contact from the main profile table ("me" contact) + * http://developer.android.com/reference/android/provider/ContactsContract.Profile.html * * @param resolver * @param masterKeyId @@ -560,8 +589,8 @@ public class ContactHelper { */ private static int deleteMainProfileRawContactByMasterKeyId(ContentResolver resolver, long masterKeyId) { - //allows us to actually wipe the RawContact from the device, otherwise would be just flagged - //for deletion + // CALLER_IS_SYNCADAPTER allows us to actually wipe the RawContact from the device, otherwise + // would be just flagged for deletion Uri deleteUri = ContactsContract.Profile.CONTENT_RAW_CONTACTS_URI.buildUpon(). appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build(); @@ -574,25 +603,47 @@ public class ContactHelper { } /** - * Delete all raw contacts associated to OpenKeychain. + * Delete all raw contacts associated to OpenKeychain, including those from "me" contact + * defined by ContactsContract.Profile + * + * @return number of rows deleted */ private static int debugDeleteRawContacts(ContentResolver resolver) { - //allows us to actually wipe the RawContact from the device, otherwise would be just flagged - //for deletion + // CALLER_IS_SYNCADAPTER allows us to actually wipe the RawContact from the device, otherwise + // would be just flagged for deletion Uri deleteUri = ContactsContract.RawContacts.CONTENT_URI.buildUpon(). appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build(); Log.d(Constants.TAG, "Deleting all raw contacts associated to OK..."); - return resolver.delete(deleteUri, + int delete = resolver.delete(deleteUri, + ContactsContract.RawContacts.ACCOUNT_TYPE + "=?", + new String[]{ + Constants.ACCOUNT_TYPE + }); + + Uri mainProfileDeleteUri = ContactsContract.Profile.CONTENT_RAW_CONTACTS_URI.buildUpon() + .appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build(); + + delete += resolver.delete(mainProfileDeleteUri, ContactsContract.RawContacts.ACCOUNT_TYPE + "=?", new String[]{ Constants.ACCOUNT_TYPE }); + + return delete; } + /** + * Deletes raw contacts from ContactsContract.RawContacts based on rawContactId. Does not + * delete contacts from the "me" contact defined in ContactsContract.Profile + * + * @param resolver + * @param rawContactId + * @return number of rows deleted + */ private static int deleteRawContactById(ContentResolver resolver, long rawContactId) { - //allows us to actually wipe the RawContact from the device, otherwise would be just flagged - //for deletion + // CALLER_IS_SYNCADAPTER allows us to actually wipe the RawContact from the device, otherwise + // would be just flagged for deletion Uri deleteUri = ContactsContract.RawContacts.CONTENT_URI.buildUpon(). appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build(); @@ -604,9 +655,17 @@ public class ContactHelper { }); } + /** + * Deletes raw contacts from ContactsContract.RawContacts based on masterKeyId. Does not + * delete contacts from the "me" contact defined in ContactsContract.Profile + * + * @param resolver + * @param masterKeyId + * @return number of rows deleted + */ private static int deleteRawContactByMasterKeyId(ContentResolver resolver, long masterKeyId) { - //allows us to actually wipe the RawContact from the device, otherwise would be just flagged - //for deletion + // CALLER_IS_SYNCADAPTER allows us to actually wipe the RawContact from the device, otherwise + // would be just flagged for deletion Uri deleteUri = ContactsContract.RawContacts.CONTENT_URI.buildUpon(). appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build(); -- cgit v1.2.3 From d56c90ce76236d94b14510d76cbb01bfad71d34f Mon Sep 17 00:00:00 2001 From: "tdjogi010@gmail.com" Date: Thu, 12 Mar 2015 20:59:05 +0530 Subject: Preselected Suitable Key --- .../keychain/ui/widget/CertifyKeySpinner.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/CertifyKeySpinner.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/CertifyKeySpinner.java index fc912fccb..6dd254aa1 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/CertifyKeySpinner.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/CertifyKeySpinner.java @@ -91,11 +91,17 @@ public class CertifyKeySpinner extends KeySpinner { mIndexIsRevoked = data.getColumnIndex(KeychainContract.KeyRings.IS_REVOKED); mIndexIsExpired = data.getColumnIndex(KeychainContract.KeyRings.IS_EXPIRED); - // If there is only one choice, pick it by default - if (mAdapter.getCount() == 2) { + // If there is more than one choice, pick a key + if (mAdapter.getCount() >= 2) { // preselect if key can certify - if (data.moveToPosition(0) && !data.isNull(mIndexHasCertify)) { - setSelection(1); + if (data.moveToPosition(0)) { + do { + if (!data.isNull(mIndexHasCertify)) { + setSelection(data.getPosition() + 1); + break; + } + } + while (data.moveToNext()); } } } -- cgit v1.2.3 From cd7f63122193cd9b3c62169381b4d8cef4a88bd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Sat, 14 Mar 2015 14:05:31 +0100 Subject: Show key name instead of key id in contacts, cleanup --- .../keychain/util/ContactHelper.java | 27 ++++++---------------- 1 file changed, 7 insertions(+), 20 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java index c07d7a36b..d5078da3c 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java @@ -426,25 +426,14 @@ public class ContactHelper { */ public static void writeKeysToContacts(Context context) { ContentResolver resolver = context.getContentResolver(); - Set deletedKeys = getRawContactMasterKeyIds(resolver); - - writeKeysToMainProfileContact(context); if (Constants.DEBUG_SYNC_REMOVE_CONTACTS) { debugDeleteRawContacts(resolver); } -// ContentProviderClient client = resolver.acquireContentProviderClient(ContactsContract.AUTHORITY_URI); -// ContentValues values = new ContentValues(); -// Account account = new Account(Constants.ACCOUNT_NAME, Constants.ACCOUNT_TYPE); -// values.put(ContactsContract.Settings.ACCOUNT_NAME, account.name); -// values.put(ContactsContract.Settings.ACCOUNT_TYPE, account.type); -// values.put(ContactsContract.Settings.UNGROUPED_VISIBLE, true); -// try { -// client.insert(ContactsContract.Settings.CONTENT_URI.buildUpon().appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build(), values); -// } catch (RemoteException e) { -// e.printStackTrace(); -// } + writeKeysToMainProfileContact(context, resolver); + + Set deletedKeys = getRawContactMasterKeyIds(resolver); // Load all public Keys from OK // TODO: figure out why using selectionArgs does not work in this case @@ -457,7 +446,6 @@ public class ContactHelper { while (cursor.moveToNext()) { long masterKeyId = cursor.getLong(INDEX_MASTER_KEY_ID); String[] userIdSplit = KeyRing.splitUserId(cursor.getString(INDEX_USER_ID)); - String keyIdShort = KeyFormattingUtils.convertKeyIdToHexShort(cursor.getLong(INDEX_MASTER_KEY_ID)); boolean isExpired = cursor.getInt(INDEX_IS_EXPIRED) != 0; boolean isRevoked = cursor.getInt(INDEX_IS_REVOKED) > 0; boolean isVerified = cursor.getInt(INDEX_VERIFIED) > 0; @@ -487,7 +475,7 @@ public class ContactHelper { Log.d(Constants.TAG, "Insert new raw contact with masterKeyId " + masterKeyId); insertContact(ops, context, masterKeyId); - writeContactKey(ops, context, rawContactId, masterKeyId, keyIdShort); + writeContactKey(ops, context, rawContactId, masterKeyId, userIdSplit[0]); } // We always update the display name (which is derived from primary user id) @@ -517,8 +505,7 @@ public class ContactHelper { * * @param context */ - public static void writeKeysToMainProfileContact(Context context) { - ContentResolver resolver = context.getContentResolver(); + public static void writeKeysToMainProfileContact(Context context, ContentResolver resolver) { Set keysToDelete = getMainProfileMasterKeyIds(resolver); // get all keys which have associated secret keys @@ -763,10 +750,10 @@ public class ContactHelper { * This creates the link to OK in contact details */ private static void writeContactKey(ArrayList ops, Context context, long rawContactId, - long masterKeyId, String keyIdShort) { + long masterKeyId, String keyName) { ops.add(referenceRawContact(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI), rawContactId) .withValue(ContactsContract.Data.MIMETYPE, Constants.CUSTOM_CONTACT_DATA_MIME_TYPE) - .withValue(ContactsContract.Data.DATA1, context.getString(R.string.contact_show_key, keyIdShort)) + .withValue(ContactsContract.Data.DATA1, context.getString(R.string.contact_show_key, keyName)) .withValue(ContactsContract.Data.DATA2, masterKeyId) .build()); } -- cgit v1.2.3 From 12734127a74a7e2a6afea4f7a0d5fda5ee01dadf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Sat, 14 Mar 2015 14:07:45 +0100 Subject: Use names also for main contact --- .../src/main/java/org/sufficientlysecure/keychain/Constants.java | 2 +- .../java/org/sufficientlysecure/keychain/util/ContactHelper.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java index 30d855a74..0ea3105b1 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java @@ -29,7 +29,7 @@ public final class Constants { public static final boolean DEBUG = BuildConfig.DEBUG; public static final boolean DEBUG_LOG_DB_QUERIES = false; - public static final boolean DEBUG_SYNC_REMOVE_CONTACTS = false; + public static final boolean DEBUG_SYNC_REMOVE_CONTACTS = true; public static final String TAG = "Keychain"; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java index d5078da3c..d102745b6 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java @@ -519,20 +519,20 @@ public class ContactHelper { long masterKeyId = cursor.getLong(INDEX_MASTER_KEY_ID); boolean isExpired = cursor.getInt(INDEX_IS_EXPIRED) != 0; boolean isRevoked = cursor.getInt(INDEX_IS_REVOKED) > 0; + String[] userIdSplit = KeyRing.splitUserId(cursor.getString(INDEX_USER_ID)); - if (!isExpired && !isRevoked) { + if (!isExpired && !isRevoked && userIdSplit[0] != null) { // if expired or revoked will not be removed from keysToDelete or inserted // into main profile ("me" contact) boolean existsInMainProfile = keysToDelete.remove(masterKeyId); if (!existsInMainProfile) { long rawContactId = -1;//new raw contact - String keyIdShort = KeyFormattingUtils.convertKeyIdToHexShort(masterKeyId); Log.d(Constants.TAG, "masterKeyId with secret " + masterKeyId); ArrayList ops = new ArrayList<>(); insertMainProfileRawContact(ops, masterKeyId); - writeContactKey(ops, context, rawContactId, masterKeyId, keyIdShort); + writeContactKey(ops, context, rawContactId, masterKeyId, userIdSplit[0]); try { resolver.applyBatch(ContactsContract.AUTHORITY, ops); -- cgit v1.2.3 From afa7790fbd3e1c9e9145e33a4ac0e4ed7967963b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Sat, 14 Mar 2015 14:08:03 +0100 Subject: disable debug sync --- .../src/main/java/org/sufficientlysecure/keychain/Constants.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java index 0ea3105b1..30d855a74 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java @@ -29,7 +29,7 @@ public final class Constants { public static final boolean DEBUG = BuildConfig.DEBUG; public static final boolean DEBUG_LOG_DB_QUERIES = false; - public static final boolean DEBUG_SYNC_REMOVE_CONTACTS = true; + public static final boolean DEBUG_SYNC_REMOVE_CONTACTS = false; public static final String TAG = "Keychain"; -- cgit v1.2.3 From 6c9b2ce0c039c536003f01f04c9a7f14671e9ce3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Sun, 15 Mar 2015 00:49:29 +0100 Subject: Add missing license headers --- .../keychain/operations/BaseOperation.java | 17 +++++++++++++++++ .../keychain/operations/CertifyOperation.java | 17 +++++++++++++++++ .../keychain/operations/DeleteOperation.java | 17 +++++++++++++++++ .../keychain/operations/EditKeyOperation.java | 17 +++++++++++++++++ .../keychain/operations/PromoteKeyOperation.java | 17 +++++++++++++++++ .../keychain/operations/SignEncryptOperation.java | 17 +++++++++++++++++ 6 files changed, 102 insertions(+) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/BaseOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/BaseOperation.java index e796bdc91..40dcbd78d 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/BaseOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/BaseOperation.java @@ -1,3 +1,20 @@ +/* + * Copyright (C) 2014-2015 Vincent Breitmoser + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package org.sufficientlysecure.keychain.operations; import android.content.Context; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/CertifyOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/CertifyOperation.java index 65bc6381b..ebf0dc70b 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/CertifyOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/CertifyOperation.java @@ -1,3 +1,20 @@ +/* + * Copyright (C) 2014-2015 Vincent Breitmoser + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package org.sufficientlysecure.keychain.operations; import android.content.Context; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/DeleteOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/DeleteOperation.java index 124dd1aaf..5ef04ab05 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/DeleteOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/DeleteOperation.java @@ -1,3 +1,20 @@ +/* + * Copyright (C) 2014-2015 Vincent Breitmoser + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package org.sufficientlysecure.keychain.operations; import android.content.Context; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/EditKeyOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/EditKeyOperation.java index 7f14b08d9..bcd842dd0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/EditKeyOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/EditKeyOperation.java @@ -1,3 +1,20 @@ +/* + * Copyright (C) 2014-2015 Vincent Breitmoser + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package org.sufficientlysecure.keychain.operations; import android.content.Context; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/PromoteKeyOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/PromoteKeyOperation.java index 783b32477..fd86d4b92 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/PromoteKeyOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/PromoteKeyOperation.java @@ -1,3 +1,20 @@ +/* + * Copyright (C) 2014-2015 Vincent Breitmoser + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package org.sufficientlysecure.keychain.operations; import android.content.Context; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/SignEncryptOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/SignEncryptOperation.java index af60ea5ee..b5552a40d 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/SignEncryptOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/SignEncryptOperation.java @@ -1,3 +1,20 @@ +/* + * Copyright (C) 2014-2015 Vincent Breitmoser + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package org.sufficientlysecure.keychain.operations; import android.content.Context; -- cgit v1.2.3 From d3dd9020f585b8f587d9f2deb377750dbd260db1 Mon Sep 17 00:00:00 2001 From: Daniel Ramos Date: Sun, 15 Mar 2015 00:12:26 +0000 Subject: -fixed out of bounds crash when retrieving the main profile name with secret keys -fixed a possible crash when retrieving the main profile contactid --- .../keychain/ui/ViewKeyFragment.java | 4 +++- .../keychain/util/ContactHelper.java | 22 ++++++++++++---------- 2 files changed, 15 insertions(+), 11 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java index 18f1ef8a7..c3a8d60f8 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java @@ -135,7 +135,9 @@ public class ViewKeyFragment extends LoaderFragment implements if (mIsSecret) {//all secret keys are linked to "me" profile in contacts contactId = ContactHelper.getMainProfileContactId(resolver); List mainProfileNames = ContactHelper.getMainProfileContactName(context); - if (mainProfileNames != null) contactName = mainProfileNames.get(0); + if (mainProfileNames != null && mainProfileNames.size() > 0) { + contactName = mainProfileNames.get(0); + } } else { contactId = ContactHelper.findContactId(resolver, masterKeyId); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java index c07d7a36b..3fa6ea666 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java @@ -222,18 +222,20 @@ public class ContactHelper { * @return */ public static long getMainProfileContactId(ContentResolver resolver) { - Cursor profileCursor = resolver.query( - ContactsContract.Profile.CONTENT_URI, - new String[]{ - ContactsContract.Profile._ID - }, - null, null, null); - if (profileCursor == null) { + Cursor profileCursor = resolver.query(ContactsContract.Profile.CONTENT_URI, + new String[]{ ContactsContract.Profile._ID}, null, null, null); + + if(profileCursor != null && profileCursor.getCount() != 0 && profileCursor.moveToNext()) { + long contactId = profileCursor.getLong(0); + profileCursor.close(); + return contactId; + } + else { + if(profileCursor != null) { + profileCursor.close(); + } return -1; } - - profileCursor.moveToNext(); - return profileCursor.getLong(0); } /** -- cgit v1.2.3 From c2593f29fffe858074f23512e5f4d6859c816bf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Sun, 15 Mar 2015 02:40:31 +0100 Subject: Query for duplicate user ids --- .../sufficientlysecure/keychain/provider/KeychainContract.java | 1 + .../sufficientlysecure/keychain/provider/KeychainProvider.java | 10 +++++++++- .../org/sufficientlysecure/keychain/ui/KeyListFragment.java | 5 ++++- 3 files changed, 14 insertions(+), 2 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainContract.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainContract.java index 5856589c4..6af5f4217 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainContract.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainContract.java @@ -123,6 +123,7 @@ public class KeychainContract { public static final String HAS_SIGN = "has_sign"; public static final String HAS_CERTIFY = "has_certify"; public static final String HAS_AUTHENTICATE = "has_authenticate"; + public static final String HAS_DUPLICATE_USER_ID = "has_duplicate_user_id"; public static final String PUBKEY_DATA = "pubkey_data"; public static final String PRIVKEY_DATA = "privkey_data"; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java index 4ccfc3cd9..1351e0cbc 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java @@ -273,7 +273,15 @@ public class KeychainProvider extends ContentProvider { projectionMap.put(KeyRings.EXPIRY, Tables.KEYS + "." + Keys.EXPIRY); projectionMap.put(KeyRings.ALGORITHM, Tables.KEYS + "." + Keys.ALGORITHM); projectionMap.put(KeyRings.FINGERPRINT, Tables.KEYS + "." + Keys.FINGERPRINT); - projectionMap.put(KeyRings.USER_ID, UserPackets.USER_ID); + projectionMap.put(KeyRings.USER_ID, Tables.USER_PACKETS + "." + UserPackets.USER_ID); + projectionMap.put(KeyRings.HAS_DUPLICATE_USER_ID, + "(SELECT COUNT (*) FROM " + Tables.USER_PACKETS + " AS dups" + + " WHERE dups." + UserPackets.MASTER_KEY_ID + + " != " + Tables.KEYS + "." + Keys.MASTER_KEY_ID + + " AND dups." + UserPackets.RANK + " = 0" + + " AND dups." + UserPackets.USER_ID + + " = "+ Tables.USER_PACKETS + "." + UserPackets.USER_ID + + ") AS " + KeyRings.HAS_DUPLICATE_USER_ID); projectionMap.put(KeyRings.VERIFIED, KeyRings.VERIFIED); projectionMap.put(KeyRings.PUBKEY_DATA, Tables.KEY_RINGS_PUBLIC + "." + KeyRingData.KEY_RING_DATA diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java index b7f9bc99f..8c34efba2 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java @@ -270,7 +270,8 @@ public class KeyListFragment extends LoaderFragment KeyRings.IS_REVOKED, KeyRings.IS_EXPIRED, KeyRings.VERIFIED, - KeyRings.HAS_ANY_SECRET + KeyRings.HAS_ANY_SECRET, + KeyRings.HAS_DUPLICATE_USER_ID, }; static final int INDEX_MASTER_KEY_ID = 1; @@ -279,6 +280,7 @@ public class KeyListFragment extends LoaderFragment static final int INDEX_IS_EXPIRED = 4; static final int INDEX_VERIFIED = 5; static final int INDEX_HAS_ANY_SECRET = 6; + static final int INDEX_HAS_DUPLICATE_USER_ID = 7; static final String ORDER = KeyRings.HAS_ANY_SECRET + " DESC, UPPER(" + KeyRings.USER_ID + ") ASC"; @@ -707,6 +709,7 @@ public class KeyListFragment extends LoaderFragment boolean isRevoked = cursor.getInt(INDEX_IS_REVOKED) > 0; boolean isExpired = cursor.getInt(INDEX_IS_EXPIRED) != 0; boolean isVerified = cursor.getInt(INDEX_VERIFIED) > 0; + boolean hasDuplicate = cursor.getInt(INDEX_HAS_DUPLICATE_USER_ID) == 1; h.mMasterKeyId = masterKeyId; -- cgit v1.2.3 From 0fe060e88eb41ee0d5d7b26f452076a102dc9109 Mon Sep 17 00:00:00 2001 From: Manoj Khanna Date: Sun, 15 Mar 2015 12:30:08 +0530 Subject: Fixed a ClassCastException --- .../keychain/remote/ui/AccountSettingsFragment.java | 6 +++--- .../keychain/remote/ui/SelectSignKeyIdActivity.java | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AccountSettingsFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AccountSettingsFragment.java index 940ae27d0..4bb64bcaa 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AccountSettingsFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AccountSettingsFragment.java @@ -28,8 +28,8 @@ import android.widget.TextView; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.operations.results.EditKeyResult; import org.sufficientlysecure.keychain.operations.results.OperationResult; -import org.sufficientlysecure.keychain.operations.results.SaveKeyringResult; import org.sufficientlysecure.keychain.pgp.KeyRing; import org.sufficientlysecure.keychain.remote.AccountSettings; import org.sufficientlysecure.keychain.ui.CreateKeyActivity; @@ -106,8 +106,8 @@ public class AccountSettingsFragment extends Fragment { case REQUEST_CODE_CREATE_KEY: { if (resultCode == Activity.RESULT_OK) { if (data != null && data.hasExtra(OperationResult.EXTRA_RESULT)) { - SaveKeyringResult result = data.getParcelableExtra(OperationResult.EXTRA_RESULT); - mSelectKeySpinner.setSelectedKeyId(result.mRingMasterKeyId); + EditKeyResult result = data.getParcelableExtra(OperationResult.EXTRA_RESULT); + mSelectKeySpinner.setSelectedKeyId(result.mMasterKeyId); } else { Log.e(Constants.TAG, "missing result!"); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdActivity.java index 8578bb384..5ec47f4c9 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdActivity.java @@ -127,9 +127,9 @@ public class SelectSignKeyIdActivity extends BaseActivity { case REQUEST_CODE_CREATE_KEY: { if (resultCode == Activity.RESULT_OK) { if (data != null && data.hasExtra(OperationResult.EXTRA_RESULT)) { -// SaveKeyringResult result = data.getParcelableExtra(OperationResult.EXTRA_RESULT); // TODO: select? -// mSelectKeySpinner.setSelectedKeyId(result.mRingMasterKeyId); +// EditKeyResult result = data.getParcelableExtra(OperationResult.EXTRA_RESULT); +// mSelectKeySpinner.setSelectedKeyId(result.mMasterKeyId); } else { Log.e(Constants.TAG, "missing result!"); } -- cgit v1.2.3 From f4cb254404fd1194dda2995fa1ddab85ea0a28d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Sun, 15 Mar 2015 15:29:06 +0100 Subject: Dont display key ids in KeySpinner, display creation date when user ids duplicate --- .../keychain/ui/widget/CertifyKeySpinner.java | 4 +- .../keychain/ui/widget/KeySpinner.java | 43 ++++++++++++++++------ .../keychain/ui/widget/SignKeySpinner.java | 4 +- .../src/main/res/layout/keyspinner_item.xml | 4 +- 4 files changed, 39 insertions(+), 16 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/CertifyKeySpinner.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/CertifyKeySpinner.java index fc912fccb..53d1eb7e7 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/CertifyKeySpinner.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/CertifyKeySpinner.java @@ -68,7 +68,9 @@ public class CertifyKeySpinner extends KeySpinner { KeychainContract.KeyRings.IS_REVOKED, KeychainContract.KeyRings.IS_EXPIRED, KeychainContract.KeyRings.HAS_CERTIFY, - KeychainContract.KeyRings.HAS_ANY_SECRET + KeychainContract.KeyRings.HAS_ANY_SECRET, + KeychainContract.KeyRings.HAS_DUPLICATE_USER_ID, + KeychainContract.KeyRings.CREATION }; String where = KeychainContract.KeyRings.HAS_ANY_SECRET + " = 1 AND " diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/KeySpinner.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/KeySpinner.java index c8eceea50..ab5b02301 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/KeySpinner.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/KeySpinner.java @@ -25,6 +25,7 @@ import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; import android.support.v4.widget.CursorAdapter; import android.support.v7.internal.widget.TintSpinner; +import android.text.format.DateFormat; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; @@ -41,6 +42,10 @@ import org.sufficientlysecure.keychain.provider.KeychainContract; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.util.Log; +import java.util.Calendar; +import java.util.Date; +import java.util.TimeZone; + /** * Use TintSpinner from AppCompat lib instead of Spinner. Fixes white dropdown icon. * Related: http://stackoverflow.com/a/27713090 @@ -139,11 +144,12 @@ public abstract class KeySpinner extends TintSpinner implements LoaderManager.Lo protected class SelectKeyAdapter extends BaseAdapter implements SpinnerAdapter { private CursorAdapter inner; private int mIndexUserId; - private int mIndexKeyId; + private int mIndexDuplicate; private int mIndexMasterKeyId; + private int mIndexCreationDate; public SelectKeyAdapter() { - inner = new CursorAdapter(null, null, 0) { + inner = new CursorAdapter(getContext(), null, 0) { @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { return View.inflate(getContext(), R.layout.keyspinner_item, null); @@ -154,12 +160,26 @@ public abstract class KeySpinner extends TintSpinner implements LoaderManager.Lo TextView vKeyName = (TextView) view.findViewById(R.id.keyspinner_key_name); ImageView vKeyStatus = (ImageView) view.findViewById(R.id.keyspinner_key_status); TextView vKeyEmail = (TextView) view.findViewById(R.id.keyspinner_key_email); - TextView vKeyId = (TextView) view.findViewById(R.id.keyspinner_key_id); + TextView vDuplicate = (TextView) view.findViewById(R.id.keyspinner_duplicate); String[] userId = KeyRing.splitUserId(cursor.getString(mIndexUserId)); vKeyName.setText(userId[2] == null ? userId[0] : (userId[0] + " (" + userId[2] + ")")); vKeyEmail.setText(userId[1]); - vKeyId.setText(KeyFormattingUtils.beautifyKeyIdWithPrefix(getContext(), cursor.getLong(mIndexKeyId))); + + boolean duplicate = cursor.getLong(mIndexDuplicate) > 0; + if (duplicate) { + Date creationDate = new Date(cursor.getLong(mIndexCreationDate) * 1000); + Calendar creationCal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + creationCal.setTime(creationDate); + // convert from UTC to time zone of device + creationCal.setTimeZone(TimeZone.getDefault()); + + vDuplicate.setText(context.getString(R.string.label_creation) + ": " + + DateFormat.getDateFormat(context).format(creationCal.getTime())); + vDuplicate.setVisibility(View.VISIBLE); + } else { + vDuplicate.setVisibility(View.GONE); + } boolean valid = setStatus(getContext(), cursor, vKeyStatus); setItemEnabled(view, valid); @@ -181,18 +201,18 @@ public abstract class KeySpinner extends TintSpinner implements LoaderManager.Lo TextView vKeyName = (TextView) view.findViewById(R.id.keyspinner_key_name); ImageView vKeyStatus = (ImageView) view.findViewById(R.id.keyspinner_key_status); TextView vKeyEmail = (TextView) view.findViewById(R.id.keyspinner_key_email); - TextView vKeyId = (TextView) view.findViewById(R.id.keyspinner_key_id); + TextView vKeyDuplicate = (TextView) view.findViewById(R.id.keyspinner_duplicate); if (enabled) { vKeyName.setTextColor(Color.BLACK); vKeyEmail.setTextColor(Color.BLACK); - vKeyId.setTextColor(Color.BLACK); + vKeyDuplicate.setTextColor(Color.BLACK); vKeyStatus.setVisibility(View.GONE); view.setClickable(false); } else { vKeyName.setTextColor(Color.GRAY); vKeyEmail.setTextColor(Color.GRAY); - vKeyId.setTextColor(Color.GRAY); + vKeyDuplicate.setTextColor(Color.GRAY); vKeyStatus.setVisibility(View.VISIBLE); // this is a HACK. the trick is, if the element itself is clickable, the // click is not passed on to the view list @@ -203,9 +223,10 @@ public abstract class KeySpinner extends TintSpinner implements LoaderManager.Lo public Cursor swapCursor(Cursor newCursor) { if (newCursor == null) return inner.swapCursor(null); - mIndexKeyId = newCursor.getColumnIndex(KeychainContract.KeyRings.KEY_ID); + mIndexDuplicate = newCursor.getColumnIndex(KeychainContract.KeyRings.HAS_DUPLICATE_USER_ID); mIndexUserId = newCursor.getColumnIndex(KeychainContract.KeyRings.USER_ID); mIndexMasterKeyId = newCursor.getColumnIndex(KeychainContract.KeyRings.MASTER_KEY_ID); + mIndexCreationDate = newCursor.getColumnIndex(KeychainContract.KeyRings.CREATION); if (newCursor.moveToFirst()) { do { if (newCursor.getLong(mIndexMasterKeyId) == mSelectedKeyId) { @@ -257,19 +278,17 @@ public abstract class KeySpinner extends TintSpinner implements LoaderManager.Lo TextView vKeyName = (TextView) view.findViewById(R.id.keyspinner_key_name); ImageView vKeyStatus = (ImageView) view.findViewById(R.id.keyspinner_key_status); TextView vKeyEmail = (TextView) view.findViewById(R.id.keyspinner_key_email); - TextView vKeyId = (TextView) view.findViewById(R.id.keyspinner_key_id); + TextView vKeyDuplicate = (TextView) view.findViewById(R.id.keyspinner_duplicate); vKeyName.setText(R.string.choice_none); vKeyEmail.setVisibility(View.GONE); - vKeyId.setVisibility(View.GONE); + vKeyDuplicate.setVisibility(View.GONE); vKeyStatus.setVisibility(View.GONE); setItemEnabled(view, true); } else { view = inner.getView(position - 1, convertView, parent); TextView vKeyEmail = (TextView) view.findViewById(R.id.keyspinner_key_email); - TextView vKeyId = (TextView) view.findViewById(R.id.keyspinner_key_id); vKeyEmail.setVisibility(View.VISIBLE); - vKeyId.setVisibility(View.VISIBLE); } return view; } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SignKeySpinner.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SignKeySpinner.java index 10327a6a4..df7347fa4 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SignKeySpinner.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SignKeySpinner.java @@ -59,7 +59,9 @@ public class SignKeySpinner extends KeySpinner { KeychainContract.KeyRings.IS_REVOKED, KeychainContract.KeyRings.IS_EXPIRED, KeychainContract.KeyRings.HAS_SIGN, - KeychainContract.KeyRings.HAS_ANY_SECRET + KeychainContract.KeyRings.HAS_ANY_SECRET, + KeychainContract.KeyRings.HAS_DUPLICATE_USER_ID, + KeychainContract.KeyRings.CREATION }; String where = KeychainContract.KeyRings.HAS_ANY_SECRET + " = 1"; diff --git a/OpenKeychain/src/main/res/layout/keyspinner_item.xml b/OpenKeychain/src/main/res/layout/keyspinner_item.xml index 45147e7b1..eea81eba5 100644 --- a/OpenKeychain/src/main/res/layout/keyspinner_item.xml +++ b/OpenKeychain/src/main/res/layout/keyspinner_item.xml @@ -36,8 +36,8 @@ android:textAppearance="?android:attr/textAppearanceSmall" /> Date: Sun, 15 Mar 2015 16:24:06 +0100 Subject: Fixes for selection of certify key --- .../keychain/ui/widget/CertifyKeySpinner.java | 25 +++++++++++++++------- .../keychain/ui/widget/KeySpinner.java | 6 ++++-- 2 files changed, 21 insertions(+), 10 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/CertifyKeySpinner.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/CertifyKeySpinner.java index fb6b84f58..460163a47 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/CertifyKeySpinner.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/CertifyKeySpinner.java @@ -93,22 +93,31 @@ public class CertifyKeySpinner extends KeySpinner { mIndexIsRevoked = data.getColumnIndex(KeychainContract.KeyRings.IS_REVOKED); mIndexIsExpired = data.getColumnIndex(KeychainContract.KeyRings.IS_EXPIRED); - // If there is more than one choice, pick a key - if (mAdapter.getCount() >= 2) { + // If: + // - no key has been pre-selected (e.g. by SageSlinger) + // - there are actually keys (not just "none" entry) + // Then: + // - select key that is capable of certifying, but only if there is only one key capable of it + if (mSelectedKeyId == Constants.key.none && mAdapter.getCount() > 1) { // preselect if key can certify - if (data.moveToPosition(0)) { - do { - if (!data.isNull(mIndexHasCertify)) { - setSelection(data.getPosition() + 1); - break; + int selection = -1; + while (data.moveToNext()) { + if (!data.isNull(mIndexHasCertify)) { + if (selection == -1) { + selection = data.getPosition() + 1; + } else { + // if selection is already set, we have more than one certify key! + // get back to "none"! + selection = 0; } } - while (data.moveToNext()); } + setSelection(selection); } } } + @Override boolean setStatus(Context context, Cursor cursor, ImageView statusView) { if (cursor.getInt(mIndexIsRevoked) != 0) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/KeySpinner.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/KeySpinner.java index ab5b02301..226588aaa 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/KeySpinner.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/KeySpinner.java @@ -55,7 +55,7 @@ public abstract class KeySpinner extends TintSpinner implements LoaderManager.Lo public void onKeyChanged(long masterKeyId); } - protected long mSelectedKeyId; + protected long mSelectedKeyId = Constants.key.none; protected SelectKeyAdapter mAdapter = new SelectKeyAdapter(); protected OnKeyChangedListener mListener; @@ -227,7 +227,9 @@ public abstract class KeySpinner extends TintSpinner implements LoaderManager.Lo mIndexUserId = newCursor.getColumnIndex(KeychainContract.KeyRings.USER_ID); mIndexMasterKeyId = newCursor.getColumnIndex(KeychainContract.KeyRings.MASTER_KEY_ID); mIndexCreationDate = newCursor.getColumnIndex(KeychainContract.KeyRings.CREATION); - if (newCursor.moveToFirst()) { + + // pre-select key if mSelectedKeyId is given + if (mSelectedKeyId != Constants.key.none && newCursor.moveToFirst()) { do { if (newCursor.getLong(mIndexMasterKeyId) == mSelectedKeyId) { setSelection(newCursor.getPosition() + 1); -- cgit v1.2.3 From 81d6da899f6662b4f14f50ed8797fb219bf0ae57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Sun, 15 Mar 2015 16:32:52 +0100 Subject: Show main user id instead of key in certify screen --- .../keychain/ui/adapter/MultiUserIdsAdapter.java | 25 +++++++++++++--------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/MultiUserIdsAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/MultiUserIdsAdapter.java index 015775669..5a0782e54 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/MultiUserIdsAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/MultiUserIdsAdapter.java @@ -81,16 +81,6 @@ public class MultiUserIdsAdapter extends CursorAdapter { ArrayList uids = p.createStringArrayList(); p.recycle(); - if (isHeader == 1) { - long masterKeyId = cursor.getLong(0); - vHeaderId.setVisibility(View.VISIBLE); - String message = mContext.getString(R.string.section_uids_to_certify) + - KeyFormattingUtils.beautifyKeyIdWithPrefix(mContext, masterKeyId); - vHeaderId.setText(message); - } else { - vHeaderId.setVisibility(View.GONE); - } - { // first one String userId = uids.get(0); String[] splitUserId = KeyRing.splitUserId(userId); @@ -99,6 +89,21 @@ public class MultiUserIdsAdapter extends CursorAdapter { } else { vName.setText(R.string.user_id_no_name); } + + if (isHeader == 1) { + vHeaderId.setVisibility(View.VISIBLE); + String message; + if (splitUserId[0] != null) { + message = mContext.getString(R.string.section_uids_to_certify) + + splitUserId[0]; + } else { + message = mContext.getString(R.string.section_uids_to_certify) + + context.getString(R.string.user_id_no_name); + } + vHeaderId.setText(message); + } else { + vHeaderId.setVisibility(View.GONE); + } } StringBuilder lines = new StringBuilder(); -- cgit v1.2.3 From fd5719ff6bd6f5b82199368d28a9cacfacf8ab24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Sun, 15 Mar 2015 18:40:52 +0100 Subject: Remove display of key id in other lists --- .../ui/AppSettingsAllowedKeysListFragment.java | 2 + .../remote/ui/SelectSignKeyIdListFragment.java | 2 + .../keychain/ui/SelectPublicKeyFragment.java | 2 + .../ui/adapter/SelectKeyCursorAdapter.java | 32 +++++++++++--- .../ui/widget/EncryptKeyCompletionView.java | 49 ++++++++++++++++------ .../src/main/res/layout/select_key_item.xml | 2 +- 6 files changed, 70 insertions(+), 19 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AppSettingsAllowedKeysListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AppSettingsAllowedKeysListFragment.java index 13b242a5e..b880525ca 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AppSettingsAllowedKeysListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AppSettingsAllowedKeysListFragment.java @@ -205,6 +205,8 @@ public class AppSettingsAllowedKeysListFragment extends ListFragmentWorkaround i KeyRings.HAS_ENCRYPT, KeyRings.VERIFIED, KeyRings.HAS_ANY_SECRET, + KeyRings.HAS_DUPLICATE_USER_ID, + KeyRings.CREATION, }; String inMasterKeyList = null; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdListFragment.java index e547d0145..e3768aa9b 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SelectSignKeyIdListFragment.java @@ -154,6 +154,8 @@ public class SelectSignKeyIdListFragment extends ListFragmentWorkaround implemen KeyRings.HAS_ENCRYPT, KeyRings.VERIFIED, KeyRings.HAS_ANY_SECRET, + KeyRings.HAS_DUPLICATE_USER_ID, + KeyRings.CREATION, }; String selection = KeyRings.HAS_ANY_SECRET + " != 0"; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectPublicKeyFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectPublicKeyFragment.java index 65d7eca37..6f48b7455 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectPublicKeyFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectPublicKeyFragment.java @@ -263,6 +263,8 @@ public class SelectPublicKeyFragment extends ListFragmentWorkaround implements T KeyRings.IS_REVOKED, KeyRings.HAS_ENCRYPT, KeyRings.VERIFIED, + KeyRings.HAS_DUPLICATE_USER_ID, + KeyRings.CREATION, }; String inMasterKeyList = null; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/SelectKeyCursorAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/SelectKeyCursorAdapter.java index 226fda20b..892e30a54 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/SelectKeyCursorAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/SelectKeyCursorAdapter.java @@ -20,6 +20,7 @@ package org.sufficientlysecure.keychain.ui.adapter; import android.content.Context; import android.database.Cursor; import android.support.v4.widget.CursorAdapter; +import android.text.format.DateFormat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -35,6 +36,10 @@ import org.sufficientlysecure.keychain.ui.util.Highlighter; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils.State; +import java.util.Calendar; +import java.util.Date; +import java.util.TimeZone; + /** * Yes this class is abstract! @@ -44,7 +49,8 @@ abstract public class SelectKeyCursorAdapter extends CursorAdapter { private String mQuery; private LayoutInflater mInflater; - protected int mIndexUserId, mIndexMasterKeyId, mIndexIsExpiry, mIndexIsRevoked; + protected int mIndexUserId, mIndexMasterKeyId, mIndexIsExpiry, mIndexIsRevoked, + mIndexDuplicateUserId, mIndexCreation; public SelectKeyCursorAdapter(Context context, Cursor c, int flags, ListView listView) { super(context, c, flags); @@ -75,6 +81,8 @@ abstract public class SelectKeyCursorAdapter extends CursorAdapter { mIndexMasterKeyId = cursor.getColumnIndexOrThrow(KeyRings.MASTER_KEY_ID); mIndexIsExpiry = cursor.getColumnIndexOrThrow(KeyRings.IS_EXPIRED); mIndexIsRevoked = cursor.getColumnIndexOrThrow(KeyRings.IS_REVOKED); + mIndexDuplicateUserId = cursor.getColumnIndexOrThrow(KeyRings.HAS_DUPLICATE_USER_ID); + mIndexCreation = cursor.getColumnIndexOrThrow(KeyRings.CREATION); } } @@ -90,7 +98,7 @@ abstract public class SelectKeyCursorAdapter extends CursorAdapter { public static class ViewHolderItem { public View view; - public TextView mainUserId, mainUserIdRest, keyId; + public TextView mainUserId, mainUserIdRest, creation; public ImageView statusIcon; public CheckBox selected; @@ -99,7 +107,7 @@ abstract public class SelectKeyCursorAdapter extends CursorAdapter { selected.setEnabled(enabled); mainUserId.setEnabled(enabled); mainUserIdRest.setEnabled(enabled); - keyId.setEnabled(enabled); + creation.setEnabled(enabled); statusIcon.setEnabled(enabled); // Sorta special: We set an item as clickable to disable it in the ListView. This works @@ -128,8 +136,20 @@ abstract public class SelectKeyCursorAdapter extends CursorAdapter { h.mainUserIdRest.setVisibility(View.GONE); } - long masterKeyId = cursor.getLong(mIndexMasterKeyId); - h.keyId.setText(KeyFormattingUtils.beautifyKeyIdWithPrefix(mContext, masterKeyId)); + boolean duplicate = cursor.getLong(mIndexDuplicateUserId) > 0; + if (duplicate) { + Date creationDate = new Date(cursor.getLong(mIndexCreation) * 1000); + Calendar creationCal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + creationCal.setTime(creationDate); + // convert from UTC to time zone of device + creationCal.setTimeZone(TimeZone.getDefault()); + + h.creation.setText(context.getString(R.string.label_creation) + ": " + + DateFormat.getDateFormat(context).format(creationCal.getTime())); + h.creation.setVisibility(View.VISIBLE); + } else { + h.creation.setVisibility(View.GONE); + } boolean enabled; if (cursor.getInt(mIndexIsRevoked) != 0) { @@ -155,7 +175,7 @@ abstract public class SelectKeyCursorAdapter extends CursorAdapter { holder.view = view; holder.mainUserId = (TextView) view.findViewById(R.id.select_key_item_name); holder.mainUserIdRest = (TextView) view.findViewById(R.id.select_key_item_email); - holder.keyId = (TextView) view.findViewById(R.id.select_key_item_key_id); + holder.creation = (TextView) view.findViewById(R.id.select_key_item_creation); holder.statusIcon = (ImageView) view.findViewById(R.id.select_key_item_status_icon); holder.selected = (CheckBox) view.findViewById(R.id.selected); view.setTag(holder); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/EncryptKeyCompletionView.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/EncryptKeyCompletionView.java index d20e2bc99..94a321f29 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/EncryptKeyCompletionView.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/EncryptKeyCompletionView.java @@ -28,6 +28,7 @@ import android.support.v4.app.FragmentActivity; import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; +import android.text.format.DateFormat; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; @@ -51,9 +52,12 @@ import org.sufficientlysecure.keychain.util.ContactHelper; import org.sufficientlysecure.keychain.util.Log; import java.util.ArrayList; +import java.util.Calendar; import java.util.Collections; +import java.util.Date; import java.util.List; import java.util.Locale; +import java.util.TimeZone; public class EncryptKeyCompletionView extends TokenCompleteTextView { public EncryptKeyCompletionView(Context context) { @@ -125,7 +129,9 @@ public class EncryptKeyCompletionView extends TokenCompleteTextView { KeyRings.USER_ID, KeyRings.FINGERPRINT, KeyRings.IS_EXPIRED, - KeyRings.HAS_ENCRYPT + KeyRings.HAS_ENCRYPT, + KeyRings.HAS_DUPLICATE_USER_ID, + KeyRings.CREATION }; String where = KeyRings.HAS_ENCRYPT + " NOT NULL AND " + KeyRings.IS_EXPIRED + " = 0 AND " @@ -153,7 +159,7 @@ public class EncryptKeyCompletionView extends TokenCompleteTextView { public void onFocusChanged(boolean hasFocus, int direction, Rect previous) { super.onFocusChanged(hasFocus, direction, previous); if (hasFocus) { - ((InputMethodManager)getContext().getSystemService(Context.INPUT_METHOD_SERVICE)) + ((InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE)) .showSoftInput(this, InputMethodManager.SHOW_IMPLICIT); } } @@ -180,25 +186,30 @@ public class EncryptKeyCompletionView extends TokenCompleteTextView { private String mUserIdFull; private String[] mUserId; private long mKeyId; + private boolean mHasDuplicate; + private Date mCreation; private String mFingerprint; - public EncryptionKey(String userId, long keyId, String fingerprint) { - this.mUserId = KeyRing.splitUserId(userId); - this.mUserIdFull = userId; - this.mKeyId = keyId; - this.mFingerprint = fingerprint; + public EncryptionKey(String userId, long keyId, boolean hasDuplicate, Date creation, String fingerprint) { + mUserId = KeyRing.splitUserId(userId); + mUserIdFull = userId; + mKeyId = keyId; + mHasDuplicate = hasDuplicate; + mCreation = creation; + mFingerprint = fingerprint; } public EncryptionKey(Cursor cursor) { this(cursor.getString(cursor.getColumnIndexOrThrow(KeyRings.USER_ID)), cursor.getLong(cursor.getColumnIndexOrThrow(KeyRings.KEY_ID)), + cursor.getLong(cursor.getColumnIndexOrThrow(KeyRings.HAS_DUPLICATE_USER_ID)) > 0, + new Date(cursor.getLong(cursor.getColumnIndexOrThrow(KeyRings.CREATION)) * 1000), KeyFormattingUtils.convertFingerprintToHex( cursor.getBlob(cursor.getColumnIndexOrThrow(KeyRings.FINGERPRINT)))); - } public EncryptionKey(CachedPublicKeyRing ring) throws PgpKeyNotFoundException { - this(ring.getPrimaryUserId(), ring.extractOrGetMasterKeyId(), + this(ring.getPrimaryUserId(), ring.extractOrGetMasterKeyId(), false, null, KeyFormattingUtils.convertFingerprintToHex(ring.getFingerprint())); } @@ -222,13 +233,13 @@ public class EncryptKeyCompletionView extends TokenCompleteTextView { if (mUserId[1] != null) { return mUserId[1]; } else { - return getKeyIdHex(); + return getCreationDate(); } } public String getTertiary() { if (mUserId[0] != null) { - return getKeyIdHex(); + return getCreationDate(); } else { return null; } @@ -238,6 +249,20 @@ public class EncryptKeyCompletionView extends TokenCompleteTextView { return mKeyId; } + public String getCreationDate() { + if (mHasDuplicate) { + Calendar creationCal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + creationCal.setTime(mCreation); + // convert from UTC to time zone of device + creationCal.setTimeZone(TimeZone.getDefault()); + + return getContext().getString(R.string.label_creation) + ": " + + DateFormat.getDateFormat(getContext()).format(creationCal.getTime()); + } else { + return null; + } + } + public String getKeyIdHex() { return KeyFormattingUtils.beautifyKeyIdWithPrefix(getContext(), mKeyId); } @@ -278,7 +303,7 @@ public class EncryptKeyCompletionView extends TokenCompleteTextView { protected boolean keepObject(EncryptionKey obj, String mask) { String m = mask.toLowerCase(Locale.ENGLISH); return obj.getUserId().toLowerCase(Locale.ENGLISH).contains(m) || - obj.getKeyIdHex().toString().contains(m) || + obj.getKeyIdHex().contains(m) || obj.getKeyIdHexShort().startsWith(m); } } diff --git a/OpenKeychain/src/main/res/layout/select_key_item.xml b/OpenKeychain/src/main/res/layout/select_key_item.xml index e12892aae..aff0a8215 100644 --- a/OpenKeychain/src/main/res/layout/select_key_item.xml +++ b/OpenKeychain/src/main/res/layout/select_key_item.xml @@ -38,7 +38,7 @@ android:textAppearance="?android:attr/textAppearanceSmall" /> Date: Sun, 15 Mar 2015 18:58:09 +0100 Subject: Prefer ZIP algorithm as discussed on OpenPGP WG mailinglist --- .../java/org/sufficientlysecure/keychain/pgp/PgpConstants.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpConstants.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpConstants.java index aef9a5cdb..f739b1e6d 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpConstants.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpConstants.java @@ -53,9 +53,15 @@ public class PgpConstants { sPreferredHashAlgorithms.add(HashAlgorithmTags.SHA1); sPreferredHashAlgorithms.add(HashAlgorithmTags.RIPEMD160); + /* + * Prefer ZIP + * "ZLIB provides no benefit over ZIP and is more malleable" + * - (OpenPGP WG mailinglist: "[openpgp] Intent to deprecate: Insecure primitives") + * BZIP2: very slow + */ + sPreferredCompressionAlgorithms.add(CompressionAlgorithmTags.ZIP); sPreferredCompressionAlgorithms.add(CompressionAlgorithmTags.ZLIB); sPreferredCompressionAlgorithms.add(CompressionAlgorithmTags.BZIP2); - sPreferredCompressionAlgorithms.add(CompressionAlgorithmTags.ZIP); } public static final int CERTIFY_HASH_ALGO = HashAlgorithmTags.SHA256; -- cgit v1.2.3 From db39b779c984a758e13adc16837893509f3b364f Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Sun, 15 Mar 2015 19:18:35 +0100 Subject: fix expiry of master keys fixes #1141 --- .../keychain/pgp/CanonicalizedPublicKey.java | 31 +++++++++++----------- 1 file changed, 16 insertions(+), 15 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedPublicKey.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedPublicKey.java index 303070333..8104c5249 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedPublicKey.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedPublicKey.java @@ -126,26 +126,27 @@ public class CanonicalizedPublicKey extends UncachedPublicKey { // the getValidSeconds method is unreliable for master keys. we need to iterate all // user ids, then use the most recent certification from a non-revoked user id if (isMasterKey()) { - Date latestCreation = null; seconds = 0; + long masterKeyId = getKeyId(); + + Date latestCreation = null; for (byte[] rawUserId : getUnorderedRawUserIds()) { Iterator sigs = getSignaturesForRawId(rawUserId); + while (sigs.hasNext()) { + WrappedSignature sig = sigs.next(); + if (sig.getKeyId() != masterKeyId) { + continue; + } + if (sig.isRevocation()) { + continue; + } + + if (latestCreation == null || latestCreation.before(sig.getCreationTime())) { + latestCreation = sig.getCreationTime(); + seconds = sig.getKeyExpirySeconds(); + } - // there is always a certification, so this call is safe - WrappedSignature sig = sigs.next(); - - // we know a user id has at most two sigs: one certification, one revocation. - // if the sig is a revocation, or there is another sig (which is a revocation), - // the data in this uid is not relevant - if (sig.isRevocation() || sigs.hasNext()) { - continue; - } - - // this is our revocation, UNLESS there is a newer certificate! - if (latestCreation == null || latestCreation.before(sig.getCreationTime())) { - latestCreation = sig.getCreationTime(); - seconds = sig.getKeyExpirySeconds(); } } } else { -- cgit v1.2.3