// Copyright (C) 2023 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_team: "trendy_team_fwk_nfc",
    default_applicable_licenses: ["Android-Apache-2.0"],
}

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

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

soong_config_module_type {
    name: "custom_apex",
    module_type: "apex",
    config_namespace: "bootclasspath",
    bool_variables: [
        "nfc_apex_bootclasspath_fragment",
    ],
    properties: [
        "bootclasspath_fragments",
    ],
}

custom_apex {
    name: "com.android.nfcservices",
    manifest: "manifest.json",
    apps: ["NfcNciApex"],
    multilib: {
        first: {
            // Extractor process runs only with the primary ABI.
            jni_libs: [
                "libnfc_nci_jni",
            ],
        },
    },
    soong_config_variables: {
        nfc_apex_bootclasspath_fragment: {
            bootclasspath_fragments: ["com.android.nfcservices-bootclasspath-fragment"],
        },
    },

    required: [
        // Provide a default libnfc-nci.conf in /system/etc for devices that
        // does not ship one in /product
        "libnfc-nci.conf-default",
    ],
    key: "com.android.nfcservices.key",
    certificate: ":com.android.nfcservices.certificate",
    updatable: false,
}

soong_config_module_type {
    name: "custom_bootclasspath_fragment",
    module_type: "bootclasspath_fragment",
    config_namespace: "bootclasspath",
    bool_variables: [
        "nfc_apex_bootclasspath_fragment",
    ],
    properties: [
        "enabled",
    ],
}

// Encapsulate the contributions made by the com.android.nfc to the bootclasspath.
custom_bootclasspath_fragment {
    name: "com.android.nfcservices-bootclasspath-fragment",
    contents: ["framework-nfc"],
    apex_available: ["com.android.nfcservices"],
    // This is disabled for now since the build system does not allow for adding a bootclasspath
    // fragment and conditionally adding it to PRODUCT_APEX_BOOT_JARS.
    // When `RELEASE_PACKAGE_NFC_STACK` is set to `com.android.nfcservices`, this needs to be
    // set to true.
    enabled: false,
    soong_config_variables: {
        nfc_apex_bootclasspath_fragment: {
            enabled: true,
        },
    },

    // The bootclasspath_fragments that provide APIs on which this depends.
    fragments: [
        // Needed to access core java APIs.
        {
            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: [
        // Needed to access platform APIs.
        "android-non-updatable",
    ],
    hidden_api: {
        // Additional hidden API flag files to override the defaults. This must only be
        // modified by the Soong or platform compat team.
        max_target_o_low_priority: ["hiddenapi/hiddenapi-max-target-o.txt"],
        max_target_r_low_priority: ["hiddenapi/hiddenapi-max-target-r-loprio.txt"],

        // The following packages contain classes from other modules on the
        // bootclasspath. That means that the hidden API flags for this module
        // has to explicitly list every single class this module provides in
        // that package to differentiate them from the classes provided by other
        // modules. That can include private classes that are not part of the
        // API.
        split_packages: [
            "android.nfc",
            "android.nfc.cardemulation",
        ],

        // The following packages and all their subpackages currently only
        // contain classes from this bootclasspath_fragment. Listing a package
        // here won't prevent other bootclasspath modules from adding classes in
        // any of those packages but it will prevent them from adding those
        // classes into an API surface, e.g. public, system, etc.. Doing so will
        // result in a build failure due to inconsistent flags.
        package_prefixes: [
            "android.nfc.dta",
            "android.nfc.tech",
            "com.android.nfc",
        ],
    },
}
