# Copyright 2014 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")
import("//mojo/public/tools/bindings/mojom.gni")

shared_library("libjava_handler") {
  deps = [
    ":jni_headers",
    "//base",
    "//mojo/android:libsystem_java",
    "//mojo/android:system_java_jni_headers",
    "//mojo/application",
    "//mojo/application:content_handler",
    "//mojo/common",
    "//mojo/environment:chromium",
    "//mojo/public/c/system:for_shared_library",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/system",
    "//mojo/services/content_handler/public/interfaces",
  ]

  sources = [
    "java_handler.cc",
  ]
}

generate_jni("jni_headers") {
  sources = [
    "java/src/org/chromium/services/android/JavaHandler.java",
  ]

  jni_package = "mojo"
}

android_library("content_handler_java") {
  java_files = [ "java/src/org/chromium/services/android/JavaHandler.java" ]

  deps = [
    "//base:base_java",
    "//mojo/android:system_java",
    "//mojo/public/java:system",
  ]
}

dex_output_path = "$target_out_dir/java_handler_java.dex.jar"

android_standalone_library("content_handler_java_lib") {
  deps = [
    "//mojo/public/java:system",
    "//mojo/android:system_java",
    ":content_handler_java",
  ]

  dex_path = dex_output_path
}

mojo_android_application("java_handler") {
  input_so = "$root_out_dir/lib.stripped/libjava_handler.so"
  input_dex_jar = dex_output_path
}

mojom("bindings") {
  sources = [
    "intent_receiver.mojom",
  ]
}
