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

android {
    compileSdkVersion versions.compileSdk

    defaultConfig {
        applicationId "org.moire.ultrasonic"
        versionCode 92
        versionName "2.20.0"

        minSdkVersion versions.minSdk
        targetSdkVersion versions.targetSdk

        resConfigs "cs", "de", "en", "es", "fr", "hu", "it", "nl", "pl", "pt", "pt-rBR", "ru", "zh-rCN", "zh-rTW"
    }

    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")
        warning 'MissingTranslation'
        warning 'ImpliedQuantity'
        abortOnError true
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

tasks.withType(Test) {
    useJUnitPlatform()
}

dependencies {
    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.core
    implementation androidSupport.support
    implementation androidSupport.design
    implementation androidSupport.multidex
    implementation androidSupport.roomRuntime
    implementation androidSupport.roomKtx
    implementation androidSupport.viewModelKtx
    implementation androidSupport.constraintLayout
    implementation androidSupport.preferences
    implementation androidSupport.media

    implementation androidSupport.navigationFragment
    implementation androidSupport.navigationUi
    implementation androidSupport.navigationFragmentKtx
    implementation androidSupport.navigationUiKtx
    implementation androidSupport.navigationFeature

    implementation other.kotlinStdlib
    implementation other.kotlinxCoroutines
    implementation other.koinAndroid
    implementation other.koinViewModel
    implementation other.okhttpLogging
    implementation other.fastScroll

    kapt androidSupport.room

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

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
}
