//
// Copyright (C) 2008 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: ["frameworks_base_core_res_license"],
}

// Added automatically by a large-scale-change that took the approach of
// 'apply every license found to every target'. While this makes sure we respect
// every license restriction, it may not be entirely correct.
//
// e.g. GPL in an MIT project might only apply to the contrib/ directory.
//
// Please consider splitting the single license below into multiple licenses,
// taking care not to lose any license_kind information, and overriding the
// default license using the 'licenses: [...]' property on targets as needed.
//
// For unused files, consider creating a 'fileGroup' with "//visibility:private"
// to attach the license to, and including a comment whether the files may be
// used in the current project.
// See: http://go/android-license-faq
license {
    name: "frameworks_base_core_res_license",
    visibility: [":__subpackages__"],
    license_kinds: [
        "SPDX-license-identifier-Apache-2.0",
    ],
    license_text: [
        "NOTICE",
    ],
}

genrule {
    name: "remote-color-resources-compile-public",
    tools: ["aapt2"],
    srcs: [
        "remote_color_resources_res/values/public.xml",
    ],
    out: ["values_public.arsc.flat"],
    cmd: "$(location aapt2) compile $(in) -o $(genDir)",
}

genrule {
    name: "remote-color-resources-compile-colors",
    tools: ["aapt2"],
    srcs: [
        "remote_color_resources_res/values/colors.xml",
    ],
    out: ["values_colors.arsc.flat"],
    cmd: "$(location aapt2) compile $(in) -o $(genDir)",
}

genrule {
    name: "remote-color-resources-apk",
    tools: ["aapt2"],
    // The first input file in the list must be the manifest
    srcs: [
        "RemoteThemeColorsAndroidManifest.xml",
        ":remote-color-resources-compile-public",
        ":remote-color-resources-compile-colors",
    ],
    out: ["remote-color-resources.apk"],
    cmd: "$(location aapt2) link -o $(out) --manifest $(in)"
}

genrule {
    name: "remote-color-resources-arsc",
    srcs: [":remote-color-resources-apk"],
    out: ["res/raw/remote_views_color_resources.arsc"],
    cmd: "mkdir -p $(genDir)/remote-color-resources-arsc && "
        + "unzip -x $(in) resources.arsc -d $(genDir)/remote-color-resources-arsc && "
        + "mkdir -p $$(dirname $(out)) && "
        + "mv $(genDir)/remote-color-resources-arsc/resources.arsc $(out) && "
        + "echo 'Created $(out)'"
}

genrule {
    name: "remote-color-resources-arsc-zip",
    tools: ["soong_zip"],
    srcs: [
        ":remote-color-resources-arsc",
        "remote_color_resources_res/symbols.xml",
    ],
    out: ["remote_views_color_resources.zip"],
    cmd: "INPUTS=($(in)) && "
        + "RES_DIR=$$(dirname $$(dirname $${INPUTS[0]})) && "
        + "mkdir -p $$RES_DIR/values && "
        + "cp $${INPUTS[1]} $$RES_DIR/values && "
        + "$(location soong_zip) -o $(out) -C $$RES_DIR -D $$RES_DIR"
}

android_app {
    name: "framework-res",
    sdk_version: "core_platform",
    certificate: "platform",

    srcs: [":remote-color-resources-arsc"],

    // Disable dexpreopt and verify_uses_libraries check as the app
    // contains no Java code to be dexpreopted.
    enforce_uses_libs: false,
    dex_preopt: {
        enabled: false,
    },

    // Soong special-cases framework-res to install this alongside
    // the libraries at /system/framework/framework-res.apk.

    // Generate private symbols into the com.android.internal.R class
    // so they are not accessible to 3rd party apps.
    aaptflags: [
        "--private-symbols",
        "com.android.internal",

        // Framework doesn't need versioning since it IS the platform.
        "--no-auto-version",

        // Allow overlay to add resource
        "--auto-add-overlay",
    ],

    resource_zips: [
        ":remote-color-resources-arsc-zip",
    ],

    // Create package-export.apk, which other packages can use to get
    // PRODUCT-agnostic resource data like IDs and type definitions.
    export_package_resources: true,

    dist: {
        targets: [
            "simulated_device_launcher",
        ],
    },
}

java_genrule {
    name: "framework-res-package-jar",
    srcs: [":framework-res{.export-package.apk}"],
    out: ["framework-res-package.jar"],
    cmd: "cp $(in) $(out)",
}

// This logic can be removed once robolectric's transition to binary resources is complete
filegroup {
    name: "robolectric_framework_raw_res_files",
    srcs: [
        "assets/**/*",
        "res/**/*",
        ":remote-color-resources-arsc",
    ],
}

// Generate a text file containing a list of permissions that non-system apps
// are allowed to obtain.
genrule {
  name: "permission-list-normal",
  out: ["permission-list-normal.txt"],
  srcs: ["AndroidManifest.xml"],
  cmd: "cat $(in) " +
       // xmllint has trouble accessing attributes under the android namespace.
       // Strip these prefixes prior to processing with xmllint.
       " | sed -r 's/android:(name|protectionLevel)/\\1/g' " +
       " | $(location xmllint) /dev/stdin --xpath " +
       " '//permission[not(contains(@protectionLevel, \"signature\"))]/@name'" +
       // The result of xmllint is name="value" pairs. Format these to just the
       // permission name, one per-line.
       " | sed -r 's/\\s*name=\\s*//g' | tr -d '\"'" +
       " > $(out)",
  tools: ["xmllint"]
}
