# Copyright (c) 2021-2026 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("//build/ohos.gni")
import("./multimodalinput_mini.gni")

config("coverage_flags") {
  if (input_feature_coverage) {
    cflags = [
      "--coverage",
      "-Oz",
    ]
    ldflags = [ "--coverage" ]
    cflags_cc = [
      "--coverage",
      "-Oz",
    ]
  }
}

ohos_prebuilt_etc("mmi_uinput.rc") {
  source = "mmi_uinput.rc"
  relative_install_dir = "init"
  part_name = "input"
  subsystem_name = "multimodalinput"
}

ohos_prebuilt_etc("multimodalinput.rc") {
  if (input_feature_watch_cfg_source) {
    source = "watch/multimodalinput.cfg"
  } else {
    source = "multimodalinput.cfg"
  }
  relative_install_dir = "init"
  part_name = "input"
  subsystem_name = "multimodalinput"
}

ohos_executable("uinput_inject") {
  install_enable = true

  sources = uinput_inject_sources
  branch_protector_ret = "pac_ret"
  sanitize = {
    cfi = true
    cfi_cross_dso = true
    debug = false
  }

  include_dirs = [
    "${mmi_path}/service/nap_process/include",
    "${mmi_path}/util/common/include",
    "${mmi_path}/interfaces/native/innerkits/common/include",
  ]

  external_deps = [
    "bounds_checking_function:libsec_shared",
    "c_utils:utils",
    "drivers_interface_input:libinput_proxy_1.0",
    "hilog:libhilog",
  ]

  defines = [ "MMI_DISABLE_LOG_TRACE" ]

  cflags = [
    "-fstack-protector-strong",
    "-Oz",
  ]

  part_name = "input"
  subsystem_name = "multimodalinput"
}

group("multimodalinput_mmi_base") {
  deps = []
}

group("multimodalinput_mmi_frameworks") {
  deps = [ "frameworks/proxy:libmmi-client" ]
}

group("multimodalinput_mmi_service") {
  deps = [
    "common/property_name_mapper:mmi_property_name_mapper",
    "etc:input_system_etc",
    "etc/joystick:input_joystick_etc",
    "service:libcursor_drawing_adapter",
    "service:libmmi-server",
    "tools/inject_event:uinput",
    "util/screen_capture:libmmi-screen_capture",
    "service:libmmi-server-common",
  ]

  if (input_feature_joystick) {
    deps += [ "${mmi_path}/service/joystick:mmi_joystick_event_normalization" ]
  }

  if (input_feature_touch_drawing) {
    deps += [ "${mmi_path}/service/window_manager:mmi_touch_drawing_handler" ]
  }

  if (input_feature_touch_gesture) {
    deps += [ "${mmi_path}/service/touch_event_normalize:mmi_touch_gesture_manager" ]
  }
  
  if (input_feature_mouse) {
    deps += [ "${mmi_path}/service/mouse_event_normalize:mmi_mouse_event_normalizer" ]
  }
}

group("input-third-mmi") {
  external_deps = [
    "libevdev:libevdev",
    "libinput:libinput-third-mmi",
    "mtdev:libmtdev-third-mmi",
  ]
}

group("input_jsapi_group") {
  deps = []
  if (support_jsapi) {
    deps += [
      "frameworks/napi/gesture_event:gestureevent",
      "frameworks/napi/intention_code:intentioncode",
      "frameworks/napi/joystick_event:joystickevent",
      "frameworks/napi/key_code:keycode",
      "frameworks/napi/key_event:keyevent",
      "frameworks/napi/mouse_event:mouseevent",
      "frameworks/napi/touch_event:touchevent",
    ]
    if (input_feature_monitor) {
      deps += [ "frameworks/napi/input_monitor:inputmonitor" ]
    }
    if (input_feature_mouse) {
      deps += [ "frameworks/napi/pointer:pointer" ]
    }
    if (input_feature_keyboard) {
      deps += [
        "frameworks/napi/input_consumer:inputconsumer",
        "frameworks/napi/input_event_client:inputeventclient",
      ]
    }
    if (input_feature_input_device) {
      deps += [ "frameworks/napi/input_device:inputdevice" ]
    }
    if (input_feature_short_key) {
      deps += [ "frameworks/napi/short_key:shortkey" ]
    }
    deps += [ "frameworks/napi/infrared_emitter:infraredemitter" ]
  }
}

