• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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