/*
 * 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

plugins {
    id("SupportAndroidLibraryPlugin")
}

dependencies {
    implementation project(":annotation")
    implementation project(path: ':collection')

    androidTestImplementation(TEST_EXT_JUNIT)
    androidTestImplementation(TEST_CORE)
    androidTestImplementation(TEST_RUNNER)
    androidTestImplementation(MOCKITO_CORE, libs.exclude_bytebuddy)
    androidTestImplementation(DEXMAKER_MOCKITO, libs.exclude_bytebuddy)
    androidTestAnnotationProcessor project(":remotecallback-processor")
}

android {
    buildTypes.all {
        consumerProguardFiles("proguard-rules.pro")
    }
}

supportLibrary {
    name = "Remote Callback"
    publish = true
    mavenVersion = LibraryVersions.REMOTECALLBACK
    mavenGroup = LibraryGroups.REMOTECALLBACK
    inceptionYear = "2018"
    description = "Wraps PendingIntents in a friendly and easier way to handle remote callbacks"
    failOnUncheckedWarnings = false
    failOnDeprecationWarnings = false
}