group("input_ets_group") {
  deps = [
    "frameworks/ets/gesture_event:ets_gestureEvent_package",
    "frameworks/ets/input_event:ets_inputEvent_package",
    "frameworks/ets/input_monitor:ets_inputMonitor_package",
    "frameworks/ets/intention_code:ets_intentionCode_package",
    "frameworks/ets/key_code:ets_keyCode_package",
    "frameworks/ets/key_event:ets_keyEvent_package",
    "frameworks/ets/mouse_event:ets_mouseEvent_package",
    "frameworks/ets/touch_event:ets_touchEvent_package",
  ]
  if (input_feature_keyboard) {
    deps += [
      "frameworks/ets/input_consumer:ets_inputConsumer_package",
      "frameworks/ets/input_event_client:ets_inputEventClient_package",
    ]
  }
  if (input_feature_input_device) {
    deps += [ "frameworks/ets/input_device:ets_inputDevice_package" ]
  }
  if (input_feature_mouse) {
    deps += [ "frameworks/ets/pointer:ets_pointer_package" ]
  }
  if (input_feature_short_key) {
    deps += [ "frameworks/ets/short_key:ets_shortKey_package" ]
  }
  deps += [ "frameworks/ets/infrared_emitter:ets_infraredEmitter_package" ]
}

