# Copyright 2016 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("//chromecast/chromecast.gni")
import("//build/config/android/rules.gni")
import("//media/media_options.gni")

assert(is_android)

cast_shell_android_manifest =
    "$root_gen_dir/cast_shell_manifest/AndroidManifest.xml"

manifest_variables =
    [ "cast_build_enable_background_activities=$enable_background_activities" ]

jinja_template("cast_shell_manifest") {
  input = "apk/AndroidManifest.xml.jinja2"
  output = cast_shell_android_manifest

  variables = manifest_variables
}

java_cpp_template("cast_shell_build_config_gen") {
  sources = [
    "apk/templates/BuildConfig.template",
  ]
  package_path = "org/chromium/chromecast/shell"

  defines = []
  if (display_web_contents_in_service) {
    defines += [ "_DISPLAY_WEB_CONTENTS_IN_SERVICE" ]
  }

  if (enable_cast_fragment) {
    defines += [ "_ENABLE_CAST_FRAGMENT" ]
  }

  # Set the logcat extractor size in lines.
  defines += [ "_LOGCAT_EXTRACTOR_SIZE=${logcat_extractor_size}" ]

  if (use_remote_service_logcat) {
    defines += [ "_USE_REMOTE_SERVICE_LOGCAT" ]
  }

  # Component name which will provide the device logs
  defines +=
      [ "_DEVICE_LOGS_PROVIDER_PACKAGE=\"${device_logs_provider_package}\"" ]
  defines += [ "_DEVICE_LOGS_PROVIDER_CLASS=\"${device_logs_provider_class}\"" ]
}

android_resources("cast_shell_android_resources") {
  android_manifest = cast_shell_android_manifest
  android_manifest_dep = ":cast_shell_manifest"
  resource_dirs = [ "//chromecast/browser/android/apk/res" ]
}

android_library("cast_audio_manager_java") {
  java_src_dir = "//chromecast/browser/android/apk/src"
  java_files =
      [ "$java_src_dir/org/chromium/chromecast/shell/CastAudioManager.java" ]
  deps = [
    "//base:base_java",
    "//chromecast/base:base_java",
  ]
}

android_library("cast_intents_java") {
  java_src_dir = "//chromecast/browser/android/apk/src"
  java_files =
      [ "$java_src_dir/org/chromium/chromecast/shell/CastIntents.java" ]
}
android_aidl("logs_provider_aidl") {
  java_src_dir = "//chromecast/browser/android/apk/src"
  interface_file =
      "$java_src_dir/org/chromium/chromecast/shell/logs_provider_service.aidl"

  sources = [
    "$java_src_dir/org/chromium/chromecast/shell/IDeviceLogsProvider.aidl",
  ]
}

android_library("reactive_android_java") {
  java_src_dir = "//chromecast/browser/android/apk/src"
  java_files = [
    "$java_src_dir/org/chromium/chromecast/shell/AsyncTaskRunner.java",
    "$java_src_dir/org/chromium/chromecast/shell/LocalBroadcastReceiverScope.java",
  ]
  deps = [
    "//base:base_java",
    "//chromecast/base:base_java",
    "//third_party/android_tools:android_support_core_utils_java",
  ]
}

