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

package {
    default_applicable_licenses: ["Android-Apache-2.0"],
}

// Both cronet_java_defaults and cronet_java_prejarjar_defaults can be used to
// specify a java_defaults target that either enables or disables Cronet. This
// is used to disable Cronet on tm-mainline-prod.
// Note: they must either both be enabled or disabled.
cronet_java_defaults = "CronetJavaDefaultsEnabled"
cronet_java_prejarjar_defaults = "CronetJavaPrejarjarDefaultsEnabled"
// This is a placeholder comment to avoid merge conflicts
// as cronet_defaults may have different values
// depending on the branch

java_sdk_library {
    name: "framework-tethering",
    defaults: [
        "framework-tethering-defaults",
    ],
    impl_library_visibility: [
        "//packages/modules/Connectivity/Tethering:__subpackages__",
        "//packages/modules/Connectivity/framework",
        "//packages/modules/Connectivity/framework-t",
        "//packages/modules/Connectivity/service",
        "//packages/modules/Connectivity/service-t",

        // Using for test only
        "//cts/tests/netlegacy22.api",
        "//external/sl4a:__subpackages__",
        "//frameworks/base/core/tests/bandwidthtests",
        "//frameworks/base/core/tests/benchmarks",
        "//frameworks/base/core/tests/utillib",
        "//frameworks/base/packages/Connectivity/tests:__subpackages__",
        "//frameworks/base/tests/vcn",
        "//frameworks/libs/net/common/testutils",
        "//frameworks/libs/net/common/tests:__subpackages__",
        "//frameworks/opt/telephony/tests/telephonytests",
        "//packages/modules/CaptivePortalLogin/tests",
        "//packages/modules/Connectivity/Tethering/tests:__subpackages__",
        "//packages/modules/Connectivity/tests:__subpackages__",
        "//packages/modules/IPsec/tests/iketests",
        "//packages/modules/NetworkStack/tests:__subpackages__",
        "//packages/modules/Wifi/service/tests/wifitests",
    ],
    stub_only_libs: ["framework-connectivity.stubs.module_lib"],

    jarjar_rules: ":framework-tethering-jarjar-rules",
    installable: true,

    hostdex: true, // for hiddenapi check
    permitted_packages: ["android.net"],
    lint: { strict_updatability_linting: true },
}

java_defaults {
    name: "CronetJavaDefaults",
    defaults: [cronet_java_defaults],
}

java_defaults {
    name: "CronetJavaDefaultsEnabled",
    srcs: [":cronet_aml_api_sources"],
    libs: [
        "androidx.annotation_annotation",
    ],
    impl_only_static_libs: [
        "cronet_aml_java",
    ],
}

java_defaults {
  name: "CronetJavaDefaultsDisabled",
  api_dir: "cronet_disabled/api",
}

java_defaults {
  name: "CronetJavaPrejarjarDefaults",
  defaults: [cronet_java_prejarjar_defaults],
}

java_defaults {
  name: "CronetJavaPrejarjarDefaultsDisabled",
}

java_defaults {
  name: "CronetJavaPrejarjarDefaultsEnabled",
  static_libs: [
    "cronet_aml_api_java",
    "cronet_aml_java"
  ],
}

java_library {
  name: "framework-tethering-pre-jarjar",
  defaults: [
    "framework-tethering-defaults",
  ],
}

java_genrule {
    name: "framework-tethering-jarjar-rules",
    tool_files: [
        ":framework-tethering-pre-jarjar{.jar}",
        ":framework-tethering.stubs.module_lib{.jar}",
        "jarjar-excludes.txt",
    ],
    tools: [
        "jarjar-rules-generator",
    ],
    out: ["framework_tethering_jarjar_rules.txt"],
    cmd: "$(location jarjar-rules-generator) " +
        "$(location :framework-tethering-pre-jarjar{.jar}) " +
        "--apistubs $(location :framework-tethering.stubs.module_lib{.jar}) " +
        "--prefix android.net.http.internal " +
        "--excludes $(location jarjar-excludes.txt) " +
        "--output $(out)",
}

java_defaults {
    name: "framework-tethering-defaults",
    defaults: ["framework-module-defaults"],
    srcs: [
      ":framework-tethering-srcs"
    ],
    libs: ["framework-connectivity.stubs.module_lib"],
    aidl: {
        include_dirs: [
            "packages/modules/Connectivity/framework/aidl-export",
        ],
    },
    apex_available: ["com.android.tethering"],
    min_sdk_version: "30",
}

filegroup {
    name: "framework-tethering-srcs",
    defaults: ["framework-sources-module-defaults"],
    srcs: [
        "src/**/*.aidl",
        "src/**/*.java",
    ],
    path: "src"
}
