diff --git a/.gitignore b/.gitignore
index 11b413fd9..1dfe84d5a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,4 +30,5 @@ pom.xml.*
*.iml
#OS Specific
-[Tt]humbs.db
\ No newline at end of file
+[Tt]humbs.db
+.DS_Store
diff --git a/.gitmodules b/.gitmodules
index 81266d346..572293f94 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -19,3 +19,9 @@
[submodule "extern/html-textview"]
path = extern/html-textview
url = https://github.com/open-keychain/html-textview.git
+[submodule "extern/openpgp-api-lib"]
+ path = extern/openpgp-api-lib
+ url = https://github.com/open-keychain/openpgp-api-lib.git
+[submodule "extern/openkeychain-api-lib"]
+ path = extern/openkeychain-api-lib
+ url = https://github.com/open-keychain/openkeychain-api-lib.git
diff --git a/CHANGELOG b/CHANGELOG
index a4235113d..893082aa4 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,10 @@
+2.7
+* Purple! (Dominik, Vincent)
+* New key view design (Dominik, Vincent)
+* New flat Android buttons (Dominik, Vincent)
+* API fixes (Dominik)
+* Keybase.io import (Tim Bray)
+
2.6.1
* some fixes for regression bugs
diff --git a/OpenKeychain-API/.gitignore b/OpenKeychain-API/.gitignore
deleted file mode 100644
index aa8bb5760..000000000
--- a/OpenKeychain-API/.gitignore
+++ /dev/null
@@ -1,29 +0,0 @@
-#Android specific
-bin
-gen
-obj
-lint.xml
-local.properties
-release.properties
-ant.properties
-*.class
-*.apk
-
-#Gradle
-.gradle
-build
-gradle.properties
-
-#Maven
-target
-pom.xml.*
-
-#Eclipse
-.project
-.classpath
-.settings
-.metadata
-
-#IntelliJ IDEA
-.idea
-*.iml
diff --git a/OpenKeychain-API/build.gradle b/OpenKeychain-API/build.gradle
deleted file mode 100644
index 0ce5dc8c0..000000000
--- a/OpenKeychain-API/build.gradle
+++ /dev/null
@@ -1,3 +0,0 @@
-task wrapper(type: Wrapper) {
- gradleVersion = '1.10'
-}
diff --git a/OpenKeychain-API/example-app/build.gradle b/OpenKeychain-API/example-app/build.gradle
deleted file mode 100644
index f1b5a1086..000000000
--- a/OpenKeychain-API/example-app/build.gradle
+++ /dev/null
@@ -1,61 +0,0 @@
-// please leave this here, so this library builds on its own
-buildscript {
- repositories {
- mavenCentral()
- }
-
- dependencies {
- classpath 'com.android.tools.build:gradle:0.10.0'
- }
-}
-
-apply plugin: 'android'
-
-dependencies {
- compile 'com.android.support:support-v4:19.0.1'
- compile project(':libraries:openpgp-api-library')
- compile project(':libraries:openkeychain-api-library')
-}
-
-android {
- compileSdkVersion 19
- buildToolsVersion "19.0.3"
-
- defaultConfig {
- minSdkVersion 9
- targetSdkVersion 19
- }
-
- /*
- * To sign release build, create file gradle.properties in ~/.gradle/ with this content:
- *
- * signingStoreLocation=/home/key.store
- * signingStorePassword=xxx
- * signingKeyAlias=alias
- * signingKeyPassword=xxx
- */
- if (project.hasProperty('signingStoreLocation') &&
- project.hasProperty('signingStorePassword') &&
- project.hasProperty('signingKeyAlias') &&
- project.hasProperty('signingKeyPassword')) {
- println "Found sign properties in gradle.properties! Signing build…"
-
- signingConfigs {
- release {
- storeFile file(signingStoreLocation)
- storePassword signingStorePassword
- keyAlias signingKeyAlias
- keyPassword signingKeyPassword
- }
- }
-
- buildTypes.release.signingConfig = signingConfigs.release
- } else {
- buildTypes.release.signingConfig = null
- }
-
- // Do not abort build if lint finds errors
- lintOptions {
- abortOnError false
- }
-}
diff --git a/OpenKeychain-API/example-app/ic_launcher-web.png b/OpenKeychain-API/example-app/ic_launcher-web.png
deleted file mode 100644
index ae4cd0976..000000000
Binary files a/OpenKeychain-API/example-app/ic_launcher-web.png and /dev/null differ
diff --git a/OpenKeychain-API/example-app/src/main/AndroidManifest.xml b/OpenKeychain-API/example-app/src/main/AndroidManifest.xml
deleted file mode 100644
index d62c26495..000000000
--- a/OpenKeychain-API/example-app/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/OpenKeychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/BaseActivity.java b/OpenKeychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/BaseActivity.java
deleted file mode 100644
index dd642d879..000000000
--- a/OpenKeychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/BaseActivity.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2012-2014 Dominik Schürmann
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.sufficientlysecure.keychain.demo;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.preference.Preference;
-import android.preference.Preference.OnPreferenceClickListener;
-import android.preference.PreferenceActivity;
-import android.widget.Toast;
-
-public class BaseActivity extends PreferenceActivity {
- private Preference mIntentDemo;
- private Preference mCryptoProvider;
-
- /**
- * Called when the activity is first created.
- */
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- // load preferences from xml
- addPreferencesFromResource(R.xml.base_preference);
-
- // find preferences
- mIntentDemo = (Preference) findPreference("intent_demo");
- mCryptoProvider = (Preference) findPreference("openpgp_provider_demo");
-
- mIntentDemo.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- startActivity(new Intent(BaseActivity.this, IntentActivity.class));
-
- return false;
- }
- });
-
- mCryptoProvider.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- startActivity(new Intent(BaseActivity.this, OpenPgpProviderActivity.class));
-
- return false;
- }
- });
- }
-
-}
diff --git a/OpenKeychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/Constants.java b/OpenKeychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/Constants.java
deleted file mode 100644
index acff12f47..000000000
--- a/OpenKeychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/Constants.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (C) 2013-2014 Dominik Schürmann
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.sufficientlysecure.keychain.demo;
-
-public final class Constants {
- public static final String TAG = "Keychain";
-}
diff --git a/OpenKeychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/IntentActivity.java b/OpenKeychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/IntentActivity.java
deleted file mode 100644
index e8aa2a2e7..000000000
--- a/OpenKeychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/IntentActivity.java
+++ /dev/null
@@ -1,583 +0,0 @@
-/*
- * Copyright (C) 2014 Dominik Schürmann
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.sufficientlysecure.keychain.demo;
-
-import android.content.ActivityNotFoundException;
-import android.content.Intent;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.preference.Preference;
-import android.preference.Preference.OnPreferenceClickListener;
-import android.preference.PreferenceActivity;
-import android.provider.MediaStore;
-import android.util.Log;
-import android.widget.Toast;
-
-import org.sufficientlysecure.keychain.api.OpenKeychainIntents;
-
-import java.io.UnsupportedEncodingException;
-
-public class IntentActivity extends PreferenceActivity {
- private Preference mEncrypt;
- private Preference mEncryptUri;
- private Preference mDecrypt;
- private Preference mImportKey;
- private Preference mImportKeyFromKeyserver;
- private Preference mImportKeyFromQrCode;
- private Preference mOpenpgp4fpr;
-
- private static final int REQUEST_CODE_SELECT_PHOTO = 100;
-
- /**
- * Called when the activity is first created.
- */
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- // load preferences from xml
- addPreferencesFromResource(R.xml.intent_preference);
-
- // find preferences
- mEncrypt = (Preference) findPreference("ENCRYPT");
- mEncryptUri = (Preference) findPreference("ENCRYPT_URI");
- mDecrypt = (Preference) findPreference("DECRYPT");
- mImportKey = (Preference) findPreference("IMPORT_KEY");
- mImportKeyFromKeyserver = (Preference) findPreference("IMPORT_KEY_FROM_KEYSERVER");
- mImportKeyFromQrCode = (Preference) findPreference("IMPORT_KEY_FROM_QR_CODE");
- mOpenpgp4fpr = (Preference) findPreference("openpgp4fpr");
-
-
- mEncrypt.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- try {
- Intent intent = new Intent(OpenKeychainIntents.ENCRYPT);
- intent.putExtra(OpenKeychainIntents.ENCRYPT_EXTRA_TEXT, "Hello world!");
- startActivity(intent);
- } catch (ActivityNotFoundException e) {
- Toast.makeText(IntentActivity.this, "Activity not found!", Toast.LENGTH_LONG).show();
- }
-
- return false;
- }
- });
-
- mEncryptUri.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
- photoPickerIntent.setType("image/*");
- startActivityForResult(photoPickerIntent, REQUEST_CODE_SELECT_PHOTO);
-
- return false;
- }
- });
-
- mDecrypt.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- try {
- Intent intent = new Intent(OpenKeychainIntents.DECRYPT);
- intent.putExtra(OpenKeychainIntents.DECRYPT_EXTRA_TEXT, TEST_SIGNED_MESSAGE);
- startActivity(intent);
- } catch (ActivityNotFoundException e) {
- Toast.makeText(IntentActivity.this, "Activity not found!", Toast.LENGTH_LONG).show();
- }
-
- return false;
- }
- });
-
- mImportKey.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- try {
- Intent intent = new Intent(OpenKeychainIntents.IMPORT_KEY);
- byte[] pubkey = null;
- try {
- pubkey = TEST_PUBKEY.getBytes("UTF-8");
- intent.putExtra(OpenKeychainIntents.IMPORT_KEY_EXTRA_KEY_BYTES, pubkey);
- startActivity(intent);
- } catch (UnsupportedEncodingException e) {
- Log.e(Constants.TAG, "UnsupportedEncodingException", e);
- }
- } catch (ActivityNotFoundException e) {
- Toast.makeText(IntentActivity.this, "Activity not found!", Toast.LENGTH_LONG).show();
- }
-
- return false;
- }
- });
-
- mImportKeyFromKeyserver.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- try {
- Intent intent = new Intent(OpenKeychainIntents.IMPORT_KEY_FROM_KEYSERVER);
- intent.putExtra(OpenKeychainIntents.IMPORT_KEY_FROM_KEYSERVER_QUERY, "Richard Stallman");
- startActivity(intent);
- } catch (ActivityNotFoundException e) {
- Toast.makeText(IntentActivity.this, "Activity not found!", Toast.LENGTH_LONG).show();
- }
-
- return false;
- }
- });
-
- mImportKeyFromQrCode.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- try {
- Intent intent = new Intent(OpenKeychainIntents.IMPORT_KEY_FROM_QR_CODE);
- startActivity(intent);
- } catch (ActivityNotFoundException e) {
- Toast.makeText(IntentActivity.this, "Activity not found!", Toast.LENGTH_LONG).show();
- }
-
- return false;
- }
- });
-
- mOpenpgp4fpr.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- try {
- Intent intent = new Intent(Intent.ACTION_VIEW);
- intent.setData(Uri.parse("openpgp4fpr:73EE2314F65FA92EC2390D3A718C070100012282"));
- startActivity(intent);
- } catch (ActivityNotFoundException e) {
- Toast.makeText(IntentActivity.this, "Activity not found!", Toast.LENGTH_LONG).show();
- }
-
- return false;
- }
- });
-
-
- }
-
- protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
- super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
-
- switch (requestCode) {
- case REQUEST_CODE_SELECT_PHOTO:
- if (resultCode == RESULT_OK) {
- Uri selectedImage = imageReturnedIntent.getData();
-
- String[] filePathColumn = {MediaStore.Images.Media.DATA};
-
- Cursor cursor = getContentResolver().query(
- selectedImage, filePathColumn, null, null, null);
- cursor.moveToFirst();
-
- int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
- String filePath = cursor.getString(columnIndex);
- cursor.close();
-
- // TODO: after fixing DECRYPT, we could use Uri selectedImage directly
- Log.d(Constants.TAG, "filePath: " + filePath);
-
- try {
- Intent intent = new Intent(OpenKeychainIntents.ENCRYPT);
- Uri dataUri = Uri.parse("file://" + filePath);
- Log.d(Constants.TAG, "Uri: " + dataUri);
- intent.setData(dataUri);
- startActivity(intent);
- } catch (ActivityNotFoundException e) {
- Toast.makeText(IntentActivity.this, "Activity not found!", Toast.LENGTH_LONG).show();
- }
- }
- }
- }
-
- private static final String TEST_SIGNED_MESSAGE = "-----BEGIN PGP SIGNED MESSAGE-----\n" +
- "Hash: SHA1\n" +
- "\n" +
- "Hello world!\n" +
- "-----BEGIN PGP SIGNATURE-----\n" +
- "Version: GnuPG v1.4.12 (GNU/Linux)\n" +
- "Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/\n" +
- "\n" +
- "iQEcBAEBAgAGBQJS/7vTAAoJEHGMBwEAASKCkGYH/2jBLzamVyqd61jrjMQM0jUv\n" +
- "MkDcPUxPrYH3wZOO0HcgdBQEo66GZEC2ATmo8izJUMk35Q5jas99k0ac9pXhPUPE\n" +
- "5qDXdQS10S07R6J0SeDYFWDSyrSiDTCZpFkVu3JGP/3S0SkMYXPzfYlh8Ciuxu7i\n" +
- "FR5dmIiz3VQaBgTBSCBFEomNFM5ypynBJqKIzIty8v0NbV72Rtg6Xg76YqWQ/6MC\n" +
- "/MlT3y3++HhfpEmLf5WLEXljbuZ4SfCybgYXG9gBzhJu3+gmBoSicdYTZDHSxBBR\n" +
- "BwI+ueLbhgRz+gU+WJFE7xNw35xKtBp1C4PR0iKI8rZCSHLjsRVzor7iwDaR51M=\n" +
- "=3Ydc\n" +
- "-----END PGP SIGNATURE-----";
-
- private static final String TEST_PUBKEY = "-----BEGIN PGP PUBLIC KEY BLOCK-----\n" +
- "Version: GnuPG v1.4.12 (GNU/Linux)\n" +
- "\n" +
- "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\n" +
- "k3wUxv46o0y15asU\n" +
- "=Bbew\n" +
- "-----END PGP PUBLIC KEY BLOCK-----\n";
-
-}
diff --git a/OpenKeychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/OpenPgpProviderActivity.java b/OpenKeychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/OpenPgpProviderActivity.java
deleted file mode 100644
index 594afe520..000000000
--- a/OpenKeychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/OpenPgpProviderActivity.java
+++ /dev/null
@@ -1,379 +0,0 @@
-/*
- * Copyright (C) 2013-2014 Dominik Schürmann
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.sufficientlysecure.keychain.demo;
-
-import android.app.Activity;
-import android.app.PendingIntent;
-import android.content.Intent;
-import android.content.IntentSender;
-import android.content.SharedPreferences;
-import android.os.Bundle;
-import android.preference.PreferenceManager;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.View;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.Toast;
-
-import org.openintents.openpgp.OpenPgpError;
-import org.openintents.openpgp.OpenPgpSignatureResult;
-import org.openintents.openpgp.util.OpenPgpApi;
-import org.openintents.openpgp.util.OpenPgpServiceConnection;
-import org.openintents.openpgp.util.OpenPgpUtils;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.util.Arrays;
-
-public class OpenPgpProviderActivity extends Activity {
- private EditText mMessage;
- private EditText mCiphertext;
- private EditText mEncryptUserIds;
- private Button mSign;
- private Button mEncrypt;
- private Button mSignAndEncrypt;
- private Button mDecryptAndVerify;
- private EditText mAccount;
- private EditText mGetKeyEdit;
- private EditText mGetKeyIdsEdit;
- private Button mGetKey;
- private Button mGetKeyIds;
-
- private OpenPgpServiceConnection mServiceConnection;
-
- public static final int REQUEST_CODE_SIGN = 9910;
- public static final int REQUEST_CODE_ENCRYPT = 9911;
- public static final int REQUEST_CODE_SIGN_AND_ENCRYPT = 9912;
- public static final int REQUEST_CODE_DECRYPT_AND_VERIFY = 9913;
- public static final int REQUEST_CODE_GET_KEY = 9914;
- public static final int REQUEST_CODE_GET_KEY_IDS = 9915;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.openpgp_provider);
-
- mMessage = (EditText) findViewById(R.id.crypto_provider_demo_message);
- mCiphertext = (EditText) findViewById(R.id.crypto_provider_demo_ciphertext);
- mEncryptUserIds = (EditText) findViewById(R.id.crypto_provider_demo_encrypt_user_id);
- mSign = (Button) findViewById(R.id.crypto_provider_demo_sign);
- mEncrypt = (Button) findViewById(R.id.crypto_provider_demo_encrypt);
- mSignAndEncrypt = (Button) findViewById(R.id.crypto_provider_demo_sign_and_encrypt);
- mDecryptAndVerify = (Button) findViewById(R.id.crypto_provider_demo_decrypt_and_verify);
- mAccount = (EditText) findViewById(R.id.crypto_provider_demo_account);
- mGetKeyEdit = (EditText) findViewById(R.id.crypto_provider_demo_get_key_edit);
- mGetKeyIdsEdit = (EditText) findViewById(R.id.crypto_provider_demo_get_key_ids_edit);
- mGetKey = (Button) findViewById(R.id.crypto_provider_demo_get_key);
- mGetKeyIds = (Button) findViewById(R.id.crypto_provider_demo_get_key_ids);
-
- mSign.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- sign(new Intent());
- }
- });
- mEncrypt.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- encrypt(new Intent());
- }
- });
- mSignAndEncrypt.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- signAndEncrypt(new Intent());
- }
- });
- mDecryptAndVerify.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- decryptAndVerify(new Intent());
- }
- });
- mGetKey.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- getKey(new Intent());
- }
- });
- mGetKeyIds.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- getKeyIds(new Intent());
- }
- });
-
- SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
- String providerPackageName = settings.getString("openpgp_provider_list", "");
- if (TextUtils.isEmpty(providerPackageName)) {
- Toast.makeText(this, "No OpenPGP Provider selected!", Toast.LENGTH_LONG).show();
- finish();
- } else {
- // bind to service
- mServiceConnection = new OpenPgpServiceConnection(
- OpenPgpProviderActivity.this, providerPackageName);
- mServiceConnection.bindToService();
- }
- }
-
- private void handleError(final OpenPgpError error) {
- runOnUiThread(new Runnable() {
-
- @Override
- public void run() {
- Toast.makeText(OpenPgpProviderActivity.this,
- "onError id:" + error.getErrorId() + "\n\n" + error.getMessage(),
- Toast.LENGTH_LONG).show();
- Log.e(Constants.TAG, "onError getErrorId:" + error.getErrorId());
- Log.e(Constants.TAG, "onError getMessage:" + error.getMessage());
- }
- });
- }
-
- private void showToast(final String message) {
- runOnUiThread(new Runnable() {
-
- @Override
- public void run() {
- Toast.makeText(OpenPgpProviderActivity.this,
- message,
- Toast.LENGTH_SHORT).show();
- }
- });
- }
-
- /**
- * Takes input from message or ciphertext EditText and turns it into a ByteArrayInputStream
- *
- * @param ciphertext
- * @return
- */
- private InputStream getInputstream(boolean ciphertext) {
- InputStream is = null;
- try {
- String inputStr;
- if (ciphertext) {
- inputStr = mCiphertext.getText().toString();
- } else {
- inputStr = mMessage.getText().toString();
- }
- is = new ByteArrayInputStream(inputStr.getBytes("UTF-8"));
- } catch (UnsupportedEncodingException e) {
- Log.e(Constants.TAG, "UnsupportedEncodingException", e);
- }
-
- return is;
- }
-
- private class MyCallback implements OpenPgpApi.IOpenPgpCallback {
- boolean returnToCiphertextField;
- ByteArrayOutputStream os;
- int requestCode;
-
- private MyCallback(boolean returnToCiphertextField, ByteArrayOutputStream os, int requestCode) {
- this.returnToCiphertextField = returnToCiphertextField;
- this.os = os;
- this.requestCode = requestCode;
- }
-
- @Override
- public void onReturn(Intent result) {
- switch (result.getIntExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR)) {
- case OpenPgpApi.RESULT_CODE_SUCCESS: {
- showToast("RESULT_CODE_SUCCESS");
-
- // encrypt/decrypt/sign/verify
- if (os != null) {
- try {
- Log.d(OpenPgpApi.TAG, "result: " + os.toByteArray().length
- + " str=" + os.toString("UTF-8"));
-
- if (returnToCiphertextField) {
- mCiphertext.setText(os.toString("UTF-8"));
- } else {
- mMessage.setText(os.toString("UTF-8"));
- }
- } catch (UnsupportedEncodingException e) {
- Log.e(Constants.TAG, "UnsupportedEncodingException", e);
- }
- }
-
- // verify
- if (result.hasExtra(OpenPgpApi.RESULT_SIGNATURE)) {
- OpenPgpSignatureResult sigResult
- = result.getParcelableExtra(OpenPgpApi.RESULT_SIGNATURE);
- showToast(sigResult.toString());
- }
-
- // get key ids
- if (result.hasExtra(OpenPgpApi.RESULT_KEY_IDS)) {
- long[] keyIds = result.getLongArrayExtra(OpenPgpApi.RESULT_KEY_IDS);
- String out = "keyIds: ";
- for (int i = 0; i < keyIds.length; i++) {
- out += OpenPgpUtils.convertKeyIdToHex(keyIds[i]) + ", ";
- }
-
- showToast(out);
- }
- break;
- }
- case OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED: {
- showToast("RESULT_CODE_USER_INTERACTION_REQUIRED");
-
- PendingIntent pi = result.getParcelableExtra(OpenPgpApi.RESULT_INTENT);
- try {
- OpenPgpProviderActivity.this.startIntentSenderForResult(pi.getIntentSender(),
- requestCode, null, 0, 0, 0);
- } catch (IntentSender.SendIntentException e) {
- Log.e(Constants.TAG, "SendIntentException", e);
- }
- break;
- }
- case OpenPgpApi.RESULT_CODE_ERROR: {
- showToast("RESULT_CODE_ERROR");
-
- OpenPgpError error = result.getParcelableExtra(OpenPgpApi.RESULT_ERROR);
- handleError(error);
- break;
- }
- }
- }
- }
-
- public void sign(Intent data) {
- data.setAction(OpenPgpApi.ACTION_SIGN);
- data.putExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true);
- data.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, mAccount.getText().toString());
-
- InputStream is = getInputstream(false);
- ByteArrayOutputStream os = new ByteArrayOutputStream();
-
- OpenPgpApi api = new OpenPgpApi(this, mServiceConnection.getService());
- api.executeApiAsync(data, is, os, new MyCallback(true, os, REQUEST_CODE_SIGN));
- }
-
- public void encrypt(Intent data) {
- data.setAction(OpenPgpApi.ACTION_ENCRYPT);
- data.putExtra(OpenPgpApi.EXTRA_USER_IDS, mEncryptUserIds.getText().toString().split(","));
- data.putExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true);
- data.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, mAccount.getText().toString());
-
- InputStream is = getInputstream(false);
- ByteArrayOutputStream os = new ByteArrayOutputStream();
-
- OpenPgpApi api = new OpenPgpApi(this, mServiceConnection.getService());
- api.executeApiAsync(data, is, os, new MyCallback(true, os, REQUEST_CODE_ENCRYPT));
- }
-
- public void signAndEncrypt(Intent data) {
- data.setAction(OpenPgpApi.ACTION_SIGN_AND_ENCRYPT);
- data.putExtra(OpenPgpApi.EXTRA_USER_IDS, mEncryptUserIds.getText().toString().split(","));
- data.putExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true);
- data.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, mAccount.getText().toString());
-
- InputStream is = getInputstream(false);
- ByteArrayOutputStream os = new ByteArrayOutputStream();
-
- OpenPgpApi api = new OpenPgpApi(this, mServiceConnection.getService());
- api.executeApiAsync(data, is, os, new MyCallback(true, os, REQUEST_CODE_SIGN_AND_ENCRYPT));
- }
-
- public void decryptAndVerify(Intent data) {
- data.setAction(OpenPgpApi.ACTION_DECRYPT_VERIFY);
- data.putExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true);
- data.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, mAccount.getText().toString());
-
- InputStream is = getInputstream(true);
- ByteArrayOutputStream os = new ByteArrayOutputStream();
-
- OpenPgpApi api = new OpenPgpApi(this, mServiceConnection.getService());
- api.executeApiAsync(data, is, os, new MyCallback(false, os, REQUEST_CODE_DECRYPT_AND_VERIFY));
- }
-
- public void getKey(Intent data) {
- data.setAction(OpenPgpApi.ACTION_GET_KEY);
- data.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, mAccount.getText().toString());
- data.putExtra(OpenPgpApi.EXTRA_KEY_ID, Long.decode(mGetKeyEdit.getText().toString()));
-
- OpenPgpApi api = new OpenPgpApi(this, mServiceConnection.getService());
- api.executeApiAsync(data, null, null, new MyCallback(false, null, REQUEST_CODE_GET_KEY));
- }
-
- public void getKeyIds(Intent data) {
- data.setAction(OpenPgpApi.ACTION_GET_KEY_IDS);
- data.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, mAccount.getText().toString());
- data.putExtra(OpenPgpApi.EXTRA_USER_IDS, mGetKeyIdsEdit.getText().toString().split(","));
-
- OpenPgpApi api = new OpenPgpApi(this, mServiceConnection.getService());
- api.executeApiAsync(data, null, null, new MyCallback(false, null, REQUEST_CODE_GET_KEY_IDS));
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- Log.d(Constants.TAG, "onActivityResult resultCode: " + resultCode);
-
- // try again after user interaction
- if (resultCode == RESULT_OK) {
- /*
- * The data originally given to one of the methods above, is again
- * returned here to be used when calling the method again after user
- * interaction. The Intent now also contains results from the user
- * interaction, for example selected key ids.
- */
- switch (requestCode) {
- case REQUEST_CODE_SIGN: {
- sign(data);
- break;
- }
- case REQUEST_CODE_ENCRYPT: {
- encrypt(data);
- break;
- }
- case REQUEST_CODE_SIGN_AND_ENCRYPT: {
- signAndEncrypt(data);
- break;
- }
- case REQUEST_CODE_DECRYPT_AND_VERIFY: {
- decryptAndVerify(data);
- break;
- }
- case REQUEST_CODE_GET_KEY: {
- getKey(data);
- break;
- }
- case REQUEST_CODE_GET_KEY_IDS: {
- getKeyIds(data);
- break;
- }
- }
- }
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
-
- if (mServiceConnection != null) {
- mServiceConnection.unbindFromService();
- }
- }
-
-}
diff --git a/OpenKeychain-API/example-app/src/main/res/drawable-hdpi/ic_launcher.png b/OpenKeychain-API/example-app/src/main/res/drawable-hdpi/ic_launcher.png
deleted file mode 100644
index cf114d7db..000000000
Binary files a/OpenKeychain-API/example-app/src/main/res/drawable-hdpi/ic_launcher.png and /dev/null differ
diff --git a/OpenKeychain-API/example-app/src/main/res/drawable-mdpi/ic_launcher.png b/OpenKeychain-API/example-app/src/main/res/drawable-mdpi/ic_launcher.png
deleted file mode 100644
index d55318843..000000000
Binary files a/OpenKeychain-API/example-app/src/main/res/drawable-mdpi/ic_launcher.png and /dev/null differ
diff --git a/OpenKeychain-API/example-app/src/main/res/drawable-xhdpi/ic_launcher.png b/OpenKeychain-API/example-app/src/main/res/drawable-xhdpi/ic_launcher.png
deleted file mode 100644
index 13ed3d450..000000000
Binary files a/OpenKeychain-API/example-app/src/main/res/drawable-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/OpenKeychain-API/example-app/src/main/res/drawable-xxhdpi/ic_launcher.png b/OpenKeychain-API/example-app/src/main/res/drawable-xxhdpi/ic_launcher.png
deleted file mode 100644
index 831c993d4..000000000
Binary files a/OpenKeychain-API/example-app/src/main/res/drawable-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/OpenKeychain-API/example-app/src/main/res/layout/openpgp_provider.xml b/OpenKeychain-API/example-app/src/main/res/layout/openpgp_provider.xml
deleted file mode 100644
index 9d908795c..000000000
--- a/OpenKeychain-API/example-app/src/main/res/layout/openpgp_provider.xml
+++ /dev/null
@@ -1,158 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/OpenKeychain-API/example-app/src/main/res/xml/base_preference.xml b/OpenKeychain-API/example-app/src/main/res/xml/base_preference.xml
deleted file mode 100644
index b38e07a36..000000000
--- a/OpenKeychain-API/example-app/src/main/res/xml/base_preference.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/OpenKeychain-API/example-app/src/main/res/xml/intent_preference.xml b/OpenKeychain-API/example-app/src/main/res/xml/intent_preference.xml
deleted file mode 100644
index 801e4a78a..000000000
--- a/OpenKeychain-API/example-app/src/main/res/xml/intent_preference.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/OpenKeychain-API/gradle/gradle/wrapper/gradle-wrapper.jar b/OpenKeychain-API/gradle/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 583859812..000000000
Binary files a/OpenKeychain-API/gradle/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/OpenKeychain-API/gradle/gradle/wrapper/gradle-wrapper.properties b/OpenKeychain-API/gradle/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 42c0fbd9d..000000000
--- a/OpenKeychain-API/gradle/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Sun Feb 09 19:19:25 CET 2014
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=http\://services.gradle.org/distributions/gradle-1.10-bin.zip
diff --git a/OpenKeychain-API/gradle/gradlew b/OpenKeychain-API/gradle/gradlew
deleted file mode 100755
index 91a7e269e..000000000
--- a/OpenKeychain-API/gradle/gradlew
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/usr/bin/env bash
-
-##############################################################################
-##
-## Gradle start up script for UN*X
-##
-##############################################################################
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn ( ) {
- echo "$*"
-}
-
-die ( ) {
- echo
- echo "$*"
- echo
- exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
-esac
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched.
-if $cygwin ; then
- [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-fi
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >&-
-APP_HOME="`pwd -P`"
-cd "$SAVED" >&-
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
- fi
- i=$((i+1))
- done
- case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
-fi
-
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
- JVM_OPTS=("$@")
-}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
-
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/OpenKeychain-API/gradle/gradlew.bat b/OpenKeychain-API/gradle/gradlew.bat
deleted file mode 100644
index aec99730b..000000000
--- a/OpenKeychain-API/gradle/gradlew.bat
+++ /dev/null
@@ -1,90 +0,0 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windowz variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/OpenKeychain-API/gradle/wrapper/gradle-wrapper.jar b/OpenKeychain-API/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 583859812..000000000
Binary files a/OpenKeychain-API/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/OpenKeychain-API/gradle/wrapper/gradle-wrapper.properties b/OpenKeychain-API/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index d8e0b5b29..000000000
--- a/OpenKeychain-API/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Thu Mar 06 22:23:44 CET 2014
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=http\://services.gradle.org/distributions/gradle-1.10-bin.zip
diff --git a/OpenKeychain-API/gradlew b/OpenKeychain-API/gradlew
deleted file mode 100755
index 91a7e269e..000000000
--- a/OpenKeychain-API/gradlew
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/usr/bin/env bash
-
-##############################################################################
-##
-## Gradle start up script for UN*X
-##
-##############################################################################
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn ( ) {
- echo "$*"
-}
-
-die ( ) {
- echo
- echo "$*"
- echo
- exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
-esac
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched.
-if $cygwin ; then
- [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-fi
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >&-
-APP_HOME="`pwd -P`"
-cd "$SAVED" >&-
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
- fi
- i=$((i+1))
- done
- case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
-fi
-
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
- JVM_OPTS=("$@")
-}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
-
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/OpenKeychain-API/gradlew.bat b/OpenKeychain-API/gradlew.bat
deleted file mode 100644
index aec99730b..000000000
--- a/OpenKeychain-API/gradlew.bat
+++ /dev/null
@@ -1,90 +0,0 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windowz variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/OpenKeychain-API/libraries/openkeychain-api-library/.gitignore b/OpenKeychain-API/libraries/openkeychain-api-library/.gitignore
deleted file mode 100644
index aa8bb5760..000000000
--- a/OpenKeychain-API/libraries/openkeychain-api-library/.gitignore
+++ /dev/null
@@ -1,29 +0,0 @@
-#Android specific
-bin
-gen
-obj
-lint.xml
-local.properties
-release.properties
-ant.properties
-*.class
-*.apk
-
-#Gradle
-.gradle
-build
-gradle.properties
-
-#Maven
-target
-pom.xml.*
-
-#Eclipse
-.project
-.classpath
-.settings
-.metadata
-
-#IntelliJ IDEA
-.idea
-*.iml
diff --git a/OpenKeychain-API/libraries/openkeychain-api-library/AndroidManifest.xml b/OpenKeychain-API/libraries/openkeychain-api-library/AndroidManifest.xml
deleted file mode 100644
index 768922c22..000000000
--- a/OpenKeychain-API/libraries/openkeychain-api-library/AndroidManifest.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/OpenKeychain-API/libraries/openkeychain-api-library/LICENSE b/OpenKeychain-API/libraries/openkeychain-api-library/LICENSE
deleted file mode 100644
index d64569567..000000000
--- a/OpenKeychain-API/libraries/openkeychain-api-library/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/OpenKeychain-API/libraries/openkeychain-api-library/build.gradle b/OpenKeychain-API/libraries/openkeychain-api-library/build.gradle
deleted file mode 100644
index 69b937c1a..000000000
--- a/OpenKeychain-API/libraries/openkeychain-api-library/build.gradle
+++ /dev/null
@@ -1,35 +0,0 @@
-// please leave this here, so this library builds on its own
-buildscript {
- repositories {
- mavenCentral()
- }
-
- dependencies {
- classpath 'com.android.tools.build:gradle:0.10.0'
- }
-}
-
-apply plugin: 'android-library'
-
-android {
- compileSdkVersion 19
- buildToolsVersion '19.0.3'
-
- // NOTE: We are using the old folder structure to also support Eclipse
- sourceSets {
- main {
- manifest.srcFile 'AndroidManifest.xml'
- java.srcDirs = ['src']
- resources.srcDirs = ['src']
- aidl.srcDirs = ['src']
- renderscript.srcDirs = ['src']
- res.srcDirs = ['res']
- assets.srcDirs = ['assets']
- }
- }
-
- // Do not abort build if lint finds errors
- lintOptions {
- abortOnError false
- }
-}
diff --git a/OpenKeychain-API/libraries/openkeychain-api-library/build.xml b/OpenKeychain-API/libraries/openkeychain-api-library/build.xml
deleted file mode 100644
index 48ebf198c..000000000
--- a/OpenKeychain-API/libraries/openkeychain-api-library/build.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/OpenKeychain-API/libraries/openkeychain-api-library/proguard-project.txt b/OpenKeychain-API/libraries/openkeychain-api-library/proguard-project.txt
deleted file mode 100644
index f2fe1559a..000000000
--- a/OpenKeychain-API/libraries/openkeychain-api-library/proguard-project.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-# To enable ProGuard in your project, edit project.properties
-# to define the proguard.config property as described in that file.
-#
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in ${sdk.dir}/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the ProGuard
-# include property in project.properties.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
diff --git a/OpenKeychain-API/libraries/openkeychain-api-library/project.properties b/OpenKeychain-API/libraries/openkeychain-api-library/project.properties
deleted file mode 100644
index 91d2b0246..000000000
--- a/OpenKeychain-API/libraries/openkeychain-api-library/project.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must be checked in Version Control Systems.
-#
-# To customize properties used by the Ant build system edit
-# "ant.properties", and override values to adapt the script to your
-# project structure.
-#
-# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
-#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
-
-# Project target.
-target=android-19
-android.library=true
diff --git a/OpenKeychain-API/libraries/openkeychain-api-library/src/org/sufficientlysecure/keychain/api/OpenKeychainIntents.java b/OpenKeychain-API/libraries/openkeychain-api-library/src/org/sufficientlysecure/keychain/api/OpenKeychainIntents.java
deleted file mode 100644
index 15aceb534..000000000
--- a/OpenKeychain-API/libraries/openkeychain-api-library/src/org/sufficientlysecure/keychain/api/OpenKeychainIntents.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2014 Dominik Schürmann
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.sufficientlysecure.keychain.api;
-
-public class OpenKeychainIntents {
-
- public static final String ENCRYPT = "org.sufficientlysecure.keychain.action.ENCRYPT";
- public static final String ENCRYPT_EXTRA_TEXT = "text"; // String
- public static final String ENCRYPT_ASCII_ARMOR = "ascii_armor"; // boolean
-
- public static final String DECRYPT = "org.sufficientlysecure.keychain.action.DECRYPT";
- public static final String DECRYPT_EXTRA_TEXT = "text"; // String
-
- public static final String IMPORT_KEY = "org.sufficientlysecure.keychain.action.IMPORT_KEY";
- public static final String IMPORT_KEY_EXTRA_KEY_BYTES = "key_bytes"; // byte[]
-
- public static final String IMPORT_KEY_FROM_KEYSERVER = "org.sufficientlysecure.keychain.action.IMPORT_KEY_FROM_KEYSERVER";
- public static final String IMPORT_KEY_FROM_KEYSERVER_QUERY = "query"; // String
- public static final String IMPORT_KEY_FROM_KEYSERVER_FINGERPRINT = "fingerprint"; // String
-
- public static final String IMPORT_KEY_FROM_QR_CODE = "org.sufficientlysecure.keychain.action.IMPORT_KEY_FROM_QR_CODE";
-
-}
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/.gitignore b/OpenKeychain-API/libraries/openpgp-api-library/.gitignore
deleted file mode 100644
index aa8bb5760..000000000
--- a/OpenKeychain-API/libraries/openpgp-api-library/.gitignore
+++ /dev/null
@@ -1,29 +0,0 @@
-#Android specific
-bin
-gen
-obj
-lint.xml
-local.properties
-release.properties
-ant.properties
-*.class
-*.apk
-
-#Gradle
-.gradle
-build
-gradle.properties
-
-#Maven
-target
-pom.xml.*
-
-#Eclipse
-.project
-.classpath
-.settings
-.metadata
-
-#IntelliJ IDEA
-.idea
-*.iml
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/AndroidManifest.xml b/OpenKeychain-API/libraries/openpgp-api-library/AndroidManifest.xml
deleted file mode 100644
index 98cb89faa..000000000
--- a/OpenKeychain-API/libraries/openpgp-api-library/AndroidManifest.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/LICENSE b/OpenKeychain-API/libraries/openpgp-api-library/LICENSE
deleted file mode 100644
index d64569567..000000000
--- a/OpenKeychain-API/libraries/openpgp-api-library/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/build.gradle b/OpenKeychain-API/libraries/openpgp-api-library/build.gradle
deleted file mode 100644
index 69b937c1a..000000000
--- a/OpenKeychain-API/libraries/openpgp-api-library/build.gradle
+++ /dev/null
@@ -1,35 +0,0 @@
-// please leave this here, so this library builds on its own
-buildscript {
- repositories {
- mavenCentral()
- }
-
- dependencies {
- classpath 'com.android.tools.build:gradle:0.10.0'
- }
-}
-
-apply plugin: 'android-library'
-
-android {
- compileSdkVersion 19
- buildToolsVersion '19.0.3'
-
- // NOTE: We are using the old folder structure to also support Eclipse
- sourceSets {
- main {
- manifest.srcFile 'AndroidManifest.xml'
- java.srcDirs = ['src']
- resources.srcDirs = ['src']
- aidl.srcDirs = ['src']
- renderscript.srcDirs = ['src']
- res.srcDirs = ['res']
- assets.srcDirs = ['assets']
- }
- }
-
- // Do not abort build if lint finds errors
- lintOptions {
- abortOnError false
- }
-}
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/build.xml b/OpenKeychain-API/libraries/openpgp-api-library/build.xml
deleted file mode 100644
index 48ebf198c..000000000
--- a/OpenKeychain-API/libraries/openpgp-api-library/build.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/proguard-project.txt b/OpenKeychain-API/libraries/openpgp-api-library/proguard-project.txt
deleted file mode 100644
index f2fe1559a..000000000
--- a/OpenKeychain-API/libraries/openpgp-api-library/proguard-project.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-# To enable ProGuard in your project, edit project.properties
-# to define the proguard.config property as described in that file.
-#
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in ${sdk.dir}/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the ProGuard
-# include property in project.properties.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/project.properties b/OpenKeychain-API/libraries/openpgp-api-library/project.properties
deleted file mode 100644
index 91d2b0246..000000000
--- a/OpenKeychain-API/libraries/openpgp-api-library/project.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must be checked in Version Control Systems.
-#
-# To customize properties used by the Ant build system edit
-# "ant.properties", and override values to adapt the script to your
-# project structure.
-#
-# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
-#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
-
-# Project target.
-target=android-19
-android.library=true
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-hdpi/ic_action_cancel_launchersize.png b/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-hdpi/ic_action_cancel_launchersize.png
deleted file mode 100644
index 71b9118dc..000000000
Binary files a/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-hdpi/ic_action_cancel_launchersize.png and /dev/null differ
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-hdpi/ic_action_cancel_launchersize_light.png b/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-hdpi/ic_action_cancel_launchersize_light.png
deleted file mode 100644
index 73b1d08f3..000000000
Binary files a/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-hdpi/ic_action_cancel_launchersize_light.png and /dev/null differ
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-mdpi/ic_action_cancel_launchersize.png b/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-mdpi/ic_action_cancel_launchersize.png
deleted file mode 100644
index 270abf45f..000000000
Binary files a/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-mdpi/ic_action_cancel_launchersize.png and /dev/null differ
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-mdpi/ic_action_cancel_launchersize_light.png b/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-mdpi/ic_action_cancel_launchersize_light.png
deleted file mode 100644
index d841821c8..000000000
Binary files a/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-mdpi/ic_action_cancel_launchersize_light.png and /dev/null differ
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-xhdpi/ic_action_cancel_launchersize.png b/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-xhdpi/ic_action_cancel_launchersize.png
deleted file mode 100644
index 1e3571fa5..000000000
Binary files a/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-xhdpi/ic_action_cancel_launchersize.png and /dev/null differ
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-xhdpi/ic_action_cancel_launchersize_light.png b/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-xhdpi/ic_action_cancel_launchersize_light.png
deleted file mode 100644
index d505046b4..000000000
Binary files a/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-xhdpi/ic_action_cancel_launchersize_light.png and /dev/null differ
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-xxhdpi/ic_action_cancel_launchersize.png b/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-xxhdpi/ic_action_cancel_launchersize.png
deleted file mode 100644
index 52044601e..000000000
Binary files a/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-xxhdpi/ic_action_cancel_launchersize.png and /dev/null differ
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-xxhdpi/ic_action_cancel_launchersize_light.png b/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-xxhdpi/ic_action_cancel_launchersize_light.png
deleted file mode 100644
index d6fb86bdd..000000000
Binary files a/OpenKeychain-API/libraries/openpgp-api-library/res/drawable-xxhdpi/ic_action_cancel_launchersize_light.png and /dev/null differ
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/res/values/strings.xml b/OpenKeychain-API/libraries/openpgp-api-library/res/values/strings.xml
deleted file mode 100644
index 0119831cc..000000000
--- a/OpenKeychain-API/libraries/openpgp-api-library/res/values/strings.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
- None
- Install OpenKeychain via %s
-
-
\ No newline at end of file
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/IOpenPgpService.aidl b/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/IOpenPgpService.aidl
deleted file mode 100644
index 7ee79d6ab..000000000
--- a/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/IOpenPgpService.aidl
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2014 Dominik Schürmann
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.openintents.openpgp;
-
-interface IOpenPgpService {
-
- // see OpenPgpApi for documentation
- Intent execute(in Intent data, in ParcelFileDescriptor input, in ParcelFileDescriptor output);
-
-}
\ No newline at end of file
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/OpenPgpError.java b/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/OpenPgpError.java
deleted file mode 100644
index b894a4609..000000000
--- a/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/OpenPgpError.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (C) 2014 Dominik Schürmann
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.openintents.openpgp;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-
-/**
- * Parcelable versioning has been copied from Dashclock Widget
- * https://code.google.com/p/dashclock/source/browse/api/src/main/java/com/google/android/apps/dashclock/api/ExtensionData.java
- */
-public class OpenPgpError implements Parcelable {
- /**
- * Since there might be a case where new versions of the client using the library getting
- * old versions of the protocol (and thus old versions of this class), we need a versioning
- * system for the parcels sent between the clients and the providers.
- */
- public static final int PARCELABLE_VERSION = 1;
-
- // possible values for errorId
- public static final int CLIENT_SIDE_ERROR = -1;
- public static final int GENERIC_ERROR = 0;
- public static final int INCOMPATIBLE_API_VERSIONS = 1;
- public static final int NO_OR_WRONG_PASSPHRASE = 2;
- public static final int NO_USER_IDS = 3;
-
- int errorId;
- String message;
-
- public OpenPgpError() {
- }
-
- public OpenPgpError(int errorId, String message) {
- this.errorId = errorId;
- this.message = message;
- }
-
- public OpenPgpError(OpenPgpError b) {
- this.errorId = b.errorId;
- this.message = b.message;
- }
-
- public int getErrorId() {
- return errorId;
- }
-
- public void setErrorId(int errorId) {
- this.errorId = errorId;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public int describeContents() {
- return 0;
- }
-
- public void writeToParcel(Parcel dest, int flags) {
- /**
- * NOTE: When adding fields in the process of updating this API, make sure to bump
- * {@link #PARCELABLE_VERSION}.
- */
- dest.writeInt(PARCELABLE_VERSION);
- // Inject a placeholder that will store the parcel size from this point on
- // (not including the size itself).
- int sizePosition = dest.dataPosition();
- dest.writeInt(0);
- int startPosition = dest.dataPosition();
- // version 1
- dest.writeInt(errorId);
- dest.writeString(message);
- // Go back and write the size
- int parcelableSize = dest.dataPosition() - startPosition;
- dest.setDataPosition(sizePosition);
- dest.writeInt(parcelableSize);
- dest.setDataPosition(startPosition + parcelableSize);
- }
-
- public static final Creator CREATOR = new Creator() {
- public OpenPgpError createFromParcel(final Parcel source) {
- int parcelableVersion = source.readInt();
- int parcelableSize = source.readInt();
- int startPosition = source.dataPosition();
-
- OpenPgpError error = new OpenPgpError();
- error.errorId = source.readInt();
- error.message = source.readString();
-
- // skip over all fields added in future versions of this parcel
- source.setDataPosition(startPosition + parcelableSize);
-
- return error;
- }
-
- public OpenPgpError[] newArray(final int size) {
- return new OpenPgpError[size];
- }
- };
-}
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/OpenPgpSignatureResult.java b/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/OpenPgpSignatureResult.java
deleted file mode 100644
index 7a4d799dc..000000000
--- a/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/OpenPgpSignatureResult.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (C) 2014 Dominik Schürmann
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.openintents.openpgp;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import org.openintents.openpgp.util.OpenPgpUtils;
-
-import java.util.Locale;
-
-/**
- * Parcelable versioning has been copied from Dashclock Widget
- * https://code.google.com/p/dashclock/source/browse/api/src/main/java/com/google/android/apps/dashclock/api/ExtensionData.java
- */
-public class OpenPgpSignatureResult implements Parcelable {
- /**
- * Since there might be a case where new versions of the client using the library getting
- * old versions of the protocol (and thus old versions of this class), we need a versioning
- * system for the parcels sent between the clients and the providers.
- */
- public static final int PARCELABLE_VERSION = 1;
-
- // generic error on signature verification
- public static final int SIGNATURE_ERROR = 0;
- // successfully verified signature, with certified public key
- public static final int SIGNATURE_SUCCESS_CERTIFIED = 1;
- // no public key was found for this signature verification
- public static final int SIGNATURE_UNKNOWN_PUB_KEY = 2;
- // successfully verified signature, but with uncertified public key
- public static final int SIGNATURE_SUCCESS_UNCERTIFIED = 3;
-
- int status;
- boolean signatureOnly;
- String userId;
- long keyId;
-
- public int getStatus() {
- return status;
- }
-
- public void setStatus(int status) {
- this.status = status;
- }
-
- public boolean isSignatureOnly() {
- return signatureOnly;
- }
-
- public void setSignatureOnly(boolean signatureOnly) {
- this.signatureOnly = signatureOnly;
- }
-
- public String getUserId() {
- return userId;
- }
-
- public void setUserId(String userId) {
- this.userId = userId;
- }
-
- public long getKeyId() {
- return keyId;
- }
-
- public void setKeyId(long keyId) {
- this.keyId = keyId;
- }
-
- public OpenPgpSignatureResult() {
-
- }
-
- public OpenPgpSignatureResult(int signatureStatus, String signatureUserId,
- boolean signatureOnly, long keyId) {
- this.status = signatureStatus;
- this.signatureOnly = signatureOnly;
- this.userId = signatureUserId;
- this.keyId = keyId;
- }
-
- public OpenPgpSignatureResult(OpenPgpSignatureResult b) {
- this.status = b.status;
- this.userId = b.userId;
- this.signatureOnly = b.signatureOnly;
- this.keyId = b.keyId;
- }
-
- public int describeContents() {
- return 0;
- }
-
- public void writeToParcel(Parcel dest, int flags) {
- /**
- * NOTE: When adding fields in the process of updating this API, make sure to bump
- * {@link #PARCELABLE_VERSION}.
- */
- dest.writeInt(PARCELABLE_VERSION);
- // Inject a placeholder that will store the parcel size from this point on
- // (not including the size itself).
- int sizePosition = dest.dataPosition();
- dest.writeInt(0);
- int startPosition = dest.dataPosition();
- // version 1
- dest.writeInt(status);
- dest.writeByte((byte) (signatureOnly ? 1 : 0));
- dest.writeString(userId);
- dest.writeLong(keyId);
- // Go back and write the size
- int parcelableSize = dest.dataPosition() - startPosition;
- dest.setDataPosition(sizePosition);
- dest.writeInt(parcelableSize);
- dest.setDataPosition(startPosition + parcelableSize);
- }
-
- public static final Creator CREATOR = new Creator() {
- public OpenPgpSignatureResult createFromParcel(final Parcel source) {
- int parcelableVersion = source.readInt();
- int parcelableSize = source.readInt();
- int startPosition = source.dataPosition();
-
- OpenPgpSignatureResult vr = new OpenPgpSignatureResult();
- vr.status = source.readInt();
- vr.signatureOnly = source.readByte() == 1;
- vr.userId = source.readString();
- vr.keyId = source.readLong();
-
- // skip over all fields added in future versions of this parcel
- source.setDataPosition(startPosition + parcelableSize);
-
- return vr;
- }
-
- public OpenPgpSignatureResult[] newArray(final int size) {
- return new OpenPgpSignatureResult[size];
- }
- };
-
- @Override
- public String toString() {
- String out = new String();
- out += "\nstatus: " + status;
- out += "\nuserId: " + userId;
- out += "\nsignatureOnly: " + signatureOnly;
- out += "\nkeyId: " + OpenPgpUtils.convertKeyIdToHex(keyId);
- return out;
- }
-
-}
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpApi.java b/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpApi.java
deleted file mode 100644
index f6a78d0ef..000000000
--- a/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpApi.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * Copyright (C) 2014 Dominik Schürmann
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.openintents.openpgp.util;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.content.Intent;
-import android.os.AsyncTask;
-import android.os.Build;
-import android.os.ParcelFileDescriptor;
-import android.util.Log;
-
-import org.openintents.openpgp.IOpenPgpService;
-import org.openintents.openpgp.OpenPgpError;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-
-public class OpenPgpApi {
-
- public static final String TAG = "OpenPgp API";
-
- public static final int API_VERSION = 3;
- public static final String SERVICE_INTENT = "org.openintents.openpgp.IOpenPgpService";
-
- /**
- * General extras
- * --------------
- *
- * required extras:
- * int EXTRA_API_VERSION (always required)
- *
- * returned extras:
- * int RESULT_CODE (RESULT_CODE_ERROR, RESULT_CODE_SUCCESS or RESULT_CODE_USER_INTERACTION_REQUIRED)
- * OpenPgpError RESULT_ERROR (if RESULT_CODE == RESULT_CODE_ERROR)
- * PendingIntent RESULT_INTENT (if RESULT_CODE == RESULT_CODE_USER_INTERACTION_REQUIRED)
- */
-
- /**
- * Sign only
- *
- * optional extras:
- * boolean EXTRA_REQUEST_ASCII_ARMOR (request ascii armor for ouput)
- * String EXTRA_PASSPHRASE (key passphrase)
- */
- public static final String ACTION_SIGN = "org.openintents.openpgp.action.SIGN";
-
- /**
- * Encrypt
- *
- * required extras:
- * String[] EXTRA_USER_IDS (=emails of recipients, if more than one key has a user_id, a PendingIntent is returned via RESULT_INTENT)
- * or
- * long[] EXTRA_KEY_IDS
- *
- * optional extras:
- * boolean EXTRA_REQUEST_ASCII_ARMOR (request ascii armor for ouput)
- * String EXTRA_PASSPHRASE (key passphrase)
- */
- public static final String ACTION_ENCRYPT = "org.openintents.openpgp.action.ENCRYPT";
-
- /**
- * Sign and encrypt
- *
- * required extras:
- * String[] EXTRA_USER_IDS (=emails of recipients, if more than one key has a user_id, a PendingIntent is returned via RESULT_INTENT)
- * or
- * long[] EXTRA_KEY_IDS
- *
- * optional extras:
- * boolean EXTRA_REQUEST_ASCII_ARMOR (request ascii armor for ouput)
- * String EXTRA_PASSPHRASE (key passphrase)
- */
- public static final String ACTION_SIGN_AND_ENCRYPT = "org.openintents.openpgp.action.SIGN_AND_ENCRYPT";
-
- /**
- * Decrypts and verifies given input stream. This methods handles encrypted-only, signed-and-encrypted,
- * and also signed-only input.
- *
- * If OpenPgpSignatureResult.getStatus() == OpenPgpSignatureResult.SIGNATURE_UNKNOWN_PUB_KEY
- * in addition a PendingIntent is returned via RESULT_INTENT to download missing keys.
- *
- * optional extras:
- * boolean EXTRA_REQUEST_ASCII_ARMOR (request ascii armor for ouput)
- *
- * returned extras:
- * OpenPgpSignatureResult RESULT_SIGNATURE
- */
- public static final String ACTION_DECRYPT_VERIFY = "org.openintents.openpgp.action.DECRYPT_VERIFY";
-
- /**
- * Get key ids based on given user ids (=emails)
- *
- * required extras:
- * String[] EXTRA_USER_IDS
- *
- * returned extras:
- * long[] RESULT_KEY_IDS
- */
- public static final String ACTION_GET_KEY_IDS = "org.openintents.openpgp.action.GET_KEY_IDS";
-
- /**
- * This action returns RESULT_CODE_SUCCESS if the OpenPGP Provider already has the key
- * corresponding to the given key id in its database.
- *
- * It returns RESULT_CODE_USER_INTERACTION_REQUIRED if the Provider does not have the key.
- * The PendingIntent from RESULT_INTENT can be used to retrieve those from a keyserver.
- *
- * required extras:
- * long EXTRA_KEY_ID
- */
- public static final String ACTION_GET_KEY = "org.openintents.openpgp.action.GET_KEY";
-
- /* Intent extras */
- public static final String EXTRA_API_VERSION = "api_version";
-
- public static final String EXTRA_ACCOUNT_NAME = "account_name";
-
- // SIGN, ENCRYPT, SIGN_AND_ENCRYPT, DECRYPT_VERIFY
- // request ASCII Armor for output
- // OpenPGP Radix-64, 33 percent overhead compared to binary, see http://tools.ietf.org/html/rfc4880#page-53)
- public static final String EXTRA_REQUEST_ASCII_ARMOR = "ascii_armor";
-
- // ENCRYPT, SIGN_AND_ENCRYPT
- public static final String EXTRA_USER_IDS = "user_ids";
- public static final String EXTRA_KEY_IDS = "key_ids";
- // optional extras:
- public static final String EXTRA_PASSPHRASE = "passphrase";
-
- // GET_KEY
- public static final String EXTRA_KEY_ID = "key_id";
- public static final String RESULT_KEY_IDS = "key_ids";
-
- /* Service Intent returns */
- public static final String RESULT_CODE = "result_code";
-
- // get actual error object from RESULT_ERROR
- public static final int RESULT_CODE_ERROR = 0;
- // success!
- public static final int RESULT_CODE_SUCCESS = 1;
- // get PendingIntent from RESULT_INTENT, start PendingIntent with startIntentSenderForResult,
- // and execute service method again in onActivityResult
- public static final int RESULT_CODE_USER_INTERACTION_REQUIRED = 2;
-
- public static final String RESULT_ERROR = "error";
- public static final String RESULT_INTENT = "intent";
-
- // DECRYPT_VERIFY
- public static final String RESULT_SIGNATURE = "signature";
-
- IOpenPgpService mService;
- Context mContext;
-
- public OpenPgpApi(Context context, IOpenPgpService service) {
- this.mContext = context;
- this.mService = service;
- }
-
- public interface IOpenPgpCallback {
- void onReturn(final Intent result);
- }
-
- private class OpenPgpAsyncTask extends AsyncTask {
- Intent data;
- InputStream is;
- OutputStream os;
- IOpenPgpCallback callback;
-
- private OpenPgpAsyncTask(Intent data, InputStream is, OutputStream os, IOpenPgpCallback callback) {
- this.data = data;
- this.is = is;
- this.os = os;
- this.callback = callback;
- }
-
- @Override
- protected Intent doInBackground(Void... unused) {
- return executeApi(data, is, os);
- }
-
- protected void onPostExecute(Intent result) {
- callback.onReturn(result);
- }
-
- }
-
- @TargetApi(Build.VERSION_CODES.HONEYCOMB)
- public void executeApiAsync(Intent data, InputStream is, OutputStream os, IOpenPgpCallback callback) {
- OpenPgpAsyncTask task = new OpenPgpAsyncTask(data, is, os, callback);
-
- // don't serialize async tasks!
- // http://commonsware.com/blog/2012/04/20/asynctask-threading-regression-confirmed.html
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
- task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[]) null);
- } else {
- task.execute((Void[]) null);
- }
- }
-
- public Intent executeApi(Intent data, InputStream is, OutputStream os) {
- try {
- data.putExtra(EXTRA_API_VERSION, OpenPgpApi.API_VERSION);
-
- Intent result;
-
- // pipe the input and output
- ParcelFileDescriptor input = null;
- if (is != null) {
- input = ParcelFileDescriptorUtil.pipeFrom(is,
- new ParcelFileDescriptorUtil.IThreadListener() {
-
- @Override
- public void onThreadFinished(Thread thread) {
- //Log.d(OpenPgpApi.TAG, "Copy to service finished");
- }
- }
- );
- }
- ParcelFileDescriptor output = null;
- if (os != null) {
- output = ParcelFileDescriptorUtil.pipeTo(os,
- new ParcelFileDescriptorUtil.IThreadListener() {
-
- @Override
- public void onThreadFinished(Thread thread) {
- //Log.d(OpenPgpApi.TAG, "Service finished writing!");
- }
- }
- );
- }
-
- // blocks until result is ready
- result = mService.execute(data, input, output);
- // close() is required to halt the TransferThread
- if (output != null) {
- output.close();
- }
- // TODO: close input?
-
- // set class loader to current context to allow unparcelling
- // of OpenPgpError and OpenPgpSignatureResult
- // http://stackoverflow.com/a/3806769
- result.setExtrasClassLoader(mContext.getClassLoader());
-
- return result;
- } catch (Exception e) {
- Log.e(OpenPgpApi.TAG, "Exception in executeApi call", e);
- Intent result = new Intent();
- result.putExtra(RESULT_CODE, RESULT_CODE_ERROR);
- result.putExtra(RESULT_ERROR,
- new OpenPgpError(OpenPgpError.CLIENT_SIDE_ERROR, e.getMessage()));
- return result;
- }
- }
-
-}
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java b/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java
deleted file mode 100644
index cf5864620..000000000
--- a/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright (C) 2014 Dominik Schürmann
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.openintents.openpgp.util;
-
-import android.app.AlertDialog.Builder;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.pm.ResolveInfo;
-import android.content.res.TypedArray;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.preference.DialogPreference;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.ListAdapter;
-import android.widget.TextView;
-import org.openintents.openpgp.R;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Does not extend ListPreference, but is very similar to it!
- * http://grepcode.com/file_/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/android/preference/ListPreference.java/?v=source
- */
-public class OpenPgpListPreference extends DialogPreference {
- private static final String OPENKEYCHAIN_PACKAGE = "org.sufficientlysecure.keychain";
- private static final String MARKET_INTENT_URI_BASE = "market://details?id=%s";
- private static final Intent MARKET_INTENT = new Intent(Intent.ACTION_VIEW, Uri.parse(
- String.format(MARKET_INTENT_URI_BASE, OPENKEYCHAIN_PACKAGE)));
-
- private ArrayList mLegacyList = new ArrayList();
- private ArrayList mList = new ArrayList();
-
- private String mSelectedPackage;
-
- public OpenPgpListPreference(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public OpenPgpListPreference(Context context) {
- this(context, null);
- }
-
- /**
- * Public method to add new entries for legacy applications
- *
- * @param packageName
- * @param simpleName
- * @param icon
- */
- public void addLegacyProvider(int position, String packageName, String simpleName, Drawable icon) {
- mLegacyList.add(position, new OpenPgpProviderEntry(packageName, simpleName, icon));
- }
-
- @Override
- protected void onPrepareDialogBuilder(Builder builder) {
- mList.clear();
-
- // add "none"-entry
- mList.add(0, new OpenPgpProviderEntry("",
- getContext().getString(R.string.openpgp_list_preference_none),
- getContext().getResources().getDrawable(R.drawable.ic_action_cancel_launchersize)));
-
- // add all additional (legacy) providers
- mList.addAll(mLegacyList);
-
- // search for OpenPGP providers...
- ArrayList providerList = new ArrayList();
- Intent intent = new Intent(OpenPgpApi.SERVICE_INTENT);
- List resInfo = getContext().getPackageManager().queryIntentServices(intent, 0);
- if (!resInfo.isEmpty()) {
- for (ResolveInfo resolveInfo : resInfo) {
- if (resolveInfo.serviceInfo == null)
- continue;
-
- String packageName = resolveInfo.serviceInfo.packageName;
- String simpleName = String.valueOf(resolveInfo.serviceInfo.loadLabel(getContext()
- .getPackageManager()));
- Drawable icon = resolveInfo.serviceInfo.loadIcon(getContext().getPackageManager());
-
- providerList.add(new OpenPgpProviderEntry(packageName, simpleName, icon));
- }
- }
-
- if (providerList.isEmpty()) {
- // add install links if provider list is empty
- resInfo = getContext().getPackageManager().queryIntentActivities
- (MARKET_INTENT, 0);
- for (ResolveInfo resolveInfo : resInfo) {
- Intent marketIntent = new Intent(MARKET_INTENT);
- marketIntent.setPackage(resolveInfo.activityInfo.packageName);
- Drawable icon = resolveInfo.activityInfo.loadIcon(getContext().getPackageManager());
- String marketName = String.valueOf(resolveInfo.activityInfo.applicationInfo
- .loadLabel(getContext().getPackageManager()));
- String simpleName = String.format(getContext().getString(R.string
- .openpgp_install_openkeychain_via), marketName);
- mList.add(new OpenPgpProviderEntry(OPENKEYCHAIN_PACKAGE, simpleName,
- icon, marketIntent));
- }
- } else {
- // add provider
- mList.addAll(providerList);
- }
-
- // Init ArrayAdapter with OpenPGP Providers
- ListAdapter adapter = new ArrayAdapter(getContext(),
- android.R.layout.select_dialog_singlechoice, android.R.id.text1, mList) {
- public View getView(int position, View convertView, ViewGroup parent) {
- // User super class to create the View
- View v = super.getView(position, convertView, parent);
- TextView tv = (TextView) v.findViewById(android.R.id.text1);
-
- // Put the image on the TextView
- tv.setCompoundDrawablesWithIntrinsicBounds(mList.get(position).icon, null,
- null, null);
-
- // Add margin between image and text (support various screen densities)
- int dp10 = (int) (10 * getContext().getResources().getDisplayMetrics().density + 0.5f);
- tv.setCompoundDrawablePadding(dp10);
-
- return v;
- }
- };
-
- builder.setSingleChoiceItems(adapter, getIndexOfProviderList(getValue()),
- new DialogInterface.OnClickListener() {
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- OpenPgpProviderEntry entry = mList.get(which);
-
- if (entry.intent != null) {
- /*
- * Intents are called as activity
- *
- * Current approach is to assume the user installed the app.
- * If he does not, the selected package is not valid.
- *
- * However applications should always consider this could happen,
- * as the user might remove the currently used OpenPGP app.
- */
- getContext().startActivity(entry.intent);
- }
-
- mSelectedPackage = entry.packageName;
-
- /*
- * Clicking on an item simulates the positive button click, and dismisses
- * the dialog.
- */
- OpenPgpListPreference.this.onClick(dialog, DialogInterface.BUTTON_POSITIVE);
- dialog.dismiss();
- }
- });
-
- /*
- * The typical interaction for list-based dialogs is to have click-on-an-item dismiss the
- * dialog instead of the user having to press 'Ok'.
- */
- builder.setPositiveButton(null, null);
- }
-
- @Override
- protected void onDialogClosed(boolean positiveResult) {
- super.onDialogClosed(positiveResult);
-
- if (positiveResult && (mSelectedPackage != null)) {
- if (callChangeListener(mSelectedPackage)) {
- setValue(mSelectedPackage);
- }
- }
- }
-
- private int getIndexOfProviderList(String packageName) {
- for (OpenPgpProviderEntry app : mList) {
- if (app.packageName.equals(packageName)) {
- return mList.indexOf(app);
- }
- }
-
- return -1;
- }
-
- public void setValue(String packageName) {
- mSelectedPackage = packageName;
- persistString(packageName);
- }
-
- public String getValue() {
- return mSelectedPackage;
- }
-
- public String getEntry() {
- return getEntryByValue(mSelectedPackage);
- }
-
- @Override
- protected Object onGetDefaultValue(TypedArray a, int index) {
- return a.getString(index);
- }
-
- @Override
- protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
- setValue(restoreValue ? getPersistedString(mSelectedPackage) : (String) defaultValue);
- }
-
- public String getEntryByValue(String packageName) {
- for (OpenPgpProviderEntry app : mList) {
- if (app.packageName.equals(packageName)) {
- return app.simpleName;
- }
- }
-
- return null;
- }
-
- private static class OpenPgpProviderEntry {
- private String packageName;
- private String simpleName;
- private Drawable icon;
- private Intent intent;
-
- public OpenPgpProviderEntry(String packageName, String simpleName, Drawable icon) {
- this.packageName = packageName;
- this.simpleName = simpleName;
- this.icon = icon;
- }
-
- public OpenPgpProviderEntry(String packageName, String simpleName, Drawable icon, Intent intent) {
- this(packageName, simpleName, icon);
- this.intent = intent;
- }
-
- @Override
- public String toString() {
- return simpleName;
- }
- }
-}
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpServiceConnection.java b/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpServiceConnection.java
deleted file mode 100644
index 0395a7bc5..000000000
--- a/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpServiceConnection.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (C) 2014 Dominik Schürmann
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.openintents.openpgp.util;
-
-import org.openintents.openpgp.IOpenPgpService;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.os.IBinder;
-
-public class OpenPgpServiceConnection {
-
- // interface to create callbacks for onServiceConnected
- public interface OnBound {
- public void onBound(IOpenPgpService service);
- }
-
- private Context mApplicationContext;
-
- private IOpenPgpService mService;
- private String mProviderPackageName;
-
- private OnBound mOnBoundListener;
-
- /**
- * Create new OpenPgpServiceConnection
- *
- * @param context
- * @param providerPackageName specify package name of OpenPGP provider,
- * e.g., "org.sufficientlysecure.keychain"
- */
- public OpenPgpServiceConnection(Context context, String providerPackageName) {
- this.mApplicationContext = context.getApplicationContext();
- this.mProviderPackageName = providerPackageName;
- }
-
- /**
- * Create new OpenPgpServiceConnection
- *
- * @param context
- * @param providerPackageName specify package name of OpenPGP provider,
- * e.g., "org.sufficientlysecure.keychain"
- * @param onBoundListener callback, executed when connection to service has been established
- */
- public OpenPgpServiceConnection(Context context, String providerPackageName,
- OnBound onBoundListener) {
- this.mApplicationContext = context.getApplicationContext();
- this.mProviderPackageName = providerPackageName;
- this.mOnBoundListener = onBoundListener;
- }
-
- public IOpenPgpService getService() {
- return mService;
- }
-
- public boolean isBound() {
- return (mService != null);
- }
-
- private ServiceConnection mServiceConnection = new ServiceConnection() {
- public void onServiceConnected(ComponentName name, IBinder service) {
- mService = IOpenPgpService.Stub.asInterface(service);
- if (mOnBoundListener != null) {
- mOnBoundListener.onBound(mService);
- }
- }
-
- public void onServiceDisconnected(ComponentName name) {
- mService = null;
- }
- };
-
- /**
- * If not already bound, bind to service!
- *
- * @return
- */
- public boolean bindToService() {
- // if not already bound...
- if (mService == null) {
- try {
- Intent serviceIntent = new Intent();
- serviceIntent.setAction(IOpenPgpService.class.getName());
- // NOTE: setPackage is very important to restrict the intent to this provider only!
- serviceIntent.setPackage(mProviderPackageName);
- mApplicationContext.bindService(serviceIntent, mServiceConnection,
- Context.BIND_AUTO_CREATE);
-
- return true;
- } catch (Exception e) {
- return false;
- }
- } else {
- return true;
- }
- }
-
- public void unbindFromService() {
- mApplicationContext.unbindService(mServiceConnection);
- }
-
-}
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpUtils.java b/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpUtils.java
deleted file mode 100644
index e24c937aa..000000000
--- a/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpUtils.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2014 Dominik Schürmann
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.openintents.openpgp.util;
-
-import java.util.List;
-import java.util.Locale;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ResolveInfo;
-
-public class OpenPgpUtils {
-
- public static final Pattern PGP_MESSAGE = Pattern.compile(
- ".*?(-----BEGIN PGP MESSAGE-----.*?-----END PGP MESSAGE-----).*",
- Pattern.DOTALL);
-
- public static final Pattern PGP_SIGNED_MESSAGE = Pattern.compile(
- ".*?(-----BEGIN PGP SIGNED MESSAGE-----.*?-----BEGIN PGP SIGNATURE-----.*?-----END PGP SIGNATURE-----).*",
- Pattern.DOTALL);
-
- public static final int PARSE_RESULT_NO_PGP = -1;
- public static final int PARSE_RESULT_MESSAGE = 0;
- public static final int PARSE_RESULT_SIGNED_MESSAGE = 1;
-
- public static int parseMessage(String message) {
- Matcher matcherSigned = PGP_SIGNED_MESSAGE.matcher(message);
- Matcher matcherMessage = PGP_MESSAGE.matcher(message);
-
- if (matcherMessage.matches()) {
- return PARSE_RESULT_MESSAGE;
- } else if (matcherSigned.matches()) {
- return PARSE_RESULT_SIGNED_MESSAGE;
- } else {
- return PARSE_RESULT_NO_PGP;
- }
- }
-
- public static boolean isAvailable(Context context) {
- Intent intent = new Intent(OpenPgpApi.SERVICE_INTENT);
- List resInfo = context.getPackageManager().queryIntentServices(intent, 0);
- if (!resInfo.isEmpty()) {
- return true;
- } else {
- return false;
- }
- }
-
- public static String convertKeyIdToHex(long keyId) {
- return "0x" + convertKeyIdToHex32bit(keyId >> 32) + convertKeyIdToHex32bit(keyId);
- }
-
- private static String convertKeyIdToHex32bit(long keyId) {
- String hexString = Long.toHexString(keyId & 0xffffffffL).toLowerCase(Locale.US);
- while (hexString.length() < 8) {
- hexString = "0" + hexString;
- }
- return hexString;
- }
-}
diff --git a/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/ParcelFileDescriptorUtil.java b/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/ParcelFileDescriptorUtil.java
deleted file mode 100644
index 58c62110d..000000000
--- a/OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/ParcelFileDescriptorUtil.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2014 Dominik Schürmann
- * 2013 Flow (http://stackoverflow.com/questions/18212152/transfer-inputstream-to-another-service-across-process-boundaries-with-parcelf)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.openintents.openpgp.util;
-
-import android.os.ParcelFileDescriptor;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-public class ParcelFileDescriptorUtil {
-
- public interface IThreadListener {
- void onThreadFinished(final Thread thread);
- }
-
- public static ParcelFileDescriptor pipeFrom(InputStream inputStream, IThreadListener listener)
- throws IOException {
- ParcelFileDescriptor[] pipe = ParcelFileDescriptor.createPipe();
- ParcelFileDescriptor readSide = pipe[0];
- ParcelFileDescriptor writeSide = pipe[1];
-
- // start the transfer thread
- new TransferThread(inputStream, new ParcelFileDescriptor.AutoCloseOutputStream(writeSide),
- listener)
- .start();
-
- return readSide;
- }
-
- public static ParcelFileDescriptor pipeTo(OutputStream outputStream, IThreadListener listener)
- throws IOException {
- ParcelFileDescriptor[] pipe = ParcelFileDescriptor.createPipe();
- ParcelFileDescriptor readSide = pipe[0];
- ParcelFileDescriptor writeSide = pipe[1];
-
- // start the transfer thread
- new TransferThread(new ParcelFileDescriptor.AutoCloseInputStream(readSide), outputStream,
- listener)
- .start();
-
- return writeSide;
- }
-
- static class TransferThread extends Thread {
- final InputStream mIn;
- final OutputStream mOut;
- final IThreadListener mListener;
-
- TransferThread(InputStream in, OutputStream out, IThreadListener listener) {
- super("ParcelFileDescriptor Transfer Thread");
- mIn = in;
- mOut = out;
- mListener = listener;
- setDaemon(true);
- }
-
- @Override
- public void run() {
- byte[] buf = new byte[1024];
- int len;
-
- try {
- while ((len = mIn.read(buf)) > 0) {
- mOut.write(buf, 0, len);
- }
- mOut.flush(); // just to be safe
- } catch (IOException e) {
- //Log.e(OpenPgpApi.TAG, "TransferThread" + getId() + ": writing failed", e);
- } finally {
- try {
- mIn.close();
- } catch (IOException e) {
- //Log.e(OpenPgpApi.TAG, "TransferThread" + getId(), e);
- }
- try {
- mOut.close();
- } catch (IOException e) {
- //Log.e(OpenPgpApi.TAG, "TransferThread" + getId(), e);
- }
- }
- if (mListener != null) {
- //Log.d(OpenPgpApi.TAG, "TransferThread " + getId() + " finished!");
- mListener.onThreadFinished(this);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/OpenKeychain-API/settings.gradle b/OpenKeychain-API/settings.gradle
deleted file mode 100644
index a819a021b..000000000
--- a/OpenKeychain-API/settings.gradle
+++ /dev/null
@@ -1,3 +0,0 @@
-include ':example-app'
-include ':libraries:openpgp-api-library'
-include ':libraries:openkeychain-api-library'
\ No newline at end of file
diff --git a/OpenKeychain/build.gradle b/OpenKeychain/build.gradle
index 393a18d08..090a7a2bf 100644
--- a/OpenKeychain/build.gradle
+++ b/OpenKeychain/build.gradle
@@ -10,8 +10,8 @@ sourceSets {
dependencies {
compile 'com.android.support:support-v4:19.1.0'
compile 'com.android.support:appcompat-v7:19.1.0'
- compile project(':OpenKeychain-API:libraries:openpgp-api-library')
- compile project(':OpenKeychain-API:libraries:openkeychain-api-library')
+ compile project(':extern:openpgp-api-lib')
+ compile project(':extern:openkeychain-api-lib')
compile project(':extern:html-textview')
compile project(':extern:StickyListHeaders:library')
compile project(':extern:AndroidBootstrap:AndroidBootstrap')
@@ -29,8 +29,8 @@ dependencies {
testLocalCompile 'com.google.android:android:4.1.1.4'
testLocalCompile 'com.android.support:support-v4:19.1.0'
testLocalCompile 'com.android.support:appcompat-v7:19.1.0'
- testLocalCompile project(':OpenKeychain-API:libraries:openpgp-api-library')
- testLocalCompile project(':OpenKeychain-API:libraries:openkeychain-api-library')
+ testLocalCompile project(':extern:openpgp-api-lib')
+ testLocalCompile project(':extern:openkeychain-api-lib')
testLocalCompile project(':extern:html-textview')
testLocalCompile project(':extern:StickyListHeaders:library')
testLocalCompile project(':extern:AndroidBootstrap:AndroidBootstrap')
diff --git a/OpenKeychain/src/main/AndroidManifest.xml b/OpenKeychain/src/main/AndroidManifest.xml
index caefafb54..f4007c098 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="26100"
- android:versionName="2.6.1">
+ android:versionCode="27000"
+ android:versionName="2.7">
+
+
+
+
+
diff --git a/OpenKeychain/src/main/res/drawable/keychaintheme_activated_background_holo_light.xml b/OpenKeychain/src/main/res/drawable/keychaintheme_activated_background_holo_light.xml
new file mode 100644
index 000000000..60415e926
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable/keychaintheme_activated_background_holo_light.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/OpenKeychain/src/main/res/drawable/keychaintheme_btn_check_holo_light.xml b/OpenKeychain/src/main/res/drawable/keychaintheme_btn_check_holo_light.xml
new file mode 100644
index 000000000..62567cb98
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable/keychaintheme_btn_check_holo_light.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenKeychain/src/main/res/drawable/keychaintheme_btn_default_holo_light.xml b/OpenKeychain/src/main/res/drawable/keychaintheme_btn_default_holo_light.xml
new file mode 100644
index 000000000..c9261f53b
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable/keychaintheme_btn_default_holo_light.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenKeychain/src/main/res/drawable/keychaintheme_btn_radio_holo_light.xml b/OpenKeychain/src/main/res/drawable/keychaintheme_btn_radio_holo_light.xml
new file mode 100644
index 000000000..eeba95d4f
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable/keychaintheme_btn_radio_holo_light.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenKeychain/src/main/res/drawable/keychaintheme_edit_text_holo_light.xml b/OpenKeychain/src/main/res/drawable/keychaintheme_edit_text_holo_light.xml
new file mode 100644
index 000000000..7acab984d
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable/keychaintheme_edit_text_holo_light.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OpenKeychain/src/main/res/drawable/keychaintheme_item_background_holo_light.xml b/OpenKeychain/src/main/res/drawable/keychaintheme_item_background_holo_light.xml
new file mode 100644
index 000000000..b385d2f92
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable/keychaintheme_item_background_holo_light.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenKeychain/src/main/res/drawable/keychaintheme_list_selector_background_transition_holo_light.xml b/OpenKeychain/src/main/res/drawable/keychaintheme_list_selector_background_transition_holo_light.xml
new file mode 100644
index 000000000..2a5561b22
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable/keychaintheme_list_selector_background_transition_holo_light.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/OpenKeychain/src/main/res/drawable/keychaintheme_list_selector_holo_light.xml b/OpenKeychain/src/main/res/drawable/keychaintheme_list_selector_holo_light.xml
new file mode 100644
index 000000000..17164fd1d
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable/keychaintheme_list_selector_holo_light.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenKeychain/src/main/res/drawable/keychaintheme_progress_horizontal_holo_light.xml b/OpenKeychain/src/main/res/drawable/keychaintheme_progress_horizontal_holo_light.xml
new file mode 100644
index 000000000..a99f756f6
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable/keychaintheme_progress_horizontal_holo_light.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenKeychain/src/main/res/drawable/keychaintheme_progress_indeterminate_horizontal_holo_light.xml b/OpenKeychain/src/main/res/drawable/keychaintheme_progress_indeterminate_horizontal_holo_light.xml
new file mode 100644
index 000000000..79c050e47
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable/keychaintheme_progress_indeterminate_horizontal_holo_light.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenKeychain/src/main/res/drawable/keychaintheme_searchview_holo_light.xml b/OpenKeychain/src/main/res/drawable/keychaintheme_searchview_holo_light.xml
new file mode 100644
index 000000000..e82b1c2f3
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable/keychaintheme_searchview_holo_light.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OpenKeychain/src/main/res/drawable/keychaintheme_spinner_background_holo_light.xml b/OpenKeychain/src/main/res/drawable/keychaintheme_spinner_background_holo_light.xml
new file mode 100644
index 000000000..9fbb83f95
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable/keychaintheme_spinner_background_holo_light.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
diff --git a/OpenKeychain/src/main/res/drawable/selector_transparent_button.xml b/OpenKeychain/src/main/res/drawable/selector_transparent_button.xml
index a2cacf0ad..ed856f281 100644
--- a/OpenKeychain/src/main/res/drawable/selector_transparent_button.xml
+++ b/OpenKeychain/src/main/res/drawable/selector_transparent_button.xml
@@ -1,7 +1,7 @@
-
-
+
+
\ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/certify_key_activity.xml b/OpenKeychain/src/main/res/layout/certify_key_activity.xml
index 0ae46a261..bb43fa805 100644
--- a/OpenKeychain/src/main/res/layout/certify_key_activity.xml
+++ b/OpenKeychain/src/main/res/layout/certify_key_activity.xml
@@ -35,12 +35,13 @@
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:layout_marginTop="14dp"
- android:text="KEY TO SIGN" />
+ android:text="@string/section_key_to_certify" />
@@ -108,10 +109,10 @@
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:layout_marginTop="14dp"
- android:text="@string/section_uids_to_sign" />
+ android:text="@string/section_uids_to_certify" />
@@ -134,22 +135,37 @@
android:text="@string/label_send_key" />
-
+ android:text="@string/section_actions"
+ android:layout_weight="1" />
+
+
+
\ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/decrypt_file_fragment.xml b/OpenKeychain/src/main/res/layout/decrypt_file_fragment.xml
index 597652713..d1db1c782 100644
--- a/OpenKeychain/src/main/res/layout/decrypt_file_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/decrypt_file_fragment.xml
@@ -65,27 +65,29 @@
android:layout_height="match_parent">
-
-
+ android:layout_alignParentStart="true"
+ android:layout_marginBottom="8dp" />
+
+
diff --git a/OpenKeychain/src/main/res/layout/decrypt_message_fragment.xml b/OpenKeychain/src/main/res/layout/decrypt_message_fragment.xml
index 831d7e888..0db581910 100644
--- a/OpenKeychain/src/main/res/layout/decrypt_message_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/decrypt_message_fragment.xml
@@ -37,43 +37,52 @@
android:scrollHorizontally="true"
android:layout_weight="1" />
-
+
+ android:clickable="true"
+ style="@style/SelectableItem"
+ android:orientation="horizontal"
+ android:layout_marginBottom="8dp">
-
+
-
+
+
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:padding="8dp"
+ android:src="@drawable/ic_action_paste"
+ android:layout_gravity="center_vertical"
+ style="@style/SelectableItem" />
+
+
+
+
diff --git a/OpenKeychain/src/main/res/layout/decrypt_result_include.xml b/OpenKeychain/src/main/res/layout/decrypt_result_include.xml
index 70faa1d80..3bc78d325 100644
--- a/OpenKeychain/src/main/res/layout/decrypt_result_include.xml
+++ b/OpenKeychain/src/main/res/layout/decrypt_result_include.xml
@@ -9,7 +9,13 @@
android:paddingRight="16dp"
android:paddingTop="4dp"
android:paddingBottom="4dp"
- android:background="@color/result_blue">
+ android:background="@color/result_purple">
+
+
+ android:textColor="@color/white"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="8dp"
+ android:layout_marginBottom="8dp" />
+
+
+ android:orientation="horizontal"
+ android:layout_marginBottom="8dp"
+ android:layout_marginTop="8dp">
+
+
-
-
\ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/edit_key_activity.xml b/OpenKeychain/src/main/res/layout/edit_key_activity.xml
index fc4422cf0..1ce5c096f 100644
--- a/OpenKeychain/src/main/res/layout/edit_key_activity.xml
+++ b/OpenKeychain/src/main/res/layout/edit_key_activity.xml
@@ -33,7 +33,7 @@
android:padding="4dp"
android:text="@string/btn_set_passphrase"
bootstrapbutton:bb_icon_left="fa-pencil"
- bootstrapbutton:bb_type="info" />
+ bootstrapbutton:bb_type="default" />
-
-
+ android:layout_alignParentStart="true"
+ android:layout_marginBottom="8dp" />
+
+
diff --git a/OpenKeychain/src/main/res/layout/encrypt_message_fragment.xml b/OpenKeychain/src/main/res/layout/encrypt_message_fragment.xml
index 1fa338426..fab983fa5 100644
--- a/OpenKeychain/src/main/res/layout/encrypt_message_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/encrypt_message_fragment.xml
@@ -1,6 +1,5 @@
@@ -22,41 +21,51 @@
android:hint="@string/encrypt_content_edit_text_hint"
android:layout_weight="1" />
-
+
+ android:clickable="true"
+ style="@style/SelectableItem"
+ android:orientation="horizontal"
+ android:layout_marginBottom="8dp">
-
+
-
+
+
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:padding="8dp"
+ android:src="@drawable/ic_action_copy"
+ android:layout_gravity="center_vertical"
+ style="@style/SelectableItem" />
+
diff --git a/OpenKeychain/src/main/res/layout/help_activity.xml b/OpenKeychain/src/main/res/layout/help_activity.xml
index 58e4919dc..76ba183b7 100644
--- a/OpenKeychain/src/main/res/layout/help_activity.xml
+++ b/OpenKeychain/src/main/res/layout/help_activity.xml
@@ -4,6 +4,11 @@
android:layout_height="match_parent"
android:orientation="vertical" >
+
+
-
+
+
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:drawableRight="@drawable/ic_action_download"
+ android:drawablePadding="8dp"
+ android:gravity="center_vertical"
+ android:clickable="true"
+ style="@style/SelectableItem" />
diff --git a/OpenKeychain/src/main/res/layout/import_keys_keybase_fragment.xml b/OpenKeychain/src/main/res/layout/import_keys_keybase_fragment.xml
new file mode 100644
index 000000000..248581342
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/import_keys_keybase_fragment.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/import_keys_list_entry.xml b/OpenKeychain/src/main/res/layout/import_keys_list_entry.xml
index ba8ff91ca..f5ec71abe 100644
--- a/OpenKeychain/src/main/res/layout/import_keys_list_entry.xml
+++ b/OpenKeychain/src/main/res/layout/import_keys_list_entry.xml
@@ -106,7 +106,7 @@
android:typeface="monospace" />
-
+ android:clipToPadding="false"
+ android:drawSelectorOnTop="true"
+ android:fastScrollEnabled="true"
+ android:paddingBottom="16dp"
+ android:paddingLeft="16dp"
+ android:paddingRight="32dp"
+ android:scrollbarStyle="outsideOverlay" />
-
+
+ android:gravity="center"
+ android:text="@string/key_list_empty_text1"
+ android:textAppearance="?android:attr/textAppearanceLarge" />
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/OpenKeychain/src/main/res/layout/key_list_header.xml b/OpenKeychain/src/main/res/layout/key_list_header.xml
index de7bdbd5c..8cb0d4262 100644
--- a/OpenKeychain/src/main/res/layout/key_list_header.xml
+++ b/OpenKeychain/src/main/res/layout/key_list_header.xml
@@ -3,15 +3,12 @@
android:layout_width="match_parent"
android:layout_height="wrap_content" >
-
-
+ android:src="@drawable/ic_action_edit"
+ android:text="@string/edit"
+ android:padding="12dp" />
+ android:layout_gravity="center"
+ android:padding="12dp" />
+ android:padding="16dp" />
diff --git a/OpenKeychain/src/main/res/layout/loader_layout.xml b/OpenKeychain/src/main/res/layout/loader_layout.xml
new file mode 100644
index 000000000..50252d27c
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/loader_layout.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenKeychain/src/main/res/layout/key_server_export.xml b/OpenKeychain/src/main/res/layout/upload_key_activity.xml
similarity index 52%
rename from OpenKeychain/src/main/res/layout/key_server_export.xml
rename to OpenKeychain/src/main/res/layout/upload_key_activity.xml
index 6031bf7c7..5a6f732d5 100644
--- a/OpenKeychain/src/main/res/layout/key_server_export.xml
+++ b/OpenKeychain/src/main/res/layout/upload_key_activity.xml
@@ -2,14 +2,14 @@
+ android:layout_height="match_parent">
+ android:orientation="vertical">
-
+
-
+
+
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:drawableRight="@drawable/ic_action_upload"
+ android:drawablePadding="8dp"
+ android:gravity="center_vertical"
+ android:clickable="true"
+ style="@style/SelectableItem" />
+
\ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/view_cert_activity.xml b/OpenKeychain/src/main/res/layout/view_cert_activity.xml
index 76bf91757..66c635599 100644
--- a/OpenKeychain/src/main/res/layout/view_cert_activity.xml
+++ b/OpenKeychain/src/main/res/layout/view_cert_activity.xml
@@ -42,8 +42,9 @@
android:text="@string/section_cert" />
@@ -159,11 +160,13 @@
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:layout_marginTop="14dp"
- android:text="@string/section_signer_id" />
+ android:text="@string/section_certifier_id" />
@@ -190,19 +193,41 @@
android:id="@+id/label_algorithm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
+ android:layout_gravity="top"
android:paddingRight="10dip"
- android:text="@string/label_email" />
+ android:text="@string/label_user_id" />
+ android:paddingRight="5dip" />
+
+
+
+
diff --git a/OpenKeychain/src/main/res/layout/view_key_activity.xml b/OpenKeychain/src/main/res/layout/view_key_activity.xml
index 58e4919dc..f43aade25 100644
--- a/OpenKeychain/src/main/res/layout/view_key_activity.xml
+++ b/OpenKeychain/src/main/res/layout/view_key_activity.xml
@@ -2,11 +2,49 @@
+ android:orientation="vertical">
+
+
+
+
+
+
+
+
+ android:layout_height="0px"
+ android:layout_weight="1"
+ android:background="@android:color/white" />
\ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/view_key_certs_header.xml b/OpenKeychain/src/main/res/layout/view_key_certs_header.xml
index 037203dbd..f99c012c9 100644
--- a/OpenKeychain/src/main/res/layout/view_key_certs_header.xml
+++ b/OpenKeychain/src/main/res/layout/view_key_certs_header.xml
@@ -3,15 +3,12 @@
android:layout_width="match_parent"
android:layout_height="wrap_content" >
-
@@ -38,7 +38,7 @@
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="status"
android:visibility="visible"
- android:layout_above="@+id/signerUserId"
+ android:layout_above="@+id/signerKeyId"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="10dp" />
diff --git a/OpenKeychain/src/main/res/layout/view_key_keys_fragment.xml b/OpenKeychain/src/main/res/layout/view_key_keys_fragment.xml
new file mode 100644
index 000000000..caea22341
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/view_key_keys_fragment.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenKeychain/src/main/res/layout/view_key_keys_item.xml b/OpenKeychain/src/main/res/layout/view_key_keys_item.xml
index 66cd4d7b5..13feaf2cc 100644
--- a/OpenKeychain/src/main/res/layout/view_key_keys_item.xml
+++ b/OpenKeychain/src/main/res/layout/view_key_keys_item.xml
@@ -1,83 +1,101 @@
-
+ android:paddingRight="3dip"
+ android:singleLine="true">
-
-
+ android:src="@drawable/key_small"
+ android:layout_marginLeft="8dp" />
+ android:layout_gravity="center_vertical"
+ android:layout_marginLeft="8dp"
+ android:layout_marginRight="8dp">
-
+ android:orientation="horizontal"
+ android:paddingBottom="2dip"
+ android:paddingTop="2dip">
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
diff --git a/OpenKeychain/src/main/res/layout/view_key_main_fragment.xml b/OpenKeychain/src/main/res/layout/view_key_main_fragment.xml
index e3448c39f..d93420a99 100644
--- a/OpenKeychain/src/main/res/layout/view_key_main_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/view_key_main_fragment.xml
@@ -1,5 +1,4 @@
@@ -12,253 +11,91 @@
android:descendantFocusability="beforeDescendants"
android:orientation="vertical"
android:paddingLeft="16dp"
- android:paddingRight="16dp"
- android:id="@+id/container">
+ android:paddingRight="16dp">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_marginTop="8dp"
+ android:text="@string/section_user_ids"
+ android:layout_weight="1" />
-
+ android:layout_marginBottom="4dp"
+ android:layout_weight="1" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:drawableRight="@drawable/ic_action_good"
+ android:drawablePadding="8dp"
+ android:gravity="center_vertical"
+ android:clickable="true"
+ style="@style/SelectableItem" />
+
+
+
+
+
+
+
+
diff --git a/OpenKeychain/src/main/res/layout/view_key_share_fragment.xml b/OpenKeychain/src/main/res/layout/view_key_share_fragment.xml
new file mode 100644
index 000000000..67c2e241a
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/view_key_share_fragment.xml
@@ -0,0 +1,178 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenKeychain/src/main/res/layout/view_key_userids_item.xml b/OpenKeychain/src/main/res/layout/view_key_userids_item.xml
index e56355ff3..2f4041f8c 100644
--- a/OpenKeychain/src/main/res/layout/view_key_userids_item.xml
+++ b/OpenKeychain/src/main/res/layout/view_key_userids_item.xml
@@ -2,6 +2,7 @@
@@ -13,23 +14,37 @@
android:clickable="false"
android:focusable="false" />
-
+ android:orientation="vertical">
+
+
+
+
+
+
-
-
diff --git a/OpenKeychain/src/main/res/menu/api_app_settings.xml b/OpenKeychain/src/main/res/menu/api_app_settings.xml
index a21db6708..1233e4f6e 100644
--- a/OpenKeychain/src/main/res/menu/api_app_settings.xml
+++ b/OpenKeychain/src/main/res/menu/api_app_settings.xml
@@ -2,6 +2,12 @@
\ No newline at end of file
diff --git a/OpenKeychain/src/main/res/menu/view_cert.xml b/OpenKeychain/src/main/res/menu/view_cert.xml
deleted file mode 100644
index 8c8e455c7..000000000
--- a/OpenKeychain/src/main/res/menu/view_cert.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/OpenKeychain/src/main/res/raw-cs-rCZ/help_changelog.html b/OpenKeychain/src/main/res/raw-cs-rCZ/help_changelog.html
index f983e2bb1..ebada67f9 100644
--- a/OpenKeychain/src/main/res/raw-cs-rCZ/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw-cs-rCZ/help_changelog.html
@@ -1,6 +1,14 @@
+
support for GnuPG partial secret keys (thanks to Vincent Breitmoser)
+
new design for signature verification
+
custom key length (thanks to Greg Witczak)
+
fix share-functionality from other apps
+
+
2.5
+
+
fix decryption of symmetric pgp messages/files
+
refactored edit key screen (thanks to Ash Hughes)
+
new modern design for encrypt/decrypt screens
+
OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)
+
+
2.4
+
Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
+Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
+Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.
+
+
new unified key list
+
colorized key fingerprint
+
support for keyserver ports
+
deactivate possibility to generate weak keys
+
much more internal work on the API
+
certify user ids
+
keyserver query based on machine-readable output
+
lock navigation drawer on tablets
+
suggestions for emails on creation of keys
+
search in public key lists
+
and much more improvements and fixes…
+
+
2.3.1
+
+
hotfix for crash when upgrading from old versions
+
+
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
+
fix layout and dialog style on Android 2.2-3.0
+
fix crash on keys with empty user ids
+
fix crash and empty lists when coming back from signing screen
+
Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source
+
fix upload of key from signing screen
+
+
2.2
+
+
new design with navigation drawer
+
new public key list design
+
new public key view
+
bug fixes for importing of keys
+
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
+
+
2.1.1
+
+
API Updates, preparation for K-9 Mail integration
+
+
2.1
+
+
lots of bug fixes
+
new API for developers
+
PRNG bug fix by Google
+
+
2.0
+
+
complete redesign
+
share public keys via qr codes, nfc beam
+
sign keys
+
upload keys to server
+
fixes import issues
+
new AIDL API
+
+
1.0.8
+
+
basic keyserver support
+
app2sd
+
more choices for pass phrase cache: 1, 2, 4, 8, hours
+
translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)
+
bugfixes
+
optimizations
+
+
1.0.7
+
+
fixed problem with signature verification of texts with trailing newline
+
more options for pass phrase cache time to live (20, 40, 60 mins)
+
+
1.0.6
+
+
account adding crash on Froyo fixed
+
secure file deletion
+
option to delete key file after import
+
stream encryption/decryption (gallery, etc.)
+
new options (language, force v3 signatures)
+
interface changes
+
bugfixes
+
+
1.0.5
+
+
German and Italian translation
+
much smaller package, due to reduced BC sources
+
new preferences GUI
+
layout adjustment for localization
+
signature bugfix
+
+
1.0.4
+
+
fixed another crash caused by some SDK bug with query builder
+
+
1.0.3
+
+
fixed crashes during encryption/signing and possibly key export
+
+
1.0.2
+
+
filterable key lists
+
smarter pre-selection of encryption keys
+
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
+
+
1.0.1
+
+
GMail account listing was broken in 1.0.0, fixed again
+
+
1.0.0
+
+
K-9 Mail integration, APG supporting beta build of K-9 Mail
+
support of more file managers (including ASTRO)
+
Slovenian translation
+
new database, much faster, less memory usage
+
defined Intents and content provider for other apps
Go to your partners contacts and open the contact you want to share.
+
Hold the two devices back to back (they have to be almost touching) and you’ll feel a vibration.
+
After it vibrates you’ll see the content on your partners device turn into a card-like object with Star Trek warp speed-looking animation in the background.
+
Tap the card and the content will then load on the your device.
It is recommended that you install OI File Manager for enhanced file selection and Barcode Scanner to scan generated QR Codes. Clicking on the links will open Google Play Store or F-Droid for installation.
+
Applications
+
Several applications support OpenKeychain to encrypt/sign your private communication:
It is recommended that you install OI File Manager for enhanced file selection and Barcode Scanner to scan generated QR Codes. Clicking on the links will open Google Play Store or F-Droid for installation.
+
Applications
+
Several applications support OpenKeychain to encrypt/sign your private communication:
Zalecana jest instalacja menadżera plików OI File Manager w celu zapewnienia wygodniejszego wyboru plików oraz programu Barcode Scanner, który jest w stanie skanować wygenerowane kody QR. Kliknięcie na powyższe linki przekieruje Cię do sklepu Google Play / F-Droid.
+
Applications
+
Several applications support OpenKeychain to encrypt/sign your private communication:
Рекомендуется установить OI File Manager для удобного выбора файлов и Barcode Scanner для распознавания QR кодов. Перейдите по ссылкам на соответствующие страницы Google Play или F-Droid для дальнейшей установки.
+
Applications
+
Several applications support OpenKeychain to encrypt/sign your private communication:
Priporočamo, da namestite aplikaciji OI File Manager za boljše delo z datotekami in Barcode Scanner za skeniranje kod QR. Klik na povezavi bo odprl trgovino Google Play Store ali F-Droid za namestitev.
+
Applications
+
Several applications support OpenKeychain to encrypt/sign your private communication:
It is recommended that you install OI File Manager for enhanced file selection and Barcode Scanner to scan generated QR Codes. Clicking on the links will open Google Play Store or F-Droid for installation.
+
Applications
+
Several applications support OpenKeychain to encrypt/sign your private communication:
Рекомендуємо вам встановити OI File Manager для поліпшеного виділення файлів та Barcode Scanner для сканування згенерованих штрих-кодів. Натискання посилань відкриє Google Play або F-Droid для встановлення.
+
Applications
+
Several applications support OpenKeychain to encrypt/sign your private communication:
It is recommended that you install OI File Manager for enhanced file selection and Barcode Scanner to scan generated QR Codes. Clicking on the links will open Google Play Store or F-Droid for installation.
+
Applications
+
Several applications support OpenKeychain to encrypt/sign your private communication:
diff --git a/OpenKeychain/src/main/res/raw/help_about.html b/OpenKeychain/src/main/res/raw/help_about.html
index 847168446..a9178d515 100644
--- a/OpenKeychain/src/main/res/raw/help_about.html
+++ b/OpenKeychain/src/main/res/raw/help_about.html
@@ -23,6 +23,7 @@ And don't add newlines before or after p tags because of transifex -->
Paul Sarbinowski
Sreeram Boyapati
Vincent Breitmoser
+
Tim Bray
Developers APG 1.x
diff --git a/OpenKeychain/src/main/res/raw/help_changelog.html b/OpenKeychain/src/main/res/raw/help_changelog.html
index dd3c0e81a..779aa696f 100644
--- a/OpenKeychain/src/main/res/raw/help_changelog.html
+++ b/OpenKeychain/src/main/res/raw/help_changelog.html
@@ -5,6 +5,15 @@ And don't add newlines before or after p tags because of transifex -->
+
2.7
+
+
Purple! (Dominik, Vincent)
+
New key view design (Dominik, Vincent)
+
New flat Android buttons (Dominik, Vincent)
+
API fixes (Dominik)
+
Keybase.io import (Tim Bray)
+
+
2.6.1
some fixes for regression bugs
diff --git a/OpenKeychain/src/main/res/raw/help_start.html b/OpenKeychain/src/main/res/raw/help_start.html
index 4b2bdf722..26386d3d4 100644
--- a/OpenKeychain/src/main/res/raw/help_start.html
+++ b/OpenKeychain/src/main/res/raw/help_start.html
@@ -10,6 +10,12 @@ And don't add newlines before or after p tags because of transifex -->
It is recommended that you install OI File Manager for enhanced file selection and Barcode Scanner to scan generated QR Codes. Clicking on the links will open Google Play Store or F-Droid for installation.
+
Applications
+
Several applications support OpenKeychain to encrypt/sign your private communication:
+
K-9 Mail: OpenKeychain support available in current alpha build!
+ Conversations: Jabber/XMPP client
+ PGPAuth: App to send a PGP-signed request to a server to open or close $thing
diff --git a/OpenKeychain/src/main/res/values-cs-rCZ/strings.xml b/OpenKeychain/src/main/res/values-cs-rCZ/strings.xml
index 204b28c38..c3d7cc4c9 100644
--- a/OpenKeychain/src/main/res/values-cs-rCZ/strings.xml
+++ b/OpenKeychain/src/main/res/values-cs-rCZ/strings.xml
@@ -19,7 +19,6 @@
Nahrát na server s klíčiNápověda
- Klíče
@@ -44,6 +43,6 @@
-
+
diff --git a/OpenKeychain/src/main/res/values-de/strings.xml b/OpenKeychain/src/main/res/values-de/strings.xml
index 801e3cc42..61d4fc642 100644
--- a/OpenKeychain/src/main/res/values-de/strings.xml
+++ b/OpenKeychain/src/main/res/values-de/strings.xml
@@ -13,7 +13,9 @@
SchlüsselserverPassphrase ändernPasswort setzen
- Teilen mit...
+ Teilen über...
+ Teile Fingerabdruck über…
+ Teile Schlüssel über...Datei teilen mit…In eine Datei verschlüsselnIn eine Datei entschlüsseln
@@ -22,28 +24,32 @@
Schlüssel exportierenSchlüssel nicht gefundenAuf Schlüsselserver hochladen
- Schlüssel beglaubigen
+ Identitäten beglaubigenSchlüsseldetailsHilfe
- Benutzer-IDs
- Schlüssel
+ Identitäten
+ UnterschlüsselAllgemeinStandardwerteFortgeschrittene EinstellungenHauptschlüssel
- Hauptbenutzer-ID
+ HauptidentitätAktionen
+ Gesamter SchlüsselMit diesem Schlüssel beglaubigenSchlüssel hochladenSchlüsselserverVerschlüsseln und/oder SignierenEntschlüsseln und Verifizieren
+ Fingerabdruck
+ Zu beglaubigender SchlüsselBeglaubigen
- Entschlüsseln und Verifizieren
+ Datei entschlüsseln, verifizieren und speichern
+ Entschlüsseln und verifizierenAus der Zwischenablage
- Datei verschlüsseln
+ Datei verschlüsseln und speichernSpeichernAbbrechenLöschen
@@ -59,6 +65,8 @@
Schlüssel nachschlagenErweiterte Einstellungen anzeigenErweiterte Einstellungen verbergen
+ Verschlüsselt/signierten Text teilen…
+ Beglaubigungsschlüssel anzeigenEinstellungenHilfe
@@ -71,6 +79,7 @@
Schlüssel erstellen (Experte)SuchenSchlüsselserver
+ Keybase.ioSchlüsselserver…Von einem Schlüsselserver aktualisierenAuf Schlüsselserver hochladen
@@ -116,7 +125,7 @@
AblaufdatumVerwendungszweckSchlüssellänge
- Hauptbenutzer-ID
+ HauptidentitätNameKommentarE-Mail
@@ -136,11 +145,15 @@
kann bestätigenkann nicht bestätigenabgelaufen
- zurückgezogen
+ widerrufen1 Schlüssel%d Schlüssel
+
+ %d Schlüsselserver
+ %d Schlüsselserver
+ Privater Schlüssel:Keine
@@ -190,7 +203,7 @@
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!Es wurden am Schlüsselbund Veränderungen vorgenommen. Sollen dies gespeichert werden?
- Es wurde eine leere Nutzer ID hinzugefügt. Sind sie sicher das sie forfahren wollen?
+ Es wurde eine leere Identität hinzugefügt. Wirklich fortfahren?Soll der öffentliche Schlüssel \'%s\' wirklich gelöscht werden?\nDies kann nicht rückgängig gemacht werden! Private Schlüssel auch exportieren
@@ -225,11 +238,13 @@
%d schlechte private Schlüssel ignoriert. Evtl. wurden sie mit folgender Option exportiert:\n --export-secret-subkeys\nUnbedingt mit der Option \n --export-secret-keys\nexportieren.Schlüssel wurde erfolgreich hochgeladen.
- Schlüssel erfolgreich beglaubigt
+ Identitäten erfolgreich beglaubigtDiese Liste ist leer!
+ Schlüssel erfolgreich mit NFC-Beam gesendet!Schlüssel wurde in die Zwischenablage kopiert!
+ Fingerabdruck wurde in die Zwischenablage kopiert!Schlüssel wurde bereits beglaubigt
- Bitte wähle einen Signaturschlüssel!
+ Bitte wähle einen Schlüssel um zu Beglaubigen!Schlüssel ist zu groß um so geteilt zu werden!
@@ -355,12 +370,11 @@
HilfeSchlüssel aus der Zwischenablage einfügen
- Datei mit OpenKeychain entschlüsseln
- Schlüssel mit OpenKeychain importieren
- Mit OpenKeychain verschlüsseln
- Mit OpenKeychain entschlüsseln
+ Datei entschlüsseln mit OpenKeychain
+ Schlüssel importieren mit OpenKeychain
+ Verschlüsseln mit OpenKeychain
+ Entschlüsseln mit OpenKeychain
- Keine registrierten Anwendungen vorhanden!\n\nAnwendungen können Zugriff auf OpenKeychain anfordern. Nachdem Zugriff erlaubt wurde, werden diese hier aufgelistet.Erweiterte Informationen anzeigenErweiterte Informationen ausblendenErweiterte Einstellungen anzeigen
@@ -376,12 +390,13 @@
SHA-256 der PaketsignaturKontenKeine Accounts mit dieser App verknüpft.
+ Die Anwendung erfordert die Erstellung eines neuen Accounts. Bitte wähle einen existierenden Schlüssel oder erstelle einen neuen.\nAnwendungen sind auf die Nutzung der Schlüssel beschränkt, die du hier auswählst!Folgende Anwendung beantragt Zugriff auf OpenKeychains API.\nZugriff erlauben?\n\nVORSICHT: Sollten Sie nicht wissen, warum diese Anfrage erscheint, sollten Sie den Zugriff nicht erlauben! Sie können Zugriffe später über das Menü \'Registrierte Anwendungen\' widerrufen.Zugriff erlaubenZugriff verbietenBitte einen Schlüssel auswählen!
- Für diese Benutzer-IDs wurden keine öffentlichen Schlüssel gefunden:
- Für diese Benutzer-IDs existieren mehrere öffentliche Schlüssel:
+ Für diese Identität wurden keine öffentlichen Schlüssel gefunden:
+ Für diese Identität existieren mehrere öffentliche Schlüssel:Bitte die Liste der Empfänger überprüfen!Signaturüberprüfung fehlgeschlagen! Haben Sie diese Anwendung aus einer anderen Quelle installiert? Wenn Sie eine Attacke ausschliessen können, sollten Sie die Registrierung der App in OpenKeychain widerrufen und die Anwendung erneut registrieren.
@@ -401,10 +416,14 @@
deinen eigenen Schlüssel erstellstexistierende Schlüssel importierst.
- Diesen Schlüssel bearbeiten
+ Schlüssel bearbeitenMit diesem Schlüssel verschlüsseln
- Diesen Schlüssel beglaubigen
- Info
+ Identitäten beglaubigen
+ Teilen über...
+ Teilen über NFC (Geräte Rückseite an Rückseite halten)
+ Informationen
+ Teilen
+ UnterschlüsselBeglaubigungenSchlüssel
@@ -420,30 +439,35 @@
verfügbarnicht verfügbar
- Hier die Nachricht schreiben welche verschlüsselt und/oder signiert werden soll...
- Hier den verslüsselten Text eingeben um ihn zu entschlüsseln und/oder zu überprüfen
-
- Grundeinstellung
+ Hier den Text schreiben welche verschlüsselt und/oder signiert werden soll...
+ Hier den verschlüsselten Text eingeben um ihn zu entschlüsseln und/oder zu verifzieren…
+
+ normalkein
+ einfach überprüftpositiv
- Wiederrufen
+ widerrufenOKfehlgeschlagen!Fehler!Schlüssel nicht verfügbar
- Unterzeichner
+ BeglaubigerZertifikatdetails
- Nutzer ID
+ Identität<unbekannt>
- Kein Zertifikat für diesen Schlüssel
- Benutzer-IDs, die beglaubigt werden sollen
+ Keine Beglaubigungen für diesen Schlüssel
+ Zu beglaubigende IdentitätenWiderrufsgrund
- Verificationsstatus
+ VerifikationsstatusTypSchlüssel nicht gefunden!Fehler bei der Verarbeitung des Schlüssels!Unterschlüssel nicht verfügbar
+ nicht verfügbarGeheime Schlüssel können nur einzeln gelöscht werden!Zertifikatdetails anzeigen
+ unbekannt
+ Kann nicht unterschreiben
+ Kein Unterschlüssel zum Verschlüsseln verfügbar!
diff --git a/OpenKeychain/src/main/res/values-el/strings.xml b/OpenKeychain/src/main/res/values-el/strings.xml
index e5ba3e0b9..9a9e74223 100644
--- a/OpenKeychain/src/main/res/values-el/strings.xml
+++ b/OpenKeychain/src/main/res/values-el/strings.xml
@@ -48,6 +48,6 @@
-
+
diff --git a/OpenKeychain/src/main/res/values-es/strings.xml b/OpenKeychain/src/main/res/values-es/strings.xml
index 207503b3f..dd628f87a 100644
--- a/OpenKeychain/src/main/res/values-es/strings.xml
+++ b/OpenKeychain/src/main/res/values-es/strings.xml
@@ -14,6 +14,8 @@
Cambiar frase de contraseñaEstablecer frase de contraseñaCompartir con...
+ Compartir huella de validación de clave con...
+ Compartir clave con...Compartir fichero con...Cifrar hacia archivoDescifrar hacia archivo
@@ -22,28 +24,32 @@
Exportar clavesClave no encontradaCargar al servidor de claves
- Certificar clave
+ Certificar identidadesDetalles de la claveAyuda
- IDs de usuario
- Claves
+ Identidades
+ SubclavesGeneralPredeterminadosAvanzadoClave maestra
- ID del usuario principal
+ Identidad primariaAcciones
+ Clave completaTu clave usada para las certificacionesCargar claveServidor de clavesCifrar y/o firmarDescifrar y verificar
+ Huella de validación de clave
+ Clave a ser certificadaCertificar
- Descifrar y verificar
+ Descifrar, verificar, y guardar fichero
+ Descifrar y verificar mensajeDesde el portapapeles
- Cifrar archivo
+ Cifrar y guardar ficheroGuardarCancelarEliminar
@@ -59,6 +65,8 @@
Buscar claveMostrar ajustes avanzadosOcultar ajustes avanzados
+ Compartir mensaje cifrado/firmado...
+ Ver clave de verificaciónAjustesAyuda
@@ -71,6 +79,7 @@
Crear clave (experto)BuscarServidor de claves...
+ Importar desde Keybase.ioServidor de claves...Actualizar desde servidor de clavesCargar al servidor de claves
@@ -116,7 +125,7 @@
CaducidadUsoTamaño de clave
- ID del usuario principal
+ Identidad primariaNombreComentarioEmail
@@ -194,7 +203,7 @@
¿De veras quiere borrar todas las claves públicas seleccionadas?\n¡No puede deshacer esto!¿Quieres realmente borrar la clave SECRETA \'%s\'?\n¡No podrás deshacerlo!Has hecho cambios en el almacén de claves, ¿quieres guardarlos?
- Has añadido una ID de usuario vacía, ¿Estás seguro que quieres continuar?
+ Ha añadido una identidad vacía, ¿está seguro de que quiere continuar?¿De veras quiere borrar la clave pública \'%s\'?\n¡No puede deshacer esto!¿Exportar también las claves secretas?
@@ -229,12 +238,13 @@
%d malas claves secretas ignoradas. Quizás hayas exportado con la opción\n--export-secret-subkeys\nAsegúrate de que exportas con\n--export-secret-keys\nen su lugar.Clave cargada al servidor satisfactoriamente
- Clave certificada con éxito
+ Identidades certificadas con éxito¡Esta lista está vacía!¡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!¡La clave ya ha sido certificada!
- ¡Por favor, selecciona la clave que se usará para firmar!
+ Por favor ¡seleccione una clave para ser usada en certificación!¡La clave es demasiado grande para ser compartida de esta forma!512768
@@ -359,13 +370,14 @@
Para recibir las claves a través de NFC, el dispositivo tiene que estar desbloqueado.AyudaTomar la clave desde el portapapeles
+ Obtener clave desde Keybase.ioDescifrar archivo con OpenKeychainImportar clave con OpenKeychainCifrar con OpenKeychainDescifrar con OpenKeychain
- ¡No hay aplicaciones registradas!\n\nLas aplicaciones de terceros pueden pedir permiso de acceso a OpenKeychain. Después de obtener acceso, serán enumeradas aquí.
+ ¡No hay aplicaciones registradas!\n\n¡Una lista de aplicaciones soportadas de terceros puede encontrarse en \'Ayuda\'!Mostrar información avanzadaOcultar información avanzadaMostrar la configuración avanzada
@@ -376,6 +388,7 @@
GuardarCancelarRevocar acceso
+ Iniciar aplicaciónBorrar cuentaNombre de paqueteSHA-256 de firma de paquete
@@ -386,8 +399,8 @@
Permitir el accesoDenegar el acceso¡Por favor, selecciona una clave!
- No se han encontrado claves públicas para estas IDs de usuario:
- Existe más de una clave pública para estos IDs de usuario:
+ No se encontraron claves públicas para estas identidades:
+ Existe más de una clave pública para estas identidades:¡Por favor, revisa la lista de destinatarios!¡La comprobación de la firma ha fallado! ¿Has instalado esta app desde una fuente distinta? Si estás seguro de que esto no es un ataque, revoca el registro de esta app en OpenKeychain y regístrala de nuevo.
@@ -407,11 +420,15 @@
crear tu propia claveimportar claves
- Editar esta clave
+ Editar claveCifrar con esta clave
- Certificar esta clave
- Información
- Certificaciones
+ Certificar identidades
+ Compartir con...
+ Compartir sobre NFC juntando los dispositivos por el reverso
+ Información principal
+ Compartir
+ Subclaves
+ CertificadosClavesFirmar y cifrar
@@ -428,23 +445,23 @@
Escribe aquí el mensaje que quieras cifrar y/o firmar...Introduce aquí el texto cifrado para descifrarlo y/o verificarlo...
-
+
predeterminadoningunocasualpositivo
- revocar
+ revocadacorrecto¡falló!¡error!clave no disponible
- Firmante
+ CertificadorDetalles del certificado
- Identificador del usuario
+ Identidad<desconocido>No hay certificados para esta clave
- IDs de usuario para firmar
+ Identidades a certificarRazón de la revocaciónEstado de la verificaciónTipo
@@ -456,4 +473,5 @@
Ver detalles del certificadodesconocidono puede firmarse
+ ¡No hay subclave de cifrado disponible!
diff --git a/OpenKeychain/src/main/res/values-et/strings.xml b/OpenKeychain/src/main/res/values-et/strings.xml
index 62172f138..3b18bd0df 100644
--- a/OpenKeychain/src/main/res/values-et/strings.xml
+++ b/OpenKeychain/src/main/res/values-et/strings.xml
@@ -19,8 +19,6 @@
Lae võtmeserverisseAbi
- Kasutaja ID-d
- VõtmedÜldineVaikeseaded
@@ -103,6 +101,6 @@
-
+
diff --git a/OpenKeychain/src/main/res/values-fa-rIR/strings.xml b/OpenKeychain/src/main/res/values-fa-rIR/strings.xml
index 10047ae91..e3d3a6493 100644
--- a/OpenKeychain/src/main/res/values-fa-rIR/strings.xml
+++ b/OpenKeychain/src/main/res/values-fa-rIR/strings.xml
@@ -26,6 +26,6 @@
-
+
diff --git a/OpenKeychain/src/main/res/values-fr/strings.xml b/OpenKeychain/src/main/res/values-fr/strings.xml
index fa45c789d..575ce8085 100644
--- a/OpenKeychain/src/main/res/values-fr/strings.xml
+++ b/OpenKeychain/src/main/res/values-fr/strings.xml
@@ -14,6 +14,8 @@
Modifier la phrase de passeDéfinir la phrase de passePartager avec...
+ Partager l\'empreinte avec...
+ Partager la clef avec...Partager le fichier avec...Chiffrer vers un fichierDéchiffrer vers un fichier
@@ -22,28 +24,32 @@
Exporter les clefsClef introuvableTéléverser vers le serveur de clefs
- Certifier la clef
+ Certifier les identitésDétails sur la clefAide
- IDs utilisateurs
- Clefs
+ identités
+ Sous-clefsGénéralValeurs par défautAvancéClef maîtresse
- ID utilisateur maître
+ Identité principaleActions
+ Clef entièreVotre clef utilisée pour la certificationTéléverser la clefServeur de clefsChiffrer et/ou signerDéchiffrer et vérifier
+ Empreinte
+ Clef à certifier !Certifier
- Déchiffrer et vérifier
+ Déchiffrer, vérifier et enregistrer le fichier
+ Déchiffrer et enregistrer le messageÀ partir du presse-papiers
- Chiffrer le fichier
+ Chiffrer et enregistrer le fichierEnregistrerAnnulerSupprimer
@@ -59,6 +65,8 @@
Rechercher la clefAfficher les paramètres avancésMasquer les paramètres avancés
+ Partager le message chiffré/signé...
+ Voir la clef de certificationParamètresAide
@@ -71,6 +79,7 @@
Créer une clef (expert)RechercherServeur de clefs
+ Importer depuis Keybase.ioServeur de clefs...Mettre à jour depuis le serveur de clefsTéléverser vers le serveur de clefs
@@ -116,7 +125,7 @@
ExpirationUtilisationTaille de la clef
- ID utilisateur principal
+ Identité principaleNomCommentaireCourriel
@@ -194,9 +203,9 @@
Voulez-vous vraiment supprimer toutes les clefs publiques choisies ?\nCeci est irréversible !Voulez-vous vraiment supprimer la clef SECRÈTE %s ?\nVous ne pourrez pas la restituer !Vous avez apporté des changements au trousseau, voulez-vous l\'enregistrer ?
- Vous avez ajouté un ID utilisateur vide, êtes-vous certain de vouloir continuer?
+ Vous avez ajouté une identité vide, êtes-vous certain de vouloir continuer ?Voulez-vous vraiment supprimer la clef publique %s ?\nCeci est irréversible !
- Exporter aussi les clefs secrètes?
+ Exporter aussi les clefs secrètes ?%d clef ajoutée avec succès%d clefs ajoutées avec succès
@@ -229,12 +238,13 @@
%d mauvaises clefs 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.Clef téléversée vers le serveur avec succès
- Clef certifiée avec succès
+ Identités certifiées avec succèsCette liste est vide !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 !La clef a déjà été certifiée !
- Veuillez choisir une clef a utiliser pour la signature !
+ Veuillez choisir une clef à utiliser pour la certification !La clef est trop grosse pour être partagée ainsi !512768
@@ -359,13 +370,14 @@
Pour recevoir des clefs par la NFC, les appareils doivent être déverrouillés.AideObtenir la clef depuis le presse-papiers
+ Obtenir la clef depuis Keybase.ioDéchiffrer le fichier avec OpenKeychainImporter la clef avec OpenKeychainChiffrer avec OpenKeychainDéchiffrer avec OpenKeychain
- Aucune application enregistrée !\n\nLes applications tierces peuvent demander l\'accès à OpenKeychain. Après avoir autorisé l\'accès, elles seront listées ici.
+ Aucune application enregistrée !\n\nUne liste d\'applications tierces prises en charge peut être trouvée dans l\'« Aide » !Afficher les informations avancéesMasquer les informations avancéesAfficher les paramètres avancés
@@ -376,6 +388,7 @@
EnregistrerAnnulerRévoquer l\'accès
+ Lancer l\'applicationSupprimer le compteNom du paquetSHA-256 de la signature du paquet
@@ -386,8 +399,8 @@
Permettre l\'accèsEnlever l\'accèsVeuillez choisir une clef !
- Aucune clef publique n\'a été trouvée pour ces IDs utilisateur :
- Plus d\'une clef publique existe pour ces IDs utilisateur
+ Aucune clef publique n\'a été trouvée pour ces identités :
+ Plus d\'une clef publique existe pour ces identités :Veuillez revoir la liste des destinataires !La vérification de la signature a échoué ! Avez-vous installé cette appli à partir d\'une source différente ? Si vous êtes sûr que ce n\'est pas une attaque, révoquez l\'enregistrement de cette appli dans OpenKeychain et enregistrez-la à nouveau.
@@ -407,11 +420,15 @@
créer votre propre clefImporter des clefs.
- Modifier cette clef
+ Modifier la clefChiffrer avec cette clef
- Certifier cette clef
- Infos
- Certifications
+ Certifier les identités
+ Partager avec...
+ Partager par NFC en tenant les appareils dos à dos
+ Infos principales
+ Partager
+ Sous-clefs
+ CertificatsClefsSigner et chiffrer
@@ -428,23 +445,23 @@
Écrire ici le message à chiffrer et/ou signer...Saisir le cryptogramme à déchiffrer et/ou à vérifier ici...
-
+
valeur par défautaucunrapidepositif
- révoquer
+ révoquéokéchec!erreur!clef non disponible
- Signataire
+ CertificateurDétails du certificat
- ID utilisateur
+ identité<inconnu>Aucun certificat pour cette clef
- ID utilisateur pour signer
+ Identités à certifierRaison de la révocationÉtat de vérificationType
@@ -456,4 +473,5 @@
Voir les détails du certificatinconnuimpossible de signer
+ Aucune sous-clef de chiffrement n\'est disponible !
diff --git a/OpenKeychain/src/main/res/values-it-rIT/strings.xml b/OpenKeychain/src/main/res/values-it-rIT/strings.xml
index c652f85d9..b951bcf71 100644
--- a/OpenKeychain/src/main/res/values-it-rIT/strings.xml
+++ b/OpenKeychain/src/main/res/values-it-rIT/strings.xml
@@ -14,6 +14,8 @@
Cambia Frase Di AccessoImposta Frase di AccessoCondividi con...
+ Condivi impronta con...
+ Condividi chiave con...Condividi file con...Codifica FileDecodifica File
@@ -22,28 +24,32 @@
Esporta ChiaviChiave Non TrovataCarica sul Server delle Chiavi
- Certifica Chiave
+ Certifica identitàDettagli ChiaveAiuto
- ID Utente
- Chiavi
+ Identità
+ SottochiaviGeneralePredefinitiAvanzatoChiave Principale
- ID Utente Principale
+ Identità PrimariaAzioni
+ Intera chiaveLa Tua Chiave usata per la certificazioneCarica ChiaveServer delle ChiaviCodifica e/o FirmaDecodifica e Verifica
+ Impronta
+ Chiave da certificareCertifica
- Decodifica e Verifica
+ Decodifica, verifica e salva su file
+ Decodifica e verifica messaggioDagli Appunti
- Codifica File
+ Codifica e salva fileSalvaAnnullaElimina
@@ -59,6 +65,8 @@
Chiave di ricercaMostra impostazioni avanzateNascondi impostazioni avanzate
+ Condividi messaggio codificato/firmato...
+ Mostra chiave di certificazioneImpostazioniAiuto
@@ -71,6 +79,7 @@
Crea chiave (avanzato)CercaServer delle Chiavi
+ Importa da Keybase.ioServer delle Chiavi...Aggiorna dal server delle chiaviCarica chiave nel server
@@ -116,7 +125,7 @@
ScadenzaUtilizzoDimensione Chiave
- ID Utente Principale
+ Identità PrimariaNomeCommentoEmail
@@ -194,7 +203,7 @@
Vuoi veramente eliminare tutte le chiavi pubbliche selezionate?\nNon potrai annullare!Vuoi veramente eliminare la chiave PRIVATA \'%s\'?\nNon potrai annullare!Hai apportato modifiche al tuo portachiavi, vuoi salvarlo?
- È stato aggiunto un ID utente vuoto, sei sicuro di voler continuare?
+ Hai aggiunto una identità vuota, sei sicuro di voler continuare?Vuoi veramente eliminare la chiave pubblica \'%s\'?\nNon potrai annullare!Esportare anche le chiavi segrete?
@@ -229,12 +238,13 @@
%d chiavi private non valide ignorate. Forse hai esportato con opzione\n--export-secret-subkeys\nAssicurati di esportare con\n--export-secret-keys\ninvece.Chiave caricata con successo sul server
- Chiave certrificata correttamente
+ Identità certificata correttamenteLista vuota!Chiave correttamente inviata tramite NFC Beam!Chiave copiata negli appunti!
+ Impronta copiata negli appunti!La chiave è già certificata!
- Per favore seleziona la chiave per la firma!
+ Per favore seleziona una chiave per la certificazione!Chiave troppo grande per essere condivisa in questo modo!512768
@@ -359,13 +370,13 @@
Per ricevere le chiavi via NFC, il dispositivo deve essere sbloccato.AiutoOttieni chiave dagli appunti
+ Ottieni chiave da Keybase.ioDecodifica File con OpenKeychainImporta Chiave con OpenKeychainCodifica con OpenKeychainDecodifica con OpenKeychain
- Nessuna app registrata!\n\nApp di terze parti possono richiedere l\'accesso a OpenKeychain. Dopo aver concesso l\'accesso, le app saranno elencate qui.Mostra informazioni dettagliateNascondi informazioni dettagliateMostra impostazioni avanzate
@@ -386,8 +397,8 @@
Permetti accessoNega accessoPer favore selezionare una chiave!
- Nessuna chiave pubblica trovata per id utente:
- Esistono piu\' di una chiave pubblica per gli id utenti:
+ Nessuna chiave pubblica trovata per queste identità:
+ Esistono piu\' di una chiave pubblica per queste identità:Per favore ricontrolla la lista destinatari!Controllo della firma fallito! Hai installato questa app da una fonte diversa? Se sei sicuro che non sia un attacco, revoca la registrazione di questa app in OpenKeychain e dopo registra di nuovo l\'app.
@@ -409,9 +420,13 @@
Modifica chiaveCodifica con questa chiave
- Certifica questa chiave
- Info
- Certificazioni
+ Certifica identità
+ Condividi con...
+ Condividi con NFC tenendo i dispositivi a stretto contatto
+ Info Principale
+ Condividi
+ Sottochiavi
+ CertificatiChiaviFirma e Codifica
@@ -428,23 +443,23 @@
Scrivi qui il messaggio da codificare e/o firmare...Inserisci il testo cifrato qui per la decodifica e/o verifica...
-
+
predefinitinessunocasualepositivo
- revoca
+ revocatookfallito!errore!chiave non disponibile
- Firmatario
+ CertificatoreDettagli Certificato
- ID Utente
+ Identit<sconosciuto>Nessun certificato per questa chiave
- ID Utente da firmare
+ Identità da certificareRagione della RevocaStato VerificaTipo
@@ -456,4 +471,5 @@
Visualizza Dettagli Certificatisconosciutonon può firmare
+ Nessuna sottochiave di codifica disponibile!
diff --git a/OpenKeychain/src/main/res/values-ja/strings.xml b/OpenKeychain/src/main/res/values-ja/strings.xml
index e3b4d559a..1bcf4553b 100644
--- a/OpenKeychain/src/main/res/values-ja/strings.xml
+++ b/OpenKeychain/src/main/res/values-ja/strings.xml
@@ -14,6 +14,8 @@
パスフレーズの変更パスフレーズの設定...で共有
+ ...で指紋の共有
+ ...で鍵の共有...でファイルの共有暗号化してファイルに復号化してファイルに
@@ -22,28 +24,32 @@
複数鍵のエクスポート鍵が見当りません鍵サーバへアップロード
- 証明鍵
+ ユーザID検証鍵の概要ヘルプユーザID
- 鍵
+ 副鍵一般デフォルト拡張主鍵
- 主ユーザID
+ メインのユーザIDアクション
+ すべての鍵あなたの鍵を証明に利用します鍵のアップロード鍵サーバ暗号化/署名復号化と検証
+ 指紋
+ 鍵は検証されています。証明
- 復号化と検証
+ 復号化と検証、そしてファイルの保存
+ メッセージの復号化と検証クリップボードから
- ファイル暗号化
+ 暗号化してファイルを保存保存キャンセル削除
@@ -59,6 +65,8 @@
鍵検出拡張設定を表示拡張設定を隠す
+ 暗号化/署名メッセージの共有...
+ 検証した鍵を見る設定ヘルプ
@@ -71,6 +79,7 @@
鍵の生成(上級)検索鍵サーバ
+ Keybase.ioからのインポート鍵サーバ...鍵サーバからの更新鍵サーバへのアップロード
@@ -116,7 +125,7 @@
満了使い方鍵サイズ
- 主ユーザID
+ メインのユーザID名前コメントEメールアドレス
@@ -168,7 +177,7 @@
証明署名暗号化
- 証明
+ 認証良くないパスフレーズ最初にパスフレーズを設定してください。
@@ -191,7 +200,7 @@
選択したすべての公開鍵を削除して本当に良いのですか?\nこれは元に戻せません!秘密鍵\'%s\'を本当に削除してもよいですか?\nこれは元に戻せません!あなたは鍵輪に変更を加えました、これを保存しますか?
- あなたは空のユーザーIDを追加しました、このまま続けますか?
+ あなたは空のユーザIDを追加しました、このまま続けますか?公開鍵\'%s\'を本当に削除してもよいですか?\nこれは元に戻せません!秘密鍵もエクスポートしますか?
@@ -220,12 +229,13 @@
%d の問題ある鍵を無視しました。 おそらく次のオプションでエクスポートしています\n --export-secret-subkeys\n代りに次のオプションでエクスポートしてください。\n --export-secret-keys鍵を鍵サーバにアップロードしました
- 鍵を検証しました
+ ユーザIDの検証に成功このリストは空です!NFCビームで鍵を送信しました!鍵はクリプボードにコピーされました!
+ 指紋はクリプボードにコピーされました!鍵はすでに検証されています!
- 署名に使う鍵を選択して下さい!
+ 検証に使う鍵を選択して下さい!この共有方法では鍵が大きすぎます!512768
@@ -346,13 +357,14 @@
NFCで鍵を受信しました、デバイスのロックを解除する必要があります。ヘルプクリップボードから鍵を取得
+ Keybase.ioから鍵を取得OpenKeychainでファイルを復号化OpenKeychainに鍵をインポートOpenKeychainで暗号化OpenKeychainで復号化
- 登録されていないアプリケーション!\n\nサードパーティアプリケーションはOpenKeychainにアクセスを要求できます。アクセスを与えた後、それらはここにリストされます。
+ 未登録のアプリケーションです!\n\n\"ヘルプ\"のサードパーティ製アプリケーションのサポートリストにあるかを見てください!詳細情報を表示詳細情報を非表示拡張設定を表示
@@ -363,6 +375,7 @@
保存キャンセル破棄されたアクセス
+ アプリケーションを開始アカウントを削除パッケージ名パッケージの署名 SHA-256
@@ -393,10 +406,14 @@
あなた所有の鍵を作る鍵のインポート。
- この鍵の編集
+ 鍵の編集この鍵で暗号化
- この鍵で検証
+ ユーザID検証
+ ...で共有
+ デバイスの後ろ同士を固定してNFC経由で共有情報
+ 共有
+ 副鍵証明鍵
@@ -414,7 +431,7 @@
ここに書いたメッセージを暗号化/署名..ここに入力された暗号化テキストを復号化/検証...
-
+
デフォルト無し因果
@@ -425,12 +442,12 @@
エラー!鍵がありません
- 署名者
+ 検証者証明の詳細
- ユーザーID
+ ユーザID<不明>この鍵に証明がない
- 署名に使うユーザーID
+ ユーザIDを検証破棄の理由検証ステータス種別
@@ -442,4 +459,5 @@
証明の詳細を見る不明署名不可
+ 暗号化の副鍵がありません!
diff --git a/OpenKeychain/src/main/res/values-ko/strings.xml b/OpenKeychain/src/main/res/values-ko/strings.xml
new file mode 100644
index 000000000..e3d3a6493
--- /dev/null
+++ b/OpenKeychain/src/main/res/values-ko/strings.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenKeychain/src/main/res/values-nl-rNL/strings.xml b/OpenKeychain/src/main/res/values-nl-rNL/strings.xml
index a4d1744b8..bf6d7f911 100644
--- a/OpenKeychain/src/main/res/values-nl-rNL/strings.xml
+++ b/OpenKeychain/src/main/res/values-nl-rNL/strings.xml
@@ -19,13 +19,10 @@
Sleutel niet gevondenHelp
- Gebruikers-id\'s
- SleutelsAlgemeenStandaardGeavanceerd
- Bestand versleutelenOpslaanAnnulerenVerwijderen
@@ -65,7 +62,6 @@
VerlopenGebruikSleutelgrootte
- Hoofdgebruikers-idNaamOpmerkingE-mailadres
@@ -125,8 +121,6 @@
sleutelgrootte moet minstens 512-bits zijnde hoofdsleutel kan geen ElGamal-sleutel zijnonbekende algoritmekeuze
- ten minste één gebruiksers-id vereist
- hoofdgebruikers-id kan niet leeg zijnten minste een hoofdsleutel is vereistgeen wachtwoord opgegevengeen ondertekeningssleutel opgegeven
@@ -192,8 +186,6 @@
Toegang toestaanToegang weigerenSelecteert u a.u.b. een sleutel
- Geen publieke sleutels gevonden voor deze gebruiker-id\'s:
- Meer dan een publieke sleutel gevonden voor deze gebruikers-id\'s:Bekijkt u a.u.b. de ontvangersU gaat door alle QR-codes met \'Volgende\', en scant ze een voor een.
@@ -201,6 +193,6 @@
-
+
diff --git a/OpenKeychain/src/main/res/values-pl/strings.xml b/OpenKeychain/src/main/res/values-pl/strings.xml
index d72e78546..2f327c9bd 100644
--- a/OpenKeychain/src/main/res/values-pl/strings.xml
+++ b/OpenKeychain/src/main/res/values-pl/strings.xml
@@ -13,7 +13,6 @@
Właściwości serwera kluczyZmień hasłoUstaw hasło
- Udostępnij...Udostępnij plik...Zaszyfruj do plikuOdszyfruj do pliku
@@ -22,17 +21,13 @@
Eksportuj kluczeNie znaleziono kluczaWyślij do serwera kluczy
- Certyfikuj kluczSzczegóły kluczaPomoc
- Identyfikator użytkownika
- KluczeOgólneDomyślneZaawansowaneKlucz główny
- Główny identyfikator użytkownikaDziałaniaTwój klucz użyty do certyfikacjiWyślij klucz
@@ -41,9 +36,7 @@
Deszyfruj i weryfikujCertyfikuj
- Deszyfruj i weryfikujZe schowka
- Zaszyfruj plikZapiszAnulujUsuń
@@ -116,7 +109,6 @@
WygaśnięciaWykorzystanieRozmiar klucza
- Identyfikator głównego użytkownikaImięKomentarzAdres email
@@ -197,7 +189,6 @@
Czy na pewno chcesz usunąć wszystkie zaznaczone klucze publiczne?\nTej operacji nie można cofnąć!Czy na pewno chcesz usunąć klucz prywatny \'%s\'?\nNie można cofnąć tej operacji!Zostały dokonane zmiany w pęku kluczy, czy chcesz je zachować?
- Dodałeś pusty identyfikator użytkownika, czy na pewno chcesz kontynuować?Czy na pewno chcesz usunąć klucz publiczny \'%s\'?\nNie można cofnąć tej operacji!Czy wyeksportować również klucze prywatne?
@@ -238,12 +229,10 @@
zignorowano %d niepoprawnych kluczy prywatnych. Prawdopodobnie zostały wyeksportowane przy uzyciu opcji\n --export-secret-subkeys\nUpewnij się że eksportujesz je z opcją\n --export-secret-keys\nktóra jest poprawna.Pomyślnie wysłano klucz na serwer
- Pomyślnie podpisano kluczLista jest pusta!Pomyślnie wysłano klucz przez NFC Beam!Klucz został skopiowany do schowka!Klucz został już wcześniej certyfikowany!
- Wybierz klucz, który zostanie użyty do podpisania!Klucz ma za duży rozmiar by być udostępniony w ten sposób!
- Brak zarejestrowanych aplikacji!\n\nZewnętrzne aplikacje mogą żądać dostępu do OpenKeychain. Po przyznaniu dostępu, będa wyświetlone tutaj.Pokaż zaawansowane informacjeUkryj zaawansowane informacjePokaż zaawanowane ustawienia
@@ -399,8 +385,6 @@
Zezwól na dostępOdmów dostępuWybierz klucz!
- Nie znaleziono kluczy publiczych dla tych identyfikatorów użytkownika:
- Więcej niż jeden klucz publiczny istnieje dla tych identyfikatorów użytkownika:Proszę przejrzeć listę adresatów!Sprawdzanie podpisu zakończone niepowodzeniem! Czy zainstalowałeś tę aplikację z innego źródła? Jeżeli jesteś pewien, że nie jest to atak, odwołaj rejestrację teg aplikacji w OpenKeychain, a następnie zarejestruj ją ponownie.
@@ -421,11 +405,7 @@
tworzenie własnego kluczaimportowanie kluczy.
- Edytuj ten kluczZaszyfruj korzystając z tego klucza
- Certyfikuj ten klucz
- Informacje
- CertyfikatyKluczePodpisz i zaszyfruj
@@ -442,23 +422,19 @@
Wpisz tutaj wiadomość do zaszyfrowania i/lub podpisania...Wpisz tutaj tekst do zaszyfrowania i/lub zweryfikowania...
-
+
domyślnyżadentypowypozytywny
- odwołajokniepowodzenie!błąd!klucz niedostępny
- PodpisującySzczegóły certyfikatu
- Identyfikator użytkownika<nieznany>Nie ma certyfikatów dla tego klucza
- Identyfikator użytkownika do podpisuPowód odwołaniaStan weryfikacjiTyp
diff --git a/OpenKeychain/src/main/res/values-ru/strings.xml b/OpenKeychain/src/main/res/values-ru/strings.xml
index 7b304b914..b51bcbde2 100644
--- a/OpenKeychain/src/main/res/values-ru/strings.xml
+++ b/OpenKeychain/src/main/res/values-ru/strings.xml
@@ -20,17 +20,13 @@
Экспорт ключейКлюч не найденЗагрузить на сервер ключей
- Сертифицировать ключСведения о ключеПомощь
- ID пользователя
- КлючиПриложениеАлгоритмыДополнительноОсновной ключ
- ВладелецДействияВаш ключ для сертификацииЗагрузить ключ
@@ -39,9 +35,7 @@
Расшифровать и проверитьСертифицировать
- Расшифровать и проверитьИз буфера обмена
- Зашифровать файлСохранитьОтменаУдалить
@@ -114,7 +108,6 @@
Годен до...ПрименениеРазмер ключа
- Основной ID пользователяИмяКомментарийEmail
@@ -189,7 +182,6 @@
Пожалуйста, выберите файл для экспорта.\nВНИМАНИЕ! Если файл существует, он будет перезаписан.Вы уверены, что хотите удалить выбранные ключи?\nЭто действие нельзя отменить!Вы уверены, что ходите удалить СЕКРЕТНЫЙ ключ \'%s\'?\nЭто действие нельзя отменить!
- Вы добавили пустой ID пользователя. Вы уверены, что хотите продолжить?Вы правда хотите удалить публичный ключ \'%s\'?\nЭто действие нельзя отменить!Экспортировать секретные ключи?
@@ -234,7 +226,6 @@
Ключ успешно передан через NFC!Ключ скопирован в буфер обмена!Ключ уже был сертифицирован ранее!
- Выберите ключ, используемый для подписи!Ключ слишком большой для этого способа передачи!
- Нет связанных программ!\n\nСторонние программы могут запросить доступ к OpenKeychain, после чего они будут отражаться здесь.Показать подробную информациюСкрыть подробную информациюПоказать расширенные настройки
@@ -386,8 +374,6 @@
Разрешить доступЗапретить доступПожалуйста, выберите ключ!
- Для этих id не найдены публичные ключи:
- Для этих id найдено более одного ключа:Пожалуйста, проверьте получателей!Проверка подписи пакета не удалась! Если вы установили программу из другого источника, отзовите для неё доступ к этой программе или обновите право доступа.
@@ -408,11 +394,7 @@
создать свой ключИмпортировать ключи
- Изменить ключЗашифровать этим ключом
- Сертифицировать этот ключ
- Информация
- СертификацияКлючиПодписать и зашифровать
@@ -429,21 +411,17 @@
Напишите сообщение здесь, что бы зашифровать и/или подписать...Введите сюда шифр для расшифровки и/или проверки...
-
+
по умолчаниюнет
- отозватьokсбой!ошибка!ключ не доступен
- ПодписантДетали сертификации
- ID пользователя<неизв.>Этот ключ не сертифицирован
- Подписываемые ID пользователяПричина отзываСтатус верификацииТип
diff --git a/OpenKeychain/src/main/res/values-sl/strings.xml b/OpenKeychain/src/main/res/values-sl/strings.xml
index d0c70dc73..f80db4b6c 100644
--- a/OpenKeychain/src/main/res/values-sl/strings.xml
+++ b/OpenKeychain/src/main/res/values-sl/strings.xml
@@ -14,6 +14,8 @@
Spremeni gesloDoloči gesloDeli z...
+ Deli prstni odtis z...
+ Deli ključ z...Deli datoteko z...Šifriraj v datotekoDešifriraj v datoteko
@@ -22,28 +24,32 @@
Izvozi ključeKljuč ni bil najdenNaloži na strežnik
- Overi ključ
+ Overi identitetoPodrobnosti o ključuPomoč
- Uporabniški ID-ji
- Ključi
+ Identitete
+ PodključiSplošnoPrivzetoNaprednoGlavni ključ
- Glavni ID uporabnika
+ Glavna identitetaRavnanja
+ Cel ključVaš ključ, uporabljan za overitevNaloži ključStrežnikŠifriraj in/ali podpišiDešifriraj in preveri
+ Prstnim odtisom
+ Ključi za overjanjeOveri
- Dešifriraj in preveri
+ Dešifriraj, preveri in shrani
+ Dešifriraj in preveri sporočiloIz odložišča
- Šifriraj datoteko
+ Šifriraj in shrani datotekoShraniPrekličiIzbriši
@@ -59,6 +65,8 @@
Išči ključPrikaži napredne nstavitveSkrij napredne nastavitve
+ Deli šifrirano/podpisano sporočilo...
+ Poglej ključ za overjanjeNastavitvePomoč
@@ -71,6 +79,7 @@
Ustvari ključ (napredno)IščiStrežnik
+ Uvozi iz Keybase.ioStrežnik...Posodobi s strežnikaNaloži na strežnik
@@ -116,7 +125,7 @@
PretekUporabaVelikost ključa
- Glavni ID uporabnika
+ Glavna identitetaImeKomentarE-pošta
@@ -200,7 +209,7 @@
Ali res želite izbrisati vse izbrane javne ključe?\nTega koraka ne boste mogli preklicati!Ali res želite izbrisati ZASEBNI ključ \'%s\'?\nTega koraka ne boste mogli preklicati!Vnesli ste spremembe v vaš \'keyring\'. Jih želite shraniti?
- Dodali ste prezen uporabniški iD! Ste prepričani, da želite nadaljevati?
+ Dodali ste prazno identiteto, ali res želite nadaljevati?Ali res želite izbrisati javni ključ \'%s\'?\nTega koraka ne boste mogli preklicati!Želite izvoziti tudi zasebne ključe?
@@ -247,12 +256,13 @@
Neupoštevanih %d slabih zasebnih ključev. Morda so bili izvoženi na način\n --export-secret-subkeys\nPoskrbite, da bodo izvoženi z\n --export-secret-keysKljuč je bil uspešno naložen na strežnik.
- Uspešno overjen ključ
+ Uspešno overjene identiteteLista je prazna!Ključ uspešno poslan preko NFC Beam!Ključ je bil prekopiran v odložišče!
+ Prstni odtis je bil prekopiran v odložišče!Ključ je že bil overjen!
- Izberite ključ, ki ga boste uporabljali za podpisovanje
+ Izberite ključ, ki ga boste uporabljali za overjanje!Ključ je prevelik za delitev na ta način!512768
@@ -385,13 +396,13 @@
Za prejem ključev preko NFC mora biti naprava odklenjena.PomočPridobi ključ iz odložišča
+ Pridobi ključ iz Keybase.ioDešifriraj datoteko z OpenKeychainUvozi ključ z OpenKeychainŠifriraj z OpenKeychainDešifriraj z OpenKeychain
- Ni nobene prijavljene aplikacije!\n\nDruge aplikacije lahko zahtevajo dostop do aplikacije OpenKeychain. Po potrditvi dostopa bodo navedene tukaj.Pokaži dodatne informacijeSkrij dodatne informacijePokaži napredne nastavitve
@@ -412,8 +423,8 @@
Dovoli dostopZavrni dostopIzberite ključ!
- Za naslednje uporabniške ID-je ni bil najden noben javni ključ:
- Za naslednje uporabniške ID-je obstaja več kot en javni ključ:
+ Za te identitete ni bil najden noben javni ključ:
+ Za te identitete obstaja več ključev:Preverite seznam prejemnikov!Preverjanje podpisa ni uspelo! Ste namestili to aplikacijo iz drugega vira? Če ste prepričani, da to ni napad, prekličite registracijo te aplikacije v OpenKeychain in jo izvedite znova.
@@ -437,9 +448,13 @@
Uredi ključŠifriraj s tem ključem
- Overi ta kluč
- Info
- Overitve
+ Overi identitete
+ Deli z...
+ Deli preko NFC z držanjem hrbtov dveh telefonov skupaj
+ Glavne informacije
+ Deli
+ Podključi
+ CertifikatiKljučiPodpiši in šifriraj
@@ -456,23 +471,23 @@
Tu zapišite sporočilo, ki ga želite šifrirati in/ali podpisati...Tu vnesite tajnopis za dešifriranje in/ali overbo...
-
+
privzetobreznavadnopozitivno
- preklic
+ preklicanookneuspešno!napaka!ključ ni na voljo
- Podpisnik
+ OveroviteljPodrobnosti potrdil
- ID uporabnika
+ Identiteta<neznan>Ni potrdil za ta ključ
- Uporabniški ID-ji za podpisovanje
+ Identitete za overitevRazlog za preklicStatus preverjanjaVrsta
@@ -484,4 +499,5 @@
Preglej podrobosti certifikataneznanne more podpisati
+ Ni nobenega podključa za šifriranje!
diff --git a/OpenKeychain/src/main/res/values-tr/strings.xml b/OpenKeychain/src/main/res/values-tr/strings.xml
index dfb060fb2..1205095aa 100644
--- a/OpenKeychain/src/main/res/values-tr/strings.xml
+++ b/OpenKeychain/src/main/res/values-tr/strings.xml
@@ -15,8 +15,6 @@
Anahtar DetaylarıYardım
- Kullanıcı IDleri
- AnahtarlarGenelVarsayılanlarGelişmiş
@@ -167,8 +165,6 @@
ya da
- Bu anahtarı düzenle
- BilgiAnahtarlarDüzenle
@@ -177,14 +173,12 @@
mevcutmevcut değil
-
+
varsayılantamambaşarısız!hata!anahtar mevcut değil
- İmzalayan
- Kullanıcı IDimzalanamadı
diff --git a/OpenKeychain/src/main/res/values-uk/strings.xml b/OpenKeychain/src/main/res/values-uk/strings.xml
index 91f7305f6..54204a044 100644
--- a/OpenKeychain/src/main/res/values-uk/strings.xml
+++ b/OpenKeychain/src/main/res/values-uk/strings.xml
@@ -20,17 +20,13 @@
Експортувати ключіКлюч не знайденоЗавантажити на сервер ключів
- Сертифікувати ключПодробиці про ключДовідка
- ІД користувача
- КлючіЗагальнеТиповеДодатковеОсновний ключ
- ІД основного ключаДіїВаш ключ використаний для сертифікаціїЗавантажити ключ
@@ -39,9 +35,7 @@
Розшифрувати і ПеревіритиСертифікувати
- Розшифрувати і ПеревіритиЗ буфера обміну
- Шифрувати файлЗберегтиСкасуватиВилучити
@@ -113,7 +107,6 @@
ЗакінченняВикористанняРозмір ключа
- ІД основного користувачаНазваКоментарЕл. пошта
@@ -184,7 +177,6 @@
Ви справді хочете вилучити усі вибрані відкриті ключі?\nВи не зможете це відмінити!Ви справді хочете вилучити секретний ключ \'%s\'?\nВи не зможете це відмінити!Ви внесли зміни до в\'язки ключів, ви б хотіли. Волієте їх зберегти?
- Ви вже додали порожній ідентифікатор користувача. Справді хочете продовжити?Ви справді хочете вилучити відкритий ключ \'%s\'?\nВи не зможете це відмінити!Також експортувати секретні ключі?
@@ -227,7 +219,6 @@
Успішно завантажено ключ на серверЦей список - порожній!Ключ вже скопійовано у буфер обміну!
- Будь ласка, виберіть ключ, використаний для підписування!Ключ надто великий для цього способу поширення!
- Нема зареєстрованих програм!\n\nСтороні програми можуть вимагати доступ до OpenPGP Keychain. Після надання доступу вони будуть наведені тут.Показати додаткову інформаціюПриховати додаткову інформаціюПоказати додаткові налаштування
@@ -380,8 +368,6 @@
Дозволити доступНе дозволити доступБудь ласка, виберіть ключ!
- Не знайдено публічних ключів для цих ІД користувачів:
- Більше ніж один публічний ключ існує для цих ІД користувачів:Будь ласка, перевірте список одержувачів!Перевірка підпису пакету не вдалася! Може ви встановили програму з іншого джерела? Якщо ви впевнені, що це не атака, то відкличте реєстрацію програми у OpenKeychain та знову зареєструйте її.
@@ -402,9 +388,6 @@
створюється ваш власний ключімпортуюся ключі.
- Редагувати цей ключ
- Інформація
- СертифікатиПідписати і зашифруватиРозшифрувати і Перевірити
@@ -420,22 +403,18 @@
Напишіть повідомлення для шифрування та/або підпису…Уведіть зашифрований текст тут для його розшифрування та/або перевірки…
-
+
типовожоденвипадковийдодатний
- відхилитиГараздНевдача!Помилка!Недоступний ключ
- ПідписувачДані сертифікату
- ІД користувачаНемає сертифікатів для цього ключа
- ІД користувача для реєстраціїПричина відхиленняСтан перевіркиТип
diff --git a/OpenKeychain/src/main/res/values-v11/styles_keychaintheme.xml b/OpenKeychain/src/main/res/values-v11/styles_keychaintheme.xml
new file mode 100644
index 000000000..0b6c4c4f5
--- /dev/null
+++ b/OpenKeychain/src/main/res/values-v11/styles_keychaintheme.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml b/OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml
new file mode 100644
index 000000000..4f13f81c6
--- /dev/null
+++ b/OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenKeychain/src/main/res/values-v14/styles.xml b/OpenKeychain/src/main/res/values-v14/styles.xml
deleted file mode 100644
index 4f8c45117..000000000
--- a/OpenKeychain/src/main/res/values-v14/styles.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/OpenKeychain/src/main/res/values-zh/strings.xml b/OpenKeychain/src/main/res/values-zh/strings.xml
index 6783f809f..8dfb6b2ca 100644
--- a/OpenKeychain/src/main/res/values-zh/strings.xml
+++ b/OpenKeychain/src/main/res/values-zh/strings.xml
@@ -21,8 +21,6 @@
上传到密钥服务器帮助
- 用户ID
- 密钥常规缺省高级
@@ -30,8 +28,6 @@
密钥服务器解密并验证
- 解密并验证
- 加密文件保存取消删除
@@ -104,8 +100,6 @@
外置存储没有准备好密钥的大小必须至少512位位置的算法选择
- 需要至少一个用户id
- 主用户id不能是空的需要至少一个主密钥没有提供密语没有提供密钥
@@ -161,6 +155,6 @@
导入密钥
-
+
diff --git a/OpenKeychain/src/main/res/values/arrays.xml b/OpenKeychain/src/main/res/values/arrays.xml
index 4173d49e4..699c02aff 100644
--- a/OpenKeychain/src/main/res/values/arrays.xml
+++ b/OpenKeychain/src/main/res/values/arrays.xml
@@ -54,6 +54,7 @@
@string/menu_import_from_qr_code@string/import_from_clipboard@string/menu_import_from_nfc
+ @string/menu_import_from_keybase
diff --git a/OpenKeychain/src/main/res/values/colors.xml b/OpenKeychain/src/main/res/values/colors.xml
index 0f0b2a600..c0042d215 100644
--- a/OpenKeychain/src/main/res/values/colors.xml
+++ b/OpenKeychain/src/main/res/values/colors.xml
@@ -1,11 +1,16 @@
- #31b6e7
+ #aa66cc
+ #9933cc#cecbce
+ #808080
- #FF4444
- #FFBB33
- #99CC00
- #33B5E5
-
\ No newline at end of file
+ #33999999
+ #33CCCCCC
+
+ #ffff4444
+ #ffffbb33
+ #ff99cc00
+ #aa66cc
+
diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml
index 72a1b38cc..194984062 100644
--- a/OpenKeychain/src/main/res/values/strings.xml
+++ b/OpenKeychain/src/main/res/values/strings.xml
@@ -15,6 +15,8 @@
Change PassphraseSet PassphraseShare with…
+ Share fingerprint with…
+ Share key with…Share file with…Encrypt To FileDecrypt To File
@@ -23,30 +25,34 @@
Export KeysKey Not FoundUpload to Keyserver
- Certify Key
+ Certify IdentitiesKey DetailsHelp
- User IDs
- Keys
+ Identities
+ SubkeysGeneralDefaultsAdvancedMaster Key
- Master User ID
+ Primary IdentityActions
+ Whole keyYour Key used for certificationUpload KeyKeyserverEncrypt and/or SignDecrypt and Verify
+ Fingerprint
+ Key to be certifiedCertify
- Decrypt and Verify
+ Decrypt, verify, and save file
+ Decrypt and verify messageFrom Clipboard
- Encrypt File
+ Encrypt and save fileSaveCancelDelete
@@ -62,6 +68,8 @@
Lookup keyShow advanced settingsHide advanced settings
+ Share encrypted/signed message…
+ View certification keySettings
@@ -75,6 +83,7 @@
Create key (expert)SearchKeyserver
+ Import from Keybase.ioKeyserver…Update from keyserverUpload to key server
@@ -121,7 +130,7 @@
ExpiryUsageKey Size
- Main User ID
+ Primary identityNameCommentEmail
@@ -207,7 +216,7 @@
Do you really want to delete all selected public keys?\nYou can\'t undo this!Do you really want to delete the SECRET key \'%s\'?\nYou can\'t undo this!You have made changes to the keyring, would you like to save it?
- You have added an empty user ID, are you sure you want to continue?
+ You have added an empty identity, are you sure you want to continue?Do you really want to delete the public key \'%s\'?\nYou can\'t undo this!Also export secret keys?
@@ -247,12 +256,13 @@
Successfully uploaded key to server
- Successfully certified key
+ Successfully certified identitiesThis list is empty!Successfully sent key with NFC Beam!Key has been copied to the clipboard!
+ Fingerprint has been copied to the clipboard!Key has already been certified!
- Please select a key to be used for signing!
+ Please select a key to be used for certification!Key is too big to be shared this way!512
@@ -393,6 +404,7 @@
To receive keys via NFC, the device needs to be unlocked.HelpGet key from clipboard
+ Get key from Keybase.ioDecrypt File with OpenKeychain
@@ -401,7 +413,7 @@
Decrypt with OpenKeychain
- No registered applications!\n\nThird-party applications can request access to OpenKeychain. After granting access, they will be listed here.
+ No registered applications!\n\nA list of supported third-party applications can be found in \'Help\'!Show advanced informationHide advanced informationShow advanced settings
@@ -412,6 +424,7 @@
SaveCancelRevoke access
+ Start applicationDelete accountPackage NameSHA-256 of Package Signature
@@ -422,8 +435,8 @@
Allow accessDisallow accessPlease select a key!
- No public keys were found for these user ids:
- More than one public key exist for these user ids:
+ No public keys were found for these identities:
+ More than one public key exist for these identities:Please review the list of 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.
@@ -447,11 +460,15 @@
importing keys.
- Edit this key
+ Edit keyEncrypt with this key
- Certify this key
- Info
- Certifications
+ Certify identities
+ Share with…
+ Share over NFC by holding the devices back to back
+ Main Info
+ Share
+ Subkeys
+ CertificatesKeys
@@ -471,24 +488,24 @@
Write message here to encrypt and/or sign…Enter ciphertext here to decrypt and/or verify…
-
+
defaultnonecasualpositive
- revoke
+ revokedokfailed!error!key unavailable
- Signer
+ CertifierCertificate Details
- User ID
+ Identity<unknown>No certificates for this key
- User IDs to sign
+ Identities to certifyRevocation ReasonVerification StatusType
@@ -501,5 +518,6 @@
unknowncannot signEncoding error
+ No encryption subkey available!
diff --git a/OpenKeychain/src/main/res/values/styles.xml b/OpenKeychain/src/main/res/values/styles.xml
index f03d72605..27cd1546a 100644
--- a/OpenKeychain/src/main/res/values/styles.xml
+++ b/OpenKeychain/src/main/res/values/styles.xml
@@ -2,7 +2,6 @@
-
@@ -25,10 +24,14 @@
@drawable/section_header4dp8dp
- 4dp
+ 8dp
+ bold@color/emphasis14sp
+
\ No newline at end of file
diff --git a/README.md b/README.md
index abc75dd1f..d8327c66b 100644
--- a/README.md
+++ b/README.md
@@ -230,4 +230,5 @@ Some parts and some libraries are Apache License v2, MIT X11 License (see below)
* Menu icons
http://developer.android.com/design/downloads/index.html#action-bar-icon-pack
-
+* Purple color scheme
+ http://android-holo-colors.com/
diff --git a/extern/html-textview b/extern/html-textview
index 30fbf60cc..c31ef2aff 160000
--- a/extern/html-textview
+++ b/extern/html-textview
@@ -1 +1 @@
-Subproject commit 30fbf60ccfa8732e8fc4d3c97b94c4809ef871a5
+Subproject commit c31ef2aff4282ad00af98e879e3e0a6000885b55
diff --git a/extern/openkeychain-api-lib b/extern/openkeychain-api-lib
new file mode 160000
index 000000000..26497acb2
--- /dev/null
+++ b/extern/openkeychain-api-lib
@@ -0,0 +1 @@
+Subproject commit 26497acb27e9f6349c0557b15cd24a5b0b735e74
diff --git a/extern/openpgp-api-lib b/extern/openpgp-api-lib
new file mode 160000
index 000000000..650e1ebda
--- /dev/null
+++ b/extern/openpgp-api-lib
@@ -0,0 +1 @@
+Subproject commit 650e1ebda82596cd4fbfaae406e6eccf189f4f63
diff --git a/settings.gradle b/settings.gradle
index 5d1fdae51..b0162875a 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,6 +1,6 @@
include ':OpenKeychain'
-include ':OpenKeychain-API:libraries:openpgp-api-library'
-include ':OpenKeychain-API:libraries:openkeychain-api-library'
+include ':extern:openpgp-api-lib'
+include ':extern:openkeychain-api-lib'
include ':extern:html-textview'
include ':extern:StickyListHeaders:library'
include ':extern:AndroidBootstrap:AndroidBootstrap'