1 /*
2 * Copyright (c) 2025 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 "intention_client.h"
17
18 #include "if_system_ability_manager.h"
19 #include "iservice_registry.h"
20 #include "system_ability_definition.h"
21
22 #include "iremote_broker.h"
23 #include "iremote_object.h"
24
25 #include "devicestatus_define.h"
26
27 #undef LOG_TAG
28 #define LOG_TAG "IntentionClient"
29
30 namespace OHOS {
31 namespace Msdp {
32 namespace DeviceStatus {
33
34 std::shared_ptr<IntentionClient> IntentionClient::instance_ = std::make_shared<IntentionClient>();
35
GetInstance()36 IntentionClient *IntentionClient::GetInstance()
37 {
38 return instance_.get();
39 }
40
~IntentionClient()41 IntentionClient::~IntentionClient()
42 {
43 std::lock_guard lock(mutex_);
44 if (devicestatusProxy_ != nullptr) {
45 auto remoteObject = devicestatusProxy_->AsObject();
46 if (remoteObject != nullptr) {
47 remoteObject->RemoveDeathRecipient(deathRecipient_);
48 }
49 }
50 }
51
Connect()52 ErrCode IntentionClient::Connect()
53 {
54 CALL_INFO_TRACE;
55 std::lock_guard lock(mutex_);
56 if (devicestatusProxy_ != nullptr) {
57 return RET_OK;
58 }
59
60 sptr<ISystemAbilityManager> sa = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
61 CHKPR(sa, E_DEVICESTATUS_GET_SYSTEM_ABILITY_MANAGER_FAILED);
62
63 sptr<IRemoteObject> remoteObject = sa->CheckSystemAbility(MSDP_DEVICESTATUS_SERVICE_ID);
64 CHKPR(remoteObject, E_DEVICESTATUS_GET_SERVICE_FAILED);
65
66 deathRecipient_ = sptr<DeathRecipient>::MakeSptr(shared_from_this());
67 CHKPR(deathRecipient_, ERR_NO_MEMORY);
68
69 if (remoteObject->IsProxyObject()) {
70 if (!remoteObject->AddDeathRecipient(deathRecipient_)) {
71 FI_HILOGE("Add death recipient to DeviceStatus service failed");
72 return E_DEVICESTATUS_ADD_DEATH_RECIPIENT_FAILED;
73 }
74 }
75
76 devicestatusProxy_ = iface_cast<IIntention>(remoteObject);
77 FI_HILOGI("Connecting IntentionService success");
78 return RET_OK;
79 }
80
Socket(const std::string & programName,int32_t moduleType,int & socketFd,int32_t & tokenType)81 int32_t IntentionClient::Socket(const std::string& programName, int32_t moduleType, int& socketFd, int32_t& tokenType)
82 {
83 CALL_INFO_TRACE;
84 if (Connect() != RET_OK) {
85 FI_HILOGE("Can not connect to IntentionService");
86 return RET_ERR;
87 }
88 std::lock_guard lock(mutex_);
89 CHKPR(devicestatusProxy_, RET_ERR);
90 if (int32_t ret = devicestatusProxy_->Socket(programName, moduleType, socketFd, tokenType); ret != RET_OK) {
91 FI_HILOGE("proxy::Socket fail");
92 return ret;
93 }
94 return RET_OK;
95 }
96
EnableCooperate(int32_t userData)97 int32_t IntentionClient::EnableCooperate(int32_t userData)
98 {
99 CALL_DEBUG_ENTER;
100 if (Connect() != RET_OK) {
101 FI_HILOGE("Can not connect to IntentionService");
102 return RET_ERR;
103 }
104 std::lock_guard lock(mutex_);
105 CHKPR(devicestatusProxy_, RET_ERR);
106 if (int32_t ret = devicestatusProxy_->EnableCooperate(userData); ret != RET_OK) {
107 FI_HILOGE("proxy::EnableCooperate fail");
108 return ret;
109 }
110 return RET_OK;
111 }
112
DisableCooperate(int32_t userData)113 int32_t IntentionClient::DisableCooperate(int32_t userData)
114 {
115 CALL_DEBUG_ENTER;
116 if (Connect() != RET_OK) {
117 FI_HILOGE("Can not connect to IntentionService");
118 return RET_ERR;
119 }
120 std::lock_guard lock(mutex_);
121 CHKPR(devicestatusProxy_, RET_ERR);
122 if (int32_t ret = devicestatusProxy_->DisableCooperate(userData); ret != RET_OK) {
123 FI_HILOGE("proxy::DisableCooperate fail");
124 return ret;
125 }
126 return RET_OK;
127 }
128
StartCooperate(const std::string & remoteNetworkId,int32_t userData,int32_t startDeviceId,bool checkPermission)129 int32_t IntentionClient::StartCooperate(const std::string& remoteNetworkId, int32_t userData, int32_t startDeviceId,
130 bool checkPermission)
131 {
132 CALL_DEBUG_ENTER;
133 if (Connect() != RET_OK) {
134 FI_HILOGE("Can not connect to IntentionService");
135 return RET_ERR;
136 }
137 std::lock_guard lock(mutex_);
138 CHKPR(devicestatusProxy_, RET_ERR);
139 if (int32_t ret = devicestatusProxy_->StartCooperate(remoteNetworkId, userData, startDeviceId, checkPermission);
140 ret != RET_OK) {
141 FI_HILOGE("proxy::StartCooperate fail");
142 return ret;
143 }
144 return RET_OK;
145 }
146
StartCooperateWithOptions(const std::string & remoteNetworkId,int32_t userData,int32_t startDeviceId,bool checkPermission,const CooperateOptions & options)147 int32_t IntentionClient::StartCooperateWithOptions(const std::string &remoteNetworkId,
148 int32_t userData, int32_t startDeviceId, bool checkPermission, const CooperateOptions &options)
149 {
150 CALL_DEBUG_ENTER;
151 if (Connect() != RET_OK) {
152 FI_HILOGE("Can not connect to IntentionService");
153 return RET_ERR;
154 }
155 std::lock_guard lock(mutex_);
156 CHKPR(devicestatusProxy_, RET_ERR);
157 SequenceableCooperateOptions sequenceableCooperateOptions(options);
158 if (int32_t ret = devicestatusProxy_->StartCooperateWithOptions(remoteNetworkId, userData,
159 startDeviceId, checkPermission, sequenceableCooperateOptions); ret != RET_OK) {
160 FI_HILOGE("proxy::StartCooperateWithOptions fail");
161 return ret;
162 }
163 return RET_OK;
164 }
165
StopCooperate(int32_t userData,bool isUnchained,bool checkPermission)166 int32_t IntentionClient::StopCooperate(int32_t userData, bool isUnchained, bool checkPermission)
167 {
168 CALL_DEBUG_ENTER;
169 if (Connect() != RET_OK) {
170 FI_HILOGE("Can not connect to IntentionService");
171 return RET_ERR;
172 }
173 std::lock_guard lock(mutex_);
174 CHKPR(devicestatusProxy_, RET_ERR);
175 if (int32_t ret = devicestatusProxy_->StopCooperate(userData, isUnchained, checkPermission);
176 ret != RET_OK) {
177 FI_HILOGE("proxy::StopCooperate fail");
178 return ret;
179 }
180 return RET_OK;
181 }
182
RegisterCooperateListener()183 int32_t IntentionClient::RegisterCooperateListener()
184 {
185 CALL_DEBUG_ENTER;
186 if (Connect() != RET_OK) {
187 FI_HILOGE("Can not connect to IntentionService");
188 return RET_ERR;
189 }
190 std::lock_guard lock(mutex_);
191 CHKPR(devicestatusProxy_, RET_ERR);
192 if (int32_t ret = devicestatusProxy_->RegisterCooperateListener();
193 ret != RET_OK) {
194 FI_HILOGE("proxy::RegisterCooperateListener fail");
195 return ret;
196 }
197 return RET_OK;
198 }
199
UnregisterCooperateListener()200 int32_t IntentionClient::UnregisterCooperateListener()
201 {
202 CALL_DEBUG_ENTER;
203 if (Connect() != RET_OK) {
204 FI_HILOGE("Can not connect to IntentionService");
205 return RET_ERR;
206 }
207 std::lock_guard lock(mutex_);
208 CHKPR(devicestatusProxy_, RET_ERR);
209 if (int32_t ret = devicestatusProxy_->UnregisterCooperateListener();
210 ret != RET_OK) {
211 FI_HILOGE("proxy::UnregisterCooperateListener fail");
212 return ret;
213 }
214 return RET_OK;
215 }
216
RegisterHotAreaListener(int32_t userData,bool checkPermission)217 int32_t IntentionClient::RegisterHotAreaListener(int32_t userData, bool checkPermission)
218 {
219 CALL_DEBUG_ENTER;
220 if (Connect() != RET_OK) {
221 FI_HILOGE("Can not connect to IntentionService");
222 return RET_ERR;
223 }
224 std::lock_guard lock(mutex_);
225 CHKPR(devicestatusProxy_, RET_ERR);
226 if (int32_t ret = devicestatusProxy_->RegisterHotAreaListener(userData, checkPermission);
227 ret != RET_OK) {
228 FI_HILOGE("proxy::RegisterHotAreaListener fail");
229 return ret;
230 }
231 return RET_OK;
232 }
233
UnregisterHotAreaListener(int32_t userData,bool checkPermission)234 int32_t IntentionClient::UnregisterHotAreaListener(int32_t userData, bool checkPermission)
235 {
236 CALL_DEBUG_ENTER;
237 if (Connect() != RET_OK) {
238 FI_HILOGE("Can not connect to IntentionService");
239 return RET_ERR;
240 }
241 std::lock_guard lock(mutex_);
242 CHKPR(devicestatusProxy_, RET_ERR);
243 if (int32_t ret = devicestatusProxy_->UnregisterHotAreaListener();
244 ret != RET_OK) {
245 FI_HILOGE("proxy::UnregisterHotAreaListener fail");
246 return ret;
247 }
248 return RET_OK;
249 }
250
RegisterMouseEventListener(const std::string & networkId)251 int32_t IntentionClient::RegisterMouseEventListener(const std::string& networkId)
252 {
253 CALL_DEBUG_ENTER;
254 if (Connect() != RET_OK) {
255 FI_HILOGE("Can not connect to IntentionService");
256 return RET_ERR;
257 }
258 std::lock_guard lock(mutex_);
259 CHKPR(devicestatusProxy_, RET_ERR);
260 if (int32_t ret = devicestatusProxy_->RegisterMouseEventListener(networkId);
261 ret != RET_OK) {
262 FI_HILOGE("proxy::RegisterMouseEventListener fail");
263 return ret;
264 }
265 return RET_OK;
266 }
267
UnregisterMouseEventListener(const std::string & networkId)268 int32_t IntentionClient::UnregisterMouseEventListener(const std::string& networkId)
269 {
270 CALL_DEBUG_ENTER;
271 if (Connect() != RET_OK) {
272 FI_HILOGE("Can not connect to IntentionService");
273 return RET_ERR;
274 }
275 std::lock_guard lock(mutex_);
276 CHKPR(devicestatusProxy_, RET_ERR);
277 if (int32_t ret = devicestatusProxy_->UnregisterMouseEventListener(networkId);
278 ret != RET_OK) {
279 FI_HILOGE("proxy::UnregisterMouseEventListener fail");
280 return ret;
281 }
282 return RET_OK;
283 }
284
GetCooperateStateSync(const std::string & udid,bool & state)285 int32_t IntentionClient::GetCooperateStateSync(const std::string& udid, bool& state)
286 {
287 CALL_DEBUG_ENTER;
288 if (Connect() != RET_OK) {
289 FI_HILOGE("Can not connect to IntentionService");
290 return RET_ERR;
291 }
292 std::lock_guard lock(mutex_);
293 CHKPR(devicestatusProxy_, RET_ERR);
294 if (int32_t ret = devicestatusProxy_->GetCooperateStateSync(udid, state);
295 ret != RET_OK) {
296 FI_HILOGE("proxy::GetCooperateStateSync fail");
297 return ret;
298 }
299 return RET_OK;
300 }
301
GetCooperateStateAsync(const std::string & networkId,int32_t userData,bool isCheckPermission)302 int32_t IntentionClient::GetCooperateStateAsync(const std::string& networkId, int32_t userData, bool isCheckPermission)
303 {
304 CALL_DEBUG_ENTER;
305 if (Connect() != RET_OK) {
306 FI_HILOGE("Can not connect to IntentionService");
307 return RET_ERR;
308 }
309 std::lock_guard lock(mutex_);
310 CHKPR(devicestatusProxy_, RET_ERR);
311 if (int32_t ret = devicestatusProxy_->GetCooperateStateAsync(networkId, userData, isCheckPermission);
312 ret != RET_OK) {
313 FI_HILOGE("proxy::GetCooperateStateAsync fail");
314 return ret;
315 }
316 return RET_OK;
317 }
318
SetDamplingCoefficient(uint32_t direction,double coefficient)319 int32_t IntentionClient::SetDamplingCoefficient(uint32_t direction, double coefficient)
320 {
321 CALL_DEBUG_ENTER;
322 if (Connect() != RET_OK) {
323 FI_HILOGE("Can not connect to IntentionService");
324 return RET_ERR;
325 }
326 std::lock_guard lock(mutex_);
327 CHKPR(devicestatusProxy_, RET_ERR);
328 if (int32_t ret = devicestatusProxy_->SetDamplingCoefficient(direction, coefficient);
329 ret != RET_OK) {
330 FI_HILOGE("proxy::SetDamplingCoefficient fail");
331 return ret;
332 }
333 return RET_OK;
334 }
335
StartDrag(const DragData & dragData)336 int32_t IntentionClient::StartDrag(const DragData &dragData)
337 {
338 CALL_DEBUG_ENTER;
339 if (Connect() != RET_OK) {
340 FI_HILOGE("Can not connect to IntentionService");
341 return RET_ERR;
342 }
343 std::lock_guard lock(mutex_);
344 CHKPR(devicestatusProxy_, RET_ERR);
345 SequenceableDragData sequenceableDragData(dragData);
346 if (int32_t ret = devicestatusProxy_->StartDrag(sequenceableDragData); ret != RET_OK) {
347 FI_HILOGE("proxy::StartDrag fail");
348 return ret;
349 }
350 return RET_OK;
351 }
352
StopDrag(const DragDropResult & dropResult)353 int32_t IntentionClient::StopDrag(const DragDropResult &dropResult)
354 {
355 CALL_DEBUG_ENTER;
356 if (Connect() != RET_OK) {
357 FI_HILOGE("Can not connect to IntentionService");
358 return RET_ERR;
359 }
360 std::lock_guard lock(mutex_);
361 CHKPR(devicestatusProxy_, RET_ERR);
362 SequenceableDragResult sequenceableDragResult(dropResult);
363 if (int32_t ret = devicestatusProxy_->StopDrag(sequenceableDragResult); ret != RET_OK) {
364 FI_HILOGE("proxy::StopDrag fail");
365 return ret;
366 }
367 return RET_OK;
368 }
369
EnableInternalDropAnimation(const std::string & animationInfo)370 int32_t IntentionClient::EnableInternalDropAnimation(const std::string &animationInfo)
371 {
372 CALL_DEBUG_ENTER;
373 if (Connect() != RET_OK) {
374 FI_HILOGE("Can not connect to IntentionService");
375 return RET_ERR;
376 }
377 std::lock_guard lock(mutex_);
378 CHKPR(devicestatusProxy_, RET_ERR);
379 int32_t ret = devicestatusProxy_->EnableInternalDropAnimation(animationInfo);
380 if (ret != RET_OK) {
381 FI_HILOGE("proxy::EnableInternalDropAnimation fail");
382 return ret;
383 }
384 return RET_OK;
385 }
386
AddDraglistener(bool isJsCaller)387 int32_t IntentionClient::AddDraglistener(bool isJsCaller)
388 {
389 if (Connect() != RET_OK) {
390 FI_HILOGE("Can not connect to IntentionService");
391 return RET_ERR;
392 }
393 std::lock_guard lock(mutex_);
394 CHKPR(devicestatusProxy_, RET_ERR);
395 return devicestatusProxy_->AddDraglistener(isJsCaller);
396 }
397
RemoveDraglistener(bool isJsCaller)398 int32_t IntentionClient::RemoveDraglistener(bool isJsCaller)
399 {
400 if (Connect() != RET_OK) {
401 FI_HILOGE("Can not connect to IntentionService");
402 return RET_ERR;
403 }
404 std::lock_guard lock(mutex_);
405 CHKPR(devicestatusProxy_, RET_ERR);
406 return devicestatusProxy_->RemoveDraglistener(isJsCaller);
407 }
408
AddSubscriptListener()409 int32_t IntentionClient::AddSubscriptListener()
410 {
411 if (Connect() != RET_OK) {
412 FI_HILOGE("Can not connect to IntentionService");
413 return RET_ERR;
414 }
415 std::lock_guard lock(mutex_);
416 CHKPR(devicestatusProxy_, RET_ERR);
417 return devicestatusProxy_->AddSubscriptListener();
418 }
419
RemoveSubscriptListener()420 int32_t IntentionClient::RemoveSubscriptListener()
421 {
422 if (Connect() != RET_OK) {
423 FI_HILOGE("Can not connect to IntentionService");
424 return RET_ERR;
425 }
426 std::lock_guard lock(mutex_);
427 CHKPR(devicestatusProxy_, RET_ERR);
428 return devicestatusProxy_->RemoveSubscriptListener();
429 }
430
SetDragWindowVisible(bool visible,bool isForce,const std::shared_ptr<Rosen::RSTransaction> & rsTransaction)431 int32_t IntentionClient::SetDragWindowVisible(bool visible, bool isForce,
432 const std::shared_ptr<Rosen::RSTransaction>& rsTransaction)
433 {
434 CALL_DEBUG_ENTER;
435 if (Connect() != RET_OK) {
436 FI_HILOGE("Can not connect to IntentionService");
437 return RET_ERR;
438 }
439 std::lock_guard lock(mutex_);
440 CHKPR(devicestatusProxy_, RET_ERR);
441 DragVisibleParam dragVisibleParam;
442 dragVisibleParam.visible = visible;
443 dragVisibleParam.isForce = isForce;
444 dragVisibleParam.rsTransaction = rsTransaction;
445 SequenceableDragVisible sequenceableDragVisible(dragVisibleParam);
446 if (int32_t ret = devicestatusProxy_->SetDragWindowVisible(sequenceableDragVisible); ret != RET_OK) {
447 FI_HILOGE("proxy::SetDragWindowVisible fail");
448 return ret;
449 }
450 return RET_OK;
451 }
452
UpdateDragStyle(DragCursorStyle style,int32_t eventId=-1)453 int32_t IntentionClient::UpdateDragStyle(DragCursorStyle style, int32_t eventId = -1)
454 {
455 if (Connect() != RET_OK) {
456 FI_HILOGE("Can not connect to IntentionService");
457 return RET_ERR;
458 }
459 std::lock_guard lock(mutex_);
460 CHKPR(devicestatusProxy_, RET_ERR);
461 if (int32_t ret = devicestatusProxy_->UpdateDragStyle(static_cast<int32_t>(style), eventId); ret != RET_OK) {
462 FI_HILOGE("proxy::UpdateDragStyle fail");
463 return ret;
464 }
465 return RET_OK;
466 }
467
UpdateShadowPic(const ShadowInfo & shadowInfo)468 int32_t IntentionClient::UpdateShadowPic(const ShadowInfo &shadowInfo)
469 {
470 if (Connect() != RET_OK) {
471 FI_HILOGE("Can not connect to IntentionService");
472 return RET_ERR;
473 }
474 std::lock_guard lock(mutex_);
475 CHKPR(devicestatusProxy_, RET_ERR);
476 return devicestatusProxy_->UpdateShadowPic(shadowInfo.pixelMap, shadowInfo.x, shadowInfo.y);
477 }
478
GetDragTargetPid(int32_t & targetPid)479 int32_t IntentionClient::GetDragTargetPid(int32_t &targetPid)
480 {
481 if (Connect() != RET_OK) {
482 FI_HILOGE("Can not connect to IntentionService");
483 return RET_ERR;
484 }
485 std::lock_guard lock(mutex_);
486 CHKPR(devicestatusProxy_, RET_ERR);
487 return devicestatusProxy_->GetDragTargetPid(targetPid);
488 }
489
GetUdKey(std::string & udKey)490 int32_t IntentionClient::GetUdKey(std::string &udKey)
491 {
492 if (Connect() != RET_OK) {
493 FI_HILOGE("Can not connect to IntentionService");
494 return RET_ERR;
495 }
496 std::lock_guard lock(mutex_);
497 CHKPR(devicestatusProxy_, RET_ERR);
498 if (int32_t ret = devicestatusProxy_->GetUdKey(udKey); ret != RET_OK) {
499 FI_HILOGE("proxy::GetUdKey fail");
500 return ret;
501 }
502 return RET_OK;
503 }
504
GetShadowOffset(ShadowOffset & shadowOffset)505 int32_t IntentionClient::GetShadowOffset(ShadowOffset &shadowOffset)
506 {
507 if (Connect() != RET_OK) {
508 FI_HILOGE("Can not connect to IntentionService");
509 return RET_ERR;
510 }
511 std::lock_guard lock(mutex_);
512 CHKPR(devicestatusProxy_, RET_ERR);
513 int32_t offsetX = -1;
514 int32_t offsetY = -1;
515 int32_t width = -1;
516 int32_t height = -1;
517 if (int32_t ret = devicestatusProxy_->GetShadowOffset(offsetX, offsetY, width, height); ret != RET_OK) {
518 FI_HILOGE("proxy::GetShadowOffset fail");
519 return ret;
520 }
521 shadowOffset.offsetX = offsetX;
522 shadowOffset.offsetY = offsetY;
523 shadowOffset.width = width;
524 shadowOffset.height = height;
525 return RET_OK;
526 }
527
GetDragData(DragData & dragData)528 int32_t IntentionClient::GetDragData(DragData &dragData)
529 {
530 if (Connect() != RET_OK) {
531 FI_HILOGE("Can not connect to IntentionService");
532 return RET_ERR;
533 }
534 std::lock_guard lock(mutex_);
535 CHKPR(devicestatusProxy_, RET_ERR);
536 SequenceableDragData sequenceableDragData(dragData);
537 if (int32_t ret = devicestatusProxy_->GetDragData(sequenceableDragData); ret != RET_OK) {
538 FI_HILOGE("proxy::GetDragData fail");
539 return ret;
540 }
541 dragData = sequenceableDragData.dragData_;
542 return RET_OK;
543 }
544
UpdatePreviewStyle(const PreviewStyle & previewStyle)545 int32_t IntentionClient::UpdatePreviewStyle(const PreviewStyle &previewStyle)
546 {
547 if (Connect() != RET_OK) {
548 FI_HILOGE("Can not connect to IntentionService");
549 return RET_ERR;
550 }
551 std::lock_guard lock(mutex_);
552 CHKPR(devicestatusProxy_, RET_ERR);
553 SequenceablePreviewStyle sequenceablePreviewStyle(previewStyle);
554 if (int32_t ret = devicestatusProxy_->UpdatePreviewStyle(sequenceablePreviewStyle); ret != RET_OK) {
555 FI_HILOGE("proxy::UpdatePreviewStyle fail");
556 return ret;
557 }
558 return RET_OK;
559 }
560
UpdatePreviewStyleWithAnimation(const PreviewStyle & previewStyle,const PreviewAnimation & animation)561 int32_t IntentionClient::UpdatePreviewStyleWithAnimation(const PreviewStyle &previewStyle,
562 const PreviewAnimation &animation)
563 {
564 if (Connect() != RET_OK) {
565 FI_HILOGE("Can not connect to IntentionService");
566 return RET_ERR;
567 }
568 std::lock_guard lock(mutex_);
569 CHKPR(devicestatusProxy_, RET_ERR);
570 SequenceablePreviewAnimation sequenceablePreviewAnimation(previewStyle, animation);
571 if (int32_t ret = devicestatusProxy_->UpdatePreviewStyleWithAnimation(sequenceablePreviewAnimation);
572 ret != RET_OK) {
573 FI_HILOGE("proxy::UpdatePreviewStyleWithAnimation fail");
574 return ret;
575 }
576 return RET_OK;
577 }
578
RotateDragWindowSync(const std::shared_ptr<Rosen::RSTransaction> & rsTransaction)579 int32_t IntentionClient::RotateDragWindowSync(const std::shared_ptr<Rosen::RSTransaction>& rsTransaction)
580 {
581 if (Connect() != RET_OK) {
582 FI_HILOGE("Can not connect to IntentionService");
583 return RET_ERR;
584 }
585 std::lock_guard lock(mutex_);
586 CHKPR(devicestatusProxy_, RET_ERR);
587 SequenceableRotateWindow sequenceableRotateWindow(rsTransaction);
588 if (int32_t ret = devicestatusProxy_->RotateDragWindowSync(sequenceableRotateWindow);
589 ret != RET_OK) {
590 FI_HILOGE("proxy::RotateDragWindowSync fail");
591 return ret;
592 }
593 return RET_OK;
594 }
595
SetDragWindowScreenId(uint64_t displayId,uint64_t screenId)596 int32_t IntentionClient::SetDragWindowScreenId(uint64_t displayId, uint64_t screenId)
597 {
598 if (Connect() != RET_OK) {
599 FI_HILOGE("Can not connect to IntentionService");
600 return RET_ERR;
601 }
602 std::lock_guard lock(mutex_);
603 CHKPR(devicestatusProxy_, RET_ERR);
604 if (int32_t ret = devicestatusProxy_->SetDragWindowScreenId(displayId, screenId); ret != RET_OK) {
605 FI_HILOGE("proxy::SetDragWindowScreenId fail");
606 return ret;
607 }
608 return RET_OK;
609 }
610
GetDragSummary(std::map<std::string,int64_t> & summarys,bool isJsCaller)611 int32_t IntentionClient::GetDragSummary(std::map<std::string, int64_t> &summarys, bool isJsCaller)
612 {
613 if (Connect() != RET_OK) {
614 FI_HILOGE("Can not connect to IntentionService");
615 return RET_ERR;
616 }
617 std::lock_guard lock(mutex_);
618 CHKPR(devicestatusProxy_, RET_ERR);
619 if (int32_t ret = devicestatusProxy_->GetDragSummary(summarys, isJsCaller); ret != RET_OK) {
620 FI_HILOGE("proxy::GetDragSummary fail");
621 return ret;
622 }
623 return RET_OK;
624 }
625
SetDragSwitchState(bool enable,bool isJsCaller)626 int32_t IntentionClient::SetDragSwitchState(bool enable, bool isJsCaller)
627 {
628 if (Connect() != RET_OK) {
629 FI_HILOGE("Can not connect to IntentionService");
630 return RET_ERR;
631 }
632 std::lock_guard lock(mutex_);
633 CHKPR(devicestatusProxy_, RET_ERR);
634 if (int32_t ret = devicestatusProxy_->SetDragSwitchState(enable, isJsCaller); ret != RET_OK) {
635 FI_HILOGE("proxy::SetDragSwitchState fail");
636 return ret;
637 }
638 return RET_OK;
639 }
640
SetAppDragSwitchState(bool enable,const std::string & pkgName,bool isJsCaller)641 int32_t IntentionClient::SetAppDragSwitchState(bool enable, const std::string &pkgName, bool isJsCaller)
642 {
643 if (Connect() != RET_OK) {
644 FI_HILOGE("Can not connect to IntentionService");
645 return RET_ERR;
646 }
647 std::lock_guard lock(mutex_);
648 CHKPR(devicestatusProxy_, RET_ERR);
649 if (int32_t ret = devicestatusProxy_->SetAppDragSwitchState(enable, pkgName, isJsCaller); ret != RET_OK) {
650 FI_HILOGE("proxy::SetAppDragSwitchState fail");
651 return ret;
652 }
653 return RET_OK;
654 }
655
GetDragState(DragState & dragState)656 int32_t IntentionClient::GetDragState(DragState &dragState)
657 {
658 if (Connect() != RET_OK) {
659 FI_HILOGE("Can not connect to IntentionService");
660 return RET_ERR;
661 }
662 std::lock_guard lock(mutex_);
663 CHKPR(devicestatusProxy_, RET_ERR);
664 int32_t state { -1 };
665 if (int32_t ret = devicestatusProxy_->GetDragState(state); ret != RET_OK) {
666 FI_HILOGE("proxy::GetDragState fail");
667 return ret;
668 }
669 dragState = static_cast<DragState>(state);
670 return RET_OK;
671 }
672
IsDragStart(bool & isStart)673 int32_t IntentionClient::IsDragStart(bool &isStart)
674 {
675 CALL_DEBUG_ENTER;
676 if (Connect() != RET_OK) {
677 FI_HILOGE("Can not connect to IntentionService");
678 return RET_ERR;
679 }
680 std::lock_guard lock(mutex_);
681 CHKPR(devicestatusProxy_, RET_ERR);
682 auto ret = devicestatusProxy_->IsDragStart(isStart);
683 if (ret != RET_OK) {
684 FI_HILOGE("proxy::IsDragStart fail, ret = %{public}d", ret);
685 return ret;
686 }
687 return RET_OK;
688 }
689
SubscribeCallback(int32_t type,const std::string & bundleName,const sptr<IRemoteBoomerangCallback> & subCallback)690 int32_t IntentionClient::SubscribeCallback(int32_t type, const std::string& bundleName,
691 const sptr<IRemoteBoomerangCallback>& subCallback)
692 {
693 if (Connect() != RET_OK) {
694 FI_HILOGE("Can not connect to IntentionService");
695 return RET_ERR;
696 }
697 std::lock_guard lock(mutex_);
698 CHKPR(devicestatusProxy_, RET_ERR);
699 if (int32_t ret = devicestatusProxy_->SubscribeCallback(type, bundleName, subCallback); ret != RET_OK) {
700 FI_HILOGE("proxy::SubscribeCallback fail");
701 return ret;
702 }
703 return RET_OK;
704 }
705
UnsubscribeCallback(int32_t type,const std::string & bundleName,const sptr<IRemoteBoomerangCallback> & unsubCallback)706 int32_t IntentionClient::UnsubscribeCallback(int32_t type, const std::string& bundleName,
707 const sptr<IRemoteBoomerangCallback>& unsubCallback)
708 {
709 if (Connect() != RET_OK) {
710 FI_HILOGE("Can not connect to IntentionService");
711 return RET_ERR;
712 }
713 std::lock_guard lock(mutex_);
714 CHKPR(devicestatusProxy_, RET_ERR);
715 if (int32_t ret = devicestatusProxy_->UnsubscribeCallback(type, bundleName, unsubCallback); ret != RET_OK) {
716 FI_HILOGE("proxy::UnsubscribeCallback fail");
717 return ret;
718 }
719 return RET_OK;
720 }
721
NotifyMetadataBindingEvent(const std::string & bundleName,const sptr<IRemoteBoomerangCallback> & notifyCallback)722 int32_t IntentionClient::NotifyMetadataBindingEvent(const std::string& bundleName,
723 const sptr<IRemoteBoomerangCallback>& notifyCallback)
724 {
725 if (Connect() != RET_OK) {
726 FI_HILOGE("Can not connect to IntentionService");
727 return RET_ERR;
728 }
729 std::lock_guard lock(mutex_);
730 CHKPR(devicestatusProxy_, RET_ERR);
731 if (int32_t ret = devicestatusProxy_->NotifyMetadataBindingEvent(bundleName, notifyCallback); ret != RET_OK) {
732 FI_HILOGE("proxy::NotifyMetadataBindingEvent fail");
733 return ret;
734 }
735 return RET_OK;
736 }
737
SubmitMetadata(const std::string & metadata)738 int32_t IntentionClient::SubmitMetadata(const std::string& metadata)
739 {
740 if (Connect() != RET_OK) {
741 FI_HILOGE("Can not connect to IntentionService");
742 return RET_ERR;
743 }
744 std::lock_guard lock(mutex_);
745 CHKPR(devicestatusProxy_, RET_ERR);
746 if (int32_t ret = devicestatusProxy_->SubmitMetadata(metadata); ret != RET_OK) {
747 FI_HILOGE("proxy::SubmitMetadata fail");
748 return ret;
749 }
750 return RET_OK;
751 }
752
BoomerangEncodeImage(const std::shared_ptr<PixelMap> & pixelMap,const std::string & metadata,const sptr<IRemoteBoomerangCallback> & encodeCallback)753 int32_t IntentionClient::BoomerangEncodeImage(const std::shared_ptr<PixelMap>& pixelMap, const std::string& metadata,
754 const sptr<IRemoteBoomerangCallback>& encodeCallback)
755 {
756 if (Connect() != RET_OK) {
757 FI_HILOGE("Can not connect to IntentionService");
758 return RET_ERR;
759 }
760 std::lock_guard lock(mutex_);
761 CHKPR(devicestatusProxy_, RET_ERR);
762 if (int32_t ret = devicestatusProxy_->BoomerangEncodeImage(pixelMap, metadata, encodeCallback); ret != RET_OK) {
763 FI_HILOGE("proxy::BoomerangEncodeImage fail");
764 return ret;
765 }
766 return RET_OK;
767 }
768
BoomerangDecodeImage(const std::shared_ptr<PixelMap> & pixelMap,const sptr<IRemoteBoomerangCallback> & decodeCallback)769 int32_t IntentionClient::BoomerangDecodeImage(const std::shared_ptr<PixelMap>& pixelMap,
770 const sptr<IRemoteBoomerangCallback>& decodeCallback)
771 {
772 if (Connect() != RET_OK) {
773 FI_HILOGE("Can not connect to IntentionService");
774 return RET_ERR;
775 }
776 std::lock_guard lock(mutex_);
777 CHKPR(devicestatusProxy_, RET_ERR);
778 if (int32_t ret = devicestatusProxy_->BoomerangDecodeImage(pixelMap, decodeCallback); ret != RET_OK) {
779 FI_HILOGE("proxy::BoomerangDecodeImage fail");
780 return ret;
781 }
782 return RET_OK;
783 }
784
GetDragSummaryInfo(DragSummaryInfo & dragSummaryInfo)785 int32_t IntentionClient::GetDragSummaryInfo(DragSummaryInfo &dragSummaryInfo)
786 {
787 CALL_DEBUG_ENTER;
788 if (Connect() != RET_OK) {
789 FI_HILOGE("Can not connect to IntentionService");
790 return RET_ERR;
791 }
792 std::lock_guard lock(mutex_);
793 SequenceableDragSummaryInfo sequenceableDragSummaryInfo(dragSummaryInfo);
794 CHKPR(devicestatusProxy_, RET_ERR);
795 auto ret = devicestatusProxy_->GetDragSummaryInfo(sequenceableDragSummaryInfo);
796 if (ret != RET_OK) {
797 FI_HILOGE("proxy::GetDragSummaryInfo fail, ret = %{public}d", ret);
798 return ret;
799 }
800 sequenceableDragSummaryInfo.GetDragSummaryInfo(dragSummaryInfo);
801 return RET_OK;
802 }
803
EnableUpperCenterMode(bool enable)804 int32_t IntentionClient::EnableUpperCenterMode(bool enable)
805 {
806 if (Connect() != RET_OK) {
807 FI_HILOGE("Can not connect to IntentionService");
808 return RET_ERR;
809 }
810 std::lock_guard lock(mutex_);
811 CHKPR(devicestatusProxy_, RET_ERR);
812 if (int32_t ret = devicestatusProxy_->EnableUpperCenterMode(enable); ret != RET_OK) {
813 FI_HILOGE("proxy::EnableUpperCenterMode fail");
814 return ret;
815 }
816 return RET_OK;
817 }
818
GetDragAction(DragAction & dragAction)819 int32_t IntentionClient::GetDragAction(DragAction &dragAction)
820 {
821 if (Connect() != RET_OK) {
822 FI_HILOGE("Can not connect to IntentionService");
823 return RET_ERR;
824 }
825 std::lock_guard lock(mutex_);
826 CHKPR(devicestatusProxy_, RET_ERR);
827 int32_t action { -1 };
828 if (int32_t ret = devicestatusProxy_->GetDragAction(action); ret != RET_OK) {
829 FI_HILOGE("proxy::GetDragAction fail");
830 return ret;
831 }
832 dragAction = static_cast<DragAction>(action);
833 return RET_OK;
834 }
835
GetExtraInfo(std::string & extraInfo)836 int32_t IntentionClient::GetExtraInfo(std::string &extraInfo)
837 {
838 if (Connect() != RET_OK) {
839 FI_HILOGE("Can not connect to IntentionService");
840 return RET_ERR;
841 }
842 std::lock_guard lock(mutex_);
843 CHKPR(devicestatusProxy_, RET_ERR);
844 if (int32_t ret = devicestatusProxy_->GetExtraInfo(extraInfo); ret != RET_OK) {
845 FI_HILOGE("proxy::GetExtraInfo fail");
846 return ret;
847 }
848 return RET_OK;
849 }
850
AddPrivilege()851 int32_t IntentionClient::AddPrivilege()
852 {
853 if (Connect() != RET_OK) {
854 FI_HILOGE("Can not connect to IntentionService");
855 return RET_ERR;
856 }
857 std::lock_guard lock(mutex_);
858 CHKPR(devicestatusProxy_, RET_ERR);
859 if (int32_t ret = devicestatusProxy_->AddPrivilege(); ret != RET_OK) {
860 FI_HILOGE("proxy::AddPrivilege fail");
861 return ret;
862 }
863 return RET_OK;
864 }
865
EraseMouseIcon()866 int32_t IntentionClient::EraseMouseIcon()
867 {
868 if (Connect() != RET_OK) {
869 FI_HILOGE("Can not connect to IntentionService");
870 return RET_ERR;
871 }
872 std::lock_guard lock(mutex_);
873 CHKPR(devicestatusProxy_, RET_ERR);
874 if (int32_t ret = devicestatusProxy_->EraseMouseIcon(); ret != RET_OK) {
875 FI_HILOGE("proxy::EraseMouseIcon fail");
876 return ret;
877 }
878 return RET_OK;
879 }
880
SetMouseDragMonitorState(bool state)881 int32_t IntentionClient::SetMouseDragMonitorState(bool state)
882 {
883 if (Connect() != RET_OK) {
884 FI_HILOGE("Can not connect to IntentionService");
885 return RET_ERR;
886 }
887 std::lock_guard lock(mutex_);
888 CHKPR(devicestatusProxy_, RET_ERR);
889 if (int32_t ret = devicestatusProxy_->SetMouseDragMonitorState(state); ret != RET_OK) {
890 FI_HILOGE("proxy::SetMouseDragMonitorState fail");
891 return ret;
892 }
893 return RET_OK;
894 }
895
SetDraggableState(bool state)896 int32_t IntentionClient::SetDraggableState(bool state)
897 {
898 if (Connect() != RET_OK) {
899 FI_HILOGE("Can not connect to IntentionService");
900 return RET_ERR;
901 }
902 std::lock_guard lock(mutex_);
903 CHKPR(devicestatusProxy_, RET_ERR);
904 if (int32_t ret = devicestatusProxy_->SetDraggableState(state); ret != RET_OK) {
905 FI_HILOGE("proxy::SetDraggableState fail");
906 return ret;
907 }
908 return RET_OK;
909 }
910
GetAppDragSwitchState(bool & state)911 int32_t IntentionClient::GetAppDragSwitchState(bool &state)
912 {
913 if (Connect() != RET_OK) {
914 FI_HILOGE("Can not connect to IntentionService");
915 return RET_ERR;
916 }
917 std::lock_guard lock(mutex_);
918 CHKPR(devicestatusProxy_, RET_ERR);
919 if (int32_t ret = devicestatusProxy_->GetAppDragSwitchState(state); ret != RET_OK) {
920 FI_HILOGE("proxy::GetAppDragSwitchState fail");
921 return ret;
922 }
923 return RET_OK;
924 }
925
SetDraggableStateAsync(bool state,int64_t downTime)926 int32_t IntentionClient::SetDraggableStateAsync(bool state, int64_t downTime)
927 {
928 if (Connect() != RET_OK) {
929 FI_HILOGE("Can not connect to IntentionService");
930 return RET_ERR;
931 }
932 std::lock_guard lock(mutex_);
933 CHKPR(devicestatusProxy_, RET_ERR);
934 if (int32_t ret = devicestatusProxy_->SetDraggableStateAsync(state, downTime); ret != RET_OK) {
935 FI_HILOGE("proxy::SetDraggableStateAsync fail");
936 return ret;
937 }
938 return RET_OK;
939 }
940
GetDragBundleInfo(DragBundleInfo & dragBundleInfo)941 int32_t IntentionClient::GetDragBundleInfo(DragBundleInfo &dragBundleInfo)
942 {
943 if (Connect() != RET_OK) {
944 FI_HILOGE("Can not connect to IntentionService");
945 return RET_ERR;
946 }
947 std::lock_guard lock(mutex_);
948 CHKPR(devicestatusProxy_, RET_ERR);
949 DragBundleInfo bundelInfo;
950 if (int32_t ret = devicestatusProxy_->GetDragBundleInfo(bundelInfo.bundleName, bundelInfo.isCrossDevice);
951 ret != RET_OK) {
952 FI_HILOGE("proxy::GetDragBundleInfo fail");
953 return ret;
954 }
955 dragBundleInfo = bundelInfo;
956 return RET_OK;
957 }
958
SubscribeStationaryCallback(int32_t type,int32_t event,int32_t latency,const sptr<IRemoteDevStaCallback> & subCallback)959 int32_t IntentionClient::SubscribeStationaryCallback(int32_t type, int32_t event,
960 int32_t latency, const sptr<IRemoteDevStaCallback> &subCallback)
961 {
962 CALL_DEBUG_ENTER;
963 if (Connect() != RET_OK) {
964 FI_HILOGE("Can not subscribe stationary callback");
965 return RET_ERR;
966 }
967 std::lock_guard lock(mutex_);
968 CHKPR(devicestatusProxy_, RET_ERR);
969 if (int32_t ret = devicestatusProxy_->SubscribeStationaryCallback(type, event, latency, subCallback);
970 ret != RET_OK) {
971 FI_HILOGE("proxy::SubscribeStationaryCallback fail");
972 return ret;
973 }
974 return RET_OK;
975 }
976
UnsubscribeStationaryCallback(int32_t type,int32_t event,const sptr<IRemoteDevStaCallback> & unsubCallback)977 int32_t IntentionClient::UnsubscribeStationaryCallback(int32_t type, int32_t event,
978 const sptr<IRemoteDevStaCallback> &unsubCallback)
979 {
980 CALL_DEBUG_ENTER;
981 if (Connect() != RET_OK) {
982 FI_HILOGE("Can not unsubscribe stationary callback");
983 return RET_ERR;
984 }
985 std::lock_guard lock(mutex_);
986 CHKPR(devicestatusProxy_, RET_ERR);
987 if (int32_t ret = devicestatusProxy_->UnsubscribeStationaryCallback(type, event, unsubCallback);
988 ret != RET_OK) {
989 FI_HILOGE("proxy::UnsubscribeStationaryCallback fail");
990 return ret;
991 }
992 return RET_OK;
993 }
994
GetDeviceStatusData(int32_t type,int32_t & replyType,int32_t & replyValue)995 int32_t IntentionClient::GetDeviceStatusData(int32_t type, int32_t &replyType, int32_t &replyValue)
996 {
997 CALL_DEBUG_ENTER;
998 if (Connect() != RET_OK) {
999 FI_HILOGE("Can not Get device status data");
1000 return RET_ERR;
1001 }
1002 std::lock_guard lock(mutex_);
1003 CHKPR(devicestatusProxy_, RET_ERR);
1004 if (int32_t ret = devicestatusProxy_->GetDeviceStatusData(type, replyType, replyValue);
1005 ret != RET_OK) {
1006 FI_HILOGE("proxy::GetDeviceStatusData fail");
1007 return ret;
1008 }
1009 return RET_OK;
1010 }
1011
GetDevicePostureDataSync(DevicePostureData & postureData)1012 int32_t IntentionClient::GetDevicePostureDataSync(DevicePostureData &postureData)
1013 {
1014 CALL_DEBUG_ENTER;
1015 if (Connect() != RET_OK) {
1016 FI_HILOGE("cannot get device status data");
1017 return RET_ERR;
1018 }
1019 std::lock_guard lock(mutex_);
1020 CHKPR(devicestatusProxy_, RET_ERR);
1021 SequenceablePostureData seqData(postureData);
1022 int32_t ret = devicestatusProxy_->GetDevicePostureDataSync(seqData);
1023 if (ret != RET_OK) {
1024 FI_HILOGE("proxy::GetDevicePostureDataSync fail");
1025 return ret;
1026 }
1027 postureData = seqData.GetPostureData();
1028 return RET_OK;
1029 }
1030
GetPageContent(const OnScreen::ContentOption & option,OnScreen::PageContent & pageContent)1031 int32_t IntentionClient::GetPageContent(const OnScreen::ContentOption& option, OnScreen::PageContent& pageContent)
1032 {
1033 CALL_DEBUG_ENTER;
1034 if (Connect() != RET_OK) {
1035 FI_HILOGE("can not get proxy");
1036 return RET_ERR;
1037 }
1038 std::lock_guard lock(mutex_);
1039 CHKPR(devicestatusProxy_, RET_ERR);
1040 OnScreen::SequenceableContentOption seqOption(option);
1041 OnScreen::SequenceablePageContent seqPageContent(pageContent);
1042 int32_t ret = devicestatusProxy_->GetPageContent(seqOption, seqPageContent);
1043 if (ret != RET_OK) {
1044 FI_HILOGE("proxy::GetPageContent fail");
1045 return ret;
1046 }
1047 pageContent = seqPageContent.pageContent_;
1048 return RET_OK;
1049 }
1050
SendControlEvent(const OnScreen::ControlEvent & event)1051 int32_t IntentionClient::SendControlEvent(const OnScreen::ControlEvent& event)
1052 {
1053 CALL_DEBUG_ENTER;
1054 if (Connect() != RET_OK) {
1055 FI_HILOGE("can not get proxy");
1056 return RET_ERR;
1057 }
1058 std::lock_guard lock(mutex_);
1059 CHKPR(devicestatusProxy_, RET_ERR);
1060 OnScreen::SequenceableControlEvent seqEvent(event);
1061 int32_t ret = devicestatusProxy_->SendControlEvent(seqEvent);
1062 if (ret != RET_OK) {
1063 FI_HILOGE("proxy::SendControlEvent fail");
1064 return ret;
1065 }
1066 return RET_OK;
1067 }
1068
ResetProxy(const wptr<IRemoteObject> & remote)1069 void IntentionClient::ResetProxy(const wptr<IRemoteObject> &remote)
1070 {
1071 CALL_DEBUG_ENTER;
1072 std::lock_guard lock(mutex_);
1073 CHKPV(devicestatusProxy_);
1074 auto serviceRemote = devicestatusProxy_->AsObject();
1075 if ((serviceRemote != nullptr) && (serviceRemote == remote.promote())) {
1076 serviceRemote->RemoveDeathRecipient(deathRecipient_);
1077 devicestatusProxy_ = nullptr;
1078 }
1079 }
1080
DeathRecipient(std::shared_ptr<IntentionClient> parent)1081 IntentionClient::DeathRecipient::DeathRecipient(std::shared_ptr<IntentionClient> parent)
1082 : parent_(parent)
1083 {}
1084
OnRemoteDied(const wptr<IRemoteObject> & remote)1085 void IntentionClient::DeathRecipient::OnRemoteDied(const wptr<IRemoteObject> &remote)
1086 {
1087 CALL_DEBUG_ENTER;
1088 std::shared_ptr<IntentionClient> parent = parent_.lock();
1089 CHKPV(parent);
1090 CHKPV(remote);
1091 parent->ResetProxy(remote);
1092 FI_HILOGD("Recv death notice");
1093 }
1094 } // namespace DeviceStatus
1095 } // namespace Msdp
1096 } // namespace OHOS
1097