/*
 * 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.
 */

import androidx.build.Publish

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

dependencies {
    api("androidx.annotation:annotation:1.2.0")
    api("androidx.core:core:1.6.0")
    implementation("androidx.collection:collection:1.0.0")
    api("androidx.vectordrawable:vectordrawable:1.1.0")
    api("androidx.vectordrawable:vectordrawable-animated:1.1.0")

    androidTestImplementation(libs.kotlinStdlib)
    androidTestImplementation(libs.testExtJunit)
    androidTestImplementation(libs.testCore)
    androidTestImplementation(libs.testRunner)
    androidTestImplementation(libs.testRules)
    androidTestImplementation(libs.truth)
    androidTestImplementation(libs.espressoCore, excludes.espresso)
    androidTestImplementation(libs.mockitoCore, excludes.bytebuddy) // DexMaker has it"s own MockMaker
    androidTestImplementation(libs.dexmakerMockito, excludes.bytebuddy) // DexMaker has it"s own MockMaker
    androidTestImplementation(project(":internal-testutils-runtime"), {
        exclude group: "androidx.appcompat", module: "appcompat-resources"
    })
    androidTestImplementation(libs.multidex)
}

android {
    defaultConfig {
        // This disables the builds tools automatic vector -> PNG generation
        generatedDensities = []
        multiDexEnabled = true
    }

    aaptOptions {
        additionalParameters "--no-version-vectors"
        noCompress "ttf"
    }
    namespace "androidx.appcompat.resources"
}

androidx {
    name = "AppCompat Resources"
    publish = Publish.SNAPSHOT_AND_RELEASE
    inceptionYear = "2019"
    description = "Provides backward-compatible implementations of resource-related Android SDK" +
            "functionality, including color state list theming."
    metalavaK2UastEnabled = true
}
