/*
 * 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.LibraryGroups
import androidx.build.LibraryVersions
import androidx.build.Publish

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

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

    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"
    })
}

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

    aaptOptions {
        additionalParameters "--no-version-vectors"
        noCompress "ttf"
    }
}

androidx {
    name = "Android Resources Library"
    publish = Publish.SNAPSHOT_AND_RELEASE
    mavenVersion = LibraryVersions.APPCOMPAT
    mavenGroup = LibraryGroups.APPCOMPAT
    inceptionYear = "2019"
    description = "The Resources Library is a static library that you can add to your Android application in order to use resource APIs that backport the latest APIs to older versions of the platform. Compatible on devices running API 14 or later."
}
