From ab1b2df2d69f26d5976e9b0b2a3380952417a0ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Wed, 7 May 2014 16:51:06 +0200 Subject: [PATCH] Move API libs and API example into their own git repos --- .gitmodules | 6 + OpenKeychain-API/.gitignore | 29 - OpenKeychain-API/build.gradle | 3 - OpenKeychain-API/example-app/build.gradle | 61 -- .../example-app/ic_launcher-web.png | Bin 23512 -> 0 bytes .../example-app/src/main/AndroidManifest.xml | 33 - .../keychain/demo/BaseActivity.java | 63 -- .../keychain/demo/Constants.java | 21 - .../keychain/demo/IntentActivity.java | 583 ------------------ .../demo/OpenPgpProviderActivity.java | 379 ------------ .../main/res/drawable-hdpi/ic_launcher.png | Bin 2626 -> 0 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 1732 -> 0 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 3517 -> 0 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 5717 -> 0 bytes .../src/main/res/layout/openpgp_provider.xml | 158 ----- .../src/main/res/xml/base_preference.xml | 18 - .../src/main/res/xml/intent_preference.xml | 30 - .../gradle/gradle/wrapper/gradle-wrapper.jar | Bin 50557 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 - OpenKeychain-API/gradle/gradlew | 164 ----- OpenKeychain-API/gradle/gradlew.bat | 90 --- .../gradle/wrapper/gradle-wrapper.jar | Bin 50557 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 - OpenKeychain-API/gradlew | 164 ----- OpenKeychain-API/gradlew.bat | 90 --- .../openkeychain-api-library/.gitignore | 29 - .../AndroidManifest.xml | 13 - .../openkeychain-api-library/LICENSE | 202 ------ .../openkeychain-api-library/build.gradle | 35 -- .../openkeychain-api-library/build.xml | 92 --- .../proguard-project.txt | 20 - .../project.properties | 15 - .../keychain/api/OpenKeychainIntents.java | 37 -- .../libraries/openpgp-api-library/.gitignore | 29 - .../openpgp-api-library/AndroidManifest.xml | 13 - .../libraries/openpgp-api-library/LICENSE | 202 ------ .../openpgp-api-library/build.gradle | 35 -- .../libraries/openpgp-api-library/build.xml | 92 --- .../openpgp-api-library/proguard-project.txt | 20 - .../openpgp-api-library/project.properties | 15 - .../ic_action_cancel_launchersize.png | Bin 1520 -> 0 bytes .../ic_action_cancel_launchersize_light.png | Bin 1940 -> 0 bytes .../ic_action_cancel_launchersize.png | Bin 1032 -> 0 bytes .../ic_action_cancel_launchersize_light.png | Bin 1098 -> 0 bytes .../ic_action_cancel_launchersize.png | Bin 1570 -> 0 bytes .../ic_action_cancel_launchersize_light.png | Bin 2039 -> 0 bytes .../ic_action_cancel_launchersize.png | Bin 2345 -> 0 bytes .../ic_action_cancel_launchersize_light.png | Bin 2404 -> 0 bytes .../res/values/strings.xml | 7 - .../openintents/openpgp/IOpenPgpService.aidl | 24 - .../org/openintents/openpgp/OpenPgpError.java | 118 ---- .../openpgp/OpenPgpSignatureResult.java | 163 ----- .../openintents/openpgp/util/OpenPgpApi.java | 270 -------- .../openpgp/util/OpenPgpListPreference.java | 257 -------- .../util/OpenPgpServiceConnection.java | 118 ---- .../openpgp/util/OpenPgpUtils.java | 76 --- .../util/ParcelFileDescriptorUtil.java | 103 ---- OpenKeychain-API/settings.gradle | 3 - OpenKeychain/build.gradle | 8 +- extern/openkeychain-api-lib | 1 + extern/openpgp-api-lib | 1 + settings.gradle | 4 +- 62 files changed, 14 insertions(+), 3892 deletions(-) delete mode 100644 OpenKeychain-API/.gitignore delete mode 100644 OpenKeychain-API/build.gradle delete mode 100644 OpenKeychain-API/example-app/build.gradle delete mode 100644 OpenKeychain-API/example-app/ic_launcher-web.png delete mode 100644 OpenKeychain-API/example-app/src/main/AndroidManifest.xml delete mode 100644 OpenKeychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/BaseActivity.java delete mode 100644 OpenKeychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/Constants.java delete mode 100644 OpenKeychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/IntentActivity.java delete mode 100644 OpenKeychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/OpenPgpProviderActivity.java delete mode 100644 OpenKeychain-API/example-app/src/main/res/drawable-hdpi/ic_launcher.png delete mode 100644 OpenKeychain-API/example-app/src/main/res/drawable-mdpi/ic_launcher.png delete mode 100644 OpenKeychain-API/example-app/src/main/res/drawable-xhdpi/ic_launcher.png delete mode 100644 OpenKeychain-API/example-app/src/main/res/drawable-xxhdpi/ic_launcher.png delete mode 100644 OpenKeychain-API/example-app/src/main/res/layout/openpgp_provider.xml delete mode 100644 OpenKeychain-API/example-app/src/main/res/xml/base_preference.xml delete mode 100644 OpenKeychain-API/example-app/src/main/res/xml/intent_preference.xml delete mode 100644 OpenKeychain-API/gradle/gradle/wrapper/gradle-wrapper.jar delete mode 100644 OpenKeychain-API/gradle/gradle/wrapper/gradle-wrapper.properties delete mode 100755 OpenKeychain-API/gradle/gradlew delete mode 100644 OpenKeychain-API/gradle/gradlew.bat delete mode 100644 OpenKeychain-API/gradle/wrapper/gradle-wrapper.jar delete mode 100644 OpenKeychain-API/gradle/wrapper/gradle-wrapper.properties delete mode 100755 OpenKeychain-API/gradlew delete mode 100644 OpenKeychain-API/gradlew.bat delete mode 100644 OpenKeychain-API/libraries/openkeychain-api-library/.gitignore delete mode 100644 OpenKeychain-API/libraries/openkeychain-api-library/AndroidManifest.xml delete mode 100644 OpenKeychain-API/libraries/openkeychain-api-library/LICENSE delete mode 100644 OpenKeychain-API/libraries/openkeychain-api-library/build.gradle delete mode 100644 OpenKeychain-API/libraries/openkeychain-api-library/build.xml delete mode 100644 OpenKeychain-API/libraries/openkeychain-api-library/proguard-project.txt delete mode 100644 OpenKeychain-API/libraries/openkeychain-api-library/project.properties delete mode 100644 OpenKeychain-API/libraries/openkeychain-api-library/src/org/sufficientlysecure/keychain/api/OpenKeychainIntents.java delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/.gitignore delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/AndroidManifest.xml delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/LICENSE delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/build.gradle delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/build.xml delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/proguard-project.txt delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/project.properties delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/res/drawable-hdpi/ic_action_cancel_launchersize.png delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/res/drawable-hdpi/ic_action_cancel_launchersize_light.png delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/res/drawable-mdpi/ic_action_cancel_launchersize.png delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/res/drawable-mdpi/ic_action_cancel_launchersize_light.png delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/res/drawable-xhdpi/ic_action_cancel_launchersize.png delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/res/drawable-xhdpi/ic_action_cancel_launchersize_light.png delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/res/drawable-xxhdpi/ic_action_cancel_launchersize.png delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/res/drawable-xxhdpi/ic_action_cancel_launchersize_light.png delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/res/values/strings.xml delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/IOpenPgpService.aidl delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/OpenPgpError.java delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/OpenPgpSignatureResult.java delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpApi.java delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpServiceConnection.java delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpUtils.java delete mode 100644 OpenKeychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/ParcelFileDescriptorUtil.java delete mode 100644 OpenKeychain-API/settings.gradle create mode 160000 extern/openkeychain-api-lib create mode 160000 extern/openpgp-api-lib 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/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 ae4cd0976b592a393a0d6a0785a90ad702567790..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23512 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 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 cf114d7dbfb5d357df77134add8150f470c3fda9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2626 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 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 d55318843ec28251351a5f667ce7fa3371a19a90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1732 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 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 831c993d4b6852c84f04951ebd3b4be294e3388a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5717 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 MZyI9CH13A{55L)#*Z=?k 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 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -