/*
 * Copyright (C) 2019 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.
 */
plugins {
    id("AndroidXPlugin")
    id("com.android.application")
    id("kotlin-android")
    id("AndroidXComposePlugin")
}

android {
    defaultConfig {
        applicationId "androidx.camera.integration.view"
    }

    sourceSets {
        main.manifest.srcFile "src/main/AndroidManifest.xml"
        main.java.srcDirs = ["src/main/java"]
        main.java.excludes = ["**/build/**"]
        main.java.includes = ["**/*.java"]
        main.res.srcDirs = ["src/main/res"]
    }

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),
                    "proguard-rules.pro")
        }
    }

    namespace "androidx.camera.integration.view"
}

dependencies {
    // Internal library
    implementation(project(":camera:camera-camera2"))
    implementation(project(":camera:camera-camera2-pipe-integration"))
    implementation(project(":camera:camera-lifecycle"))
    implementation(project(":camera:camera-mlkit-vision"))
    implementation("androidx.lifecycle:lifecycle-runtime:2.3.1")
    implementation(project(":camera:camera-view"))
    implementation(project(":camera:camera-video"))
    implementation(project(":camera:camera-effects"))
    implementation(libs.guavaAndroid)
    implementation('com.google.mlkit:barcode-scanning:17.0.2')
    implementation("androidx.exifinterface:exifinterface:1.3.2")
    implementation(libs.mlkitBarcode)
    // old version of common-java8 conflicts with newer version, because both have
    // DefaultLifecycleEventObserver.
    // Outside of androidx this is resolved via constraint added to lifecycle-common,
    // but it doesn't work in androidx.
    implementation("androidx.lifecycle:lifecycle-common-java8:2.5.1")
    api(libs.constraintLayout)

    // Lifecycle and LiveData
    implementation("androidx.lifecycle:lifecycle-livedata:2.2.0")

    // Android Support Library
    implementation("androidx.appcompat:appcompat:1.3.0")

    // Compose UI
    implementation("androidx.compose.runtime:runtime:1.4.0")
    implementation("androidx.compose.material:material:1.4.0")
    implementation("androidx.compose.ui:ui:1.4.0")
    implementation("androidx.compose.foundation:foundation:1.4.0")

    // Align dependencies in debugRuntimeClasspath and debugAndroidTestRuntimeClasspath.
    androidTestImplementation("androidx.annotation:annotation-experimental:1.4.0")

    // Testing framework
    androidTestImplementation(libs.testExtJunit)
    androidTestImplementation(libs.testCore)
    androidTestImplementation(libs.testRunner)
    androidTestImplementation(libs.testRules)
    androidTestImplementation(libs.testUiautomator)
    androidTestImplementation("androidx.test.espresso:espresso-core:3.3.0")
    androidTestImplementation("androidx.lifecycle:lifecycle-runtime-testing:2.3.1")
    androidTestImplementation("androidx.lifecycle:lifecycle-runtime:2.3.1")
    androidTestImplementation("androidx.lifecycle:lifecycle-livedata-ktx:2.2.0")
    androidTestImplementation(project(":concurrent:concurrent-futures"))
    androidTestImplementation(project(":concurrent:concurrent-futures-ktx"))
    androidTestImplementation(libs.truth)
    debugImplementation(libs.testCore)
    debugImplementation("androidx.fragment:fragment-testing:1.2.3")
    // camera-testing added as 'implementation' dependency to include camera-testing activity in APK
    implementation(project(":camera:camera-testing")) {
        // Ensure camera-testing does not pull in androidx.test dependencies
        exclude(group:"androidx.test")
    }
}
