# 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("//build/config/android/rules.gni")
import("//chromecast/chromecast.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",
  "is_android_things_non_public=$is_android_things_non_public",
]

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",
    "$java_src_dir/org/chromium/chromecast/shell/CastAudioFocusRequest.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_deps: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/CastSerialGenerator.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/CastWebContentsScopes.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",
    "//chromecast/browser:java_enums",
  ]

  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_deps: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 && !build_for_android_things_n) {
    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/CastAudioFocusRequestTest.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/CastWebContentsServiceTest.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",
    "//chromecast/base:cast_base_test_utils_java",
    "//content/public/android:content_java",
    "//third_party/android_deps:android_support_core_utils_java",
    "//third_party/hamcrest:hamcrest_java",
  ]
}
