//
// 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"],
}

// Defaults to enable/disable java targets which uses development APIs. "enabled" may have a
// different value depending on the branch.
java_defaults {
    name: "ConnectivityNextEnableDefaults",
    enabled: true,
}
apex_defaults {
    name: "ConnectivityApexDefaults",
    // Tethering app to include in the AOSP apex. Branches that disable the "next" targets may use
    // a stable tethering app instead, but will generally override the AOSP apex to use updatable
    // package names and keys, so that apex will be unused anyway.
    apps: ["TetheringNext"], // Replace to "Tethering" if ConnectivityNextEnableDefaults is false.
}
// This is a placeholder comment to avoid merge conflicts
// as the above target may have different "enabled" values
// depending on the branch

apex {
    name: "com.android.tethering",
    defaults: ["ConnectivityApexDefaults"],
    compile_multilib: "both",
    updatable: true,
    min_sdk_version: "30",
    bootclasspath_fragments: [
        "com.android.tethering-bootclasspath-fragment",
    ],
    systemserverclasspath_fragments: [
        "com.android.tethering-systemserverclasspath-fragment",
    ],
    multilib: {
        first: {
            jni_libs: [
                "libservice-connectivity",
                "libcom_android_connectivity_com_android_net_module_util_jni",
                "libtraffic_controller_jni",
            ],
        },
        both: {
            jni_libs: ["libframework-connectivity-jni"],
        },
    },
    binaries: [
        "clatd",
    ],
    canned_fs_config: "canned_fs_config",
    bpfs: [
        "clatd.o_mainline",
        "netd.o_mainline",
        "offload.o",
        "test.o",
    ],
    apps: [
        "ServiceConnectivityResources",
    ],
    prebuilts: ["current_sdkinfo"],
    manifest: "manifest.json",
    key: "com.android.tethering.key",
    // Indicates that pre-installed version of this apex can be compressed.
    // Whether it actually will be compressed is controlled on per-device basis.
    compressible: true,

    androidManifest: "AndroidManifest.xml",
}

apex_key {
    name: "com.android.tethering.key",
    public_key: "com.android.tethering.avbpubkey",
    private_key: "com.android.tethering.pem",
}

android_app_certificate {
    name: "com.android.tethering.certificate",
    certificate: "com.android.tethering",
}

// Encapsulate the contributions made by the com.android.tethering to the bootclasspath.
bootclasspath_fragment {
    name: "com.android.tethering-bootclasspath-fragment",
    contents: [
        "framework-connectivity",
        "framework-connectivity-tiramisu",
        "framework-tethering",
    ],
    apex_available: ["com.android.tethering"],

    // The bootclasspath_fragments that provide APIs on which this depends.
    fragments: [
        {
            apex: "com.android.art",
            module: "art-bootclasspath-fragment",
        },
    ],

    // Additional stubs libraries that this fragment's contents use which are
    // not provided by another bootclasspath_fragment.
    additional_stubs: [
        "android-non-updatable",
    ],

    // Additional hidden API flag files to override the defaults. This must only be
    // modified by the Soong or platform compat team.
    hidden_api: {
        max_target_r_low_priority: [
            "hiddenapi/hiddenapi-max-target-r-loprio.txt",
	],
        max_target_o_low_priority: [
            "hiddenapi/hiddenapi-max-target-o-low-priority.txt",
            "hiddenapi/hiddenapi-max-target-o-low-priority-tiramisu.txt",
	],
        unsupported: ["hiddenapi/hiddenapi-unsupported.txt"],
    },
}

systemserverclasspath_fragment {
    name: "com.android.tethering-systemserverclasspath-fragment",
    standalone_contents: ["service-connectivity"],
    apex_available: ["com.android.tethering"],
}

override_apex {
    name: "com.android.tethering.inprocess",
    base: "com.android.tethering",
    package_name: "com.android.tethering.inprocess",
    apps: [
        "ServiceConnectivityResources",
        "InProcessTethering",
    ],
}
