// Copyright (C) 2021 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"],
}

java_library {
    name: "netd_aidl_interface-lateststable-java",
    sdk_version: "system_current",
    min_sdk_version: "30",
    static_libs: [
        "netd_aidl_interface-V14-java",
    ],
    apex_available: [
        "//apex_available:platform", // used from services.net
        "com.android.tethering",
        "com.android.wifi",
    ],
}

cc_library_static {
    name: "netd_event_listener_interface-lateststable-ndk",
    whole_static_libs: [
        "netd_event_listener_interface-V1-ndk",
    ],
    apex_available: [
        "com.android.resolv",
    ],
    min_sdk_version: "30",
}

cc_library_static {
    name: "netd_aidl_interface-lateststable-ndk",
    whole_static_libs: [
        "netd_aidl_interface-V14-ndk",
    ],
    apex_available: [
        "com.android.resolv",
        "com.android.tethering",
    ],
    min_sdk_version: "30",
}

cc_defaults {
    name: "netd_aidl_interface_lateststable_cpp_static",
    static_libs: ["netd_aidl_interface-V14-cpp"],
}

cc_defaults {
    name: "netd_aidl_interface_lateststable_cpp_shared",
    shared_libs: ["netd_aidl_interface-V14-cpp"],
}

aidl_interface {
    name: "netd_aidl_interface",
    local_include_dir: "binder",
    srcs: [
        "binder/android/net/INetd.aidl",
        // AIDL interface that callers can implement to receive networking events from netd.
        "binder/android/net/INetdUnsolicitedEventListener.aidl",
        "binder/android/net/InterfaceConfigurationParcel.aidl",
        "binder/android/net/IpSecMigrateInfoParcel.aidl",
        "binder/android/net/MarkMaskParcel.aidl",
        "binder/android/net/NativeNetworkConfig.aidl",
        "binder/android/net/NativeNetworkType.aidl",
        "binder/android/net/NativeVpnType.aidl",
        "binder/android/net/RouteInfoParcel.aidl",
        "binder/android/net/TetherConfigParcel.aidl",
        "binder/android/net/TetherOffloadRuleParcel.aidl",
        "binder/android/net/TetherStatsParcel.aidl",
        "binder/android/net/UidRangeParcel.aidl",
        // Add new AIDL classes in android.net.netd.aidl to consist with other network modules.
        "binder/android/net/netd/aidl/**/*.aidl",
    ],
    backend: {
        cpp: {
            gen_log: true,
        },
        java: {
            // TODO: Remove apex_available and restrict visibility to only mainline modules that are
            // either outside the system server or use jarjar to rename the generated AIDL classes.
            apex_available: [
                "//apex_available:platform", // used from services.net
                "com.android.tethering",
                "com.android.wifi",
            ],
            // this is part of updatable modules(NetworkStack) which targets 30(R)
            min_sdk_version: "30",
        },
        ndk: {
            apex_available: [
                "//apex_available:platform",
                "com.android.tethering",
            ],
            // This is necessary for the DnsResovler tests to run in Android R.
            // Soong would recognize this value and produce the R compatible aidl library.
            min_sdk_version: "30",
        },
    },
    versions_with_info: [
        {
            version: "1",
            imports: [],
        },
        {
            version: "2",
            imports: [],
        },
        {
            version: "3",
            imports: [],
        },
        {
            version: "4",
            imports: [],
        },
        {
            version: "5",
            imports: [],
        },
        {
            version: "6",
            imports: [],
        },
        {
            version: "7",
            imports: [],
        },
        {
            version: "8",
            imports: [],
        },
        {
            version: "9",
            imports: [],
        },
        {
            version: "10",
            imports: [],
        },
        {
            version: "11",
            imports: [],
        },
        {
            version: "12",
            imports: [],
        },
        {
            version: "13",
            imports: [],
        },
        {
            version: "14",
            imports: [],
        },

    ],
    frozen: true,

}

java_library {
    name: "netd_event_listener_interface-lateststable-java",
    sdk_version: "system_current",
    min_sdk_version: "30",
    static_libs: [
        "netd_event_listener_interface-V1-java",
    ],
    apex_available: [
        "//apex_available:platform",
        "com.android.wifi",
        "com.android.tethering",
    ],
}

aidl_interface {
    name: "netd_event_listener_interface",
    local_include_dir: "binder",
    srcs: [
        "binder/android/net/metrics/INetdEventListener.aidl",
    ],

    backend: {
        ndk: {
            apex_available: [
                "//apex_available:platform",
                "com.android.resolv",
            ],
            min_sdk_version: "30",
        },
        java: {
            apex_available: [
                "//apex_available:platform",
                "com.android.wifi",
                "com.android.tethering",
            ],
            min_sdk_version: "30",
        },
    },
    versions_with_info: [
        {
            version: "1",
            imports: [],
        },
        {
            version: "2",
            imports: [],
        },

    ],
    frozen: true,

}

aidl_interface {
    name: "mdns_aidl_interface",
    local_include_dir: "binder",
    srcs: [
        "binder/android/net/mdns/aidl/**/*.aidl",
    ],
    backend: {
        java: {
            sdk_version: "module_current",
            apex_available: [
                "//apex_available:platform",
                "com.android.tethering",
            ],
            min_sdk_version: "30",
        },
    },
    versions_with_info: [
        {
            version: "1",
            imports: [],
        },
        {
            version: "2",
            imports: [],
        },

    ],
    frozen: true,

}
