# 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/config.gni")
import("//build/config/android/rules.gni")
import("//third_party/feed/java_sources.gni")
import("//third_party/feed/proto_sources.gni")
import("//third_party/protobuf/proto_library.gni")

android_resources("sharedstream_resources") {
  resource_dirs =
      [ "src/src/main/java/com/google/android/libraries/feed/sharedstream/res" ]
  custom_package = "com.google.android.libraries.feed.sharedstream"
}

android_resources("piet_resources") {
  resource_dirs =
      [ "src/src/main/java/com/google/android/libraries/feed/piet/res" ]
  custom_package = "com.google.android.libraries.feed.piet"
}

android_resources("basicstream_internal_viewholders_resources") {
  resource_dirs = [ "src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/res" ]
  deps = [
    ":sharedstream_resources",
  ]
  custom_package =
      "com.google.android.libraries.feed.basicstream.internal.viewholders"
}

android_resources("basicstream_resources") {
  resource_dirs =
      [ "src/src/main/java/com/google/android/libraries/feed/basicstream/res/" ]
  custom_package = "com.google.android.libraries.feed.basicstream"
}

android_resources("shared_stream_publicapi_menumeasurer_resources") {
  resource_dirs = [ "src/src/main/java/com/google/android/libraries/feed/sharedstream/publicapi/menumeasurer/res/" ]
  custom_package =
      "com.google.android.libraries.feed.sharedstream.publicapi.menumeasurer"
}

android_resources("sharedstream_contextmenumanager_resources") {
  resource_dirs = [ "src/src/main/java/com/google/android/libraries/feed/sharedstream/contextmenumanager/res" ]
  deps = [
    ":sharedstream_resources",
  ]
  custom_package =
      "com.google.android.libraries.feed.sharedstream.contextmenumanager"
}

android_library("feed_lib_java") {
  chromium_code = false
  java_files = feed_lib_java_sources

  deps = [
    ":basicstream_internal_viewholders_resources",
    ":basicstream_resources",
    ":feed_lib_proto_java",
    ":piet_resources",
    ":shared_stream_publicapi_menumeasurer_resources",
    ":sharedstream_contextmenumanager_resources",
    "//third_party/android_deps:android_support_annotations_java",
    "//third_party/android_deps:android_support_cardview_java",
    "//third_party/android_deps:android_support_v7_appcompat_java",
    "//third_party/android_deps:android_support_v7_recyclerview_java",
    "//third_party/android_deps:com_google_protobuf_protobuf_lite_java",
    "//third_party/jsr-305:jsr_305_javalib",
  ]
}

android_library("feed_conformance_test_lib_android_java") {
  chromium_code = false
  java_files = feed_conformance_test_lib_sources
  testonly = true

  deps = [
    ":feed_lib_java",
    ":feed_lib_proto_java",
    "//third_party/android_deps:com_google_protobuf_protobuf_lite_java",
    "//third_party/google-truth:google_truth_java",
    "//third_party/guava:guava_android_java",
    "//third_party/junit:junit",
  ]
}

proto_java_library("feed_lib_proto_java") {
  proto_path = "src"
  sources = feed_lib_proto_sources
}
