// If building from command line and you don't have the file local.properties that specifies
// sdk.dir for the Android SDK path, you can run
// $ ANDROID_HOME=/path/to/android-sdk gradle build

// Gradle >= 2.4 required
buildscript {
    ext.bintrayUser    = project.hasProperty('bintrayUser') ? project.bintrayUser : System.getenv('BINTRAY_USER')
    ext.bintrayKey     = project.hasProperty('bintrayKey')  ? project.bintrayKey  : System.getenv('BINTRAY_KEY')
    ext.bintrayEnabled = project.bintrayUser && project.bintrayKey

    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.1'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
        classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.0'
        if (bintrayEnabled) {
            classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:3.0.3'
            classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.1'
        }
    }
}

apply from: 'properties.gradle'
group = ddGroup
version = ddVersion

apply plugin: 'android-sdk-manager'
apply plugin: 'com.android.library'

tasks.withType(JavaCompile) {
    options.compilerArgs << '-Xlint:deprecation'
}

android {
    compileSdkVersion 21
    buildToolsVersion '21.1.2'

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 21
        versionCode 1
        versionName version
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
        }
    }

    lintOptions {
        // Aborting on lint errors prevents jenkins from processing the Lint output
        // https://wiki.jenkins-ci.org/display/JENKINS/Android%20Lint%20Plugin
        abortOnError false
    }
}

task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
    if (System.getProperty('java.specification.version') == '1.8') {
        // '-quiet' is not related to -Xdoclint. In fact it is default for the Javadoc task.
        // It is needed here because of a Gradle bug: addStringOption(String option) does not work.
        // addStringOption(String option, String value) adds both option and value to the generated
        // file javadoc.options, and value must be a valid javadoc command line option.
        options.addStringOption('Xdoclint:all,-missing', '-quiet')
    }
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives javadocJar
    archives sourcesJar
}

apply from: 'maven.gradle'

if (bintrayEnabled) {
    apply plugin: 'com.jfrog.bintray'
    apply from: 'jcenter.gradle'
    apply from: 'artifactory.gradle'
}
