# Copyright 2015 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("//remoting/remoting_options.gni")

template("remoting_android_client_java_tmpl") {
  android_library(target_name) {
    _java_file_prefix = "//remoting/android/java/src/org/chromium/chromoting"
    _java_files = [
      "ActivityLifecycleListener.java",
      "AnimationJob.java",
      "Capabilities.java",
      "CapabilityManager.java",
      "Chromoting.java",
      "ChromotingDownloadManager.java",
      "ChromotingUtil.java",
      "ClientExtension.java",
      "Desktop.java",
      "DesktopCanvas.java",
      "DesktopView.java",
      "DummyActivityLifecycleListener.java",
      "DummyClientExtension.java",
      "Event.java",
      "FlingAnimationJob.java",
      "HostInfo.java",
      "HostListAdapter.java",
      "InputEventSender.java",
      "InputFeedbackRadiusMapper.java",
      "InputModeChangedEventParameter.java",
      "InputMonitor.java",
      "InputState.java",
      "InputStrategyInterface.java",
      "InputStub.java",
      "NavigationMenuAdapter.java",
      "OAuthTokenConsumer.java",
      "Preconditions.java",
      "PrivacyPolicyActivity.java",
      "RenderData.java",
      "RenderStub.java",
      "ScaleEventParameter.java",
      "SessionAuthenticator.java",
      "SessionConnector.java",
      "SimulatedTouchInputStrategy.java",
      "SizeChangedEventParameter.java",
      "SwipePinchDetector.java",
      "SystemUiVisibilityChangedEventParameter.java",
      "TapGestureDetector.java",
      "TermsOfServiceActivity.java",
      "ThirdPartyTokenFetcher.java",
      "TouchEventParameter.java",
      "TouchInputHandler.java",
      "TouchInputStrategy.java",
      "TrackpadInputStrategy.java",
      "TapEventParameter.java",
      "TwoPointsEventParameter.java",
      "WebViewActivity.java",
      "accountswitcher/AccountManagerCompat.java",
      "accountswitcher/AccountSwitcher.java",
      "accountswitcher/AccountSwitcherBase.java",
      "accountswitcher/AccountSwitcherBasic.java",
      "accountswitcher/AccountSwitcherFactory.java",
      "base/OAuthTokenFetcher.java",
      "help/CreditsActivity.java",
      "help/FeedbackSender.java",
      "help/HelpActivity.java",
      "help/HelpAndFeedback.java",
      "help/HelpAndFeedbackBasic.java",
      "help/HelpContext.java",
      "help/HelpSingleton.java",
      "jni/Client.java",
      "jni/ConnectionListener.java",
      "jni/GlDisplay.java",
      "jni/DirectoryService.java",
      "jni/JniInterface.java",
      "jni/JniOAuthTokenGetter.java",
      "jni/TouchEventData.java",
    ]

    java_files = rebase_path(_java_files, ".", _java_file_prefix)

    deps = [
      "//base:base_java",
      "//base:jni_java",
      "//remoting/android:remoting_android_client_java_resources",
      "//remoting/android:remoting_apk_manifest",
      "//remoting/proto/remoting/v1:directory_proto_java",
      "//third_party/android_deps:android_arch_lifecycle_common_java",
      "//third_party/android_deps:android_support_v7_appcompat_java",
      "//third_party/android_deps:com_android_support_mediarouter_v7_java",
      "//third_party/android_deps:com_android_support_support_annotations_java",
      "//third_party/android_deps:com_google_protobuf_protobuf_lite_java",
      "//ui/android:ui_utils_java",
    ]

    annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]

    srcjar_deps = [ "//remoting/client/jni:jni_enums" ]

    if (defined(invoker.play_services_package)) {
      deps += [
        "${invoker.play_services_package}:google_play_services_auth_base_java",
        "${invoker.play_services_package}:google_play_services_base_java",
        "${invoker.play_services_package}:google_play_services_basement_java",
      ]
    }

    # TODO(agrieve): Convert downstream to use play_services_package.
    if (defined(invoker.remoting_google_play_services_library)) {
      deps += [ invoker.remoting_google_play_services_library ]
    }

    android_manifest_for_lint =
        "$root_gen_dir/remoting/android/AndroidManifest.xml"
  }
}
