/**
 * This file was created using the `create_project.py` script located in the
 * `<AndroidX root>/development/project-creator` directory.
 *
 * Please use that script when creating a new project, rather than copying an existing project and
 * modifying its settings.
 */
import androidx.build.Publish

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

dependencies {
    // Atomically versioned.
    constraints {
        implementation(project(":core:core-ktx"))
        implementation(project(":core:core-testing"))
    }

    api("androidx.annotation:annotation:1.8.0")
    api("androidx.annotation:annotation-experimental:1.4.0")
    api("androidx.lifecycle:lifecycle-runtime:2.6.2")
    api("androidx.versionedparcelable:versionedparcelable:1.1.1")
    implementation("androidx.collection:collection:1.0.0")
    implementation("androidx.concurrent:concurrent-futures:1.0.0")
    implementation("androidx.interpolator:interpolator:1.0.0")

    api(libs.kotlinStdlib)

    // We don't ship this as a public artifact, so it must remain a project-type dependency.
    annotationProcessor(projectOrArtifact(":versionedparcelable:versionedparcelable-compiler"))

    androidTestImplementation(libs.junit)
    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.multidex)
    androidTestImplementation(libs.testUiautomator)

    androidTestImplementation("androidx.lifecycle:lifecycle-runtime-testing:2.6.2")

    // Including both dexmakers allows support for all API levels plus final mocking support on
    // API 28+. The implementation is swapped based on the finality of the mock type. This
    // delegation is handled manually inside androidx.core.util.mockito.CustomMockMaker.
    androidTestImplementation(libs.dexmakerMockito, excludes.bytebuddy) // DexMaker has it"s own MockMaker
    androidTestImplementation(libs.dexmakerMockitoInline, excludes.bytebuddy) // DexMaker has it"s own MockMaker
    androidTestImplementation("androidx.appcompat:appcompat:1.1.0") {
        exclude group: "androidx.core", module: "core"
    }
    androidTestImplementation(project(":internal-testutils-runtime"), {
        exclude group: "androidx.core", module: "core"
    })
    androidTestImplementation(project(":internal-testutils-fonts"))
    androidTestImplementation(project(":internal-testutils-mockito"))

    testImplementation(libs.junit)
    testImplementation(libs.testExtJunit)
    testImplementation(libs.testCore)
    testImplementation(libs.testRunner)
    testImplementation(libs.truth)
    testImplementation(libs.robolectric)
}

android {
    buildFeatures {
        aidl = true
    }
    testOptions.unitTests.includeAndroidResources = true
    aaptOptions {
        noCompress "ttf"
    }
    buildTypes.all {
        consumerProguardFiles "proguard-rules.pro"

        stableAidl {
            version 1
        }
    }

    packagingOptions {
        // Drop the file from external dependencies, preferring the local file inside androidTest
        pickFirsts = [
                "mockito-extensions/org.mockito.plugins.MockMaker",
                "mockito-extensions/org.mockito.plugins.StackTraceCleanerProvider"
        ]
    }
    defaultConfig {
        multiDexEnabled = true
    }
    namespace "androidx.core"
}

androidx {
    name = "Core"
    publish = Publish.SNAPSHOT_AND_RELEASE
    mavenVersion = LibraryVersions.CORE
    inceptionYear = "2015"
    description = "Provides backward-compatible implementations of Android platform APIs and " +
            "features."
    failOnDeprecationWarnings = false
    metalavaK2UastEnabled = true
}
