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

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

android {
    namespace "androidx.activity"
}

dependencies {

    api("androidx.annotation:annotation:1.1.0")
    implementation("androidx.collection:collection:1.0.0")
    api("androidx.core:core:1.13.0")
    api("androidx.lifecycle:lifecycle-runtime:2.6.1")
    api("androidx.lifecycle:lifecycle-viewmodel:2.6.1")
    api("androidx.savedstate:savedstate:1.2.1")
    api("androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1")
    implementation("androidx.profileinstaller:profileinstaller:1.3.1")
    implementation("androidx.tracing:tracing:1.0.0")
    api(libs.kotlinStdlib)

    androidTestImplementation("androidx.lifecycle:lifecycle-runtime-testing:2.6.1")
    androidTestImplementation("androidx.lifecycle:lifecycle-viewmodel:2.6.1")
    androidTestImplementation(libs.kotlinStdlib)
    androidTestImplementation(libs.espressoCore, excludes.espresso)
    androidTestImplementation(libs.leakcanary)
    androidTestImplementation(libs.leakcanaryInstrumentation)
    androidTestImplementation(libs.testExtJunit)
    androidTestImplementation(libs.testCore)
    androidTestImplementation(libs.testRunner)
    androidTestImplementation(libs.testRules)
    androidTestImplementation(libs.truth)
    androidTestImplementation(project(":internal-testutils-runtime"), {
        exclude group: "androidx.activity", module: "activity"
    })

    lintPublish(project(":activity:activity-lint"))

    baselineProfile(project(":activity:integration-tests:baselineprofile"))
}

androidx {
    name = "Activity"
    type = LibraryType.PUBLISHED_LIBRARY
    inceptionYear = "2018"
    description = "Provides the base Activity subclass and the relevant hooks to build a composable structure on top."
    metalavaK2UastEnabled = true
    legacyDisableKotlinStrictApiMode = true
}

baselineProfile {
    // This filter selects everything in androidx.activity, excluding the integration test code.
    filter {
        include "androidx.activity.**"
        exclude "androidx.activity.integration.**"
    }
}
