# Copyright 2013 The Flutter 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("$flutter_root/common/config.gni")
import("$flutter_root/shell/config.gni")
import("$flutter_root/shell/gpu/gpu.gni")
import("$flutter_root/shell/version/version.gni")

shell_gpu_configuration("android_gpu_configuration") {
  enable_software = true
  enable_vulkan = shell_enable_vulkan
  enable_gl = true
  enable_metal = false
}

shared_library("flutter_shell_native") {
  visibility = [ ":*" ]

  output_name = "flutter"

  sources = [
    "$root_build_dir/flutter_icu/icudtl.o",
    "android_context_gl.cc",
    "android_context_gl.h",
    "android_environment_gl.cc",
    "android_environment_gl.h",
    "android_external_texture_gl.cc",
    "android_external_texture_gl.h",
    "android_native_window.cc",
    "android_native_window.h",
    "android_shell_holder.cc",
    "android_shell_holder.h",
    "android_surface.cc",
    "android_surface.h",
    "android_surface_gl.cc",
    "android_surface_gl.h",
    "android_surface_software.cc",
    "android_surface_software.h",
    "apk_asset_provider.cc",
    "apk_asset_provider.h",
    "flutter_main.cc",
    "flutter_main.h",
    "library_loader.cc",
    "platform_message_response_android.cc",
    "platform_message_response_android.h",
    "platform_view_android.cc",
    "platform_view_android.h",
    "platform_view_android_jni.cc",
    "platform_view_android_jni.h",
    "vsync_waiter_android.cc",
    "vsync_waiter_android.h",
  ]

  deps = [
    ":android_gpu_configuration",
    ":icudtl_object",
    "$flutter_root/assets",
    "$flutter_root/common",
    "$flutter_root/flow",
    "$flutter_root/fml",
    "$flutter_root/lib/ui",
    "$flutter_root/runtime",
    "$flutter_root/runtime:libdart",
    "$flutter_root/shell/common",
    "//third_party/skia",
  ]

  public_configs = [ "$flutter_root:config" ]

  defines = []

  if (shell_enable_vulkan) {
    sources += [
      "android_surface_vulkan.cc",
      "android_surface_vulkan.h",
    ]

    deps += [ "$flutter_root/vulkan" ]

    defines += [ "SHELL_ENABLE_VULKAN" ]
  }

  libs = [
    "android",
    "EGL",
    "GLESv2",
  ]

  ldflags = [ "-Wl,--version-script=" + rebase_path("android_exports.lst") ]
}

action("gen_android_build_config_java") {
  script = "$flutter_root/tools/gen_android_buildconfig.py"

  build_config_java = "$target_gen_dir/io/flutter/BuildConfig.java"

  outputs = [
    build_config_java,
  ]

  args = [
    "--out",
    rebase_path(build_config_java),
    "--runtime-mode",
    flutter_runtime_mode,
  ]
}

embedding_artifact_id = "flutter_embedding_$flutter_runtime_mode"
embedding_jar_filename = "$embedding_artifact_id-1.0.0-$engine_version.jar"
embedding_jar_path = "$root_out_dir/$embedding_jar_filename"

embedding_sources_jar_filename =
    "$embedding_artifact_id-1.0.0-$engine_version-sources.jar"
embedding_source_jar_path = "$root_out_dir/$embedding_sources_jar_filename"

