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

plugins {
    id("SupportAndroidLibraryPlugin")
}

dependencies {
    api(project(":recyclerview"))
    api(project(":annotation"))
    api(project(":core"))

    androidTestImplementation(TEST_RUNNER_TMP, libs.exclude_for_espresso)
    androidTestImplementation(ESPRESSO_CORE_TMP, libs.exclude_for_espresso)
    androidTestImplementation(MOCKITO_CORE, libs.exclude_bytebuddy) // DexMaker has it's own MockMaker
    androidTestImplementation(DEXMAKER_MOCKITO, libs.exclude_bytebuddy) // DexMaker has it's own MockMaker
    androidTestImplementation(JUNIT)
}

supportLibrary {
    name = "Android RecyclerView Selection"
    publish = true
    mavenVersion = LibraryVersions.SUPPORT_LIBRARY
    mavenGroup = LibraryGroups.RECYCLERVIEW
    inceptionYear = "2017"
    description = "Library providing item selection framework for RecyclerView. Support for touch based and band selection is provided."
    failOnUncheckedWarnings = false
    failOnDeprecationWarnings = false
}
