From 754b2a6cb15a6af61150cd4b1ce472bebd4fec22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Sun, 9 Feb 2014 19:22:14 +0100 Subject: [PATCH] Restructuring for new API library --- .../.gitignore | 0 OpenPGP-Keychain-API/build.gradle | 3 + .../example-app}/build.gradle | 5 +- .../example-app}/ic_launcher-web.png | Bin .../example-app}/src/main/AndroidManifest.xml | 0 .../keychain/demo/AidlDemoActivity2.java | 0 .../keychain/demo/BaseActivity.java | 0 .../keychain/demo/Constants.java | 0 .../demo/OpenPgpProviderActivity.java | 0 .../main/res/drawable-hdpi/ic_launcher.png | Bin .../main/res/drawable-mdpi/ic_launcher.png | Bin .../main/res/drawable-xhdpi/ic_launcher.png | Bin .../main/res/drawable-xxhdpi/ic_launcher.png | Bin .../src/main/res/layout/aidl_demo2.xml | 0 .../main/res/layout/crypto_provider_demo.xml | 0 .../src/main/res/layout/intent_demo.xml | 0 .../src/main/res/xml/base_preference.xml | 0 .../gradle}/gradle/wrapper/gradle-wrapper.jar | Bin 50508 -> 50557 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../gradle}/gradlew | 0 .../gradle}/gradlew.bat | 0 .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 50557 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + OpenPGP-Keychain-API/gradlew | 164 ++++++++++++++ OpenPGP-Keychain-API/gradlew.bat | 90 ++++++++ .../libraries/keychain-api-library/.gitignore | 29 +++ .../libraries/keychain-api-library/LICENSE | 202 ++++++++++++++++++ .../keychain-api-library/build.gradle | 21 ++ .../src/main/AndroidManifest.xml | 13 ++ .../openintents/openpgp/IOpenPgpCallback.aidl | 0 .../openpgp/IOpenPgpKeyIdsCallback.aidl | 0 .../openintents/openpgp/IOpenPgpService.aidl | 0 .../org/openintents/openpgp/OpenPgpData.aidl | 0 .../org/openintents/openpgp/OpenPgpError.aidl | 0 .../openpgp/OpenPgpSignatureResult.aidl | 0 .../service/remote/IExtendedApiCallback.aidl | 0 .../service/remote/IExtendedApiService.aidl | 0 .../openintents/openpgp/OpenPgpConstants.java | 0 .../org/openintents/openpgp/OpenPgpData.java | 0 .../org/openintents/openpgp/OpenPgpError.java | 0 .../openintents/openpgp/OpenPgpHelper.java | 0 .../openpgp/OpenPgpListPreference.java | 0 .../openpgp/OpenPgpServiceConnection.java | 0 .../openpgp/OpenPgpSignatureResult.java | 0 OpenPGP-Keychain-API/settings.gradle | 2 + OpenPGP-Keychain/build.gradle | 1 + .../openintents/openpgp/IOpenPgpCallback.aidl | 45 ---- .../openpgp/IOpenPgpKeyIdsCallback.aidl | 39 ---- .../openintents/openpgp/IOpenPgpService.aidl | 143 ------------- .../org/openintents/openpgp/OpenPgpData.aidl | 20 -- .../org/openintents/openpgp/OpenPgpError.aidl | 20 -- .../src/main/res/values/strings.xml | 2 +- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 +- libraries/keychain-api-library/.gitignore | 29 +++ libraries/keychain-api-library/LICENSE | 202 ++++++++++++++++++ libraries/keychain-api-library/build.gradle | 12 ++ .../src/main/AndroidManifest.xml | 13 ++ .../openintents/openpgp/IOpenPgpCallback.aidl | 0 .../openpgp/IOpenPgpKeyIdsCallback.aidl | 0 .../openintents/openpgp/IOpenPgpService.aidl | 0 .../org/openintents/openpgp/OpenPgpData.aidl | 0 .../org/openintents/openpgp/OpenPgpError.aidl | 0 .../openpgp/OpenPgpSignatureResult.aidl | 0 .../service/remote/IExtendedApiCallback.aidl | 12 +- .../service/remote/IExtendedApiService.aidl | 48 +++++ .../openintents/openpgp/OpenPgpConstants.java | 0 .../org/openintents/openpgp/OpenPgpData.java | 0 .../org/openintents/openpgp/OpenPgpError.java | 0 .../openintents/openpgp/OpenPgpHelper.java | 0 .../openpgp/OpenPgpListPreference.java | 2 - .../openpgp/OpenPgpServiceConnection.java | 0 .../openpgp/OpenPgpSignatureResult.java | 0 settings.gradle | 1 + 74 files changed, 851 insertions(+), 283 deletions(-) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API}/.gitignore (100%) create mode 100644 OpenPGP-Keychain-API/build.gradle rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/example-app}/build.gradle (96%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/example-app}/ic_launcher-web.png (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/example-app}/src/main/AndroidManifest.xml (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/example-app}/src/main/java/org/sufficientlysecure/keychain/demo/AidlDemoActivity2.java (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/example-app}/src/main/java/org/sufficientlysecure/keychain/demo/BaseActivity.java (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/example-app}/src/main/java/org/sufficientlysecure/keychain/demo/Constants.java (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/example-app}/src/main/java/org/sufficientlysecure/keychain/demo/OpenPgpProviderActivity.java (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/example-app}/src/main/res/drawable-hdpi/ic_launcher.png (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/example-app}/src/main/res/drawable-mdpi/ic_launcher.png (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/example-app}/src/main/res/drawable-xhdpi/ic_launcher.png (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/example-app}/src/main/res/drawable-xxhdpi/ic_launcher.png (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/example-app}/src/main/res/layout/aidl_demo2.xml (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/example-app}/src/main/res/layout/crypto_provider_demo.xml (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/example-app}/src/main/res/layout/intent_demo.xml (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/example-app}/src/main/res/xml/base_preference.xml (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/gradle}/gradle/wrapper/gradle-wrapper.jar (85%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/gradle}/gradle/wrapper/gradle-wrapper.properties (80%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/gradle}/gradlew (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/gradle}/gradlew.bat (100%) create mode 100644 OpenPGP-Keychain-API/gradle/wrapper/gradle-wrapper.jar create mode 100644 OpenPGP-Keychain-API/gradle/wrapper/gradle-wrapper.properties create mode 100755 OpenPGP-Keychain-API/gradlew create mode 100644 OpenPGP-Keychain-API/gradlew.bat create mode 100644 OpenPGP-Keychain-API/libraries/keychain-api-library/.gitignore create mode 100644 OpenPGP-Keychain-API/libraries/keychain-api-library/LICENSE create mode 100644 OpenPGP-Keychain-API/libraries/keychain-api-library/build.gradle create mode 100644 OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/AndroidManifest.xml rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/libraries/keychain-api-library}/src/main/aidl/org/openintents/openpgp/IOpenPgpCallback.aidl (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/libraries/keychain-api-library}/src/main/aidl/org/openintents/openpgp/IOpenPgpKeyIdsCallback.aidl (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/libraries/keychain-api-library}/src/main/aidl/org/openintents/openpgp/IOpenPgpService.aidl (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/libraries/keychain-api-library}/src/main/aidl/org/openintents/openpgp/OpenPgpData.aidl (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/libraries/keychain-api-library}/src/main/aidl/org/openintents/openpgp/OpenPgpError.aidl (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/libraries/keychain-api-library}/src/main/aidl/org/openintents/openpgp/OpenPgpSignatureResult.aidl (100%) rename {OpenPGP-Keychain => OpenPGP-Keychain-API/libraries/keychain-api-library}/src/main/aidl/org/sufficientlysecure/keychain/service/remote/IExtendedApiCallback.aidl (100%) rename {OpenPGP-Keychain => OpenPGP-Keychain-API/libraries/keychain-api-library}/src/main/aidl/org/sufficientlysecure/keychain/service/remote/IExtendedApiService.aidl (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/libraries/keychain-api-library}/src/main/java/org/openintents/openpgp/OpenPgpConstants.java (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/libraries/keychain-api-library}/src/main/java/org/openintents/openpgp/OpenPgpData.java (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/libraries/keychain-api-library}/src/main/java/org/openintents/openpgp/OpenPgpError.java (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/libraries/keychain-api-library}/src/main/java/org/openintents/openpgp/OpenPgpHelper.java (100%) rename {OpenPGP-Keychain => OpenPGP-Keychain-API/libraries/keychain-api-library}/src/main/java/org/openintents/openpgp/OpenPgpListPreference.java (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/libraries/keychain-api-library}/src/main/java/org/openintents/openpgp/OpenPgpServiceConnection.java (100%) rename {OpenPGP-Keychain-API-Demo => OpenPGP-Keychain-API/libraries/keychain-api-library}/src/main/java/org/openintents/openpgp/OpenPgpSignatureResult.java (100%) create mode 100644 OpenPGP-Keychain-API/settings.gradle delete mode 100644 OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/IOpenPgpCallback.aidl delete mode 100644 OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/IOpenPgpKeyIdsCallback.aidl delete mode 100644 OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/IOpenPgpService.aidl delete mode 100644 OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/OpenPgpData.aidl delete mode 100644 OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/OpenPgpError.aidl create mode 100644 libraries/keychain-api-library/.gitignore create mode 100644 libraries/keychain-api-library/LICENSE create mode 100644 libraries/keychain-api-library/build.gradle create mode 100644 libraries/keychain-api-library/src/main/AndroidManifest.xml rename {OpenPGP-Keychain-API-Demo/src/main/java => libraries/keychain-api-library/src/main/aidl}/org/openintents/openpgp/IOpenPgpCallback.aidl (100%) rename {OpenPGP-Keychain-API-Demo/src/main/java => libraries/keychain-api-library/src/main/aidl}/org/openintents/openpgp/IOpenPgpKeyIdsCallback.aidl (100%) rename {OpenPGP-Keychain-API-Demo/src/main/java => libraries/keychain-api-library/src/main/aidl}/org/openintents/openpgp/IOpenPgpService.aidl (100%) rename {OpenPGP-Keychain-API-Demo/src/main/java => libraries/keychain-api-library/src/main/aidl}/org/openintents/openpgp/OpenPgpData.aidl (100%) rename {OpenPGP-Keychain-API-Demo/src/main/java => libraries/keychain-api-library/src/main/aidl}/org/openintents/openpgp/OpenPgpError.aidl (100%) rename {OpenPGP-Keychain-API-Demo/src/main/java => libraries/keychain-api-library/src/main/aidl}/org/openintents/openpgp/OpenPgpSignatureResult.aidl (100%) rename OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/OpenPgpSignatureResult.aidl => libraries/keychain-api-library/src/main/aidl/org/sufficientlysecure/keychain/service/remote/IExtendedApiCallback.aidl (77%) create mode 100644 libraries/keychain-api-library/src/main/aidl/org/sufficientlysecure/keychain/service/remote/IExtendedApiService.aidl rename {OpenPGP-Keychain => libraries/keychain-api-library}/src/main/java/org/openintents/openpgp/OpenPgpConstants.java (100%) rename {OpenPGP-Keychain => libraries/keychain-api-library}/src/main/java/org/openintents/openpgp/OpenPgpData.java (100%) rename {OpenPGP-Keychain => libraries/keychain-api-library}/src/main/java/org/openintents/openpgp/OpenPgpError.java (100%) rename {OpenPGP-Keychain => libraries/keychain-api-library}/src/main/java/org/openintents/openpgp/OpenPgpHelper.java (100%) rename {OpenPGP-Keychain-API-Demo => libraries/keychain-api-library}/src/main/java/org/openintents/openpgp/OpenPgpListPreference.java (98%) rename {OpenPGP-Keychain => libraries/keychain-api-library}/src/main/java/org/openintents/openpgp/OpenPgpServiceConnection.java (100%) rename {OpenPGP-Keychain => libraries/keychain-api-library}/src/main/java/org/openintents/openpgp/OpenPgpSignatureResult.java (100%) diff --git a/OpenPGP-Keychain-API-Demo/.gitignore b/OpenPGP-Keychain-API/.gitignore similarity index 100% rename from OpenPGP-Keychain-API-Demo/.gitignore rename to OpenPGP-Keychain-API/.gitignore diff --git a/OpenPGP-Keychain-API/build.gradle b/OpenPGP-Keychain-API/build.gradle new file mode 100644 index 000000000..2e41492a3 --- /dev/null +++ b/OpenPGP-Keychain-API/build.gradle @@ -0,0 +1,3 @@ +task wrapper(type: Wrapper) { + gradleVersion = '1.10' +} \ No newline at end of file diff --git a/OpenPGP-Keychain-API-Demo/build.gradle b/OpenPGP-Keychain-API/example-app/build.gradle similarity index 96% rename from OpenPGP-Keychain-API-Demo/build.gradle rename to OpenPGP-Keychain-API/example-app/build.gradle index 025ff417b..99a09f094 100644 --- a/OpenPGP-Keychain-API-Demo/build.gradle +++ b/OpenPGP-Keychain-API/example-app/build.gradle @@ -10,12 +10,9 @@ buildscript { apply plugin: 'android' -repositories { - mavenCentral() -} - dependencies { compile 'com.android.support:support-v4:19.0.1' + compile project(':libraries:keychain-api-library') } android { diff --git a/OpenPGP-Keychain-API-Demo/ic_launcher-web.png b/OpenPGP-Keychain-API/example-app/ic_launcher-web.png similarity index 100% rename from OpenPGP-Keychain-API-Demo/ic_launcher-web.png rename to OpenPGP-Keychain-API/example-app/ic_launcher-web.png diff --git a/OpenPGP-Keychain-API-Demo/src/main/AndroidManifest.xml b/OpenPGP-Keychain-API/example-app/src/main/AndroidManifest.xml similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/AndroidManifest.xml rename to OpenPGP-Keychain-API/example-app/src/main/AndroidManifest.xml diff --git a/OpenPGP-Keychain-API-Demo/src/main/java/org/sufficientlysecure/keychain/demo/AidlDemoActivity2.java b/OpenPGP-Keychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/AidlDemoActivity2.java similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/java/org/sufficientlysecure/keychain/demo/AidlDemoActivity2.java rename to OpenPGP-Keychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/AidlDemoActivity2.java diff --git a/OpenPGP-Keychain-API-Demo/src/main/java/org/sufficientlysecure/keychain/demo/BaseActivity.java b/OpenPGP-Keychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/BaseActivity.java similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/java/org/sufficientlysecure/keychain/demo/BaseActivity.java rename to OpenPGP-Keychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/BaseActivity.java diff --git a/OpenPGP-Keychain-API-Demo/src/main/java/org/sufficientlysecure/keychain/demo/Constants.java b/OpenPGP-Keychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/Constants.java similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/java/org/sufficientlysecure/keychain/demo/Constants.java rename to OpenPGP-Keychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/Constants.java diff --git a/OpenPGP-Keychain-API-Demo/src/main/java/org/sufficientlysecure/keychain/demo/OpenPgpProviderActivity.java b/OpenPGP-Keychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/OpenPgpProviderActivity.java similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/java/org/sufficientlysecure/keychain/demo/OpenPgpProviderActivity.java rename to OpenPGP-Keychain-API/example-app/src/main/java/org/sufficientlysecure/keychain/demo/OpenPgpProviderActivity.java diff --git a/OpenPGP-Keychain-API-Demo/src/main/res/drawable-hdpi/ic_launcher.png b/OpenPGP-Keychain-API/example-app/src/main/res/drawable-hdpi/ic_launcher.png similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/res/drawable-hdpi/ic_launcher.png rename to OpenPGP-Keychain-API/example-app/src/main/res/drawable-hdpi/ic_launcher.png diff --git a/OpenPGP-Keychain-API-Demo/src/main/res/drawable-mdpi/ic_launcher.png b/OpenPGP-Keychain-API/example-app/src/main/res/drawable-mdpi/ic_launcher.png similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/res/drawable-mdpi/ic_launcher.png rename to OpenPGP-Keychain-API/example-app/src/main/res/drawable-mdpi/ic_launcher.png diff --git a/OpenPGP-Keychain-API-Demo/src/main/res/drawable-xhdpi/ic_launcher.png b/OpenPGP-Keychain-API/example-app/src/main/res/drawable-xhdpi/ic_launcher.png similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/res/drawable-xhdpi/ic_launcher.png rename to OpenPGP-Keychain-API/example-app/src/main/res/drawable-xhdpi/ic_launcher.png diff --git a/OpenPGP-Keychain-API-Demo/src/main/res/drawable-xxhdpi/ic_launcher.png b/OpenPGP-Keychain-API/example-app/src/main/res/drawable-xxhdpi/ic_launcher.png similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/res/drawable-xxhdpi/ic_launcher.png rename to OpenPGP-Keychain-API/example-app/src/main/res/drawable-xxhdpi/ic_launcher.png diff --git a/OpenPGP-Keychain-API-Demo/src/main/res/layout/aidl_demo2.xml b/OpenPGP-Keychain-API/example-app/src/main/res/layout/aidl_demo2.xml similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/res/layout/aidl_demo2.xml rename to OpenPGP-Keychain-API/example-app/src/main/res/layout/aidl_demo2.xml diff --git a/OpenPGP-Keychain-API-Demo/src/main/res/layout/crypto_provider_demo.xml b/OpenPGP-Keychain-API/example-app/src/main/res/layout/crypto_provider_demo.xml similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/res/layout/crypto_provider_demo.xml rename to OpenPGP-Keychain-API/example-app/src/main/res/layout/crypto_provider_demo.xml diff --git a/OpenPGP-Keychain-API-Demo/src/main/res/layout/intent_demo.xml b/OpenPGP-Keychain-API/example-app/src/main/res/layout/intent_demo.xml similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/res/layout/intent_demo.xml rename to OpenPGP-Keychain-API/example-app/src/main/res/layout/intent_demo.xml diff --git a/OpenPGP-Keychain-API-Demo/src/main/res/xml/base_preference.xml b/OpenPGP-Keychain-API/example-app/src/main/res/xml/base_preference.xml similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/res/xml/base_preference.xml rename to OpenPGP-Keychain-API/example-app/src/main/res/xml/base_preference.xml diff --git a/OpenPGP-Keychain-API-Demo/gradle/wrapper/gradle-wrapper.jar b/OpenPGP-Keychain-API/gradle/gradle/wrapper/gradle-wrapper.jar similarity index 85% rename from OpenPGP-Keychain-API-Demo/gradle/wrapper/gradle-wrapper.jar rename to OpenPGP-Keychain-API/gradle/gradle/wrapper/gradle-wrapper.jar index d5c591c9c532da774b062aa6d7ab16405ff8700a..5838598129719e795cc5633f411468bdec311016 100644 GIT binary patch delta 3330 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 IghD^SKZDj&^Z)<= diff --git a/OpenPGP-Keychain-API-Demo/gradle/wrapper/gradle-wrapper.properties b/OpenPGP-Keychain-API/gradle/gradle/wrapper/gradle-wrapper.properties similarity index 80% rename from OpenPGP-Keychain-API-Demo/gradle/wrapper/gradle-wrapper.properties rename to OpenPGP-Keychain-API/gradle/gradle/wrapper/gradle-wrapper.properties index e3efa88f1..42c0fbd9d 100644 --- a/OpenPGP-Keychain-API-Demo/gradle/wrapper/gradle-wrapper.properties +++ b/OpenPGP-Keychain-API/gradle/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jan 27 14:45:08 CET 2014 +#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.9-bin.zip +distributionUrl=http\://services.gradle.org/distributions/gradle-1.10-bin.zip diff --git a/OpenPGP-Keychain-API-Demo/gradlew b/OpenPGP-Keychain-API/gradle/gradlew similarity index 100% rename from OpenPGP-Keychain-API-Demo/gradlew rename to OpenPGP-Keychain-API/gradle/gradlew diff --git a/OpenPGP-Keychain-API-Demo/gradlew.bat b/OpenPGP-Keychain-API/gradle/gradlew.bat similarity index 100% rename from OpenPGP-Keychain-API-Demo/gradlew.bat rename to OpenPGP-Keychain-API/gradle/gradlew.bat diff --git a/OpenPGP-Keychain-API/gradle/wrapper/gradle-wrapper.jar b/OpenPGP-Keychain-API/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..5838598129719e795cc5633f411468bdec311016 GIT binary patch literal 50557 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 literal 0 HcmV?d00001 diff --git a/OpenPGP-Keychain-API/gradle/wrapper/gradle-wrapper.properties b/OpenPGP-Keychain-API/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..425cd64c7 --- /dev/null +++ b/OpenPGP-Keychain-API/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Sun Feb 09 19:10:32 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/OpenPGP-Keychain-API/gradlew b/OpenPGP-Keychain-API/gradlew new file mode 100755 index 000000000..91a7e269e --- /dev/null +++ b/OpenPGP-Keychain-API/gradlew @@ -0,0 +1,164 @@ +#!/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/OpenPGP-Keychain-API/gradlew.bat b/OpenPGP-Keychain-API/gradlew.bat new file mode 100644 index 000000000..aec99730b --- /dev/null +++ b/OpenPGP-Keychain-API/gradlew.bat @@ -0,0 +1,90 @@ +@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/OpenPGP-Keychain-API/libraries/keychain-api-library/.gitignore b/OpenPGP-Keychain-API/libraries/keychain-api-library/.gitignore new file mode 100644 index 000000000..aa8bb5760 --- /dev/null +++ b/OpenPGP-Keychain-API/libraries/keychain-api-library/.gitignore @@ -0,0 +1,29 @@ +#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/OpenPGP-Keychain-API/libraries/keychain-api-library/LICENSE b/OpenPGP-Keychain-API/libraries/keychain-api-library/LICENSE new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/OpenPGP-Keychain-API/libraries/keychain-api-library/LICENSE @@ -0,0 +1,202 @@ + + 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/OpenPGP-Keychain-API/libraries/keychain-api-library/build.gradle b/OpenPGP-Keychain-API/libraries/keychain-api-library/build.gradle new file mode 100644 index 000000000..2eacd2065 --- /dev/null +++ b/OpenPGP-Keychain-API/libraries/keychain-api-library/build.gradle @@ -0,0 +1,21 @@ +buildscript { + repositories { + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:0.8.0' + } +} + +apply plugin: 'android-library' + +android { + compileSdkVersion 19 + buildToolsVersion '19.0.1' + + // Do not abort build if lint finds errors + lintOptions { + abortOnError false + } +} diff --git a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/AndroidManifest.xml b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/AndroidManifest.xml new file mode 100644 index 000000000..32b4a82e5 --- /dev/null +++ b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/AndroidManifest.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/OpenPGP-Keychain-API-Demo/src/main/aidl/org/openintents/openpgp/IOpenPgpCallback.aidl b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/IOpenPgpCallback.aidl similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/aidl/org/openintents/openpgp/IOpenPgpCallback.aidl rename to OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/IOpenPgpCallback.aidl diff --git a/OpenPGP-Keychain-API-Demo/src/main/aidl/org/openintents/openpgp/IOpenPgpKeyIdsCallback.aidl b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/IOpenPgpKeyIdsCallback.aidl similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/aidl/org/openintents/openpgp/IOpenPgpKeyIdsCallback.aidl rename to OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/IOpenPgpKeyIdsCallback.aidl diff --git a/OpenPGP-Keychain-API-Demo/src/main/aidl/org/openintents/openpgp/IOpenPgpService.aidl b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/IOpenPgpService.aidl similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/aidl/org/openintents/openpgp/IOpenPgpService.aidl rename to OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/IOpenPgpService.aidl diff --git a/OpenPGP-Keychain-API-Demo/src/main/aidl/org/openintents/openpgp/OpenPgpData.aidl b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/OpenPgpData.aidl similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/aidl/org/openintents/openpgp/OpenPgpData.aidl rename to OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/OpenPgpData.aidl diff --git a/OpenPGP-Keychain-API-Demo/src/main/aidl/org/openintents/openpgp/OpenPgpError.aidl b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/OpenPgpError.aidl similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/aidl/org/openintents/openpgp/OpenPgpError.aidl rename to OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/OpenPgpError.aidl diff --git a/OpenPGP-Keychain-API-Demo/src/main/aidl/org/openintents/openpgp/OpenPgpSignatureResult.aidl b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/OpenPgpSignatureResult.aidl similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/aidl/org/openintents/openpgp/OpenPgpSignatureResult.aidl rename to OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/OpenPgpSignatureResult.aidl diff --git a/OpenPGP-Keychain/src/main/aidl/org/sufficientlysecure/keychain/service/remote/IExtendedApiCallback.aidl b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/aidl/org/sufficientlysecure/keychain/service/remote/IExtendedApiCallback.aidl similarity index 100% rename from OpenPGP-Keychain/src/main/aidl/org/sufficientlysecure/keychain/service/remote/IExtendedApiCallback.aidl rename to OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/aidl/org/sufficientlysecure/keychain/service/remote/IExtendedApiCallback.aidl diff --git a/OpenPGP-Keychain/src/main/aidl/org/sufficientlysecure/keychain/service/remote/IExtendedApiService.aidl b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/aidl/org/sufficientlysecure/keychain/service/remote/IExtendedApiService.aidl similarity index 100% rename from OpenPGP-Keychain/src/main/aidl/org/sufficientlysecure/keychain/service/remote/IExtendedApiService.aidl rename to OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/aidl/org/sufficientlysecure/keychain/service/remote/IExtendedApiService.aidl diff --git a/OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpConstants.java b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpConstants.java similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpConstants.java rename to OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpConstants.java diff --git a/OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpData.java b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpData.java similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpData.java rename to OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpData.java diff --git a/OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpError.java b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpError.java similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpError.java rename to OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpError.java diff --git a/OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpHelper.java b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpHelper.java similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpHelper.java rename to OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpHelper.java diff --git a/OpenPGP-Keychain/src/main/java/org/openintents/openpgp/OpenPgpListPreference.java b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpListPreference.java similarity index 100% rename from OpenPGP-Keychain/src/main/java/org/openintents/openpgp/OpenPgpListPreference.java rename to OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpListPreference.java diff --git a/OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpServiceConnection.java b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpServiceConnection.java similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpServiceConnection.java rename to OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpServiceConnection.java diff --git a/OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpSignatureResult.java b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpSignatureResult.java similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpSignatureResult.java rename to OpenPGP-Keychain-API/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpSignatureResult.java diff --git a/OpenPGP-Keychain-API/settings.gradle b/OpenPGP-Keychain-API/settings.gradle new file mode 100644 index 000000000..4df1d7b4f --- /dev/null +++ b/OpenPGP-Keychain-API/settings.gradle @@ -0,0 +1,2 @@ +include ':example-app' +include ':libraries:keychain-api-library' \ No newline at end of file diff --git a/OpenPGP-Keychain/build.gradle b/OpenPGP-Keychain/build.gradle index 44f5ca280..66c6a0e8f 100644 --- a/OpenPGP-Keychain/build.gradle +++ b/OpenPGP-Keychain/build.gradle @@ -3,6 +3,7 @@ apply plugin: 'android' dependencies { compile 'com.android.support:support-v4:19.0.1' compile 'com.android.support:appcompat-v7:19.0.1' + compile project(':libraries:keychain-api-library') compile project(':libraries:HtmlTextView') compile project(':libraries:StickyListHeaders:library') compile project(':libraries:AndroidBootstrap') diff --git a/OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/IOpenPgpCallback.aidl b/OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/IOpenPgpCallback.aidl deleted file mode 100644 index ba41de1ba..000000000 --- a/OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/IOpenPgpCallback.aidl +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2013 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 org.openintents.openpgp.OpenPgpData; -import org.openintents.openpgp.OpenPgpSignatureResult; -import org.openintents.openpgp.OpenPgpError; - -interface IOpenPgpCallback { - - /** - * onSuccess returns on successful OpenPGP operations. - * - * @param output - * contains resulting output (decrypted content (when input was encrypted) - * or content without signature (when input was signed-only)) - * @param signatureResult - * signatureResult is only non-null if decryptAndVerify() was called and the content - * was encrypted or signed-and-encrypted. - */ - oneway void onSuccess(in OpenPgpData output, in OpenPgpSignatureResult signatureResult); - - /** - * onError returns on errors or when allowUserInteraction was set to false, but user interaction - * was required execute an OpenPGP operation. - * - * @param error - * See OpenPgpError class for more information. - */ - oneway void onError(in OpenPgpError error); -} \ No newline at end of file diff --git a/OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/IOpenPgpKeyIdsCallback.aidl b/OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/IOpenPgpKeyIdsCallback.aidl deleted file mode 100644 index 4ca356fad..000000000 --- a/OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/IOpenPgpKeyIdsCallback.aidl +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2013 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 org.openintents.openpgp.OpenPgpError; - -interface IOpenPgpKeyIdsCallback { - - /** - * onSuccess returns on successful getKeyIds operations. - * - * @param keyIds - * returned key ids - */ - oneway void onSuccess(in long[] keyIds); - - /** - * onError returns on errors or when allowUserInteraction was set to false, but user interaction - * was required execute an OpenPGP operation. - * - * @param error - * See OpenPgpError class for more information. - */ - oneway void onError(in OpenPgpError error); -} \ No newline at end of file diff --git a/OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/IOpenPgpService.aidl b/OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/IOpenPgpService.aidl deleted file mode 100644 index 8f9e8a0fd..000000000 --- a/OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/IOpenPgpService.aidl +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (C) 2013 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 org.openintents.openpgp.OpenPgpData; -import org.openintents.openpgp.IOpenPgpCallback; -import org.openintents.openpgp.IOpenPgpKeyIdsCallback; - -/** - * All methods are oneway, which means they are asynchronous and non-blocking. - * Results are returned to the callback, which has to be implemented on client side. - */ -interface IOpenPgpService { - - /** - * Sign - * - * After successful signing, callback's onSuccess will contain the resulting output. - * - * @param input - * OpenPgpData object containing String, byte[], ParcelFileDescriptor, or Uri - * @param output - * Request output format by defining OpenPgpData object - * - * new OpenPgpData(OpenPgpData.TYPE_STRING) - * Returns as String - * (OpenPGP Radix-64, 33 percent overhead compared to binary, see http://tools.ietf.org/html/rfc4880#page-53) - * new OpenPgpData(OpenPgpData.TYPE_BYTE_ARRAY) - * Returns as byte[] - * new OpenPgpData(uri) - * Writes output to given Uri - * new OpenPgpData(fileDescriptor) - * Writes output to given ParcelFileDescriptor - * @param callback - * Callback where to return results - */ - oneway void sign(in OpenPgpData input, in OpenPgpData output, in IOpenPgpCallback callback); - - /** - * Encrypt - * - * After successful encryption, callback's onSuccess will contain the resulting output. - * - * @param input - * OpenPgpData object containing String, byte[], ParcelFileDescriptor, or Uri - * @param output - * Request output format by defining OpenPgpData object - * - * new OpenPgpData(OpenPgpData.TYPE_STRING) - * Returns as String - * (OpenPGP Radix-64, 33 percent overhead compared to binary, see http://tools.ietf.org/html/rfc4880#page-53) - * new OpenPgpData(OpenPgpData.TYPE_BYTE_ARRAY) - * Returns as byte[] - * new OpenPgpData(uri) - * Writes output to given Uri - * new OpenPgpData(fileDescriptor) - * Writes output to given ParcelFileDescriptor - * @param keyIds - * Key Ids of recipients. Can be retrieved with getKeyIds() - * @param callback - * Callback where to return results - */ - oneway void encrypt(in OpenPgpData input, in OpenPgpData output, in long[] keyIds, in IOpenPgpCallback callback); - - /** - * Sign then encrypt - * - * After successful signing and encryption, callback's onSuccess will contain the resulting output. - * - * @param input - * OpenPgpData object containing String, byte[], ParcelFileDescriptor, or Uri - * @param output - * Request output format by defining OpenPgpData object - * - * new OpenPgpData(OpenPgpData.TYPE_STRING) - * Returns as String - * (OpenPGP Radix-64, 33 percent overhead compared to binary, see http://tools.ietf.org/html/rfc4880#page-53) - * new OpenPgpData(OpenPgpData.TYPE_BYTE_ARRAY) - * Returns as byte[] - * new OpenPgpData(uri) - * Writes output to given Uri - * new OpenPgpData(fileDescriptor) - * Writes output to given ParcelFileDescriptor - * @param keyIds - * Key Ids of recipients. Can be retrieved with getKeyIds() - * @param callback - * Callback where to return results - */ - oneway void signAndEncrypt(in OpenPgpData input, in OpenPgpData output, in long[] keyIds, in IOpenPgpCallback callback); - - /** - * Decrypts and verifies given input bytes. This methods handles encrypted-only, signed-and-encrypted, - * and also signed-only input. - * - * After successful decryption/verification, callback's onSuccess will contain the resulting output. - * The signatureResult in onSuccess is only non-null if signed-and-encrypted or signed-only inputBytes were given. - * - * @param input - * OpenPgpData object containing String, byte[], ParcelFileDescriptor, or Uri - * @param output - * Request output format by defining OpenPgpData object - * - * new OpenPgpData(OpenPgpData.TYPE_STRING) - * Returns as String - * (OpenPGP Radix-64, 33 percent overhead compared to binary, see http://tools.ietf.org/html/rfc4880#page-53) - * new OpenPgpData(OpenPgpData.TYPE_BYTE_ARRAY) - * Returns as byte[] - * new OpenPgpData(uri) - * Writes output to given Uri - * new OpenPgpData(fileDescriptor) - * Writes output to given ParcelFileDescriptor - * @param callback - * Callback where to return results - */ - oneway void decryptAndVerify(in OpenPgpData input, in OpenPgpData output, in IOpenPgpCallback callback); - - /** - * Get available key ids based on given user ids - * - * @param ids - * User Ids (emails) of recipients OR key ids - * @param allowUserInteraction - * Enable user interaction to lookup and import unknown keys - * @param callback - * Callback where to return results (different type than callback in other functions!) - */ - oneway void getKeyIds(in String[] ids, in boolean allowUserInteraction, in IOpenPgpKeyIdsCallback callback); - -} \ No newline at end of file diff --git a/OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/OpenPgpData.aidl b/OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/OpenPgpData.aidl deleted file mode 100644 index 3711e4fb4..000000000 --- a/OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/OpenPgpData.aidl +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (C) 2013 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; - -// Declare OpenPgpData so AIDL can find it and knows that it implements the parcelable protocol. -parcelable OpenPgpData; \ No newline at end of file diff --git a/OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/OpenPgpError.aidl b/OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/OpenPgpError.aidl deleted file mode 100644 index 7a6bed1e6..000000000 --- a/OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/OpenPgpError.aidl +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (C) 2013 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; - -// Declare OpenPgpError so AIDL can find it and knows that it implements the parcelable protocol. -parcelable OpenPgpError; \ No newline at end of file diff --git a/OpenPGP-Keychain/src/main/res/values/strings.xml b/OpenPGP-Keychain/src/main/res/values/strings.xml index ddc3c9789..059b6ca9e 100644 --- a/OpenPGP-Keychain/src/main/res/values/strings.xml +++ b/OpenPGP-Keychain/src/main/res/values/strings.xml @@ -413,7 +413,7 @@ Encrypt to this contact - Certify this contact's key + Certify this contact\'s key Contacts diff --git a/build.gradle b/build.gradle index c5ca596fc..a84ab6b3c 100644 --- a/build.gradle +++ b/build.gradle @@ -16,4 +16,4 @@ allprojects { task wrapper(type: Wrapper) { gradleVersion = '1.10' -} +} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ddc691c4f..9559bfd8b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Jan 29 01:43:20 CET 2014 +#Sun Feb 09 18:34:27 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 +distributionUrl=http\://services.gradle.org/distributions/gradle-1.10-all.zip diff --git a/libraries/keychain-api-library/.gitignore b/libraries/keychain-api-library/.gitignore new file mode 100644 index 000000000..aa8bb5760 --- /dev/null +++ b/libraries/keychain-api-library/.gitignore @@ -0,0 +1,29 @@ +#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/libraries/keychain-api-library/LICENSE b/libraries/keychain-api-library/LICENSE new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/libraries/keychain-api-library/LICENSE @@ -0,0 +1,202 @@ + + 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/libraries/keychain-api-library/build.gradle b/libraries/keychain-api-library/build.gradle new file mode 100644 index 000000000..5436ecd0a --- /dev/null +++ b/libraries/keychain-api-library/build.gradle @@ -0,0 +1,12 @@ +apply plugin: 'android-library' + + +android { + compileSdkVersion 19 + buildToolsVersion '19.0.1' + + // Do not abort build if lint finds errors + lintOptions { + abortOnError false + } +} diff --git a/libraries/keychain-api-library/src/main/AndroidManifest.xml b/libraries/keychain-api-library/src/main/AndroidManifest.xml new file mode 100644 index 000000000..32b4a82e5 --- /dev/null +++ b/libraries/keychain-api-library/src/main/AndroidManifest.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/IOpenPgpCallback.aidl b/libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/IOpenPgpCallback.aidl similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/IOpenPgpCallback.aidl rename to libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/IOpenPgpCallback.aidl diff --git a/OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/IOpenPgpKeyIdsCallback.aidl b/libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/IOpenPgpKeyIdsCallback.aidl similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/IOpenPgpKeyIdsCallback.aidl rename to libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/IOpenPgpKeyIdsCallback.aidl diff --git a/OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/IOpenPgpService.aidl b/libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/IOpenPgpService.aidl similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/IOpenPgpService.aidl rename to libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/IOpenPgpService.aidl diff --git a/OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpData.aidl b/libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/OpenPgpData.aidl similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpData.aidl rename to libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/OpenPgpData.aidl diff --git a/OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpError.aidl b/libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/OpenPgpError.aidl similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpError.aidl rename to libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/OpenPgpError.aidl diff --git a/OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpSignatureResult.aidl b/libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/OpenPgpSignatureResult.aidl similarity index 100% rename from OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpSignatureResult.aidl rename to libraries/keychain-api-library/src/main/aidl/org/openintents/openpgp/OpenPgpSignatureResult.aidl diff --git a/OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/OpenPgpSignatureResult.aidl b/libraries/keychain-api-library/src/main/aidl/org/sufficientlysecure/keychain/service/remote/IExtendedApiCallback.aidl similarity index 77% rename from OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/OpenPgpSignatureResult.aidl rename to libraries/keychain-api-library/src/main/aidl/org/sufficientlysecure/keychain/service/remote/IExtendedApiCallback.aidl index e246792d0..f69f66fd7 100644 --- a/OpenPGP-Keychain/src/main/aidl/org/openintents/openpgp/OpenPgpSignatureResult.aidl +++ b/libraries/keychain-api-library/src/main/aidl/org/sufficientlysecure/keychain/service/remote/IExtendedApiCallback.aidl @@ -13,8 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -package org.openintents.openpgp; -// Declare OpenPgpSignatureResult so AIDL can find it and knows that it implements the parcelable protocol. -parcelable OpenPgpSignatureResult; \ No newline at end of file +package org.sufficientlysecure.keychain.service.remote; + +interface IExtendedApiCallback { + + oneway void onSuccess(in byte[] outputBytes); + + oneway void onError(in String error); +} \ No newline at end of file diff --git a/libraries/keychain-api-library/src/main/aidl/org/sufficientlysecure/keychain/service/remote/IExtendedApiService.aidl b/libraries/keychain-api-library/src/main/aidl/org/sufficientlysecure/keychain/service/remote/IExtendedApiService.aidl new file mode 100644 index 000000000..669bd31b5 --- /dev/null +++ b/libraries/keychain-api-library/src/main/aidl/org/sufficientlysecure/keychain/service/remote/IExtendedApiService.aidl @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2013 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.service.remote; + +import org.sufficientlysecure.keychain.service.remote.IExtendedApiCallback; + +/** + * All methods are oneway, which means they are asynchronous and non-blocking. + * Results are returned to the callback, which has to be implemented on client side. + */ +interface IExtendedApiService { + + /** + * Symmetric Encrypt + * + * @param inputBytes + * Byte array you want to encrypt + * @param passphrase + * symmetric passhprase + * @param callback + * Callback where to return results + */ + oneway void encrypt(in byte[] inputBytes, in String passphrase, in IExtendedApiCallback callback); + + /** + * Generates self signed X509 certificate signed by OpenPGP private key (from app settings) + * + * @param subjAltNameURI + * @param callback + * Callback where to return results + */ + oneway void selfSignedX509Cert(in String subjAltNameURI, in IExtendedApiCallback callback); + +} \ No newline at end of file diff --git a/OpenPGP-Keychain/src/main/java/org/openintents/openpgp/OpenPgpConstants.java b/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpConstants.java similarity index 100% rename from OpenPGP-Keychain/src/main/java/org/openintents/openpgp/OpenPgpConstants.java rename to libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpConstants.java diff --git a/OpenPGP-Keychain/src/main/java/org/openintents/openpgp/OpenPgpData.java b/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpData.java similarity index 100% rename from OpenPGP-Keychain/src/main/java/org/openintents/openpgp/OpenPgpData.java rename to libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpData.java diff --git a/OpenPGP-Keychain/src/main/java/org/openintents/openpgp/OpenPgpError.java b/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpError.java similarity index 100% rename from OpenPGP-Keychain/src/main/java/org/openintents/openpgp/OpenPgpError.java rename to libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpError.java diff --git a/OpenPGP-Keychain/src/main/java/org/openintents/openpgp/OpenPgpHelper.java b/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpHelper.java similarity index 100% rename from OpenPGP-Keychain/src/main/java/org/openintents/openpgp/OpenPgpHelper.java rename to libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpHelper.java diff --git a/OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpListPreference.java b/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpListPreference.java similarity index 98% rename from OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpListPreference.java rename to libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpListPreference.java index c8e709df9..4ddd97485 100644 --- a/OpenPGP-Keychain-API-Demo/src/main/java/org/openintents/openpgp/OpenPgpListPreference.java +++ b/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpListPreference.java @@ -26,8 +26,6 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; -import android.graphics.Bitmap; -import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.preference.DialogPreference; import android.util.AttributeSet; diff --git a/OpenPGP-Keychain/src/main/java/org/openintents/openpgp/OpenPgpServiceConnection.java b/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpServiceConnection.java similarity index 100% rename from OpenPGP-Keychain/src/main/java/org/openintents/openpgp/OpenPgpServiceConnection.java rename to libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpServiceConnection.java diff --git a/OpenPGP-Keychain/src/main/java/org/openintents/openpgp/OpenPgpSignatureResult.java b/libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpSignatureResult.java similarity index 100% rename from OpenPGP-Keychain/src/main/java/org/openintents/openpgp/OpenPgpSignatureResult.java rename to libraries/keychain-api-library/src/main/java/org/openintents/openpgp/OpenPgpSignatureResult.java diff --git a/settings.gradle b/settings.gradle index 9f4d801a6..344278063 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,5 @@ include ':OpenPGP-Keychain' +include ':libraries:keychain-api-library' include ':libraries:HtmlTextView' include ':libraries:StickyListHeaders:library' include ':libraries:AndroidBootstrap'