// Copyright (C) 2019 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.

java_import {
    name: "tv-auto-common-jar",
    jars: ["m2/auto-common-0.10.jar"],
    host_supported: true,
    sdk_version: "current",
}

java_import {
    name: "tv-auto-factory-jar",
    jars: ["m2/auto-factory-1.0-beta6.jar"],
    host_supported: true,
    sdk_version: "current",
}

java_plugin {
    name: "tv-auto-factory",
    static_libs: [
        "jsr330",
        "tv-auto-common-jar",
        "tv-auto-factory-jar",
        "tv-auto-value-jar",
        "tv-google-java-format-jar",
        "tv-guava-jre-jar",
        "tv-javapoet-jar",
        "tv-javax-annotations-jar",
    ],
    processor_class: "com.google.auto.factory.processor.AutoFactoryProcessor",
    generates_api: true,
}

java_import {
    name: "tv-auto-value-jar",
    jars: ["m2/auto-value-1.5.3.jar"],
    host_supported: true,
    sdk_version: "current",
}

java_plugin {
    name: "tv-auto-value",
    static_libs: [
        "tv-auto-value-jar",
        "tv-guava-jre-jar",
    ],
    processor_class: "com.google.auto.value.processor.AutoValueProcessor",
}

java_import {
    name: "tv-error-prone-annotations-jar",
    jars: ["m2/error_prone_annotations-2.3.2.jar"],
    sdk_version: "current",
}

java_import {
    name: "tv-google-java-format-jar",
    jars: ["google-java-format-1.7-all-deps.jar"],
    host_supported: true,
    sdk_version: "current",
}

java_import {
    name: "tv-guava-android-jar",
    jars: ["m2/guava-28.0-android.jar"],
    sdk_version: "current",
}

java_import {
    name: "tv-guava-jre-jar",
    jars: ["m2/guava-28.0-jre.jar"],
    host_supported: true,
    sdk_version: "current",
}

java_import {
    name: "tv-guava-failureaccess-jar",
    jars: ["m2/failureaccess-1.0.1.jar"],
    host_supported: true,
    sdk_version: "current",
}

java_import_host {
    name: "tv-javapoet-jar",
    jars: ["m2/javapoet-1.11.1.jar"],
}

java_import {
    name: "tv-javax-annotations-jar",
    jars: ["javax.annotation-api-1.2.jar"],
    host_supported: true,
    sdk_version: "current",
}

android_library_import {
    name: "tv-lib-exoplayer",
    aars: ["exoplayer-r1.5.16.aar"],
    sdk_version: "current",
}

android_library_import {
    name: "tv-lib-exoplayer-v2-core",
    aars: ["exoplayer-core-2.10.1.aar"],
    sdk_version: "current",
}

android_library_import {
    name: "tv-lib-exoplayer-v2-ui",
    aars: ["exoplayer-ui-2.10.1.aar"],
    sdk_version: "current",
}

java_import_host {
    name: "tv-lib-dagger-compiler-import",
    jars: [
        "m2/dagger-compiler-2.23.jar",
        "m2/dagger-producers-2.23.jar",
        "m2/dagger-spi-2.23.jar",
    ],
}

java_import {
    name: "tv-lib-dagger",
    jars: ["m2/dagger-2.23.jar"],
    host_supported: true,
    sdk_version: "current",
}

java_plugin {
    name: "tv-lib-dagger-compiler",
    static_libs: [
        "tv-lib-dagger-compiler-import",
        "tv-guava-jre-jar",
        "tv-javapoet-jar",
        "jsr330",
        "tv-lib-dagger",
    ],
    processor_class: "dagger.internal.codegen.ComponentProcessor",
    generates_api: true,
      // shade guava to avoid conflicts with guava embedded in Error Prone.
        jarjar_rules: "m2/dagger-jarjar-rules.txt",
}

android_library_import {
    name: "tv-lib-dagger-android",
    aars: ["m2/dagger-android-2.23.aar"],
    sdk_version: "current",
}

java_import_host {
    name: "tv-lib-dagger-android-processor-import",
    jars: [
        "m2/dagger-android-jarimpl-2.23.jar",
        "m2/dagger-android-processor-2.23.jar",
        "m2/dagger-spi-2.23.jar",
        "m2/protobuf-java-3.7.0.jar",
    ],
}

java_plugin {
    name: "tv-lib-dagger-android-processor",
    static_libs: [
        "tv-lib-dagger-android-processor-import",
        "tv-guava-jre-jar",
        "tv-guava-failureaccess-jar",
        "tv-javapoet-jar",
        "tv-google-java-format-jar",
        "jsr330",
        "tv-lib-dagger",
    ],
    processor_class: "dagger.android.processor.AndroidProcessor",
    generates_api: true,
          // shade guava to avoid conflicts with guava embedded in Error Prone.
            jarjar_rules: "m2/dagger-jarjar-rules.txt",
}

java_import {
    name: "tv-lib-truth",
    jars: ["truth-0.45.jar"],
    host_supported: true,
    sdk_version: "current",
}
