plugins {
    id 'com.android.library'
    id 'com.google.protobuf'
    id 'kotlin-android'
    id 'kotlin-kapt'
    id "org.jlleitschuh.gradle.ktlint" version "10.2.0"
    id 'org.jetbrains.dokka' version '1.4.30'
}

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        testInstrumentationRunnerArguments disableAnalytics: 'true'

        consumerProguardFiles "consumer-rules.pro"
    }

    buildTypes {
        all {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
    }
    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_11.toString()
        languageVersion = "1.6"
        freeCompilerArgs += '-Xopt-in=kotlin.RequiresOptIn'
        freeCompilerArgs += '-Xexplicit-api=strict'
    }
    protobuf {
        protoc {
            artifact = "com.google.protobuf:protoc:$protobuf_version"
        }
        generateProtoTasks {
            all().each { task ->
                task.builtins {
                    java {
                        option "lite"
                    }
                }
            }
        }
    }
    lintOptions {
        disable "DialogFragmentCallbacksDetector",
                "InvalidFragmentVersionForActivityResult",
                "CheckedExceptions"
    }
}

kotlin {
    explicitApi = 'strict'
}

dependencies {
    implementation rootProject.ext.kotlin_libs.std

    implementation rootProject.ext.std_libs.androidx_core
    // A newer version gets pulled in with AOSP via core, so we include fragment here explicitly
    implementation rootProject.ext.std_libs.androidx_fragment
    implementation rootProject.ext.std_libs.androidx_activity
    implementation rootProject.ext.std_libs.androidx_lifecycle_viewmodel_ktx
    implementation rootProject.ext.std_libs.androidx_lifecycle_livedata_ktx
    implementation rootProject.ext.std_libs.androidx_constraintlayout
    implementation rootProject.ext.std_libs.androidx_documentfile
    implementation rootProject.ext.std_libs.com_google_android_material

    implementation rootProject.ext.storage_libs.androidx_room_runtime
    implementation rootProject.ext.storage_libs.com_google_protobuf_javalite
    implementation rootProject.ext.storage_libs.com_google_crypto_tink_android
    kapt('androidx.room:room-compiler') {
        version { strictly "$room_version" }
    }

    lintChecks rootProject.ext.lint_libs.exceptions

    testImplementation "junit:junit:$junit4_version"
    testImplementation "io.mockk:mockk:$mockk_version"
    testImplementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"

    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation "androidx.test.espresso:espresso-core:$espresso_version"
}

apply from: "${rootProject.rootDir}/gradle/ktlint.gradle"
