//
// Copyright (C) 2020 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 {
    // See: http://go/android-license-faq
    default_applicable_licenses: ["Android-Apache-2.0"],
}

filegroup {
    name: "framework-connectivity-internal-sources",
    srcs: [
        "src/**/*.java",
        "src/**/*.aidl",
    ],
    path: "src",
    visibility: [
        "//visibility:private",
    ],
}

filegroup {
    name: "framework-connectivity-aidl-export-sources",
    srcs: [
        "aidl-export/**/*.aidl",
    ],
    path: "aidl-export",
    visibility: [
        "//visibility:private",
    ],
}

// TODO: use a java_library in the bootclasspath instead
filegroup {
    name: "framework-connectivity-sources",
    srcs: [
        ":framework-connectivity-internal-sources",
        ":framework-connectivity-aidl-export-sources",
    ],
    visibility: [
        "//frameworks/base",
        "//packages/modules/Connectivity:__subpackages__",
    ],
}

java_sdk_library {
    name: "framework-connectivity",
    sdk_version: "module_current",
    min_sdk_version: "30",
    defaults: ["framework-module-defaults"],
    installable: true,
    srcs: [
        ":framework-connectivity-sources",
        ":net-utils-framework-common-srcs",
    ],
    aidl: {
        generate_get_transaction_name: true,
        include_dirs: [
            // Include directories for parcelables that are part of the stable API, and need a
            // one-line "parcelable X" .aidl declaration to be used in AIDL interfaces.
            // TODO(b/180293679): remove these dependencies as they should not be necessary once
            // the module builds against API (the parcelable declarations exist in framework.aidl)
            "frameworks/base/core/java", // For framework parcelables
            "frameworks/native/aidl/binder", // For PersistableBundle.aidl
        ],
    },
    impl_only_libs: [
        "framework-tethering.stubs.module_lib",
        "framework-wifi.stubs.module_lib",
        "net-utils-device-common",
    ],
    static_libs: [
        "modules-utils-build",
    ],
    libs: [
        "unsupportedappusage",
    ],
    jarjar_rules: "jarjar-rules.txt",
    permitted_packages: ["android.net"],
    impl_library_visibility: [
        "//packages/modules/Connectivity/Tethering/apex",
        // In preparation for future move
        "//packages/modules/Connectivity/apex",
        "//packages/modules/Connectivity/service",
        "//packages/modules/Connectivity/service-t",
        "//frameworks/base/packages/Connectivity/service",
        "//frameworks/base",

        // Tests using hidden APIs
        "//cts/tests/netlegacy22.api",
        "//external/sl4a:__subpackages__",
        "//frameworks/base/packages/Connectivity/tests:__subpackages__",
        "//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/NetworkStack/tests:__subpackages__",
        "//packages/modules/Wifi/service/tests/wifitests",
    ],
    apex_available: [
        "com.android.tethering",
    ],
    lint: { strict_updatability_linting: true },
}

cc_library_shared {
    name: "libframework-connectivity-jni",
    min_sdk_version: "30",
    cflags: [
        "-Wall",
        "-Werror",
        "-Wno-unused-parameter",
        // Don't warn about S API usage even with
        // min_sdk 30: the library is only loaded
        // on S+ devices
        "-Wno-unguarded-availability",
        "-Wthread-safety",
    ],
    srcs: [
        "jni/android_net_NetworkUtils.cpp",
        "jni/onload.cpp",
    ],
    shared_libs: [
        "libandroid",
        "liblog",
        "libnativehelper",
    ],
    header_libs: [
        "dnsproxyd_protocol_headers",
    ],
    stl: "none",
    apex_available: [
        "com.android.tethering",
    ],
}
