/*
 * Copyright (C) 2024 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.LibraryType

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

dependencies {
    api(libs.rxjava2)
    api(libs.guavaAndroid)
    api("com.google.android.material:material:1.6.0")

    implementation(libs.kotlinStdlib)
    implementation("androidx.exifinterface:exifinterface:1.3.2")

    testImplementation(libs.junit)
    testImplementation(libs.testCore)
    testImplementation(libs.testRunner)
    testImplementation(libs.junit)
    testImplementation(libs.mockitoCore4)
    testImplementation(libs.robolectric)
    testImplementation(libs.truth)
    testImplementation(libs.guavaTestlib)
    testImplementation(libs.testExtTruth)

    androidTestImplementation(libs.testExtJunit)
    androidTestImplementation(libs.junit)
    androidTestImplementation(libs.testCore)
    androidTestImplementation(libs.testRules)
    androidTestImplementation(libs.testRunner)
    androidTestImplementation(libs.junit)
    androidTestImplementation(libs.mockitoCore, excludes.bytebuddy) // DexMaker has it"s own MockMaker
    androidTestImplementation(libs.dexmakerMockito, excludes.bytebuddy) // DexMaker has it"s own MockMaker
    androidTestImplementation(libs.truth)
    androidTestImplementation(libs.espressoCore)
}

android {
    namespace "androidx.pdf"

    defaultConfig {
        minSdkVersion 30
    }

    buildFeatures {
        aidl = true
    }

    buildTypes.configureEach {
        stableAidl {
            version 1
        }
    }

    externalNativeBuild {
        cmake {
            path file('src/main/native/CMakeLists.txt')
            version libs.versions.cmake.get()
        }
    }
    sourceSets {
        test {
            assets {
                srcDirs += ["src/test/assets"]
            }
            resources {
                srcDirs += ["src/test/res"]
            }
        }
    }
}

androidx {
    name = "androidx.pdf:pdf-viewer"
    type = LibraryType.PUBLISHED_LIBRARY
    inceptionYear = "2023"
    description = "add pdf viewing to their apps."
}
