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