/*
 * Copyright (C) 2016 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
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

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

dependencies {
    api(project(":navigation:navigation-common"))
    api(projectOrArtifact(":activity:activity-ktx"))
    api(projectOrArtifact(":lifecycle:lifecycle-runtime-ktx"))
    api(projectOrArtifact(":lifecycle:lifecycle-viewmodel-ktx"))
    api("androidx.annotation:annotation-experimental:1.1.0")
    implementation('androidx.collection:collection:1.0.0')

    api(libs.kotlinStdlib)
    androidTestImplementation(projectOrArtifact(":lifecycle:lifecycle-runtime-testing"))
    androidTestImplementation(project(":internal-testutils-navigation"))
    androidTestImplementation(project(":internal-testutils-runtime"))
    androidTestImplementation(libs.testExtJunit)
    androidTestImplementation(libs.testExtTruth)
    androidTestImplementation(libs.testCore)
    androidTestImplementation(libs.testRunner)
    androidTestImplementation(libs.testRules)
    androidTestImplementation(libs.espressoCore)
    androidTestImplementation(libs.espressoIntents)
    androidTestImplementation(libs.truth)
    androidTestImplementation(libs.mockitoCore, excludes.bytebuddy)
    androidTestImplementation(libs.dexmakerMockito, excludes.bytebuddy)
    androidTestImplementation(libs.kotlinStdlib)
    androidTestImplementation(libs.multidex)
}

android {
    defaultConfig {
        multiDexEnabled = true
    }
    namespace "androidx.navigation"
}

androidx {
    name = "Android Navigation Runtime"
    publish = Publish.SNAPSHOT_AND_RELEASE
    mavenGroup = LibraryGroups.NAVIGATION
    inceptionYear = "2017"
    description = "Android Navigation-Runtime"
}

tasks.withType(KotlinCompile).configureEach {
    kotlinOptions {
        // Allow usage of Kotlin's @OptIn.
        freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn"]
        // needed only while https://youtrack.jetbrains.com/issue/KT-47000 isn't resolved which is
        // targeted to 1.6
        freeCompilerArgs += ["-Xjvm-default=enable"]
    }
}