1 /* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef COOPERATE_CONTEXT_H 17 #define COOPERATE_CONTEXT_H 18 19 #include "event_handler.h" 20 #include "nocopyable.h" 21 22 #ifdef ENABLE_PERFORMANCE_CHECK 23 #include <chrono> 24 #include <mutex> 25 #endif // ENABLE_PERFORMANCE_CHECK 26 27 #include "common_event_adapter.h" 28 #include "common_event_observer.h" 29 #include "cooperate_events.h" 30 #include "ddm_adapter.h" 31 #include "dsoftbus_handler.h" 32 #include "event_manager.h" 33 #include "hot_area.h" 34 #include "input_device_mgr.h" 35 #include "input_event_transmission/input_event_builder.h" 36 #include "input_event_transmission/input_event_interceptor.h" 37 #include "i_context.h" 38 #include "mouse_location.h" 39 40 namespace OHOS { 41 namespace Msdp { 42 namespace DeviceStatus { 43 namespace Cooperate { 44 class Context final { 45 public: 46 Context(IContext *env); 47 ~Context() = default; 48 DISALLOW_COPY_AND_MOVE(Context); 49 50 void AttachSender(Channel<CooperateEvent>::Sender sender); 51 void AddObserver(std::shared_ptr<ICooperateObserver> observer); 52 void RemoveObserver(std::shared_ptr<ICooperateObserver> observer); 53 void Enable(); 54 void Disable(); 55 56 Channel<CooperateEvent>::Sender Sender() const; 57 std::shared_ptr<AppExecFwk::EventHandler> EventHandler() const; 58 std::string Local() const; 59 std::string Peer() const; 60 int32_t StartDeviceId() const; 61 Coordinate CursorPosition() const; 62 NormalizedCoordinate NormalizedCursorPosition() const; 63 uint32_t CooperateFlag() const; 64 65 bool IsLocal(const std::string &networkId) const; 66 bool IsPeer(const std::string &networkId) const; 67 bool NeedHideCursor() const; 68 69 void EnableCooperate(const EnableCooperateEvent &event); 70 void DisableCooperate(const DisableCooperateEvent &event); 71 void StartCooperate(const StartCooperateEvent &event); 72 void RemoteStartSuccess(const DSoftbusStartCooperateFinished &event); 73 void RelayCooperate(const DSoftbusRelayCooperate &event); 74 void OnPointerEvent(const InputPointerEvent &event); 75 void UpdateCooperateFlag(const UpdateCooperateFlagEvent &event); 76 void UpdateCursorPosition(); 77 void ResetCursorPosition(); 78 79 bool IsAllowCooperate(); 80 void OnStartCooperate(StartCooperateData &data); 81 void OnRemoteStartCooperate(RemoteStartCooperateData &data); 82 void OnTransitionOut(); 83 void OnTransitionIn(); 84 void OnBack(); 85 void OnRelayCooperation(const std::string &networkId, const NormalizedCoordinate &cursorPos); 86 void OnResetCooperation(); 87 void CloseDistributedFileConnection(const std::string &remoteNetworkId); 88 89 #ifdef ENABLE_PERFORMANCE_CHECK 90 void StartTrace(const std::string &name); 91 void FinishTrace(const std::string &name); 92 #endif // ENABLE_PERFORMANCE_CHECK 93 94 DDMAdapter ddm_; 95 DSoftbusHandler dsoftbus_; 96 EventManager eventMgr_; 97 HotArea hotArea_; 98 MouseLocation mouseLocation_; 99 InputDeviceMgr inputDevMgr_; 100 InputEventBuilder inputEventBuilder_; 101 InputEventInterceptor inputEventInterceptor_; 102 CommonEventAdapter commonEvent_; 103 104 private: 105 int32_t StartEventHandler(); 106 void StopEventHandler(); 107 int32_t EnableDDM(); 108 void DisableDDM(); 109 int32_t EnableDevMgr(); 110 void DisableDevMgr(); 111 int32_t EnableInputDevMgr(); 112 void DisableInputDevMgr(); 113 void SetCursorPosition(const Coordinate &cursorPos); 114 115 IContext *env_ { nullptr }; 116 Channel<CooperateEvent>::Sender sender_; 117 std::string remoteNetworkId_; 118 int32_t startDeviceId_ { -1 }; 119 uint32_t flag_ {}; 120 Coordinate cursorPos_ {}; 121 std::shared_ptr<AppExecFwk::EventHandler> eventHandler_; 122 std::shared_ptr<IBoardObserver> boardObserver_; 123 std::shared_ptr<IDeviceObserver> hotplugObserver_; 124 std::set<std::shared_ptr<ICooperateObserver>> observers_; 125 126 #ifdef ENABLE_PERFORMANCE_CHECK 127 std::mutex lock_; 128 std::map<std::string, std::chrono::time_point<std::chrono::steady_clock>> traces_; 129 #endif // ENABLE_PERFORMANCE_CHECK 130 }; 131 Sender()132inline Channel<CooperateEvent>::Sender Context::Sender() const 133 { 134 return sender_; 135 } 136 EventHandler()137inline std::shared_ptr<AppExecFwk::EventHandler> Context::EventHandler() const 138 { 139 return eventHandler_; 140 } 141 Local()142inline std::string Context::Local() const 143 { 144 return DSoftbusHandler::GetLocalNetworkId(); 145 } 146 Peer()147inline std::string Context::Peer() const 148 { 149 return remoteNetworkId_; 150 } 151 StartDeviceId()152inline int32_t Context::StartDeviceId() const 153 { 154 return startDeviceId_; 155 } 156 CursorPosition()157inline Coordinate Context::CursorPosition() const 158 { 159 return cursorPos_; 160 } 161 CooperateFlag()162inline uint32_t Context::CooperateFlag() const 163 { 164 return flag_; 165 } 166 IsLocal(const std::string & networkId)167inline bool Context::IsLocal(const std::string &networkId) const 168 { 169 return (networkId == DSoftbusHandler::GetLocalNetworkId()); 170 } 171 IsPeer(const std::string & networkId)172inline bool Context::IsPeer(const std::string &networkId) const 173 { 174 return (networkId == remoteNetworkId_); 175 } 176 NeedHideCursor()177inline bool Context::NeedHideCursor() const 178 { 179 return (flag_ & COOPERATE_FLAG_HIDE_CURSOR); 180 } 181 } // namespace Cooperate 182 } // namespace DeviceStatus 183 } // namespace Msdp 184 } // namespace OHOS 185 #endif // COOPERATE_CONTEXT_H 186