// 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 {
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    default_applicable_licenses: ["packages_modules_appsearch_license"],
}

// Added automatically by a large-scale-change
// See: http://go/android-license-faq
license {
    name: "packages_modules_appsearch_license",
    visibility: [":__subpackages__"],
    license_kinds: [
        "SPDX-license-identifier-Apache-2.0",
    ],
    license_text: [
        "NOTICE",
    ],
}

sdk {
    name: "appsearch-sdk",
    bootclasspath_fragments: ["com.android.appsearch-bootclasspath-fragment"],
    systemserverclasspath_fragments: ["com.android.appsearch-systemserverclasspath-fragment"],
}

apex {
    name: "com.android.appsearch",
    manifest: "apex_manifest.json",
    bootclasspath_fragments: ["com.android.appsearch-bootclasspath-fragment"],
    systemserverclasspath_fragments: ["com.android.appsearch-systemserverclasspath-fragment"],
    key: "com.android.appsearch.key",
    certificate: ":com.android.appsearch.certificate",
    defaults: ["t-launched-apex-module"],
    jni_libs: ["libicing"],
    prebuilts: ["current_sdkinfo"],
}

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

android_app_certificate {
    name: "com.android.appsearch.certificate",
    // This will use com.android.appsearch.x509.pem (the cert) and
    // com.android.appsearch.pk8 (the private key)
    certificate: "com.android.appsearch",
}

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

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

    hidden_api: {
        // This module does not contain any split packages.
        split_packages: [],

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

// Encapsulate the contributions made by the com.android.appsearch to the systemserverclasspath.
systemserverclasspath_fragment {
    name: "com.android.appsearch-systemserverclasspath-fragment",
    contents: ["service-appsearch"],
    apex_available: ["com.android.appsearch"],
}