android_library("cast_shell_java") {
  java_src_dir = "//chromecast/browser/android/apk/src"
  java_files = [
    "$java_src_dir/org/chromium/chromecast/shell/AndroidAppLogcatProvider.java",
    "$java_src_dir/org/chromium/chromecast/shell/ExternalServiceDeviceLogcatProvider.java",
    "$java_src_dir/org/chromium/chromecast/shell/CastApplication.java",
    "$java_src_dir/org/chromium/chromecast/shell/CastBrowserHelper.java",
    "$java_src_dir/org/chromium/chromecast/shell/CastContentWindowAndroid.java",
    "$java_src_dir/org/chromium/chromecast/shell/CastCommandLineHelper.java",
    "$java_src_dir/org/chromium/chromecast/shell/CastCrashHandler.java",
    "$java_src_dir/org/chromium/chromecast/shell/CastCrashUploader.java",
    "$java_src_dir/org/chromium/chromecast/shell/CastCrashUploaderFactory.java",
    "$java_src_dir/org/chromium/chromecast/shell/CastMetricsHelper.java",
    "$java_src_dir/org/chromium/chromecast/shell/CastSysInfoAndroid.java",
    "$java_src_dir/org/chromium/chromecast/shell/CastWebContentsActivity.java",
    "$java_src_dir/org/chromium/chromecast/shell/CastWebContentsComponent.java",
    "$java_src_dir/org/chromium/chromecast/shell/CastWebContentsFragment.java",
    "$java_src_dir/org/chromium/chromecast/shell/CastWebContentsIntentUtils.java",
    "$java_src_dir/org/chromium/chromecast/shell/CastWebContentsService.java",
    "$java_src_dir/org/chromium/chromecast/shell/CastWebContentsSurfaceHelper.java",
    "$java_src_dir/org/chromium/chromecast/shell/CastWebContentsView.java",
    "$java_src_dir/org/chromium/chromecast/shell/LogcatElision.java",
    "$java_src_dir/org/chromium/chromecast/shell/ElidedLogcatProvider.java",
  ]

  android_manifest_for_lint = cast_shell_android_manifest

  srcjar_deps = [
    ":cast_shell_build_config_gen",
    ":logs_provider_aidl",
  ]

  deps = [
    ":cast_audio_manager_java",
    ":cast_intents_java",
    ":cast_shell_android_resources",
    ":cast_shell_manifest",
    ":reactive_android_java",
    "//base:base_java",
    "//chromecast/base:base_java",
    "//components/crash/android:java",
    "//components/embedder_support/android:content_view_java",
    "//components/embedder_support/android:view_java",
    "//content/public/android:content_java",
    "//media/base/android:media_java",
    "//net/android:net_java",

    # TODO(slan): We may need to pass this in as a parameter.
    "//third_party/android_tools:android_support_core_utils_java",
    "//ui/android:ui_java",
  ]

  if (is_cast_using_cma_backend) {
    deps += [ "//chromecast/media/cma/backend/android:audio_track_java" ]
  }

  if (is_android_things_non_public) {
    java_files += [ "$java_src_dir/org/chromium/chromecast/shell/CastSysInfoAndroidThings.java" ]
    deps += [ "//chromecast/internal/android/prebuilt/things:support_lib_java" ]
    if (enable_assistant) {
      deps += [ "//chromecast/internal/assistant/ui:boot_parameters_java" ]
    }
  }
}

junit_binary("cast_shell_junit_tests") {
  java_files = [
    "junit/src/org/chromium/chromecast/shell/AsyncTaskRunnerTest.java",
    "junit/src/org/chromium/chromecast/shell/CastAudioManagerTest.java",
    "junit/src/org/chromium/chromecast/shell/CastCommandLineHelperTest.java",
    "junit/src/org/chromium/chromecast/shell/CastWebContentsActivityTest.java",
    "junit/src/org/chromium/chromecast/shell/CastWebContentsComponentTest.java",
    "junit/src/org/chromium/chromecast/shell/CastWebContentsIntentUtilsTest.java",
    "junit/src/org/chromium/chromecast/shell/CastWebContentsSurfaceHelperTest.java",
    "junit/src/org/chromium/chromecast/shell/LocalBroadcastReceiverScopeTest.java",
    "junit/src/org/chromium/chromecast/shell/LogcatElisionUnitTest.java",
    "junit/src/org/chromium/chromecast/shell/ElidedLogcatProviderUnitTest.java",
  ]

  srcjar_deps = [ ":cast_shell_build_config_gen" ]

  deps = [
    ":cast_intents_java",
    ":cast_shell_java",
    "//base:base_java_test_support",
    "//base:base_junit_test_support",
    "//content/public/android:content_java",
    "//third_party/android_tools:android_support_core_utils_java",
    "//third_party/hamcrest:hamcrest_java",
  ]
}
