apply plugin: 'com.android.application'
apply plugin: 'jacoco'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
        applicationId "org.isoron.uhabits"
        minSdkVersion 19
        targetSdkVersion 25

        buildConfigField "Integer", "databaseVersion", "19"
        buildConfigField "String", "databaseFilename", "\"uhabits.db\""
        buildConfigField "int", "roboSdk", (System.getenv("ROBO_SDK")?: "25")

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        testInstrumentationRunnerArgument "size", "medium"
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
        debug {
            testCoverageEnabled = true
        }
    }

    lintOptions {
        checkReleaseBuilds false
    }

    compileOptions {
        targetCompatibility 1.8
        sourceCompatibility 1.8
    }

    testOptions {
        unitTests.all {
            testLogging {
                events "passed", "skipped", "failed", "standardOut", "standardError"
                outputs.upToDateWhen { false }
                showStandardStreams = true
            }
            jacoco {
                includeNoLocationClasses = true
            }
        }
    }
}

dependencies {

    implementation project(":uhabits-core")

    implementation 'com.android.support:appcompat-v7:25.3.1'
    implementation 'com.android.support:design:25.3.1'
    implementation 'com.android.support:preference-v14:25.3.1'
    implementation 'com.android.support:support-v4:25.3.1'
    implementation 'com.getpebble:pebblekit:3.0.0'
    implementation 'com.github.paolorotolo:appintro:3.4.0'
    implementation 'com.google.auto.factory:auto-factory:1.0-beta3'
    implementation 'com.google.dagger:dagger:2.11-rc2'
    implementation 'com.jakewharton:butterknife:8.6.1-SNAPSHOT'
    implementation 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT'
    implementation 'org.apmem.tools:layouts:1.10'
    implementation 'org.jetbrains:annotations-java5:15.0'
    implementation 'com.google.code.gson:gson:2.7'
    implementation 'com.google.code.findbugs:jsr305:3.0.2'
    implementation 'com.google.guava:guava:20.0'

    testImplementation 'junit:junit:5.0-SNAPSHOT'
    testImplementation 'org.hamcrest:hamcrest-library:1.4-atlassian-1'
    testImplementation 'org.mockito:mockito-core:2.8.9'
    testImplementation 'org.json:json:20160810'
    testImplementation 'org.robolectric:robolectric:3.4-rc2'

    androidTestImplementation 'com.android.support:support-annotations:25.3.1'
    androidTestImplementation 'com.android.support.test:rules:0.5'
    androidTestImplementation 'com.android.support.test:runner:0.5'
    androidTestImplementation 'com.google.auto.factory:auto-factory:1.0-beta3'
    androidTestImplementation "com.google.dexmaker:dexmaker:1.2"
    androidTestImplementation 'com.google.dexmaker:dexmaker-mockito:1.2'
    androidTestImplementation 'org.mockito:mockito-core:1.10.19'
    androidTestImplementation 'com.google.guava:guava:20.0'

    compileOnly 'javax.annotation:jsr250-api:1.0'

    annotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT'
    annotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3'

    testAnnotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2'
    testAnnotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3'
    testAnnotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT'

    androidTestAnnotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2'
    androidTestAnnotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3'
    androidTestAnnotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT'

    implementation ('com.opencsv:opencsv:3.9') {
        exclude group: 'commons-logging', module: 'commons-logging'
    }

    implementation ('io.socket:socket.io-client:+') {
        exclude group: 'org.json', module: 'json'
    }
}

jacoco {
    toolVersion = "0.7.4.201502262128"
}

task coverageReport(type: JacocoReport, dependsOn: ['testDebugUnitTest']) {

    jacocoClasspath = configurations['androidJacocoAnt']

    reports {
        html.enabled = true
        xml.enabled = true
    }

    def excludes = [
            '**/R.class',
            '**/R$*.class',
            '**/BuildConfig.*',
            '**/Manifest*',
            '**/*Test*.*',
            '**/*$Lambda$*',
            '**/*$ViewBinder*',
            '**/*MembersInjector*',
            '**/*_Provide*',
            '**/*Module_*',
            '**/com/android/**/*',
            'android/**/*',
            '**/*Dagger*',
            '**/*_Factory*'
    ]

    def srcDir = "${project.projectDir}/src/main/java"
    def classDir = "${buildDir}/intermediates/classes/debug"
    def jvmExecData = "${buildDir}/jacoco/testDebugUnitTest.exec"
    def connectedExecData = "${buildDir}/outputs/code-coverage/connected/coverage.ec"

    sourceDirectories = files(srcDir)
    classDirectories = files(fileTree(dir: classDir, excludes: excludes))
    executionData = files(jvmExecData, connectedExecData)
}
