apply plugin: 'com.android.library'
apply plugin: 'com.google.protobuf'
apply plugin: 'kotlin-android'

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.13'
    }
}

android {
    compileSdkVersion 30
    aidlPackageWhiteList "com/google/android/connecteddevice/api/IDeviceAssociationCallback.aidl"

    defaultConfig {
        minSdkVersion 29
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [
                        "room.schemaLocation"  : "$projectDir/tests/unit/schemas".toString(),
                ]
            }
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    buildFeatures {
        aidl = true
    }

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

        test {
            java.srcDirs = ['tests/unit/src']
            assets.srcDirs += ['tests/unit/schemas']
        }
    }

    lintOptions {
        abortOnError false
    }

    testOptions {
        unitTests.includeAndroidResources = true
    }
}

dependencies {
    def auto_factory_version = "1.0-beta8"
    def auto_value_version = "1.7.4"
    def dagger_version="2.33"
    def room_version = "2.2.5"

    implementation "androidx.room:room-runtime:$room_version"
    implementation 'androidx.core:core:1.5.0-alpha01'
    implementation "androidx.core:core-ktx:1.3.2"
    implementation 'androidx.lifecycle:lifecycle-common-java8:2.2.0'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.0"
    implementation "com.google.auto.factory:auto-factory:$auto_factory_version"
    implementation "com.google.auto.value:auto-value-annotations:$auto_value_version"
    implementation 'com.google.code.gson:gson:2.8.6'
    implementation "com.google.dagger:dagger:$dagger_version"
    implementation 'com.google.guava:guava:30.0-android'
    implementation 'com.google.protobuf:protobuf-java:3.10.0'
    implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.12'
    implementation 'junit:junit:4.13.1'
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation files('../../../../../../prebuilts/sdk/30/system/android.car-system-stubs.jar')
    implementation project(path: ':libs:companionprotos')
    implementation project(path: ':libs:encryptionrunner')

    annotationProcessor "androidx.room:room-compiler:$room_version"
    annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
    annotationProcessor "com.google.auto.factory:auto-factory:$auto_factory_version"
    annotationProcessor "com.google.auto.value:auto-value:$auto_value_version"

    testImplementation "androidx.room:room-testing:$room_version"
    testImplementation 'androidx.arch.core:core-testing:2.1.0'
    testImplementation 'androidx.test.ext:junit:1.1.2'
    testImplementation 'androidx.test:core:1.3.0'
    testImplementation 'androidx.test:rules:1.3.0'
    testImplementation 'com.android.support.test:runner:1.0.2'
    testImplementation 'com.android.support:support-annotations:28.0.0'
    testImplementation 'com.google.dexmaker:dexmaker:1.2'
    testImplementation 'com.google.truth:truth:0.41'
    testImplementation 'com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0'
    testImplementation 'org.mockito:mockito-core:3.6.0'
    testImplementation 'org.robolectric:robolectric:4.5.1'
}

protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.10.0'
    }
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                java {
                    option "lite"
                }
            }
        }
    }
}
