# Copyright 2015 The Fuchsia 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/components.gni")
import("//build/config.gni")

# TODO(fxbug.dev/83213) Retain v1 component while out of tree tests need it.
fuchsia_component("component_v1") {
  component_name = "root_presenter"
  manifest = "meta/root_presenter.cmx"
  deps = [ ":bin" ]
}

fuchsia_component("component_v2") {
  component_name = "root_presenter"
  manifest = "meta/root_presenter.cml"
  deps = [ ":bin" ]
}

fuchsia_package("root_presenter") {
  deps = [
    ":component_v1",
    ":component_v2",
  ]
}

fuchsia_component("component_v1_for_test") {
  component_name = "root_presenter"
  manifest = "meta/root_presenter_base.cmx"
  deps = [ ":bin" ]
}

fuchsia_component("component_v2_for_test") {
  component_name = "root_presenter"
  manifest = "meta/root_presenter_for_test.cml"
  deps = [ ":bin" ]
}

group("tests") {
  testonly = true

  deps = [
    ":component_v1_for_test",
    "//src/ui/bin/root_presenter/tests",
  ]
}

executable("bin") {
  output_name = "root_presenter"

  sources = [ "main.cc" ]

  deps = [
    ":lib",
    "//sdk/lib/sys/inspect/cpp",
    "//src/lib/fxl",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/trace",
    "//zircon/system/ulib/trace-provider",
  ]

  configs += [ "//third_party/glm:enable_experimental" ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

source_set("lib") {
  sources = [
    "app.cc",
    "app.h",
    "inspect.cc",
    "inspect.h",
    "presentation.cc",
    "presentation.h",
  ]

  public_deps = [
    ":factory_reset_manager",
    ":focus_dispatcher",
    "//sdk/fidl/fuchsia.accessibility",
    "//sdk/fidl/fuchsia.input.virtualkeyboard",
    "//sdk/fidl/fuchsia.media.sounds",
    "//sdk/fidl/fuchsia.recovery",
    "//sdk/fidl/fuchsia.recovery.ui",
    "//sdk/fidl/fuchsia.ui.accessibility.view",
    "//sdk/fidl/fuchsia.ui.brightness",
    "//sdk/fidl/fuchsia.ui.gfx",
    "//sdk/fidl/fuchsia.ui.input",
    "//sdk/fidl/fuchsia.ui.input.accessibility",
    "//sdk/fidl/fuchsia.ui.keyboard.focus",
    "//sdk/fidl/fuchsia.ui.pointerinjector",
    "//sdk/fidl/fuchsia.ui.pointerinjector.configuration",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/fidl/fuchsia.ui.scenic",
    "//sdk/fidl/fuchsia.ui.views",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/sys/inspect/cpp",
    "//sdk/lib/ui/scenic/cpp",
    "//src/lib/ui/input",
    "//src/ui/input/lib/injector",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/inspect",
  ]

  deps = [
    ":color_transform",
    ":constants",
    ":displays",
    ":media_buttons_handler",
    ":safe_presenter",
    ":virtual_keyboard",
    "//sdk/fidl/fuchsia.accessibility",
    "//sdk/fidl/fuchsia.ui.gfx",
    "//sdk/fidl/fuchsia.ui.input",
    "//sdk/fidl/fuchsia.ui.pointerinjector.configuration",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/fidl/fuchsia.ui.views",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/cpp",
    "//src/lib/fostr/fidl/fuchsia.input.report",
    "//src/lib/fostr/fidl/fuchsia.ui.input",
    "//src/lib/fxl",
    "//src/lib/ui/input",
    "//src/ui/lib/input_report_reader",
    "//third_party/glm",
    "//zircon/system/ulib/trace",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

source_set("displays") {
  sources = [
    "displays/display_configuration.cc",
    "displays/display_configuration.h",
    "displays/display_metrics.h",
    "displays/display_model.cc",
    "displays/display_model.h",
  ]

  deps = [
    "//sdk/fidl/fuchsia.ui.policy",
    "//src/lib/fxl",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

source_set("media_buttons_handler") {
  sources = [
    "media_buttons_handler.cc",
    "media_buttons_handler.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.ui.input",
    "//sdk/fidl/fuchsia.ui.policy",
  ]
  deps = [
    ":constants",
    "//sdk/lib/sys/cpp",
    "//src/lib/fostr/fidl/fuchsia.input.report",
    "//src/lib/fostr/fidl/fuchsia.ui.input",
    "//src/lib/ui/input",
  ]
}

source_set("focus_dispatcher") {
  sources = [
    "focus_dispatcher.cc",
    "focus_dispatcher.h",
    "focus_listener.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.ui.focus",
    "//sdk/fidl/fuchsia.ui.keyboard.focus",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
  ]
}

source_set("factory_reset_manager") {
  sources = [
    "factory_reset_manager.cc",
    "factory_reset_manager.h",
    "media_retriever.cc",
    "media_retriever.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.media.sounds",
    "//sdk/fidl/fuchsia.recovery",
    "//sdk/fidl/fuchsia.recovery.policy",
    "//sdk/fidl/fuchsia.recovery.ui",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
  ]

  deps = [
    ":constants",
    "//sdk/fidl/fuchsia.media",
    "//sdk/fidl/fuchsia.ui.input",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/lib/fdio",
    "//src/lib/files",
    "//src/lib/fostr/fidl/fuchsia.input.report",
    "//src/lib/fostr/fidl/fuchsia.ui.input",
  ]
}

source_set("color_transform") {
  sources = [
    "color_transform_handler.cc",
    "color_transform_handler.h",
  ]

  public_deps = [ "//sdk/lib/sys/cpp" ]

  deps = [
    ":safe_presenter",
    "//sdk/fidl/fuchsia.accessibility",
    "//sdk/fidl/fuchsia.ui.brightness",
    "//sdk/fidl/fuchsia.ui.gfx",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/fidl/fuchsia.ui.scenic",
    "//sdk/lib/syslog/cpp",
    "//sdk/lib/ui/scenic/cpp",
  ]
}

source_set("safe_presenter") {
  sources = [
    "safe_presenter.cc",
    "safe_presenter.h",
  ]

  public_deps = [ "//sdk/lib/sys/cpp" ]

  deps = [
    "//sdk/lib/syslog/cpp",
    "//sdk/lib/ui/scenic/cpp",
  ]
}

source_set("constants") {
  sources = [
    "constants.cc",
    "constants.h",
  ]
  deps = [ "//src/lib/files" ]
}

source_set("virtual_keyboard") {
  sources = [
    "virtual_keyboard_controller.cc",
    "virtual_keyboard_controller.h",
    "virtual_keyboard_coordinator.cc",
    "virtual_keyboard_coordinator.h",
    "virtual_keyboard_manager.cc",
    "virtual_keyboard_manager.h",
  ]

  deps = [
    ":focus_dispatcher",
    "//sdk/fidl/fuchsia.input.virtualkeyboard",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/syslog/cpp",
    "//src/lib/fxl",
  ]
}