group("mmi_tests") {
  testonly = true
  deps = [
    "frameworks/ets/common/test:AniCommonTest",
    "frameworks/native/input:OHInputManagerEXTest",
    "frameworks/native/input:OHInputManagerTest",
    "frameworks/proxy:InputDeviceImplTest",
    "frameworks/proxy:InputHandlerManagerTest",
    "frameworks/proxy:InputManagerFilterManualTest",
    "frameworks/proxy:InputManagerImplTest",
    "frameworks/proxy:InputManagerInjectTest",
    "frameworks/proxy:InputManagerManualTest",
    "frameworks/proxy:InputManagerTest",
    "frameworks/proxy:InputMonitorManagerTest",
    "frameworks/proxy:KeyEventHookHandlerTest",
    "frameworks/proxy:KeyEventInputSubscribeManagerTest",
    "frameworks/proxy:KeyEventTest",
    "frameworks/proxy:LongPressEventSubscribeManagerTest",
    "frameworks/proxy:PointerEventExTest",
    "frameworks/proxy:PointerEventNdkTest",
    "frameworks/proxy:PointerEventTest",
    "frameworks/proxy:PointerStyleTest",
    "frameworks/proxy:ut-mmi-proxy-out",
    "frameworks/proxy/event_handler/test:InputActiveSubscribeManagerTest",
    "frameworks/proxy/event_handler/test:InputEventHookHandlerTest",
    "frameworks/proxy/event_handler/test:InputEventStagerTest",
    "frameworks/proxy/events/test:FrameworkEventTests",
    "libudev:test",
    "service:AccountManagerTest",
    "service:ApplicationStateObserverTest",
    "service:ConnectManagerProxyEXTest",
    "service:CursorDrawingComponentTest",
    "service:CursorDrawingComponentCoverageTest",
    "service:DelegateTaskTest",
    "service:DeviceConfigTest",
    "service:DeviceEventMonitorTest",
    "service:DeviceManagerExTest",
    "service:DeviceManagerTest",
    "service:DfxHisysEventTest",
    "service:DisplayStateManagerTest",
    "service:EventDispatchOrderCheckerTest",
    "service:EventDispatchTest",
    "service:EventDumpTest",
    "service:EventExpirationCheckerTest",
    "service:EventFilterDeathRecipientTest",
    "service:EventFilterHandlerTest",
    "service:EventHandlerEXTest",
    "service:EventHandlerTest",
    "service:EventLoopClosureCheckerTest",
    "service:EventNormalizeHandlerTest",
    "service:InfraredEmitterTest",
    "service:InputDisplayBindHelperTest",
    "service:InputEventHandlerTest",
    "service:InputWindowsManagerOneTest",
    "service:InputWindowsManagerTest",
    "service:InputWindowsManagerDisplayChangeTest",
    "service:InputWindowsManagerCoverageTest",
    "service:InterceptorTest",
    "service:KeyAutoRepeatExTest",
    "service/key_command/test:KeyCommandTest",
    "service:KeyEventHookManagerTest",
    "service:KeyEventNormalizeTest",
    "service:KeyEventValueTransformationTest",
    "service:KeyShortcutManagerTest",
    "service:KeyUnicodeTransformationTest",
    "service:KeymapMgrTest",
    "service:LibinputAdapterTest",
    "service:LongPressSubscribeHandlerTest",
    "service:ModuleLoaderTest",
    "service:MonitorTest",
    "service:NapProcessTest",
    "service:ProductTypeParserTest",
    "service:PropertyNameMapperTest",
    "service:ServerMsgHandlerTest",
    "service:SettingDataMigratorTest",
    "service:BundleNameParserTest",
    "service:SpecialInputDeviceParserTest",
    "service:StylusKeyTest",
    "service:StylusKeyTest",
    "service:SubscriberTest",
    "service:TimerManagerTest",
    "service:event_resample_test",
    "service:mmi-service-tests",
    "service/crown_transform_processor/test:CrownTransformProcessorTest",
    "service/joystick/test:JoystickLayoutMapTest",
    "service/subscriber/test:InputActiveSubscriberHandlerNewTest",
    "service/module_loader/test:ModuleLoaderTests",
    "service/mouse_event_normalize/test:MouseEventNormalizeEXTest",
    "service/mouse_event_normalize/test:MouseEventNormalizeTest",
    "service/subscriber/test:mmi_subscriber_tests",
    "service/touch_event_normalize/test:TouchEventNormalizeTests",
    "test/fuzztest:test",
    "test/unittest/interfaces:InputNativeHotkeyTest",
    "test/unittest/interfaces:InputNativeTest",
    "tools/inject_event:InjectEventTest",
    "util:UdsClientTest",
    "util/common:InputEventDataTransformationTest",
    "util/common:ResourceDecompressTest",
    "util/common:UtilCommonTest",
    "util/json_parser:JsonParserTest",
  ]

  if (input_feature_input_event_hook) {
    deps += [
      "service:InputEventHookTest",
      "service:InputEventHookManagerTest",
      "service:KeyEventHookTest",
      "service:KeyLoopClosureCheckerTest",
      "service:PointerLoopClosureCheckerTest",
      "service:PointerEventHookTest",
    ]
  }

  if (input_feature_pointer_drawing) {
    deps += [
      "service:InputWindowsManagerEXTest",
      "service:PointerDrawingManagerExTest",
      "service:PointerDrawingManagerSupTest",
      "service:PointerDrawingManagerTest",
      "service:PointerDrawingManagerHardCursorTest",
    ]
  }

  if (input_feature_switch) {
    deps += [ "frameworks/proxy:SwitchEventInputSubscribeManagerTest" ]
  }

  if (input_feature_touch_drawing) {
    deps += [
      "service:TouchDrawingManagerTest",
      "service/window_manager:TouchDrawingHandlerTest",
    ]
  }

  if (input_feature_knuckle) {
    deps += [ "service:KnuckleHandlerComponentTest" ]
  }

  if (input_feature_triple_finger_snapshot) {
    deps += [ "service:TripleFingerSnapshotManagerTest" ]
  }

  if (input_feature_product == "pc") {
    deps += [ "service:SuspendStateManagerTest" ]
  }
}

group("examples_group") {
  deps = [ "examples/input_device_display_bind:input_device_display_bind" ]
}