/* * Copyright (c) 2021 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. */ #ifndef OHOS_INPUT_TRANSFER_STATION_H #define OHOS_INPUT_TRANSFER_STATION_H #include "input_manager.h" #include "pointer_event.h" #include "window.h" #include "window_input_channel.h" #include "wm_single_instance.h" #include "vsync_station.h" namespace OHOS { namespace Rosen { class InputEventListener; class InputTransferStation { WM_DECLARE_SINGLE_INSTANCE_BASE(InputTransferStation); friend class InputEventListener; public: bool IsDestroyed() { return destroyed_; } void AddInputWindow(const sptr& window); void RemoveInputWindow(uint32_t windowId); void MarkRegisterToMMI() { isRegisteredMMI_ = true; } protected: InputTransferStation() = default; ~InputTransferStation(); private: bool IsRegisterToMMI() const { return isRegisteredMMI_; } sptr GetInputChannel(uint32_t windowId); std::mutex mtx_; bool destroyed_ { false }; std::unordered_map> windowInputChannels_; std::shared_ptr inputListener_ = nullptr; std::shared_ptr eventHandler_ = nullptr; const std::string INPUT_AND_VSYNC_THREAD = "InputAndVsyncThread"; bool isRegisteredMMI_ { false }; }; class InputEventListener : public MMI::IInputEventConsumer { public: InputEventListener() = default; void OnInputEvent(std::shared_ptr pointerEvent) const override; void OnInputEvent(std::shared_ptr keyEvent) const override; void OnInputEvent(std::shared_ptr axisEvent) const override; }; } // namespace Rosen } // namespace OHOS #endif // OHOS_INPUT_TRANSFER_STATION_H