apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'jacoco'
apply from: "../gradle_scripts/code_quality.gradle"

android {
    compileSdkVersion versions.compileSdk

    defaultConfig {
        applicationId "org.moire.ultrasonic"
        versionCode 76
        versionName "2.11.0"

        minSdkVersion versions.minSdk
        targetSdkVersion versions.targetSdk

        resConfigs "de", "en", "es", "fr", "hu", "nl", "pl", "pt", "pt-rBR"
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'minify/proguard-main.pro',
                    'minify/proguard-okhttp.pro',
                    'minify/proguard-retrofit.pro',
                    'minify/proguard-jackson.pro',
                    'minify/proguard-kotlin-reflect.pro',
                    'minify/proguard-kotlin.pro'
        }
        debug {
            minifyEnabled false
            multiDexEnabled true
            testCoverageEnabled true
            applicationIdSuffix ".debug"
        }
    }
    sourceSets {
        main.java.srcDirs += "${projectDir}/src/main/kotlin"
        test.java.srcDirs += "${projectDir}/src/test/kotlin"
    }

    packagingOptions {
        exclude 'META-INF/LICENSE'
    }

    lintOptions {
        baselineFile file("lint-baseline.xml")
        abortOnError true
    }
}

tasks.withType(Test) {
    useJUnitPlatform()
}

dependencies {
    implementation project(':core:menudrawer')
    implementation project(':core:pulltorefresh')
    implementation project(':core:library')
    implementation project(':core:domain')
    implementation project(':core:subsonic-api')
    implementation project(':core:subsonic-api-image-loader')
    implementation project(':core:cache')

    implementation androidSupport.support
    implementation androidSupport.design
    implementation androidSupport.multidex

    implementation other.kotlinStdlib
    implementation other.koinAndroid
    implementation other.koinJava

    testImplementation other.kotlinReflect
    testImplementation testing.junit
    testRuntimeOnly testing.junitVintage
    testImplementation testing.kotlinJunit
    testImplementation testing.mockitoKotlin
    testImplementation testing.kluent
    implementation other.dexter
}

jacoco {
    toolVersion(versions.jacoco)
}

// Excluding all java classes and stuff that should not be covered
ext {
    jacocoExclude = [
            '**/activity/**',
            '**/audiofx/**',
            '**/fragment/**',
            '**/provider/**',
            '**/receiver/**',
            '**/service/**',
            '**/Test/**',
            '**/util/**',
            '**/view/**',
            '**/R$*.class',
            '**/R.class',
            '**/BuildConfig.class',
            '**/di/**',
            'jdk.internal.*'
    ]
}

jacoco {
    toolVersion(versions.jacoco)
}

tasks.withType(Test) {
    jacoco.includeNoLocationClasses = true
    jacoco.excludes += jacocoExclude
}