action("flutter_shell_java") {
  script = "//build/android/gyp/javac.py"
  depfile = "$target_gen_dir/$target_name.d"

  jar_path = embedding_jar_path
  source_jar_path = embedding_source_jar_path

  sources = [
    "io/flutter/Log.java",
    "io/flutter/app/FlutterActivity.java",
    "io/flutter/app/FlutterActivityDelegate.java",
    "io/flutter/app/FlutterActivityEvents.java",
    "io/flutter/app/FlutterApplication.java",
    "io/flutter/app/FlutterFragmentActivity.java",
    "io/flutter/app/FlutterPluginRegistry.java",
    "io/flutter/embedding/android/AndroidKeyProcessor.java",
    "io/flutter/embedding/android/AndroidTouchProcessor.java",
    "io/flutter/embedding/android/DrawableSplashScreen.java",
    "io/flutter/embedding/android/FlutterActivity.java",
    "io/flutter/embedding/android/FlutterActivityAndFragmentDelegate.java",
    "io/flutter/embedding/android/FlutterEngineConfigurator.java",
    "io/flutter/embedding/android/FlutterEngineProvider.java",
    "io/flutter/embedding/android/FlutterFragment.java",
    "io/flutter/embedding/android/FlutterSplashView.java",
    "io/flutter/embedding/android/FlutterSurfaceView.java",
    "io/flutter/embedding/android/FlutterTextureView.java",
    "io/flutter/embedding/android/FlutterView.java",
    "io/flutter/embedding/android/SplashScreen.java",
    "io/flutter/embedding/android/SplashScreenProvider.java",
    "io/flutter/embedding/engine/FlutterEngine.java",
    "io/flutter/embedding/engine/FlutterEngineAndroidLifecycle.java",
    "io/flutter/embedding/engine/FlutterEngineCache.java",
    "io/flutter/embedding/engine/FlutterEnginePluginRegistry.java",
    "io/flutter/embedding/engine/FlutterJNI.java",
    "io/flutter/embedding/engine/FlutterShellArgs.java",
    "io/flutter/embedding/engine/dart/DartExecutor.java",
    "io/flutter/embedding/engine/dart/DartMessenger.java",
    "io/flutter/embedding/engine/dart/PlatformMessageHandler.java",
    "io/flutter/embedding/engine/plugins/FlutterPlugin.java",
    "io/flutter/embedding/engine/plugins/PluginRegistry.java",
    "io/flutter/embedding/engine/plugins/activity/ActivityAware.java",
    "io/flutter/embedding/engine/plugins/activity/ActivityControlSurface.java",
    "io/flutter/embedding/engine/plugins/activity/ActivityPluginBinding.java",
    "io/flutter/embedding/engine/plugins/broadcastreceiver/BroadcastReceiverAware.java",
    "io/flutter/embedding/engine/plugins/broadcastreceiver/BroadcastReceiverControlSurface.java",
    "io/flutter/embedding/engine/plugins/broadcastreceiver/BroadcastReceiverPluginBinding.java",
    "io/flutter/embedding/engine/plugins/contentprovider/ContentProviderAware.java",
    "io/flutter/embedding/engine/plugins/contentprovider/ContentProviderControlSurface.java",
    "io/flutter/embedding/engine/plugins/contentprovider/ContentProviderPluginBinding.java",
    "io/flutter/embedding/engine/plugins/service/ServiceAware.java",
    "io/flutter/embedding/engine/plugins/service/ServiceControlSurface.java",
    "io/flutter/embedding/engine/plugins/service/ServicePluginBinding.java",
    "io/flutter/embedding/engine/plugins/shim/ShimPluginRegistry.java",
    "io/flutter/embedding/engine/plugins/shim/ShimRegistrar.java",
    "io/flutter/embedding/engine/renderer/FlutterRenderer.java",
    "io/flutter/embedding/engine/renderer/OnFirstFrameRenderedListener.java",
    "io/flutter/embedding/engine/systemchannels/AccessibilityChannel.java",
    "io/flutter/embedding/engine/systemchannels/KeyEventChannel.java",
    "io/flutter/embedding/engine/systemchannels/LifecycleChannel.java",
    "io/flutter/embedding/engine/systemchannels/LocalizationChannel.java",
    "io/flutter/embedding/engine/systemchannels/NavigationChannel.java",
    "io/flutter/embedding/engine/systemchannels/PlatformChannel.java",
    "io/flutter/embedding/engine/systemchannels/PlatformViewsChannel.java",
    "io/flutter/embedding/engine/systemchannels/SettingsChannel.java",
    "io/flutter/embedding/engine/systemchannels/SystemChannel.java",
    "io/flutter/embedding/engine/systemchannels/TextInputChannel.java",
    "io/flutter/plugin/common/ActivityLifecycleListener.java",
    "io/flutter/plugin/common/BasicMessageChannel.java",
    "io/flutter/plugin/common/BinaryCodec.java",
    "io/flutter/plugin/common/BinaryMessenger.java",
    "io/flutter/plugin/common/ErrorLogResult.java",
    "io/flutter/plugin/common/EventChannel.java",
    "io/flutter/plugin/common/FlutterException.java",
    "io/flutter/plugin/common/JSONMessageCodec.java",
    "io/flutter/plugin/common/JSONMethodCodec.java",
    "io/flutter/plugin/common/JSONUtil.java",
    "io/flutter/plugin/common/MessageCodec.java",
    "io/flutter/plugin/common/MethodCall.java",
    "io/flutter/plugin/common/MethodChannel.java",
    "io/flutter/plugin/common/MethodCodec.java",
    "io/flutter/plugin/common/PluginRegistry.java",
    "io/flutter/plugin/common/StandardMessageCodec.java",
    "io/flutter/plugin/common/StandardMethodCodec.java",
    "io/flutter/plugin/common/StringCodec.java",
    "io/flutter/plugin/editing/InputConnectionAdaptor.java",
    "io/flutter/plugin/editing/TextInputPlugin.java",
    "io/flutter/plugin/platform/AccessibilityEventsDelegate.java",
    "io/flutter/plugin/platform/PlatformPlugin.java",
    "io/flutter/plugin/platform/PlatformView.java",
    "io/flutter/plugin/platform/PlatformViewFactory.java",
    "io/flutter/plugin/platform/PlatformViewRegistry.java",
    "io/flutter/plugin/platform/PlatformViewRegistryImpl.java",
    "io/flutter/plugin/platform/PlatformViewsAccessibilityDelegate.java",
    "io/flutter/plugin/platform/PlatformViewsController.java",
    "io/flutter/plugin/platform/SingleViewPresentation.java",
    "io/flutter/plugin/platform/VirtualDisplayController.java",
    "io/flutter/util/PathUtils.java",
    "io/flutter/util/Preconditions.java",
    "io/flutter/util/Predicate.java",
    "io/flutter/view/AccessibilityBridge.java",
    "io/flutter/view/AccessibilityViewEmbedder.java",
    "io/flutter/view/FlutterCallbackInformation.java",
    "io/flutter/view/FlutterMain.java",
    "io/flutter/view/FlutterNativeView.java",
    "io/flutter/view/FlutterRunArguments.java",
    "io/flutter/view/FlutterView.java",
    "io/flutter/view/ResourceCleaner.java",
    "io/flutter/view/ResourceExtractor.java",
    "io/flutter/view/ResourcePaths.java",
    "io/flutter/view/TextureRegistry.java",
    "io/flutter/view/VsyncWaiter.java",
  ]

  sources += get_target_outputs(":gen_android_build_config_java")

  android_support_jars = [
    "//third_party/android_support/android_support_v13.jar",
    "//third_party/android_support/android_support_compat.jar",
    "//third_party/android_support/android_support_annotations.jar",
    "//third_party/android_support/android_support_fragment.jar",
    "//third_party/android_support/android_arch_lifecycle_common.jar",
    "//third_party/android_support/android_arch_lifecycle_common_java8.jar",
    "//third_party/android_support/android_arch_lifecycle_runtime.jar",
    "//third_party/android_support/android_arch_lifecycle_viewmodel.jar",
  ]

  outputs = [
    depfile,
    jar_path,
    jar_path + ".md5.stamp",
    source_jar_path,
    source_jar_path + ".md5.stamp",
  ]
  inputs = [
    android_sdk_jar,
  ]
  inputs += android_support_jars

  _rebased_current_path = rebase_path(".")
  _rebased_jar_path = rebase_path(jar_path, root_build_dir)
  _rebased_source_jar_path = rebase_path(source_jar_path, root_build_dir)
  _rebased_depfile = rebase_path(depfile, root_build_dir)
  _rebased_android_sdk_jar = rebase_path(android_sdk_jar, root_build_dir)
  _rebased_classpath = [ _rebased_android_sdk_jar ] +
                       rebase_path(android_support_jars, root_build_dir)

  args = [
    "--depfile=$_rebased_depfile",
    "--jar-path=$_rebased_jar_path",
    "--jar-source-path=$_rebased_source_jar_path",
    "--jar-source-base-dir=$_rebased_current_path",
    "--classpath=$_rebased_classpath",
    "--bootclasspath=$_rebased_android_sdk_jar",
  ]

  args += rebase_path(sources, root_build_dir)

  deps = [
    ":gen_android_build_config_java",
  ]
}

