// Copyright (C) 2019 The Android Open Source Project
//
// 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.

package {
    default_team: "trendy_team_input_framework",
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "frameworks_native_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: ["frameworks_native_license"],
}

cc_library_headers {
    name: "libinputdispatcher_headers",
    host_supported: true,
    export_include_dirs: [
        "include",
    ],
}

filegroup {
    name: "libinputdispatcher_sources",
    srcs: [
        "AnrTracker.cpp",
        "Connection.cpp",
        "DebugConfig.cpp",
        "DragState.cpp",
        "Entry.cpp",
        "FocusResolver.cpp",
        "InjectionState.cpp",
        "InputDispatcher.cpp",
        "InputDispatcherFactory.cpp",
        "InputEventTimeline.cpp",
        "InputState.cpp",
        "InputTarget.cpp",
        "LatencyAggregator.cpp",
        "LatencyTracker.cpp",
        "Monitor.cpp",
        "TouchedWindow.cpp",
        "TouchState.cpp",
        "trace/*.cpp",
    ],
}

cc_defaults {
    name: "libinputdispatcher_defaults",
    srcs: [":libinputdispatcher_sources"],
    shared_libs: [
        "libbase",
        "libcrypto",
        "libcutils",
        "libinput",
        "libkll",
        "liblog",
        "libprotobuf-cpp-lite",
        "libstatslog",
        "libutils",
        "libstatspull",
        "libstatssocket",
        "server_configurable_flags",
    ],
    static_libs: [
        "libattestation",
        "libgui_window_info_static",
        "libperfetto_client_experimental",
    ],
    target: {
        android: {
            shared_libs: [
                "libgui",
            ],
        },
    },
    header_libs: [
        "libinputdispatcher_headers",
    ],
}

cc_library_static {
    name: "libinputdispatcher",
    host_supported: true,
    defaults: [
        "inputflinger_defaults",
        "libinputdispatcher_defaults",
    ],
    shared_libs: [
        // This should consist only of dependencies from inputflinger. Other dependencies should be
        // in cc_defaults so that they are included in the tests.
        "libinputflinger_base",
        "libinputreporter",
    ],
    export_header_lib_headers: [
        "libinputdispatcher_headers",
    ],
    logtags: ["EventLogTags.logtags"],
}
