apply plugin: 'com.android.application'
apply plugin: 'witness'
if (!hasProperty('sourceDeps')) {

    repositories {
        jcenter()

        // This is here until we sort out all dependencies from mavenCentral/jcenter. Once all of
        // the dependencies below have been sorted out, this can be removed.
        flatDir {
            dirs 'libs/binaryDeps'
        }
    }

    dependencies {
        compile project(':privileged-api-lib')

        compile 'com.android.support:support-v4:22.2.1'
        compile 'com.android.support:appcompat-v7:22.1.1'
        compile 'com.android.support:support-annotations:22.2.1'

        compile 'org.thoughtcrime.ssl.pinning:AndroidPinning:1.0.0'
        compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.4'
        compile 'com.google.zxing:core:3.2.1'
        compile 'eu.chainfire:libsuperuser:1.0.0.201504231659'
        compile 'cc.mvdan.accesspoint:library:0.1.3'
        compile 'info.guardianproject.netcipher:netcipher:1.2'
        compile 'com.madgag.spongycastle:pkix:1.51.0.0'
        compile 'com.madgag.spongycastle:prov:1.51.0.0'
        compile 'com.madgag.spongycastle:core:1.51.0.0'
        compile 'commons-net:commons-net:3.3'

        // Upstream doesn't have a binary on mavenCentral/jcenter yet:
        // https://github.com/kolavar/android-support-v4-preferencefragment/issues/13
        compile(name: 'support-v4-preferencefragment-release', ext: 'aar')

        // Fork for F-Droid, including support for https. Not merged into upstream
        // yet (seems to be a little unsupported as of late), so not using mavenCentral/jcenter.
        compile(name: 'nanohttpd-2.1.0')

        // Upstream doesn't have a binary on mavenCentral, and it is an SVN repo on
        // Google Code.  We include this code directly in this repo, and have made
        // modifications that should be pushed to anyone who wants to maintain it.
        compile(name: 'zipsigner')

        // Project semi-abandoned, 3.4.1 is from 2011 and we use trunk from 2013
        // TODO: active again and 3.4.2 now released, switch when available in jcenter:
        // https://github.com/openhab/jmdns/issues/6
        compile(name: 'jmdns')

        androidTestCompile 'commons-io:commons-io:2.2'
    }

} else {

    logger.info "Setting up *source* dependencies for F-Droid (because you passed in the -PsourceDeps argument to gradle while building)."

    repositories {
        jcenter()
    }

    dependencies {
        compile 'com.android.support:support-v4:22.2.1'
        compile 'com.android.support:appcompat-v7:22.1.1'
        compile 'com.android.support:support-annotations:22.2.1'

        compile project(':privileged-api-lib')

        compile 'org.thoughtcrime.ssl.pinning:AndroidPinning:1.0.0'
        compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.4'
        compile 'com.google.zxing:core:3.2.1'
        compile 'eu.chainfire:libsuperuser:1.0.0.201504231659'
        compile 'cc.mvdan.accesspoint:library:0.1.1'
        compile 'info.guardianproject.netcipher:netcipher:1.2'
        compile 'commons-net:commons-net:3.3'

        compile(project(':extern:support-v4-preferencefragment')) {
            exclude module: 'support-v4'
        }
        compile project(':extern:nanohttpd:core')
        compile project(':extern:zipsigner')
        compile project(':extern:jmdns')

        androidTestCompile 'commons-io:commons-io:2.2'
    }

}
// Only do the libraries imported from maven repositories. Our own libraries
// (like privileged-api-lib) and the prebuilt jars already checked into the
// source code don't need to be here.
dependencyVerification {
    verify = [
        'com.android.support:support-v4:c62f0d025dafa86f423f48df9185b0d89496adbc5f6a9be5a7c394d84cf91423',
        'com.android.support:appcompat-v7:9a2355537c2f01cf0b95523605c18606b8d824017e6e94a05c77b0cfc8f21c96',
        'com.android.support:support-annotations:104f353b53d5dd8d64b2f77eece4b37f6b961de9732eb6b706395e91033ec70a',
        'org.thoughtcrime.ssl.pinning:AndroidPinning:afa1d74e699257fa75cb109ff29bac50726ef269c6e306bdeffe8223cee06ef4',
        'com.nostra13.universalimageloader:universal-image-loader:b99382c5536c7325ef8dc0a0fe9a6cad803cf3488942bea7e1cca4db3e5dec43',
        'com.google.zxing:core:b4d82452e7a6bf6ec2698904b332431717ed8f9a850224f295aec89de80f2259',
        'eu.chainfire:libsuperuser:507f5f9703a7578406e672a96ff038fd8aeefd6e2fcb14dd0daba796239d6eaf',
        'cc.mvdan.accesspoint:library:dc89a085d6bc40381078b8dd7776b12bde0dbaf8ffbcddb17ec4ebc3edecc7ba',
        'info.guardianproject.netcipher:netcipher:a8eef6c3bf190e360c44c9364044b8050f0d387418acdae8d7ec78bd105a32a6',
        'com.madgag.spongycastle:pkix:0d9cca6991f68eb373cfad309d5268c9fc38db5efb5fe00dcccf5c973af1eca1',
        'com.madgag.spongycastle:prov:b8c3fec3a59aac1aa04ccf4dad7179351e54ef7672f53f508151b614c131398a',
        'com.madgag.spongycastle:core:8d6240b974b0aca4d3da9c7dd44d42339d8a374358aca5fc98e50a995764511f',
        'commons-net:commons-net:b35ad597f17a6f221575df2f729a9de8f70390509e047680771e713bad713fb9',
    ]
}
task binaryDeps(type: Copy, dependsOn: ':F-Droid:prepareReleaseDependencies') {

    enabled = project.hasProperty('sourceDeps')
    description = "Copies .jar and .aar files from subproject dependencies in extern/ to F-Droid/libs. Requires the sourceDeps property to be set (\"gradle -PsourceDeps binaryDeps\")"

    from('../extern/') {
        include 'support-v4-preferencefragment/build/outputs/aar/support-v4-preferencefragment-release.aar'
        include 'nanohttpd/core/build/libs/nanohttpd-2.1.0.jar'
        include 'zipsigner/build/libs/zipsigner.jar'
        include 'jmdns/build/libs/jmdns.jar'
    }

    into 'libs/binaryDeps'
    includeEmptyDirs false

    eachFile { FileCopyDetails details ->
        // Don't copy to a sub folder such as libs/binaryDeps/Project/build/outputs/aar/project.aar, but
        // rather libs/binaryDeps/project.aar.
        details.path = details.name
    }

}
android {
    compileSdkVersion 22
    buildToolsVersion '23.0.1'

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        androidTest.setRoot('test')
        androidTest {
            manifest.srcFile 'test/AndroidManifest.xml'
            java.srcDirs = ['test/src']
            resources.srcDirs = ['test/src']
            aidl.srcDirs = ['test/src']
            renderscript.srcDirs = ['test/src']
            res.srcDirs = ['test/res']
            assets.srcDirs = ['test/assets']
        }
    }

    buildTypes {
        all {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            debuggable true
        }
    }

    compileOptions {
        compileOptions.encoding = "UTF-8"

        // Use Java 1.7, requires minSdk 8
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    lintOptions {
        checkReleaseBuilds false
        abortOnError false

        htmlReport true
        xmlReport false
        textReport false

        // Our translations are crowd-sourced
        disable 'MissingTranslation'
    }

}
// This person took the example code below from another blogpost online, however
// I lost the reference to it:
// http://stackoverflow.com/questions/23297562/gradle-javadoc-and-android-documentation
android.applicationVariants.all { variant ->

    task("generate${variant.name}Javadoc", type: Javadoc) {
        title = "$name $version API"
        description "Generates Javadoc for F-Droid."
        source = variant.javaCompile.source

        def sdkDir
        Properties properties = new Properties()
        File localProps = project.rootProject.file('local.properties')
        if (localProps.exists()) {
            properties.load(localProps.newDataInputStream())
            sdkDir = properties.getProperty('sdk.dir')
        } else {
            sdkDir = System.getenv('ANDROID_HOME')
        }
        if (!sdkDir) {
            throw new ProjectConfigurationException("Cannot find android sdk. Make sure sdk.dir is defined in local.properties or the environment variable ANDROID_HOME is set.", null)
        }

        ext.androidJar = "${sdkDir}/platforms/${android.compileSdkVersion}/android.jar"
        classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)
        options.links("http://docs.oracle.com/javase/7/docs/api/");
        options.links("http://d.android.com/reference/");
        exclude '**/BuildConfig.java'
        exclude '**/R.java'
    }
}