# Copyright 2018 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")

android_library("application_java") {
  deps = [
    "//base:base_java",
  ]
  java_files = [ "java/src/org/chromium/components/embedder_support/application/FontPreloadingWorkaround.java" ]
}

static_library("view") {
  sources = [
    "view/content_view_render_view.cc",
    "view/content_view_render_view.h",
  ]

  deps = [
    ":view_jni_headers",
    "//base",
    "//content/public/browser",
    "//ui/android",
    "//ui/base",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]
}

android_library("content_view_java") {
  deps = [
    "//base:base_java",
    "//content/public/android:content_java",
    "//ui/android:ui_java",
  ]
  java_files = [
    "java/src/org/chromium/components/embedder_support/view/ContentView.java",
  ]
}

android_library("view_java") {
  deps = [
    "//base:base_java",
    "//content/public/android:content_java",
    "//ui/android:ui_java",
  ]
  java_files = [ "java/src/org/chromium/components/embedder_support/view/ContentViewRenderView.java" ]
}

generate_jni("view_jni_headers") {
  sources = [
    "java/src/org/chromium/components/embedder_support/view/ContentViewRenderView.java",
  ]
  jni_package = "view"
}

java_strings_grd("web_contents_delegate_strings_grd") {
  grd_file = "java/strings/web_contents_delegate_android_strings.grd"
  outputs = [
    "values/web_contents_delegate_android_strings.xml",
    "values-am/web_contents_delegate_android_strings.xml",
    "values-ar/web_contents_delegate_android_strings.xml",
    "values-bg/web_contents_delegate_android_strings.xml",
    "values-bn/web_contents_delegate_android_strings.xml",
    "values-ca/web_contents_delegate_android_strings.xml",
    "values-cs/web_contents_delegate_android_strings.xml",
    "values-da/web_contents_delegate_android_strings.xml",
    "values-de/web_contents_delegate_android_strings.xml",
    "values-el/web_contents_delegate_android_strings.xml",
    "values-en-rGB/web_contents_delegate_android_strings.xml",
    "values-es/web_contents_delegate_android_strings.xml",
    "values-es-rUS/web_contents_delegate_android_strings.xml",
    "values-et/web_contents_delegate_android_strings.xml",
    "values-fa/web_contents_delegate_android_strings.xml",
    "values-fi/web_contents_delegate_android_strings.xml",
    "values-fr/web_contents_delegate_android_strings.xml",
    "values-gu/web_contents_delegate_android_strings.xml",
    "values-hi/web_contents_delegate_android_strings.xml",
    "values-hr/web_contents_delegate_android_strings.xml",
    "values-hu/web_contents_delegate_android_strings.xml",
    "values-in/web_contents_delegate_android_strings.xml",
    "values-it/web_contents_delegate_android_strings.xml",
    "values-iw/web_contents_delegate_android_strings.xml",
    "values-ja/web_contents_delegate_android_strings.xml",
    "values-kn/web_contents_delegate_android_strings.xml",
    "values-ko/web_contents_delegate_android_strings.xml",
    "values-lt/web_contents_delegate_android_strings.xml",
    "values-lv/web_contents_delegate_android_strings.xml",
    "values-ml/web_contents_delegate_android_strings.xml",
    "values-mr/web_contents_delegate_android_strings.xml",
    "values-ms/web_contents_delegate_android_strings.xml",
    "values-nb/web_contents_delegate_android_strings.xml",
    "values-nl/web_contents_delegate_android_strings.xml",
    "values-pl/web_contents_delegate_android_strings.xml",
    "values-pt-rBR/web_contents_delegate_android_strings.xml",
    "values-pt-rPT/web_contents_delegate_android_strings.xml",
    "values-ro/web_contents_delegate_android_strings.xml",
    "values-ru/web_contents_delegate_android_strings.xml",
    "values-sk/web_contents_delegate_android_strings.xml",
    "values-sl/web_contents_delegate_android_strings.xml",
    "values-sr/web_contents_delegate_android_strings.xml",
    "values-sv/web_contents_delegate_android_strings.xml",
    "values-sw/web_contents_delegate_android_strings.xml",
    "values-ta/web_contents_delegate_android_strings.xml",
    "values-te/web_contents_delegate_android_strings.xml",
    "values-th/web_contents_delegate_android_strings.xml",
    "values-tl/web_contents_delegate_android_strings.xml",
    "values-tr/web_contents_delegate_android_strings.xml",
    "values-uk/web_contents_delegate_android_strings.xml",
    "values-vi/web_contents_delegate_android_strings.xml",
    "values-zh-rCN/web_contents_delegate_android_strings.xml",
    "values-zh-rTW/web_contents_delegate_android_strings.xml",
  ]
}

static_library("web_contents_delegate") {
  sources = [
    "delegate/color_chooser_android.cc",
    "delegate/color_chooser_android.h",
    "delegate/web_contents_delegate_android.cc",
    "delegate/web_contents_delegate_android.h",
  ]

  deps = [
    ":web_contents_delegate_jni_headers",
    "//base",
    "//content/public/browser",
    "//content/public/common",
    "//net",
    "//skia",
    "//ui/android",
    "//ui/base",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]
}

android_resources("web_contents_delegate_java_resources") {
  custom_package = "org.chromium.components.embedder_support.delegate"
  resource_dirs = [ "java/res" ]
  deps = [
    ":web_contents_delegate_strings_grd",
  ]
}

android_library("web_contents_delegate_java") {
  deps = [
    ":web_contents_delegate_java_resources",
    "//base:base_java",
    "//content/public/android:content_java",
    "//third_party/android_deps:com_android_support_support_compat_java",
    "//ui/android:ui_java",
  ]
  java_files = [
    "java/src/org/chromium/components/embedder_support/delegate/ColorChooserAndroid.java",
    "java/src/org/chromium/components/embedder_support/delegate/ColorPickerAdvanced.java",
    "java/src/org/chromium/components/embedder_support/delegate/ColorPickerAdvancedComponent.java",
    "java/src/org/chromium/components/embedder_support/delegate/ColorPickerDialog.java",
    "java/src/org/chromium/components/embedder_support/delegate/ColorPickerMoreButton.java",
    "java/src/org/chromium/components/embedder_support/delegate/ColorPickerSimple.java",
    "java/src/org/chromium/components/embedder_support/delegate/ColorSuggestion.java",
    "java/src/org/chromium/components/embedder_support/delegate/ColorSuggestionListAdapter.java",
    "java/src/org/chromium/components/embedder_support/delegate/WebContentsDelegateAndroid.java",
    "java/src/org/chromium/components/embedder_support/delegate/OnColorChangedListener.java",
  ]
}

generate_jni("web_contents_delegate_jni_headers") {
  sources = [
    "java/src/org/chromium/components/embedder_support/delegate/ColorChooserAndroid.java",
    "java/src/org/chromium/components/embedder_support/delegate/WebContentsDelegateAndroid.java",
  ]
  jni_package = "web_contents_delegate_android"
}
