/*
 * Copyright 2021 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.
 */

/**
 * 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("AndroidXComposePlugin")
    id("org.jetbrains.kotlin.android")
}

dependencies {
    api("androidx.compose.ui:ui:1.7.0-beta02")
    api("androidx.compose.runtime:runtime:1.6.0")
    api("androidx.navigation:navigation-runtime:2.6.0")
    api(project(":wear:compose:compose-material"))
    api("androidx.activity:activity-compose:1.7.0")
    api("androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0")

    implementation(libs.kotlinStdlib)
    implementation("androidx.navigation:navigation-common:2.6.0")
    implementation("androidx.navigation:navigation-compose:2.6.0")
    implementation("androidx.profileinstaller:profileinstaller:1.3.1")

    androidTestImplementation(project(":compose:test-utils"))
    androidTestImplementation(project(":compose:ui:ui-test-junit4"))
    androidTestImplementation(project(":navigation:navigation-common"))
    androidTestImplementation(libs.testRunner)
    androidTestImplementation(project(":wear:compose:compose-material"))
    androidTestImplementation(project(":wear:compose:compose-navigation-samples"))
    androidTestImplementation(libs.truth)
    androidTestImplementation("androidx.lifecycle:lifecycle-runtime-testing:2.7.0")
    androidTestImplementation("androidx.navigation:navigation-testing:2.6.0")
}

android {
    defaultConfig {
        minSdkVersion 25
    }
    // Use Robolectric 4.+
    testOptions.unitTests.includeAndroidResources = true
    buildTypes.configureEach {
        consumerProguardFiles("proguard-rules.pro")
    }
    namespace "androidx.wear.compose.navigation"
}

androidx {
    name = "Android Wear Compose Navigation"
    type = LibraryType.PUBLISHED_LIBRARY_ONLY_USED_BY_KOTLIN_CONSUMERS
    inceptionYear = "2021"
    description = "WearOS Compose Navigation Library. This library makes it easier for developers" +
            "to write Jetpack Compose applications for Wearable devices by providing " +
            "functionality to support navigation. " +
            "It builds upon the Jetpack Compose libraries."
    metalavaK2UastEnabled = true
    legacyDisableKotlinStrictApiMode = true
    samples(project(":wear:compose:compose-navigation-samples"))
}
