1 /*
2 * Copyright (c) 2021-2022 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 #include "multimodal_standardized_event_manager.h"
17 #include <cinttypes>
18 #include "define_multimodal.h"
19 #include "error_multimodal.h"
20 #include "immi_token.h"
21 #include "input_event_data_transformation.h"
22 #include "multimodal_event_handler.h"
23 #include "net_packet.h"
24 #include "proto.h"
25
26 namespace OHOS {
27 namespace MMI {
28 namespace {
29 constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {
30 LOG_CORE, MMI_LOG_DOMAIN, "MultimodalStandardizedEventManager"
31 };
32 }
33
MultimodalStandardizedEventManager()34 MultimodalStandardizedEventManager::MultimodalStandardizedEventManager() {}
35
~MultimodalStandardizedEventManager()36 MultimodalStandardizedEventManager::~MultimodalStandardizedEventManager() {}
37
SetClientHandle(MMIClientPtr client)38 void MultimodalStandardizedEventManager::SetClientHandle(MMIClientPtr client)
39 {
40 MMI_LOGD("enter");
41 client_ = client;
42 }
43
SubscribeKeyEvent(const KeyEventInputSubscribeManager::SubscribeKeyEventInfo & subscribeInfo)44 int32_t MultimodalStandardizedEventManager::SubscribeKeyEvent(
45 const KeyEventInputSubscribeManager::SubscribeKeyEventInfo &subscribeInfo)
46 {
47 MMI_LOGD("Enter");
48 OHOS::MMI::NetPacket pkt(MmiMessageId::SUBSCRIBE_KEY_EVENT);
49 std::shared_ptr<OHOS::MMI::KeyOption> keyOption = subscribeInfo.GetKeyOption();
50 uint32_t preKeySize = keyOption->GetPreKeys().size();
51 pkt << subscribeInfo.GetSubscribeId() << keyOption->GetFinalKey() << keyOption->IsFinalKeyDown()
52 << keyOption->GetFinalKeyDownDuration() << preKeySize;
53
54 std::set<int32_t> preKeys = keyOption->GetPreKeys();
55 for (const auto &item : preKeys) {
56 pkt << item;
57 }
58 if (MMIEventHdl.GetMMIClient() == nullptr) {
59 MMI_LOGE("client init failed");
60 return RET_ERR;
61 }
62 if (!SendMsg(pkt)) {
63 MMI_LOGE("Client failed to send message");
64 return RET_ERR;
65 }
66 return RET_OK;
67 }
68
UnSubscribeKeyEvent(int32_t subscribeId)69 int32_t MultimodalStandardizedEventManager::UnSubscribeKeyEvent(int32_t subscribeId)
70 {
71 MMI_LOGD("Enter");
72 OHOS::MMI::NetPacket pkt(MmiMessageId::UNSUBSCRIBE_KEY_EVENT);
73 pkt << subscribeId;
74 if (MMIEventHdl.GetMMIClient() == nullptr) {
75 MMI_LOGE("client init failed");
76 return RET_ERR;
77 }
78 if (!SendMsg(pkt)) {
79 MMI_LOGE("Client failed to send message");
80 return RET_ERR;
81 }
82 return RET_OK;
83 }
84
InjectionVirtual(bool isPressed,int32_t keyCode,int32_t keyDownDuration,int32_t maxKeyCode)85 int32_t MultimodalStandardizedEventManager::InjectionVirtual(bool isPressed, int32_t keyCode,
86 int32_t keyDownDuration, int32_t maxKeyCode)
87 {
88 VirtualKey virtualevent;
89 virtualevent.isPressed = isPressed;
90 virtualevent.keyCode = keyCode;
91 virtualevent.keyDownDuration = keyDownDuration;
92 OHOS::MMI::NetPacket pkt(MmiMessageId::ON_VIRTUAL_KEY);
93 pkt << virtualevent;
94 return SendMsg(pkt);
95 }
96
InjectEvent(const std::shared_ptr<KeyEvent> key)97 int32_t MultimodalStandardizedEventManager::InjectEvent(const std::shared_ptr<KeyEvent> key)
98 {
99 MMI_LOGD("begin");
100 CHKR(key, ERROR_NULL_POINTER, RET_ERR);
101 key->UpdateId();
102 if (key->GetKeyCode() < 0) {
103 MMI_LOGE("keyCode is invalid:%{public}u", key->GetKeyCode());
104 return RET_ERR;
105 }
106 NetPacket pkt(MmiMessageId::INJECT_KEY_EVENT);
107 int32_t errCode = InputEventDataTransformation::KeyEventToNetPacket(key, pkt);
108 if (errCode != RET_OK) {
109 MMI_LOGE("Serialization is Failed, errCode:%{public}u", errCode);
110 return RET_ERR;
111 }
112 if (!SendMsg(pkt)) {
113 MMI_LOGE("Send inject event Msg error");
114 return RET_ERR;
115 }
116 MMI_LOGD("leave");
117 return RET_OK;
118 }
119
InjectPointerEvent(std::shared_ptr<PointerEvent> pointerEvent)120 int32_t MultimodalStandardizedEventManager::InjectPointerEvent(std::shared_ptr<PointerEvent> pointerEvent)
121 {
122 MMI_LOGD("enter");
123 CHKPR(pointerEvent, RET_ERR);
124 std::vector<int32_t> pointerIds { pointerEvent->GetPointersIdList() };
125 MMI_LOGD("Pointer event dispatcher of client:eventType:%{public}s,actionTime:%{public}" PRId64 ","
126 "action:%{public}d,actionStartTime:%{public}" PRId64 ","
127 "flag:%{public}u,pointerAction:%{public}s,sourceType:%{public}s,"
128 "VerticalAxisValue:%{public}f,HorizontalAxisValue:%{public}f,pointerCount:%{public}zu",
129 pointerEvent->DumpEventType(), pointerEvent->GetActionTime(),
130 pointerEvent->GetAction(), pointerEvent->GetActionStartTime(),
131 pointerEvent->GetFlag(), pointerEvent->DumpPointerAction(),
132 pointerEvent->DumpSourceType(),
133 pointerEvent->GetAxisValue(PointerEvent::AXIS_TYPE_SCROLL_VERTICAL),
134 pointerEvent->GetAxisValue(PointerEvent::AXIS_TYPE_SCROLL_HORIZONTAL),
135 pointerIds.size());
136
137 for (const auto &pointerId : pointerIds) {
138 OHOS::MMI::PointerEvent::PointerItem item;
139 CHKR(pointerEvent->GetPointerItem(pointerId, item), PARAM_INPUT_FAIL, RET_ERR);
140
141 MMI_LOGD("DownTime:%{public}" PRId64 ",isPressed:%{public}s,"
142 "globalX:%{public}d,globalY:%{public}d,localX:%{public}d,localY:%{public}d,"
143 "width:%{public}d,height:%{public}d,pressure:%{public}d",
144 item.GetDownTime(), (item.IsPressed() ? "true" : "false"),
145 item.GetGlobalX(), item.GetGlobalY(), item.GetLocalX(), item.GetLocalY(),
146 item.GetWidth(), item.GetHeight(), item.GetPressure());
147 }
148 std::vector<int32_t> pressedKeys = pointerEvent->GetPressedKeys();
149 for (auto &keyCode : pressedKeys) {
150 MMI_LOGI("Pressed keyCode:%{public}d", keyCode);
151 }
152 OHOS::MMI::NetPacket pkt(MmiMessageId::INJECT_POINTER_EVENT);
153 CHKR((RET_OK == InputEventDataTransformation::Marshalling(pointerEvent, pkt)),
154 STREAM_BUF_WRITE_FAIL, RET_ERR);
155 MMI_LOGD("leave");
156 CHKR(SendMsg(pkt), MSG_SEND_FAIL, RET_ERR);
157 return RET_OK;
158 }
159
GetDeviceIds(int32_t userData)160 int32_t MultimodalStandardizedEventManager::GetDeviceIds(int32_t userData)
161 {
162 OHOS::MMI::NetPacket pkt(MmiMessageId::INPUT_DEVICE_IDS);
163 pkt << userData;
164 return SendMsg(pkt);
165 }
166
GetDevice(int32_t userData,int32_t deviceId)167 int32_t MultimodalStandardizedEventManager::GetDevice(int32_t userData, int32_t deviceId)
168 {
169 OHOS::MMI::NetPacket pkt(MmiMessageId::INPUT_DEVICE);
170 pkt << userData << deviceId;
171 return SendMsg(pkt);
172 }
173
SendMsg(NetPacket & pkt) const174 bool MultimodalStandardizedEventManager::SendMsg(NetPacket& pkt) const
175 {
176 CHKPF(client_);
177 return client_->SendMessage(pkt);
178 }
179 } // namespace MMI
180 } // namespace OHOS
181