/*
 * Copyright 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


import androidx.build.Publish
import androidx.build.RunApiTasks
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("AndroidXPlugin")
    id("com.android.library")
    id("kotlin-android")
    id("kotlin-kapt")
}

apply from: "dependencies.gradle"

dependencies {
    // NOTE: API and IMPLEMENTATION dependencies are defined in dependencies.gradle to export for
    // other modules depending on the jarjar variant of CameraPipe. All dependencies should be
    // added there rather than directly here.
    api(CAMERA_PIPE_DEPS.API)
    implementation(CAMERA_PIPE_DEPS.IMPLEMENTATION)

    kapt(libs.daggerCompiler)

    testImplementation(libs.testCore)
    testImplementation(libs.testRunner)
    testImplementation(libs.junit)
    testImplementation(libs.truth)
    testImplementation(libs.robolectric)
    testImplementation(libs.kotlinCoroutinesTest)
    testImplementation(libs.mockitoCore4)
    testImplementation(libs.mockitoKotlin4)
    testImplementation(project(":camera:camera-camera2-pipe-testing"))
    testImplementation(project(":internal-testutils-truth"))

    kaptTest(libs.daggerCompiler)

    androidTestImplementation(libs.testExtJunit)
    androidTestImplementation(libs.testRunner)
    androidTestImplementation(libs.truth)
}

android {
    lintOptions {
        enable 'CameraXQuirksClassDetector'
    }
    // Use Robolectric 4.+
    testOptions.unitTests.includeAndroidResources = true
    namespace "androidx.camera.camera2.pipe"
}

kapt {
    javacOptions {
        option("-Adagger.fastInit=enabled")
        option("-Adagger.fullBindingGraphValidation=ERROR")
    }
}

androidx {
    name = "Jetpack Camera Pipe"
    publish = Publish.SNAPSHOT_AND_RELEASE
    mavenVersion = LibraryVersions.CAMERA_PIPE
    runApiTasks = new RunApiTasks.No("CameraPipe is an implementation detail of other libraries.")
    inceptionYear = "2020"
    description = "A set of opinionated camera interfaces and implementations on top of Camera2 " +
            "that will form a flexible shim layer to power Frameserver and CameraX."
}
