From 69865a6d574e2a81b6ba4fbd11254d90629c14aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 2 Mar 2015 15:44:34 +0100 Subject: [PATCH 01/11] Use index constants in ContactHelper --- .../keychain/util/ContactHelper.java | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java index 60bc846b2..3cf201ed7 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java @@ -57,10 +57,20 @@ public class ContactHelper { KeychainContract.KeyRings.MASTER_KEY_ID, KeychainContract.KeyRings.EXPIRY, KeychainContract.KeyRings.IS_REVOKED}; + + public static final int INDEX_USER_ID = 0; + public static final int INDEX_FINGERPRINT = 1; + public static final int INDEX_KEY_ID = 2; + public static final int INDEX_MASTER_KEY_ID = 3; + public static final int INDEX_EXPIRY = 4; + public static final int INDEX_IS_REVOKED = 5; + public static final String[] USER_IDS_PROJECTION = new String[]{ UserPackets.USER_ID }; + public static final int INDEX_USER_IDS_USER_ID = 0; + public static final String NON_REVOKED_SELECTION = UserPackets.IS_REVOKED + "=0"; public static final String[] ID_PROJECTION = new String[]{ContactsContract.RawContacts._ID}; @@ -301,23 +311,26 @@ public class ContactHelper { null, null, null); if (cursor != null) { while (cursor.moveToNext()) { - String[] primaryUserId = KeyRing.splitUserId(cursor.getString(0)); - String fingerprint = KeyFormattingUtils.convertFingerprintToHex(cursor.getBlob(1)); + String[] primaryUserId = KeyRing.splitUserId(cursor.getString(INDEX_USER_ID)); + String fingerprint = KeyFormattingUtils.convertFingerprintToHex(cursor.getBlob(INDEX_FINGERPRINT)); contactFingerprints.remove(fingerprint); - String keyIdShort = KeyFormattingUtils.convertKeyIdToHexShort(cursor.getLong(2)); - long masterKeyId = cursor.getLong(3); - boolean isExpired = !cursor.isNull(4) && new Date(cursor.getLong(4) * 1000).before(new Date()); - boolean isRevoked = cursor.getInt(5) > 0; + String keyIdShort = KeyFormattingUtils.convertKeyIdToHexShort(cursor.getLong(INDEX_KEY_ID)); + long masterKeyId = cursor.getLong(INDEX_MASTER_KEY_ID); + boolean isExpired = !cursor.isNull(INDEX_EXPIRY) + && new Date(cursor.getLong(INDEX_EXPIRY) * 1000).before(new Date()); + boolean isRevoked = cursor.getInt(INDEX_IS_REVOKED) > 0; int rawContactId = findRawContactId(resolver, fingerprint); ArrayList ops = new ArrayList<>(); + Log.d(Constants.TAG, "raw contact id: "+rawContactId); + // Do not store expired or revoked keys in contact db - and remove them if they already exist if (isExpired || isRevoked) { if (rawContactId != -1) { resolver.delete(ContactsContract.RawContacts.CONTENT_URI, ID_SELECTION, new String[]{Integer.toString(rawContactId)}); } - } else { + } else if (primaryUserId[0] != null) { // Create a new rawcontact with corresponding key if it does not exist yet if (rawContactId == -1) { From fab60f2ddb4917515570f7c60a1be22670cd836e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 2 Mar 2015 15:46:41 +0100 Subject: [PATCH 02/11] Gradle hack to always use same build tools in subprojects --- .travis.yml | 2 +- build.gradle | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index af67b2333..68fa978dd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ before_install: # Install required Android components. #- echo "y" | android update sdk -a --filter build-tools-19.1.0,android-19,platform-tools,extra-android-support,extra-android-m2repository --no-ui --force - - ( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) | android update sdk --no-ui --all --force --filter build-tools-21.1.2,build-tools-21.1.1,build-tools-19.1.0,android-21,android-19,platform-tools,extra-android-support,extra-android-m2repository + - ( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) | android update sdk --no-ui --all --force --filter build-tools-21.1.2,android-21,android-19,platform-tools,extra-android-support,extra-android-m2repository install: echo "Installation done" script: - ./gradlew assemble -S -q diff --git a/build.gradle b/build.gradle index f8e6afc27..9b6363e93 100644 --- a/build.gradle +++ b/build.gradle @@ -38,3 +38,34 @@ project(':extern:spongycastle') { test.enabled = false } } + +// Copied from https://gitlab.com/fdroid/fdroidclient/blob/master/build.gradle#L144 +subprojects { + + // This is the hacky way which we force the subprojects to use the same build tools: + // http://stackoverflow.com/a/21032272 + afterEvaluate { + if ( it.hasProperty( 'android' ) ) { + android { + + // The android build task only lets you configure the buildToolsVersion once, so if + // we execute the closure below to configure our subprojects, it will fail when it + // hits the second subproject. Therefore, we will only do it once, and I guess the + // android plugin will re-use the existing value I set. + // https://android.googlesource.com/platform/tools/build/+/master/gradle/src/main/groovy/com/android/build/gradle/BaseExtension.groovy + try { + buildToolsVersion '21.1.2' + logger.info("Set buildToolsVersion to '21.1.2'") + } catch (GradleException e) { + logger.info("Tried to set the buildToolsVersion, however we were not allowed to: $e.message") + } + + // don't abort build on lint errors + // http://stackoverflow.com/a/25149514 + configure(android.lintOptions) { + abortOnError false + } + } + } + } +} \ No newline at end of file From d5cc359a5d20208424b5dab2d15ce3ef5a724a9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 2 Mar 2015 15:49:29 +0100 Subject: [PATCH 03/11] Revert "Gradle hack to always use same build tools in subprojects" This reverts commit fab60f2ddb4917515570f7c60a1be22670cd836e. --- .travis.yml | 2 +- build.gradle | 31 ------------------------------- 2 files changed, 1 insertion(+), 32 deletions(-) diff --git a/.travis.yml b/.travis.yml index 68fa978dd..af67b2333 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ before_install: # Install required Android components. #- echo "y" | android update sdk -a --filter build-tools-19.1.0,android-19,platform-tools,extra-android-support,extra-android-m2repository --no-ui --force - - ( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) | android update sdk --no-ui --all --force --filter build-tools-21.1.2,android-21,android-19,platform-tools,extra-android-support,extra-android-m2repository + - ( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) | android update sdk --no-ui --all --force --filter build-tools-21.1.2,build-tools-21.1.1,build-tools-19.1.0,android-21,android-19,platform-tools,extra-android-support,extra-android-m2repository install: echo "Installation done" script: - ./gradlew assemble -S -q diff --git a/build.gradle b/build.gradle index 9b6363e93..f8e6afc27 100644 --- a/build.gradle +++ b/build.gradle @@ -38,34 +38,3 @@ project(':extern:spongycastle') { test.enabled = false } } - -// Copied from https://gitlab.com/fdroid/fdroidclient/blob/master/build.gradle#L144 -subprojects { - - // This is the hacky way which we force the subprojects to use the same build tools: - // http://stackoverflow.com/a/21032272 - afterEvaluate { - if ( it.hasProperty( 'android' ) ) { - android { - - // The android build task only lets you configure the buildToolsVersion once, so if - // we execute the closure below to configure our subprojects, it will fail when it - // hits the second subproject. Therefore, we will only do it once, and I guess the - // android plugin will re-use the existing value I set. - // https://android.googlesource.com/platform/tools/build/+/master/gradle/src/main/groovy/com/android/build/gradle/BaseExtension.groovy - try { - buildToolsVersion '21.1.2' - logger.info("Set buildToolsVersion to '21.1.2'") - } catch (GradleException e) { - logger.info("Tried to set the buildToolsVersion, however we were not allowed to: $e.message") - } - - // don't abort build on lint errors - // http://stackoverflow.com/a/25149514 - configure(android.lintOptions) { - abortOnError false - } - } - } - } -} \ No newline at end of file From 505140ef2a480f9a25a0a2d458865347b26b11c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 2 Mar 2015 16:21:51 +0100 Subject: [PATCH 04/11] Use SDK and build tools versions from root project --- OpenKeychain/build.gradle | 4 ++-- README.md | 39 +++++++++++++++++++++++++------------ build.gradle | 7 +++++++ extern/KeybaseLib | 2 +- extern/StickyListHeaders | 2 +- extern/SuperToasts | 2 +- extern/TokenAutoComplete | 2 +- extern/html-textview | 2 +- extern/openkeychain-api-lib | 2 +- extern/safeslinger-exchange | 2 +- 10 files changed, 43 insertions(+), 21 deletions(-) diff --git a/OpenKeychain/build.gradle b/OpenKeychain/build.gradle index 7fa139c06..026c12319 100644 --- a/OpenKeychain/build.gradle +++ b/OpenKeychain/build.gradle @@ -33,8 +33,8 @@ dependencies { } android { - compileSdkVersion 21 - buildToolsVersion '21.1.2' + compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion defaultConfig { minSdkVersion 15 diff --git a/README.md b/README.md index 991757169..7c2f50326 100644 --- a/README.md +++ b/README.md @@ -109,23 +109,38 @@ see ## Notes -### Gradle Build System +### Build System We try to make our builds as [reproducible/deterministic](https://blog.torproject.org/blog/deterministic-builds-part-one-cyberwar-and-global-compromise) as possible. -When changing build files or dependencies, respect the following requirements: -* No precompiled libraries (you never know what pre-compiled jar files really contain!). All libraries should be forked into the open-keychain Github project and then provided as git submodules in the "extern" folder. -* No dependencies from Maven (also a soft requirement for inclusion in [F-Droid](https://f-droid.org)) + +#### Update Gradle version * Always use a fixed Android Gradle plugin version not a dynamic one, e.g. ``0.7.3`` instead of ``0.7.+`` (allows offline builds without lookups for new versions, also some minor Android plugin versions had serious issues, i.e. [0.7.2 and 0.8.1](http://tools.android.com/tech-docs/new-build-system)) -* Commit the corresponding [Gradle wrapper](http://www.gradle.org/docs/current/userguide/gradle_wrapper.html) to the repository (allows easy building for new contributors without the need to install the required Gradle version using a package manager) -* In order to update the build system to a newer gradle version you need to: - * Update every build.gradle file with the new gradle version and/or gradle plugin version +* Update every build.gradle file with the new gradle version and/or gradle plugin version * build.gradle * OpenKeychain/build.gradle - * OpenKeychain-API/build.gradle - * OpenKeychain-API/example-app/build.gradle - * OpenKeychain-API/libraries/keychain-api-library/build.gradle - * run ./gradlew wrapper twice to update gradle and download the new gradle jar file - * commit the new gradle jar and property files +* run ./gradlew wrapper twice to update gradle and download the new gradle jar file +* commit the corresponding [Gradle wrapper](http://www.gradle.org/docs/current/userguide/gradle_wrapper.html) to the repository (allows easy building for new contributors without the need to install the required Gradle version using a package manager) + +#### Update SDK and Build Tools +* Open build.gradle and change: +``` +ext { + compileSdkVersion = 21 + buildToolsVersion = '21.1.2' +} +``` +* Change SDK and Build Tools in git submodules "openkeychain-api-lib" and "openpgp-api-lib" manually. They should also build on their own without the ext variables. + +#### Add new library +* You can add the library as a Maven dependency or as a git submodule (if patches are required) in the "extern" folder. +* If added as a Maven dependency, pin the library using [Gradle Witness](https://github.com/WhisperSystems/gradle-witness) +* If added as a git submodule, change the ``compileSdkVersion`` and ``buildToolsVersion`` in build.gradle to use the variables from the root project: +``` +android { + compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion +} +``` ### Slow Gradle? diff --git a/build.gradle b/build.gradle index f8e6afc27..4076ddc6b 100644 --- a/build.gradle +++ b/build.gradle @@ -38,3 +38,10 @@ project(':extern:spongycastle') { test.enabled = false } } + +// SDK Version and Build Tools used by all subprojects +// See http://tools.android.com/tech-docs/new-build-system/tips#TOC-Controlling-Android-properties-of-all-your-modules-from-the-main-project. +ext { + compileSdkVersion = 21 + buildToolsVersion = '21.1.2' +} \ No newline at end of file diff --git a/extern/KeybaseLib b/extern/KeybaseLib index 2b26d163d..9615d90b1 160000 --- a/extern/KeybaseLib +++ b/extern/KeybaseLib @@ -1 +1 @@ -Subproject commit 2b26d163df84a3d26c1c8da088ed3811b5ca6ec7 +Subproject commit 9615d90b18d1aee4dad994aa45875adfdcfb3c34 diff --git a/extern/StickyListHeaders b/extern/StickyListHeaders index 62cc58c12..70a2ed806 160000 --- a/extern/StickyListHeaders +++ b/extern/StickyListHeaders @@ -1 +1 @@ -Subproject commit 62cc58c12d0c09b50984caf26e5afceda8873784 +Subproject commit 70a2ed80632938540bf07b81270384f4e5a96f9e diff --git a/extern/SuperToasts b/extern/SuperToasts index 77042d633..79fbaa4e3 160000 --- a/extern/SuperToasts +++ b/extern/SuperToasts @@ -1 +1 @@ -Subproject commit 77042d633f4dd430bcc86101e31dda52433db9c1 +Subproject commit 79fbaa4e3cf118a07ca4573b514c679b666fb214 diff --git a/extern/TokenAutoComplete b/extern/TokenAutoComplete index ca46b4261..1d6d3882e 160000 --- a/extern/TokenAutoComplete +++ b/extern/TokenAutoComplete @@ -1 +1 @@ -Subproject commit ca46b4261c97221ddd4db135e7838d6fa145adf4 +Subproject commit 1d6d3882e711c14c93abf73cbcbd28b9e0e2b498 diff --git a/extern/html-textview b/extern/html-textview index eedaa334e..9872a7315 160000 --- a/extern/html-textview +++ b/extern/html-textview @@ -1 +1 @@ -Subproject commit eedaa334e761273efbfc49ded2124df58c8a4d88 +Subproject commit 9872a73156518fd8df79dd2cd4d24750574b9ac7 diff --git a/extern/openkeychain-api-lib b/extern/openkeychain-api-lib index 88c004793..925907502 160000 --- a/extern/openkeychain-api-lib +++ b/extern/openkeychain-api-lib @@ -1 +1 @@ -Subproject commit 88c00479329c1aa892bef052f3f8830067c386d8 +Subproject commit 9259075028e0906d0cb085e0c4578e23829dc3c0 diff --git a/extern/safeslinger-exchange b/extern/safeslinger-exchange index 96f7c8935..7c84cb54d 160000 --- a/extern/safeslinger-exchange +++ b/extern/safeslinger-exchange @@ -1 +1 @@ -Subproject commit 96f7c893565e3a8badd740b2035beea87d8bffb3 +Subproject commit 7c84cb54df5b3d5c6780984e48f3e9e4cbc5128e From c1130c5b3ea61660373609ddbdeab0d5483649a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 2 Mar 2015 16:24:26 +0100 Subject: [PATCH 05/11] Removed unused submodules --- .gitmodules | 9 --------- extern/SuperToasts | 1 - extern/zxing-android-integration | 1 - extern/zxing-qr-code | 1 - 4 files changed, 12 deletions(-) delete mode 160000 extern/SuperToasts delete mode 160000 extern/zxing-android-integration delete mode 160000 extern/zxing-qr-code diff --git a/.gitmodules b/.gitmodules index f8db64f0a..8238c3f80 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,12 +1,6 @@ [submodule "extern/StickyListHeaders"] path = extern/StickyListHeaders url = https://github.com/open-keychain/StickyListHeaders.git -[submodule "extern/zxing-android-integration"] - path = extern/zxing-android-integration - url = https://github.com/open-keychain/zxing-android-integration.git -[submodule "extern/zxing-qr-code"] - path = extern/zxing-qr-code - url = https://github.com/open-keychain/zxing-qr-code.git [submodule "extern/spongycastle"] path = extern/spongycastle url = https://github.com/open-keychain/spongycastle.git @@ -19,9 +13,6 @@ [submodule "extern/openkeychain-api-lib"] path = extern/openkeychain-api-lib url = https://github.com/open-keychain/openkeychain-api-lib.git -[submodule "extern/SuperToasts"] - path = extern/SuperToasts - url = https://github.com/open-keychain/SuperToasts.git [submodule "extern/KeybaseLib"] path = extern/KeybaseLib url = https://github.com/open-keychain/KeybaseLib.git diff --git a/extern/SuperToasts b/extern/SuperToasts deleted file mode 160000 index 79fbaa4e3..000000000 --- a/extern/SuperToasts +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 79fbaa4e3cf118a07ca4573b514c679b666fb214 diff --git a/extern/zxing-android-integration b/extern/zxing-android-integration deleted file mode 160000 index e2d0064bd..000000000 --- a/extern/zxing-android-integration +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e2d0064bd3171b7333af044bb30c25c85ee993dd diff --git a/extern/zxing-qr-code b/extern/zxing-qr-code deleted file mode 160000 index 8fd0657d3..000000000 --- a/extern/zxing-qr-code +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8fd0657d33d8277aadbdc1604fd3aaa2e8d4b487 From 84e5ac4b033edf8932be20f4c8d9db26991ea03b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 2 Mar 2015 16:25:12 +0100 Subject: [PATCH 06/11] Remove supertoast dependency --- OpenKeychain/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/OpenKeychain/build.gradle b/OpenKeychain/build.gradle index 026c12319..bfbcf7702 100644 --- a/OpenKeychain/build.gradle +++ b/OpenKeychain/build.gradle @@ -15,7 +15,6 @@ dependencies { compile project(':extern:spongycastle:pg') compile project(':extern:spongycastle:pkix') compile project(':extern:spongycastle:prov') - compile project(':extern:SuperToasts:supertoasts') compile project(':extern:minidns') compile project(':extern:KeybaseLib:Lib') compile project(':extern:TokenAutoComplete:library') From 9514719719908f13ca730ca7ba89f2d91a49eb00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 2 Mar 2015 16:29:40 +0100 Subject: [PATCH 07/11] Re-add black color --- OpenKeychain/src/main/res/values/colors.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OpenKeychain/src/main/res/values/colors.xml b/OpenKeychain/src/main/res/values/colors.xml index c49e06b4b..8c5358fd0 100644 --- a/OpenKeychain/src/main/res/values/colors.xml +++ b/OpenKeychain/src/main/res/values/colors.xml @@ -13,6 +13,8 @@ + #000000 + #C8E6C9 @color/accent #1976D2 From 058f792566d0bacb327d32f0e59ffca2af7323bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 2 Mar 2015 16:34:56 +0100 Subject: [PATCH 08/11] Update readme for build system --- README.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 7c2f50326..021a15acb 100644 --- a/README.md +++ b/README.md @@ -106,10 +106,7 @@ see * Mailinglist Archive at http://bouncy-castle.1462172.n4.nabble.com/Bouncy-Castle-Dev-f1462173.html * Commit changelog of pg subpackage: https://github.com/bcgit/bc-java/commits/master/pg - -## Notes - -### Build System +## Build System We try to make our builds as [reproducible/deterministic](https://blog.torproject.org/blog/deterministic-builds-part-one-cyberwar-and-global-compromise) as possible. @@ -141,17 +138,18 @@ android { buildToolsVersion rootProject.ext.buildToolsVersion } ``` +* You can check for wrong ``compileSdkVersion`` by ``find -name build.gradle | xargs grep compileSdkVersion`` -### Slow Gradle? +#### Slow Gradle? * https://www.timroes.de/2013/09/12/speed-up-gradle/ * Disable Lint checking if it is enabled in build.gradle -### Error:Configuration with name 'default' not found. +#### Error:Configuration with name 'default' not found. Gradle project dependencies are missing. Do a ``git submodule init && git submodule update`` -### Translations +## Translations Translations are hosted on Transifex, which is configured by ".tx/config". From 3c7c278ef3fd9a5dd3da9df5e969ee5fa94e35d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 2 Mar 2015 17:23:06 +0100 Subject: [PATCH 09/11] Use gradle witness --- OpenKeychain/build.gradle | 36 +++++++++++++++++++++++++++++++++++- README.md | 2 +- build.gradle | 1 + gradle-witness.jar | Bin 0 -> 21690 bytes 4 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 gradle-witness.jar diff --git a/OpenKeychain/build.gradle b/OpenKeychain/build.gradle index bfbcf7702..4567f54dc 100644 --- a/OpenKeychain/build.gradle +++ b/OpenKeychain/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.application' +apply plugin: 'witness' dependencies { // NOTE: Always use fixed version codes not dynamic ones, e.g. 0.7.3 instead of 0.7.+, see README for more information @@ -20,7 +21,7 @@ dependencies { compile project(':extern:TokenAutoComplete:library') compile project(':extern:safeslinger-exchange') - // TODO: Pin! + // NOTE: libraries are pinned to a specific build, see below compile 'com.eftimoff:android-patternview:1.0.0@aar' compile 'com.journeyapps:zxing-android-embedded:2.0.1@aar' compile 'com.journeyapps:zxing-android-integration:2.0.1@aar' @@ -31,6 +32,39 @@ dependencies { compile 'com.getbase:floatingactionbutton:1.8.0' } +// Output of ./gradlew -q calculateChecksums +// Comment out the libs referenced as git submodules! +dependencyVerification { + verify = [ + 'com.android.support:support-v4:703572d3015a088cc5604b7e38885af3d307c829d0c5ceaf8654ff41c71cd160', + 'com.android.support:appcompat-v7:5dbeb5316d0a6027d646ae552804c3baa5e3bd53f7f33db50904d51505c8a0e5', + 'com.android.support:recyclerview-v7:e525ad3f33c84bb12b73d2dc975b55364a53f0f2d0697e043efba59ba73e22d2', + 'com.android.support:cardview-v7:45c48c2ab056bc7a8573970b10f8902742c5d443f180dae43c56557397ac39af', + //'OpenKeychain.extern:openpgp-api-lib:b17bb282321351e4b00b4cd6422a57aadc13decae264019a88707bcb556439ea', + //'OpenKeychain.extern:openkeychain-api-lib:5f95f01c066069d4bde68992fd8da5faac21510d009b1fdae7a2e28e43e82cf4', + //'OpenKeychain.extern:html-textview:b58e343cf4c145e91f888806d06a2a7770a9e9331a72f08cfcf1128db30dcff3', + //'OpenKeychain.extern.StickyListHeaders:library:24e25da422efc08e4e7a06efbe927fdf17f7a9aa722db2b983385e2bf0004da5', + //'com.madgag.spongycastle:core:a9e4f60afe6b2661e0713190ade92c099b3f74ebbc67c1bc3e3fced0144307f4', + //'com.madgag.spongycastle:pg:29d544ff289fcaafcf6c3904185f5a6fbdb623cf1a1e377fcb239edc31ee9c17', + //'com.madgag.spongycastle:pkix:950d6eac8205c6a24aa87066fbf9cd0af50b95858b8d2b18d53e2fada2dbb2e3', + //'com.madgag.spongycastle:prov:0b78ffd7a59b1b690a05ebe9bb31d43405046a44a18e0529d7c826acb56350b7', + //'OpenKeychain.extern:minidns:cf332e993d7fcdc0a3821f5b997944df40582dc6c9f0ea36b5e20c1e289cb19f', + //'OpenKeychain.extern.KeybaseLib:Lib:af9bff087148e0859430d0b99ece096c41b315c5dc1ed500a68580b9b0e5ab11', + //'OpenKeychain.extern.TokenAutoComplete:library:40d4212a95e947efdb02f2ca66c95a27d49fba848471a6317eca2b9cc18e8780', + //'OpenKeychain.extern:safeslinger-exchange:94a1ce68217af7499579a042758283b1530912c53241bdfa06d1a079a5ae3faf', + 'com.eftimoff:android-patternview:a031eaed3b5cef8ea06c2d4a6e27693937f89ae483598d61b7027eeee0bed408', + 'com.journeyapps:zxing-android-embedded:5d6ba3931bd0b999695e363b571e95bd6bc9956340c1e6ce740cd0bff3d89a50', + 'com.journeyapps:zxing-android-integration:6f50bb07c057ac94319777ddfbb66f5d4f6190393418b2fc861e0e60d06f3c0d', + 'com.google.zxing:core:38c49045765281e4c170062fa3f48e4e988629bf985cab850c7497be5eaa72a1', + 'com.jpardogo.materialtabstrip:library:c6ef812fba4f74be7dc4a905faa4c2908cba261a94c13d4f96d5e67e4aad4aaa', + 'it.neokree:MaterialNavigationDrawer:1174d751a54689fccf53c1fbcdf439745926ae19024f4f1017afb6b29643c57d', + 'com.nispok:snackbar:59dc092a44c877e9ce5f9040c632d99e62d8932b0a4d67ba0ec9e35467d9047c', + 'com.getbase:floatingactionbutton:e63966148212e9685afad2370780ea239b6dbd2a06f6a3f919b98882318e6a32', + 'com.android.support:support-annotations:fdee2354787ef66b268e75958de3f7f6c4f8f325510a6dac9f49c929f83a63de', + 'com.balysv:material-ripple:587f19c1e27f16c7dc67ff9ac73838aa1451086ef05a15cee38bee3e4e1454ae', + ] +} + android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion diff --git a/README.md b/README.md index 021a15acb..83655ce01 100644 --- a/README.md +++ b/README.md @@ -130,7 +130,7 @@ ext { #### Add new library * You can add the library as a Maven dependency or as a git submodule (if patches are required) in the "extern" folder. -* If added as a Maven dependency, pin the library using [Gradle Witness](https://github.com/WhisperSystems/gradle-witness) +* If added as a Maven dependency, pin the library using [Gradle Witness](https://github.com/WhisperSystems/gradle-witness) (Do ``./gradlew -q calculateChecksums`` for Trust on First Use) * If added as a git submodule, change the ``compileSdkVersion`` and ``buildToolsVersion`` in build.gradle to use the variables from the root project: ``` android { diff --git a/build.gradle b/build.gradle index 4076ddc6b..6b3eb2c3d 100644 --- a/build.gradle +++ b/build.gradle @@ -6,6 +6,7 @@ buildscript { dependencies { // NOTE: Always use fixed version codes not dynamic ones, e.g. 0.7.3 instead of 0.7.+, see README for more information classpath 'com.android.tools.build:gradle:1.0.0' + classpath files('gradle-witness.jar') } } diff --git a/gradle-witness.jar b/gradle-witness.jar new file mode 100644 index 0000000000000000000000000000000000000000..90d2a364c8a23a6934169eea90c27cca1222c391 GIT binary patch literal 21690 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≶mz|fB3RB9K% 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 BPdESo literal 0 HcmV?d00001 From dae0873f5eabadc83b4eab3dfbbc2fd0c9336974 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 2 Mar 2015 17:39:30 +0100 Subject: [PATCH 10/11] Search string simplified --- OpenKeychain/src/main/res/values/strings.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 2d599e984..ca6ce1f7d 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -359,8 +359,7 @@ "consolidate: reimporting…" - "Name/Email/Key ID…" - "Name/Email/Proof/Key…" + "Search via Name, Email…" "512" From 7127c2205e6e0f671388a04785b1e7879c536c64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 2 Mar 2015 17:54:59 +0100 Subject: [PATCH 11/11] README: mac os x workaround --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 83655ce01..eedb1d82b 100644 --- a/README.md +++ b/README.md @@ -149,6 +149,10 @@ android { Gradle project dependencies are missing. Do a ``git submodule init && git submodule update`` +#### Build on Mac OS X fails? + +Try exporting JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8" + ## Translations Translations are hosted on Transifex, which is configured by ".tx/config".