/*
 * Copyright (C) 2017 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.LibraryGroups
import androidx.build.LibraryVersions
import androidx.build.Publish
import androidx.build.RunApiTasks

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

dependencies {
    api("androidx.lifecycle:lifecycle-runtime:2.2.0")
    api("androidx.arch.core:core-common:2.1.0")
    api("androidx.arch.core:core-runtime:2.1.0")
    api("androidx.fragment:fragment:1.2.0")
    api("androidx.lifecycle:lifecycle-common:2.2.0")
    api("androidx.lifecycle:lifecycle-livedata:2.2.0")
    api("androidx.lifecycle:lifecycle-process:2.2.0")
    api("androidx.lifecycle:lifecycle-service:2.2.0")
    api("androidx.lifecycle:lifecycle-viewmodel:2.2.0")

    testImplementation("androidx.arch.core:core-testing:2.1.0")
    testImplementation(libs.junit)
    testImplementation(libs.mockitoCore)

    androidTestImplementation(libs.kotlinStdlib)
    androidTestImplementation(libs.truth)
    androidTestImplementation(libs.testExtJunit)
    androidTestImplementation(libs.testCore)
    androidTestImplementation(libs.testRunner)
    androidTestImplementation(libs.testRules)
    androidTestImplementation(libs.espressoCore)
    androidTestImplementation("androidx.appcompat:appcompat:1.1.0")
    androidTestImplementation(project(":internal-testutils-runtime"))
}

androidx {
    name = "Android Lifecycle Extensions"
    publish = Publish.NONE
    runApiTasks = new RunApiTasks.Yes("Need to track API surface before moving to publish")
    mavenVersion = LibraryVersions.LIFECYCLE_EXTENSIONS
    mavenGroup = LibraryGroups.LIFECYCLE
    inceptionYear = "2017"
    description = "Android Lifecycle Extensions"
    failOnDeprecationWarnings = false
}