action("icudtl_object") {
  script = "$flutter_root/sky/tools/objcopy.py"

  icudtl_input = "//third_party/icu/flutter/icudtl.dat"
  icudtl_output = "$root_build_dir/flutter_icu/icudtl.o"

  inputs = [
    "$icudtl_input",
  ]

  outputs = [
    "$icudtl_output",
  ]

  args = [
    "--objcopy",
    rebase_path(android_objcopy),
    "--input",
    rebase_path(icudtl_input),
    "--output",
    rebase_path(icudtl_output),
    "--arch",
    current_cpu,
  ]
}

action("android") {
  script = "//build/android/gyp/create_flutter_jar.py"

  inputs = [
    "$root_build_dir/$embedding_jar_filename",
    "$root_build_dir/lib.stripped/libflutter.so",
  ]

  engine_artifact_id =
      string_replace(android_app_abi, "-", "_") + "_" + flutter_runtime_mode

  engine_jar_filename = "$engine_artifact_id-1.0.0-$engine_version.jar"

  outputs = [
    "$root_build_dir/flutter.jar",
    "$root_build_dir/$engine_jar_filename",
  ]

  args = [
    "--output",
    rebase_path("flutter.jar", root_build_dir, root_build_dir),
    "--output_native_jar",
    rebase_path(engine_jar_filename, root_build_dir, root_build_dir),
    "--dist_jar",
    rebase_path(embedding_jar_filename, root_build_dir, root_build_dir),
    "--native_lib",
    rebase_path("lib.stripped/libflutter.so", root_build_dir, root_build_dir),
    "--android_abi",
    "$android_app_abi",
  ]

  deps = [
    ":flutter_shell_java",
    ":flutter_shell_native",
    ":pom_embedding",
    ":pom_libflutter",
  ]
}

