/*
 * Copyright (C) 2018 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 static androidx.build.dependencies.DependenciesKt.*
import androidx.build.LibraryGroups
import androidx.build.LibraryVersions
import androidx.build.AndroidXExtension

plugins {
    id("SupportAndroidLibraryPlugin")
    id("kotlin-android")
}

android {
    lintOptions {
        fatal("UnknownNullness")
    }

    buildTypes.all {
        consumerProguardFiles 'proguard-rules.pro'
    }
}

dependencies {
    api(project(":navigation:navigation-runtime"))
    api(MATERIAL)

    testImplementation(JUNIT)
    testImplementation(MOCKITO_CORE)
    testImplementation(TEST_EXT_JUNIT)
    testImplementation(TEST_CORE)
    testImplementation(TEST_RUNNER)

    androidTestImplementation(project(":navigation:navigation-runtime-ktx"))
    androidTestImplementation(project(":navigation:navigation-testing"))
    androidTestImplementation(KOTLIN_STDLIB)
    androidTestImplementation(TEST_EXT_JUNIT)
    androidTestImplementation(TEST_CORE)
    androidTestImplementation(TEST_RUNNER)
    androidTestImplementation(TRUTH)
    androidTestImplementation(MOCKITO_CORE, libs.exclude_bytebuddy) // DexMaker has it"s own MockMaker
    androidTestImplementation(DEXMAKER_MOCKITO, libs.exclude_bytebuddy) // DexMaker has it"s own MockMaker
}

androidx {
    name = "Android Navigation UI"
    publish = true
    mavenVersion = LibraryVersions.NAVIGATION
    mavenGroup = LibraryGroups.NAVIGATION
    inceptionYear = "2018"
    description = "Android Navigation-UI"
    url = AndroidXExtension.ARCHITECTURE_URL
}
