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

// Exposes ExoPlayer classes required for implementing the MediaParser API.
android_library {
    name: "exoplayer2-extractor",
    manifest: "tree/library/extractor/src/main/AndroidManifest.xml",
    srcs: [
        "tree/library/extractor/src/main/java/**/*.java",
        "tree/library/common/src/main/java/**/*.java",
    ],
    sdk_version: "29", // Needs to be a prebuilt, so not "current".
    static_libs: [
        "exoplayer2-extractor-annotation-stubs",
        "androidx.annotation_annotation",
        "jsr305",
    ],
    jarjar_rules: "exoplayer2-extractor-jarjar-rules.txt",
    visibility: ["//frameworks/base:__subpackages__"],
    notice: "LICENSE",
}

// Compile dummy implementations of annotations used by exoplayer but not
// present in the Android tree.
java_library {
    name: "exoplayer2-extractor-annotation-stubs",
    host_supported: true,
    sdk_version: "core_current",
    srcs: ["annotation-stubs/src/**/*.java"],
    static_libs: ["jsr305"],
    visibility: ["//visibility:private"],
}

// Exposes util classes for testing MediaParser.
android_library {
    name: "exoplayer2-extractor-test-utils",
    manifest: "tree/library/extractor/src/test/AndroidManifest.xml",
    srcs: [
        "tree/testutils/src/main/java/com/google/android/exoplayer2/testutil/Dumper.java",
        "tree/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeExtractorInput.java",
        "tree/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeExtractorOutput.java",
        "tree/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeTrackOutput.java",
        "tree/testutils/src/main/java/com/google/android/exoplayer2/testutil/TestUtil.java",
        "tree/library/core/src/main/java/com/google/android/exoplayer2/database/DatabaseProvider.java",
        "tree/library/core/src/main/java/com/google/android/exoplayer2/database/DefaultDatabaseProvider.java",
    ],
    sdk_version: "29",
    static_libs: [
        "exoplayer2-extractor",
        "exoplayer2-extractor-annotation-stubs",
        "androidx.annotation_annotation",
        "truth-prebuilt",
        "junit",
        "androidx.test.core",
    ],
    jarjar_rules: "exoplayer2-extractor-jarjar-rules.txt",
    visibility: ["//cts/tests/tests/mediaparser:__subpackages__"],
    notice: "LICENSE",
}

// Exposes the assets for testing MediaParser.
android_library {
    name: "exoplayer2-extractor-tests-assets",
    manifest: "tree/library/extractor/src/main/AndroidManifest.xml",
    srcs: [],
    sdk_version: "29",
    visibility: ["//cts/tests/tests/mediaparser:__subpackages__"],
    asset_dirs: ["tree/testdata/src/test/assets/"],
    // Do not compress media files.
    aaptflags: [
        "-0 .ac3",
        "-0 .ac4",
        "-0 .adts",
        "-0 .amr",
        "-0 .eac3",
        "-0 .flac",
        "-0 .flv",
        "-0 .id3",
        "-0 .mkv",
        "-0 .mp3",
        "-0 .mp4",
        "-0 .mpg",
        "-0 .ogg",
        "-0 .opus",
        "-0 .ps",
        "-0 .rawcc",
        "-0 .ts",
        "-0 .wav",
        "-0 .webm",
    ],
}