action("pom_libflutter") {
  script = "$flutter_root/tools/android_support/generate_pom_file.py"

  inputs = [
    "$flutter_root/tools/android_support/files.json",
  ]

  artifact_id =
      string_replace(android_app_abi, "-", "_") + "_" + flutter_runtime_mode

  outputs = [
    "$root_build_dir/$artifact_id-1.0.0-$engine_version.pom",
  ]

  args = [
    "--destination",
    rebase_path(root_build_dir),
    "--engine-version",
    engine_version,
    "--engine-artifact-id",
    artifact_id,
  ]
}

action("pom_embedding") {
  script = "$flutter_root/tools/android_support/generate_pom_file.py"

  inputs = [
    "$flutter_root/tools/android_support/files.json",
  ]

  artifact_id = "flutter_embedding_$flutter_runtime_mode"

  outputs = [
    "$root_build_dir/$artifact_id-1.0.0-$engine_version.pom",
  ]

  args = [
    "--destination",
    rebase_path(root_build_dir),
    "--engine-version",
    engine_version,
    "--engine-artifact-id",
    artifact_id,
    "--include-embedding-dependencies",
    "true",
  ]
}

# To build and run:
#   testing/run_tests.py [--type=java] [--filter=io.flutter.TestClassName]
action("robolectric_tests") {
  script = "//build/android/gyp/javac.py"
  depfile = "$target_gen_dir/$target_name.d"

  jar_path = "$root_out_dir/robolectric_tests.jar"

  sources = [
    "test/io/flutter/FlutterTestSuite.java",
    "test/io/flutter/SmokeTest.java",
    "test/io/flutter/embedding/android/FlutterActivityAndFragmentDelegateTest.java",
    "test/io/flutter/embedding/android/FlutterActivityTest.java",
    "test/io/flutter/embedding/android/FlutterFragmentTest.java",
    "test/io/flutter/embedding/engine/FlutterEngineCacheTest.java",
    "test/io/flutter/util/PreconditionsTest.java",
  ]

  outputs = [
    depfile,
    jar_path,
    jar_path + ".md5.stamp",
  ]

  _jar_dependencies = [
    android_sdk_jar,
    embedding_jar_path,
    "//third_party/robolectric/lib/junit-3.8.jar",
    "//third_party/robolectric/lib/junit-4.13-beta-3.jar",
    "//third_party/robolectric/lib/robolectric-3.8.jar",
    "//third_party/robolectric/lib/shadows-framework-3.8.jar",
    "//third_party/robolectric/lib/annotations-3.8.jar",
    "//third_party/robolectric/lib/runtime-1.1.1.jar",
    "//third_party/robolectric/lib/common-1.1.1.jar",
    "//third_party/robolectric/lib/common-java8-1.1.1.jar",
    "//third_party/robolectric/lib/support-annotations-28.0.0.jar",
    "//third_party/robolectric/lib/support-fragment-25.2.0.jar",
    "//third_party/robolectric/lib/mockito-all-1.10.19.jar",
  ]

  inputs = _jar_dependencies

  _rebased_jar_path = rebase_path(jar_path, root_build_dir)
  _rebased_depfile = rebase_path(depfile, root_build_dir)
  _rebased_classpath = rebase_path(_jar_dependencies, root_build_dir)
  _rebased_srcjars = rebase_path(_jar_dependencies, root_build_dir)

  args = [
    "--depfile=$_rebased_depfile",
    "--jar-path=$_rebased_jar_path",
    "--classpath=$_rebased_classpath",
    "--java-srcjars=$_rebased_srcjars",
  ]

  args += rebase_path(sources, root_build_dir)

  deps = [
    ":android",
    ":flutter_shell_java",
  ]
}
