# 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("//build/config/android/rules.gni")
import("//mojo/public/mojo_application.gni")

servicess_android_path = get_path_info(".", "abspath")

template("mojo_android_java_application") {
  assert(defined(invoker.mojo_main))

  dex_output_path = "$target_out_dir/${target_name}.dex.jar"
  dex_with_manifest_output_path =
      "$target_out_dir/${target_name}_with_manifest.dex.jar"

  android_lib_name = "__${target_name}_lib"
  android_standalone_name = "__${target_name}_standalone"
  android_with_manifest_name = "__${target_name}_with_manifest"

  all_deps = [
    "//mojo/public/java:bindings",
    "//mojo/public/java:system",
  ]
  if (defined(invoker.deps)) {
    all_deps += invoker.deps
  }

  android_library(android_lib_name) {
    java_files = invoker.sources

    deps = all_deps
  }

  android_standalone_library(android_standalone_name) {
    deps = [ ":${android_lib_name}" ] + all_deps

    dex_path = dex_output_path

    system_gen_dir = get_path_info("//mojo/public/java/BUILD.gn", "gen_dir")
    excluded_jars = [ "${system_gen_dir}/system.dex.jar" ]
  }

  action(android_with_manifest_name) {
    script = "${servicess_android_path}/add_manifest_entry.py"

    deps = [
      ":$android_standalone_name",
    ]

    input = dex_output_path
    inputs = [
      input,
    ]

    output = dex_with_manifest_output_path
    outputs = [
      output,
    ]

    rebase_input = rebase_path(input)
    rebase_output = rebase_path(output)
    mojo_main = invoker.mojo_main
    args = [
      "--input=$rebase_input",
      "--output=$rebase_output",
      "--key=Mojo-Class",
      "--value=$mojo_main",
    ]
  }

  if (defined(invoker.output_name)) {
    mojo_output = "$root_out_dir/" + invoker.output_name + ".mojo"
  } else {
    mojo_output = "$root_out_dir/" + target_name + ".mojo"
  }

  action(target_name) {
    script = rebase_path("mojo/public/tools/prepend.py", ".", mojo_root)

    deps = [
      ":$android_with_manifest_name",
    ]

    input = dex_with_manifest_output_path
    inputs = [
      input,
    ]

    output = mojo_output
    outputs = [
      output,
    ]

    rebase_input = rebase_path(input, root_build_dir)
    rebase_output = rebase_path(output, root_build_dir)
    args = [
      "--input=$rebase_input",
      "--output=$rebase_output",
      "--line=#!mojo mojo:java_handler",
    ]
  }
}
