# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//base/android/proguard/proguard.gni")
import("//build/config/android/chrome_version.gni")
import("//build/config/android/config.gni")
import("//build/config/android/rules.gni")
import("//build/config/locales.gni")

template("system_webview_apk_tmpl") {
  android_apk(target_name) {
    forward_variables_from(invoker, "*")

    deps += [
      "//android_webview:assets",
      "//android_webview/apk:webview_license_activity_java",
      "//android_webview/apk:webview_license_provider_java",
      "//android_webview/glue",
      "//android_webview/support_library:support_lib_glue_java",
      "//base:base_java",
    ]

    if (!defined(alternative_android_sdk_dep)) {
      alternative_android_sdk_dep = webview_framework_dep
    }

    shared_resources = true

    _use_trichrome_library =
        defined(use_trichrome_library) && use_trichrome_library

    if (!_use_trichrome_library) {
      shared_libraries = [ "//android_webview:libwebviewchromium" ]
      deps += [
        "//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline",
      ]
      loadable_modules = [ "$root_out_dir/libcrashpad_handler_trampoline.so" ]

      if (build_apk_secondary_abi && android_64bit_target_cpu) {
        secondary_abi_shared_libraries = [ "//android_webview:libwebviewchromium($android_secondary_abi_toolchain)" ]
        _trampoline = "//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline($android_secondary_abi_toolchain)"
        deps += [ _trampoline ]
        _secondary_out_dir = get_label_info(_trampoline, "root_out_dir")
        secondary_abi_loadable_modules =
            [ "$_secondary_out_dir/libcrashpad_handler_trampoline.so" ]
      }
    } else {
      uncompress_shared_libraries = true

      # Include placeholder libraries to ensure we are treated as the desired
      # architecture.
      if (android_64bit_target_cpu) {
        shared_libraries = [ "//android_webview:monochrome" ]
        deps += [
          "//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline",
        ]
        loadable_modules = [ "$root_out_dir/libcrashpad_handler_trampoline.so" ]

        if (build_apk_secondary_abi) {
          secondary_native_lib_placeholders = [ "libdummy.so" ]
        }
      } else {
        native_lib_placeholders = [ "libdummy.so" ]
      }
    }

    if (!_use_trichrome_library || android_64bit_target_cpu) {
      # 32-bit TrichromeWebView doesn't have a native library, so only do this
      # for other configs.
      native_lib_version_rule = "//build/util:chrome_version_json"
      _native_lib_file =
          rebase_path("$root_gen_dir/CHROME_VERSION.json", root_out_dir)
      native_lib_version_arg = "@FileArg($_native_lib_file:full-quoted)"
    }

    aapt_locale_whitelist = locales

    resource_blacklist_regex = "[/-]xxxhdpi[/-]"

    # Exception rationale in https://crbug.com/691733.
    resource_blacklist_exceptions = [
      "*shadow*",  # Combination of gradient & transparency cause pixelation.
      "*.9.*",  # Most nine-patches contain shadows.
    ]

    # Used as an additional apk in test scripts.
    never_incremental = true

    if (is_java_debug) {
      enable_multidex = true
    } else {
      proguard_enabled = true
      if (!defined(proguard_configs)) {
        proguard_configs = []
      }
      proguard_configs += [
        "//android_webview/apk/java/proguard.flags",
        "//base/android/proguard/chromium_apk.flags",
        "//base/android/proguard/chromium_code.flags",
      ]
      if (enable_proguard_obfuscation) {
        proguard_configs +=
            [ "//base/android/proguard/enable_obfuscation.flags" ]
      } else {
        proguard_configs +=
            [ "//base/android/proguard/disable_all_obfuscation.flags" ]
      }
      png_to_webp = true
    }
    command_line_flags_file = "webview-command-line"

    if (!defined(version_code)) {
      if (_use_trichrome_library) {
        version_code = trichrome_version_code
      } else {
        version_code = webview_version_code
      }
    }
    if (!defined(version_name)) {
      version_name = chrome_version_name
    }
  }
}
