/*
 * 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.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")
    mavenGroup = LibraryGroups.LIFECYCLE
    inceptionYear = "2017"
    description = "Android Lifecycle Extensions"
    failOnDeprecationWarnings = false
}

android {
    namespace "androidx.lifecycle.extensions"
}
