// 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.

// Build rules to build shim apks.

//##########################################################
// Variant: Privileged app upgrade

package {
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "frameworks_base_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: ["frameworks_base_license"],
}

android_app {
    name: "CtsShimPrivUpgrade",
    // this needs to be a privileged application
    privileged: true,

    sdk_version: "current",
    optimize: {
        enabled: false,
    },
    dex_preopt: {
        enabled: false,
    },

    manifest: "shim_priv_upgrade/AndroidManifest.xml",

    compile_multilib: "both",
    jni_libs: ["libshim_jni"],
    // Explicitly uncompress native libs rather than letting the build system doing it and destroy the
    // v2/v3 signature.
    use_embedded_native_libs: true,

    uses_libs: ["android.test.runner"],

    apex_available: [
        "//apex_available:platform",
        "com.android.apex.cts.shim.v2_apk_in_apex_upgrades",
    ],
}

java_genrule {
    name: "generate_priv_manifest",
    srcs: [
        "shim_priv/AndroidManifest.xml",
        ":CtsShimPrivUpgrade",
    ],
    out: ["AndroidManifest.xml"],
    cmd: "sed -e s/__HASH__/`sha512sum -b $(location :CtsShimPrivUpgrade) | cut -d' ' -f1`/ $(location shim_priv/AndroidManifest.xml) > $(out)",
}

//##########################################################
// Variant: Privileged app

android_app {
    name: "CtsShimPriv",
    // this needs to be a privileged application
    privileged: true,

    sdk_version: "current",
    optimize: {
        enabled: false,
    },
    dex_preopt: {
        enabled: false,
    },

    manifest: ":generate_priv_manifest",

    compile_multilib: "both",
    jni_libs: ["libshim_jni"],
    // Explicitly uncompress native libs rather than letting the build system doing it and destroy the
    // v2/v3 signature.
    use_embedded_native_libs: true,
    apex_available: [
        "//apex_available:platform",
        "com.android.apex.cts.shim.v1",
        "com.android.apex.cts.shim.v2",
        "com.android.apex.cts.shim.v2_apk_in_apex_upgrades",
        "com.android.apex.cts.shim.v2_legacy",
        "com.android.apex.cts.shim.v2_sdk_target_p",
        "com.android.apex.cts.shim.v2_unsigned_payload",
        "com.android.apex.cts.shim.v3",
    ],
    min_sdk_version: "24",
}

//##########################################################
// Variant: Privileged app upgrade w/ the wrong SHA

android_app {
    name: "CtsShimPrivUpgradeWrongSHA",
    // this needs to be a privileged application
    privileged: true,

    sdk_version: "current",
    optimize: {
        enabled: false,
    },
    dex_preopt: {
        enabled: false,
    },
    // anything to make this package's SHA different from CtsShimPrivUpgrade
    aaptflags: [
        "--version-name",
        "WrongSHA",
    ],

    manifest: "shim_priv_upgrade/AndroidManifest.xml",

    compile_multilib: "both",
    jni_libs: ["libshim_jni"],
    // Explicitly uncompress native libs rather than letting the build system doing it and destroy the
    // v2/v3 signature.
    use_embedded_native_libs: true,

    uses_libs: ["android.test.runner"],
}

//##########################################################
// Variant: Non Privileged app upgrade which is malformed
android_app {
    name: "CtsShimTargetPSdk",
    sdk_version: "current",
    optimize: {
        enabled: false,
    },
    dex_preopt: {
        enabled: false,
    },
    manifest: "shim/AndroidManifestTargetPSdk.xml",
    apex_available: [
        "//apex_available:platform",
        "com.android.apex.cts.shim.v2_apk_in_apex_sdk_target_p",
    ],
}

//##########################################################
// Variant: System app upgrade

android_app {
    name: "CtsShimUpgrade",

    sdk_version: "current",
    optimize: {
        enabled: false,
    },
    dex_preopt: {
        enabled: false,
    },

    manifest: "shim/AndroidManifestUpgrade.xml",
    min_sdk_version: "24",
}

java_genrule {
    name: "generate_shim_manifest",
    srcs: [
        "shim/AndroidManifest.xml",
        ":CtsShimUpgrade",
    ],
    out: ["AndroidManifest.xml"],
    cmd: "sed -e s/__HASH__/`sha512sum -b $(location :CtsShimUpgrade) | cut -d' ' -f1`/ $(location shim/AndroidManifest.xml) > $(out)",
}

//##########################################################
// Variant: System app

android_app {
    name: "CtsShim",

    sdk_version: "current",
    optimize: {
        enabled: false,
    },
    dex_preopt: {
        enabled: false,
    },

    manifest: ":generate_shim_manifest",
    apex_available: [
        "//apex_available:platform",
        "com.android.apex.cts.shim.v1",
        "com.android.apex.cts.shim.v2",
        "com.android.apex.cts.shim.v2_apk_in_apex_upgrades",
        "com.android.apex.cts.shim.v2_legacy",
        "com.android.apex.cts.shim.v2_sdk_target_p",
        "com.android.apex.cts.shim.v2_unsigned_payload",
        "com.android.apex.cts.shim.v3",
    ],
    min_sdk_version: "24",
}

//##########################################################
// Variant: Add apk to an apex
android_app {
    name: "CtsShimAddApkToApex",
    sdk_version: "current",
    srcs: ["shim_add_apk_to_apex/src/android/addapktoapex/app/AddApkToApexDeviceActivity.java"],
    optimize: {
        enabled: false,
    },
    dex_preopt: {
        enabled: false,
    },
    manifest: "shim_add_apk_to_apex/AndroidManifestAddApkToApex.xml",
    apex_available: [
        "//apex_available:platform",
        "com.android.apex.cts.shim.v2_add_apk_to_apex",
    ],
}
