• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-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_service.h"
17 
18 #include <ipc_skeleton.h>
19 #include <string_ex.h>
20 #include <xcollie/xcollie.h>
21 #include <xcollie/xcollie_define.h>
22 
23 #include "devicestatus_define.h"
24 #include "sequenceable_drag_visible.h"
25 
26 #undef LOG_TAG
27 #define LOG_TAG "IntentionService"
28 
29 namespace OHOS {
30 namespace Msdp {
31 namespace DeviceStatus {
32 
IntentionService(IContext * context)33 IntentionService::IntentionService(IContext *context)
34     : context_(context), socketServer_(context), cooperate_(context), drag_(context), dumper_(context, stationary_),
35     boomerangDumper_(context, boomerang_)
36 {
37     (void) context_;
38 }
39 
40 // public
41 
42 /*
43 * If new code needs to be added, please place it in the corresponding locations according to the business type:
44   Public/Cooperate/Drag/Boomerang/Stationary.
45 */
46 
GetCallingContext()47 CallingContext IntentionService::GetCallingContext()
48 {
49     CallingContext context {
50         .fullTokenId = IPCSkeleton::GetCallingFullTokenID(),
51         .tokenId = IPCSkeleton::GetCallingTokenID(),
52         .uid = IPCSkeleton::GetCallingUid(),
53         .pid = IPCSkeleton::GetCallingPid(),
54     };
55     return context;
56 }
57 
PrintCallingContext(const CallingContext & context)58 void IntentionService::PrintCallingContext(const CallingContext &context)
59 {
60     FI_HILOGI("fullTokenId:%{public}" PRIu64 ", tokenId:%{public}d, uid:%{public}d, pid:%{public}d",
61         context.fullTokenId, context.tokenId, context.uid, context.pid);
62 }
63 
PostSyncTask(TaskProtoType task)64 int32_t IntentionService::PostSyncTask(TaskProtoType task)
65 {
66     CHKPR(context_, RET_ERR);
67     int32_t ret = context_->GetDelegateTasks().PostSyncTask([&] {
68         CHKPR(task, RET_ERR);
69         return task();
70     });
71     if (ret != RET_OK) {
72         FI_HILOGE("PostSyncTask failed, ret:%{public}d", ret);
73     }
74     return ret;
75 }
76 
77 // Socket
78 
Socket(const std::string & programName,int32_t moduleType,int & socketFd,int32_t & tokenType)79 ErrCode IntentionService::Socket(const std::string& programName, int32_t moduleType, int& socketFd, int32_t& tokenType)
80 {
81     CALL_INFO_TRACE;
82     CallingContext context = GetCallingContext();
83     PrintCallingContext(context);
84     return PostSyncTask([this, &context, &programName, moduleType, &socketFd, &tokenType] {
85         return socketServer_.Socket(context, programName, moduleType, socketFd, tokenType);
86     });
87 }
88 
89 // Cooperate
90 
EnableCooperate(int32_t userData)91 ErrCode IntentionService::EnableCooperate(int32_t userData)
92 {
93     CallingContext context = GetCallingContext();
94     return PostSyncTask([this, &context, userData] {
95         return cooperate_.EnableCooperate(context, userData);
96     });
97 }
98 
DisableCooperate(int32_t userData)99 ErrCode IntentionService::DisableCooperate(int32_t userData)
100 {
101     CallingContext context = GetCallingContext();
102     return PostSyncTask([this, &context, userData] {
103         return cooperate_.DisableCooperate(context, userData);
104     });
105 }
106 
StartCooperate(const std::string & remoteNetworkId,int32_t userData,int32_t startDeviceId,bool checkPermission)107 ErrCode IntentionService::StartCooperate(const std::string& remoteNetworkId, int32_t userData, int32_t startDeviceId,
108     bool checkPermission)
109 {
110     CallingContext context = GetCallingContext();
111     return PostSyncTask([this, &context, &remoteNetworkId, userData, startDeviceId, checkPermission] {
112         return cooperate_.StartCooperate(context, remoteNetworkId, userData, startDeviceId, checkPermission);
113     });
114 }
115 
StartCooperateWithOptions(const std::string & remoteNetworkId,int32_t userData,int32_t startDeviceId,bool checkPermission,const SequenceableCooperateOptions & options)116 ErrCode IntentionService::StartCooperateWithOptions(const std::string& remoteNetworkId, int32_t userData,
117     int32_t startDeviceId, bool checkPermission, const SequenceableCooperateOptions& options)
118 {
119     CallingContext context = GetCallingContext();
120     return PostSyncTask([this, &context, &remoteNetworkId, userData, startDeviceId, checkPermission, &options] {
121         return cooperate_.StartCooperateWithOptions(context, remoteNetworkId, userData,
122             startDeviceId, options.options_);
123     });
124 }
125 
StopCooperate(int32_t userData,bool isUnchained,bool checkPermission)126 ErrCode IntentionService::StopCooperate(int32_t userData, bool isUnchained, bool checkPermission)
127 {
128     CallingContext context = GetCallingContext();
129     return PostSyncTask([this, &context, userData, isUnchained, checkPermission] {
130         return cooperate_.StopCooperate(context, userData, isUnchained, checkPermission);
131     });
132 }
133 
RegisterCooperateListener()134 ErrCode IntentionService::RegisterCooperateListener()
135 {
136     CallingContext context = GetCallingContext();
137     return PostSyncTask([this, &context] {
138         return cooperate_.RegisterCooperateListener(context);
139     });
140 }
141 
UnregisterCooperateListener()142 ErrCode IntentionService::UnregisterCooperateListener()
143 {
144     CallingContext context = GetCallingContext();
145     return PostSyncTask([this, &context] {
146         return cooperate_.UnregisterCooperateListener(context);
147     });
148 }
149 
RegisterHotAreaListener(int32_t userData,bool checkPermission)150 ErrCode IntentionService::RegisterHotAreaListener(int32_t userData, bool checkPermission)
151 {
152     CallingContext context = GetCallingContext();
153     return PostSyncTask([this, &context, userData, checkPermission] {
154         return cooperate_.RegisterHotAreaListener(context, userData, checkPermission);
155     });
156 }
157 
UnregisterHotAreaListener()158 ErrCode IntentionService::UnregisterHotAreaListener()
159 {
160     CallingContext context = GetCallingContext();
161     return PostSyncTask([this, &context] {
162         return cooperate_.UnregisterHotAreaListener(context);
163     });
164 }
165 
RegisterMouseEventListener(const std::string & networkId)166 ErrCode IntentionService::RegisterMouseEventListener(const std::string& networkId)
167 {
168     CallingContext context = GetCallingContext();
169     return PostSyncTask([this, &context, &networkId] {
170         return cooperate_.RegisterMouseEventListener(context, networkId);
171     });
172 }
173 
UnregisterMouseEventListener(const std::string & networkId)174 ErrCode IntentionService::UnregisterMouseEventListener(const std::string& networkId)
175 {
176     CallingContext context = GetCallingContext();
177     return PostSyncTask([this, &context, &networkId] {
178         return cooperate_.UnregisterMouseEventListener(context, networkId);
179     });
180 }
181 
GetCooperateStateSync(const std::string & udid,bool & state)182 ErrCode IntentionService::GetCooperateStateSync(const std::string& udid, bool& state)
183 {
184     CallingContext context = GetCallingContext();
185     return PostSyncTask([this, &context, &udid, &state] {
186         return cooperate_.GetCooperateStateSync(context, udid, state);
187     });
188 }
189 
GetCooperateStateAsync(const std::string & networkId,int32_t userData,bool isCheckPermission)190 ErrCode IntentionService::GetCooperateStateAsync(const std::string& networkId, int32_t userData, bool isCheckPermission)
191 {
192     CallingContext context = GetCallingContext();
193     return PostSyncTask([this, &context, &networkId, userData, isCheckPermission] {
194         return cooperate_.GetCooperateStateAsync(context, networkId, userData, isCheckPermission);
195     });
196 }
197 
SetDamplingCoefficient(uint32_t direction,double coefficient)198 ErrCode IntentionService::SetDamplingCoefficient(uint32_t direction, double coefficient)
199 {
200     CallingContext context = GetCallingContext();
201     return PostSyncTask([this, &context, direction, coefficient] {
202         return cooperate_.SetDamplingCoefficient(context, direction, coefficient);
203     });
204 }
205 
StartDrag(const SequenceableDragData & sequenceableDragData)206 ErrCode IntentionService::StartDrag(const SequenceableDragData &sequenceableDragData)
207 {
208     CallingContext context = GetCallingContext();
209     return PostSyncTask([this, &context, &sequenceableDragData] {
210         return drag_.StartDrag(context, sequenceableDragData.dragData_);
211     });
212 }
213 
StopDrag(const SequenceableDragResult & sequenceableDragResult)214 ErrCode IntentionService::StopDrag(const SequenceableDragResult &sequenceableDragResult)
215 {
216     CallingContext context = GetCallingContext();
217     return PostSyncTask([this, &context, &sequenceableDragResult] {
218         return drag_.StopDrag(context, sequenceableDragResult.dragDropResult_);
219     });
220 }
221 
EnableInternalDropAnimation(const std::string & animationInfo)222 ErrCode IntentionService::EnableInternalDropAnimation(const std::string &animationInfo)
223 {
224     CallingContext context = GetCallingContext();
225     return PostSyncTask([&] {
226         return drag_.EnableInternalDropAnimation(context, animationInfo);
227     });
228 }
229 
AddDraglistener(bool isJsCaller)230 ErrCode IntentionService::AddDraglistener(bool isJsCaller)
231 {
232     CallingContext context = GetCallingContext();
233     return PostSyncTask([this, &context, isJsCaller] {
234         return drag_.AddDraglistener(context, isJsCaller);
235     });
236 }
237 
RemoveDraglistener(bool isJsCaller)238 ErrCode IntentionService::RemoveDraglistener(bool isJsCaller)
239 {
240     CallingContext context = GetCallingContext();
241     return PostSyncTask([this, &context, isJsCaller] {
242         return drag_.RemoveDraglistener(context, isJsCaller);
243     });
244 }
245 
AddSubscriptListener()246 ErrCode IntentionService::AddSubscriptListener()
247 {
248     CallingContext context = GetCallingContext();
249     return PostSyncTask([this, &context] {
250         return drag_.AddSubscriptListener(context);
251     });
252 }
253 
RemoveSubscriptListener()254 ErrCode IntentionService::RemoveSubscriptListener()
255 {
256     CallingContext context = GetCallingContext();
257     return PostSyncTask([this, &context] {
258         return drag_.RemoveSubscriptListener(context);
259     });
260 }
261 
SetDragWindowVisible(const SequenceableDragVisible & sequenceableDragVisible)262 ErrCode IntentionService::SetDragWindowVisible(const SequenceableDragVisible &sequenceableDragVisible)
263 {
264     return PostSyncTask([this, &sequenceableDragVisible] {
265         return drag_.SetDragWindowVisible(sequenceableDragVisible.dragVisibleParam_.visible,
266             sequenceableDragVisible.dragVisibleParam_.isForce, sequenceableDragVisible.dragVisibleParam_.rsTransaction);
267     });
268 }
269 
UpdateDragStyle(int32_t style,int32_t eventId)270 ErrCode IntentionService::UpdateDragStyle(int32_t style, int32_t eventId)
271 {
272     CallingContext context = GetCallingContext();
273     DragCursorStyle cursorStyle = static_cast<DragCursorStyle>(style);
274     return PostSyncTask([this, &context, cursorStyle, eventId] {
275         return drag_.UpdateDragStyle(context, cursorStyle, eventId);
276     });
277 }
278 
UpdateShadowPic(const std::shared_ptr<PixelMap> & pixelMap,int32_t x,int32_t y)279 ErrCode IntentionService::UpdateShadowPic(const std::shared_ptr<PixelMap>& pixelMap, int32_t x, int32_t y)
280 {
281     ShadowInfo shadowInfo;
282     shadowInfo.pixelMap = pixelMap;
283     shadowInfo.x = x;
284     shadowInfo.y = y;
285     return PostSyncTask([this, &shadowInfo] {
286         return drag_.UpdateShadowPic(shadowInfo);
287     });
288 }
289 
GetDragTargetPid(int32_t & targetPid)290 ErrCode IntentionService::GetDragTargetPid(int32_t &targetPid)
291 {
292     CallingContext context = GetCallingContext();
293     return PostSyncTask([this, &context, &targetPid] {
294         return drag_.GetDragTargetPid(context, targetPid);
295     });
296 }
297 
GetUdKey(std::string & udKey)298 ErrCode IntentionService::GetUdKey(std::string &udKey)
299 {
300     return PostSyncTask([this, &udKey] {
301         return drag_.GetUdKey(udKey);
302     });
303 }
304 
GetShadowOffset(int32_t & offsetX,int32_t & offsetY,int32_t & width,int32_t & height)305 ErrCode IntentionService::GetShadowOffset(int32_t &offsetX, int32_t &offsetY, int32_t &width, int32_t &height)
306 {
307     ShadowOffset shadowOffset;
308     return PostSyncTask([this, &shadowOffset, &offsetX, &offsetY, &width, &height] {
309         int32_t ret = drag_.GetShadowOffset(shadowOffset);
310         if (ret != RET_OK) {
311             return ret;
312         }
313         offsetX = shadowOffset.offsetX;
314         offsetY = shadowOffset.offsetY;
315         width = shadowOffset.width;
316         height = shadowOffset.height;
317         return ret;
318     });
319 }
320 
GetDragData(SequenceableDragData & sequenceableDragData)321 ErrCode IntentionService::GetDragData(SequenceableDragData &sequenceableDragData)
322 {
323     CallingContext context = GetCallingContext();
324     return PostSyncTask([this, &context, &sequenceableDragData] {
325         return drag_.GetDragData(context, sequenceableDragData.dragData_);
326     });
327 }
328 
UpdatePreviewStyle(const SequenceablePreviewStyle & sequenceablePreviewStyle)329 ErrCode IntentionService::UpdatePreviewStyle(const SequenceablePreviewStyle &sequenceablePreviewStyle)
330 {
331     return PostSyncTask([this, &sequenceablePreviewStyle] {
332         return drag_.UpdatePreviewStyle(sequenceablePreviewStyle.previewStyle_);
333     });
334 }
335 
UpdatePreviewStyleWithAnimation(const SequenceablePreviewAnimation & sequenceablePreviewAnimation)336 ErrCode IntentionService::UpdatePreviewStyleWithAnimation(
337     const SequenceablePreviewAnimation &sequenceablePreviewAnimation)
338 {
339     return PostSyncTask([this, &sequenceablePreviewAnimation] {
340         return drag_.UpdatePreviewStyleWithAnimation(
341             sequenceablePreviewAnimation.previewStyle_, sequenceablePreviewAnimation.previewAnimation_);
342     });
343 }
344 
RotateDragWindowSync(const SequenceableRotateWindow & sequenceableRotateWindow)345 ErrCode IntentionService::RotateDragWindowSync(const SequenceableRotateWindow &sequenceableRotateWindow)
346 {
347     CallingContext context = GetCallingContext();
348     return PostSyncTask([this, &context, &sequenceableRotateWindow] {
349         return drag_.RotateDragWindowSync(context, sequenceableRotateWindow.rsTransaction_);
350     });
351 }
352 
SetDragWindowScreenId(uint64_t displayId,uint64_t screenId)353 ErrCode IntentionService::SetDragWindowScreenId(uint64_t displayId, uint64_t screenId)
354 {
355     CallingContext context = GetCallingContext();
356     return PostSyncTask([this, &context, displayId, screenId] {
357         return drag_.SetDragWindowScreenId(context, displayId, screenId);
358     });
359 }
360 
GetDragSummary(std::map<std::string,int64_t> & summarys,bool isJsCaller)361 ErrCode IntentionService::GetDragSummary(std::map<std::string, int64_t> &summarys, bool isJsCaller)
362 {
363     CallingContext context = GetCallingContext();
364     return PostSyncTask([this, &context, &summarys, isJsCaller] {
365         return drag_.GetDragSummary(context, summarys, isJsCaller);
366     });
367 }
368 
GetDragSummaryInfo(SequenceableDragSummaryInfo & sequenceableDragSummaryInfo)369 ErrCode IntentionService::GetDragSummaryInfo(SequenceableDragSummaryInfo &sequenceableDragSummaryInfo)
370 {
371     return PostSyncTask([this, &sequenceableDragSummaryInfo] {
372         DragSummaryInfo dragSummaryInfo;
373         int32_t ret = drag_.GetDragSummaryInfo(dragSummaryInfo);
374         if (ret != RET_OK) {
375             return ret;
376         }
377         sequenceableDragSummaryInfo.SetDragSummaryInfo(dragSummaryInfo);
378         return RET_OK;
379     });
380 }
381 
SetDragSwitchState(bool enable,bool isJsCaller)382 ErrCode IntentionService::SetDragSwitchState(bool enable, bool isJsCaller)
383 {
384     CallingContext context = GetCallingContext();
385     return PostSyncTask([this, &context, enable, isJsCaller] {
386         return drag_.SetDragSwitchState(context, enable, isJsCaller);
387     });
388 }
389 
SetAppDragSwitchState(bool enable,const std::string & pkgName,bool isJsCaller)390 ErrCode IntentionService::SetAppDragSwitchState(bool enable, const std::string &pkgName, bool isJsCaller)
391 {
392     CallingContext context = GetCallingContext();
393     return PostSyncTask([this, &context, enable, &pkgName, isJsCaller] {
394        return drag_.SetAppDragSwitchState(context, enable, pkgName, isJsCaller);
395     });
396 }
397 
GetDragState(int32_t & dragState)398 ErrCode IntentionService::GetDragState(int32_t& dragState)
399 {
400     CallingContext context = GetCallingContext();
401     return PostSyncTask([this, &context, &dragState] {
402         DragState state = static_cast<DragState>(dragState);
403         auto ret = drag_.GetDragState(context, state);
404         dragState = static_cast<int32_t>(state);
405         return ret;
406     });
407 }
408 
EnableUpperCenterMode(bool enable)409 ErrCode IntentionService::EnableUpperCenterMode(bool enable)
410 {
411     return PostSyncTask([this, enable] {
412         return drag_.EnableUpperCenterMode(enable);
413     });
414 }
415 
GetDragAction(int32_t & dragAction)416 ErrCode IntentionService::GetDragAction(int32_t &dragAction)
417 {
418     return PostSyncTask([this, &dragAction] {
419         DragAction action = static_cast<DragAction>(dragAction);
420         auto ret = drag_.GetDragAction(action);
421         dragAction = static_cast<int32_t>(action);
422         return ret;
423     });
424 }
425 
GetExtraInfo(std::string & extraInfo)426 ErrCode IntentionService::GetExtraInfo(std::string &extraInfo)
427 {
428     return PostSyncTask([this, &extraInfo] {
429        return drag_.GetExtraInfo(extraInfo);
430     });
431 }
432 
AddPrivilege()433 ErrCode IntentionService::AddPrivilege()
434 {
435     CallingContext context = GetCallingContext();
436     return PostSyncTask([this, &context] {
437        return drag_.AddPrivilege(context);
438     });
439 }
440 
EraseMouseIcon()441 ErrCode IntentionService::EraseMouseIcon()
442 {
443     CallingContext context = GetCallingContext();
444     return PostSyncTask([this, &context] {
445        return drag_.EraseMouseIcon(context);
446     });
447 }
448 
SetMouseDragMonitorState(bool state)449 ErrCode IntentionService::SetMouseDragMonitorState(bool state)
450 {
451     return PostSyncTask([this, state] {
452         return drag_.SetMouseDragMonitorState(state);
453     });
454 }
455 
SetDraggableState(bool state)456 ErrCode IntentionService::SetDraggableState(bool state)
457 {
458     return PostSyncTask([this, state] {
459        return drag_.SetDraggableState(state);
460     });
461 }
GetAppDragSwitchState(bool & state)462 ErrCode IntentionService::GetAppDragSwitchState(bool &state)
463 {
464     return PostSyncTask([this, &state] {
465        return drag_.GetAppDragSwitchState(state);
466     });
467 }
468 
SetDraggableStateAsync(bool state,int64_t downTime)469 ErrCode IntentionService::SetDraggableStateAsync(bool state, int64_t downTime)
470 {
471     return PostSyncTask([this, state, downTime] {
472        return drag_.SetDraggableStateAsync(state, downTime);
473     });
474 }
475 
GetDragBundleInfo(std::string & bundleName,bool & state)476 ErrCode IntentionService::GetDragBundleInfo(std::string &bundleName, bool &state)
477 {
478     return PostSyncTask([this, &bundleName, &state] {
479         DragBundleInfo dragBundleInfo;
480         if (int32_t ret = drag_.GetDragBundleInfo(dragBundleInfo); ret != RET_OK) {
481             return ret;
482         }
483         bundleName = dragBundleInfo.bundleName;
484         state = dragBundleInfo.isCrossDevice;
485         return RET_OK;
486     });
487 }
488 
IsDragStart(bool & isStart)489 ErrCode IntentionService::IsDragStart(bool &isStart)
490 {
491     return PostSyncTask([this, &isStart] {
492         return drag_.IsDragStart(isStart);
493     });
494 }
495 
496 // Boomerang
497 
SubscribeCallback(int32_t type,const std::string & bundleName,const sptr<IRemoteBoomerangCallback> & subCallback)498 ErrCode IntentionService::SubscribeCallback(int32_t type, const std::string& bundleName,
499     const sptr<IRemoteBoomerangCallback>& subCallback)
500 {
501     CallingContext context = GetCallingContext();
502     return PostSyncTask([this, &context, type, &bundleName, &subCallback] {
503        return boomerang_.SubscribeCallback(context, type, bundleName, subCallback);
504     });
505 }
506 
UnsubscribeCallback(int32_t type,const std::string & bundleName,const sptr<IRemoteBoomerangCallback> & unsubCallback)507 ErrCode IntentionService::UnsubscribeCallback(int32_t type, const std::string& bundleName,
508     const sptr<IRemoteBoomerangCallback>& unsubCallback)
509 {
510     CallingContext context = GetCallingContext();
511     return PostSyncTask([this, &context, type, &bundleName, &unsubCallback] {
512        return boomerang_.UnsubscribeCallback(context, type, bundleName, unsubCallback);
513     });
514 }
515 
NotifyMetadataBindingEvent(const std::string & bundleName,const sptr<IRemoteBoomerangCallback> & notifyCallback)516 ErrCode IntentionService::NotifyMetadataBindingEvent(const std::string& bundleName,
517     const sptr<IRemoteBoomerangCallback>& notifyCallback)
518 {
519     CallingContext context = GetCallingContext();
520     return PostSyncTask([this, &context, &bundleName, &notifyCallback] {
521        return boomerang_.NotifyMetadataBindingEvent(context, bundleName, notifyCallback);
522     });
523 }
524 
SubmitMetadata(const std::string & metaData)525 ErrCode IntentionService::SubmitMetadata(const std::string& metaData)
526 {
527     CallingContext context = GetCallingContext();
528     return PostSyncTask([this, &context, &metaData] {
529        return boomerang_.SubmitMetadata(context, metaData);
530     });
531 }
532 
BoomerangEncodeImage(const std::shared_ptr<PixelMap> & pixelMap,const std::string & metaData,const sptr<IRemoteBoomerangCallback> & encodeCallback)533 ErrCode IntentionService::BoomerangEncodeImage(const std::shared_ptr<PixelMap>& pixelMap, const std::string& metaData,
534     const sptr<IRemoteBoomerangCallback>& encodeCallback)
535 {
536     CallingContext context = GetCallingContext();
537     return PostSyncTask([this, &context, &pixelMap, &metaData, &encodeCallback] {
538        return boomerang_.BoomerangEncodeImage(context, pixelMap, metaData, encodeCallback);
539     });
540 }
541 
BoomerangDecodeImage(const std::shared_ptr<PixelMap> & pixelMap,const sptr<IRemoteBoomerangCallback> & decodeCallback)542 ErrCode IntentionService::BoomerangDecodeImage(const std::shared_ptr<PixelMap>& pixelMap,
543     const sptr<IRemoteBoomerangCallback>& decodeCallback)
544 {
545     CallingContext context = GetCallingContext();
546     return PostSyncTask([this, &context, &pixelMap, &decodeCallback] {
547        return boomerang_.BoomerangDecodeImage(context, pixelMap, decodeCallback);
548     });
549 }
550 
551 // Stationary
552 
SubscribeStationaryCallback(int32_t type,int32_t event,int32_t latency,const sptr<IRemoteDevStaCallback> & subCallback)553 ErrCode IntentionService::SubscribeStationaryCallback(int32_t type, int32_t event,
554     int32_t latency, const sptr<IRemoteDevStaCallback> &subCallback)
555 {
556     CallingContext context = GetCallingContext();
557     return PostSyncTask([this, &context, type, event, latency, &subCallback] {
558        return stationary_.SubscribeStationaryCallback(context, type, event, latency, subCallback);
559     });
560 }
561 
UnsubscribeStationaryCallback(int32_t type,int32_t event,const sptr<IRemoteDevStaCallback> & unsubCallback)562 ErrCode IntentionService::UnsubscribeStationaryCallback(int32_t type, int32_t event,
563     const sptr<IRemoteDevStaCallback> &unsubCallback)
564 {
565     CallingContext context = GetCallingContext();
566     return PostSyncTask([this, &context, type, event, &unsubCallback] {
567        return stationary_.UnsubscribeStationaryCallback(context, type, event, unsubCallback);
568     });
569 }
570 
GetDeviceStatusData(int32_t type,int32_t & replyType,int32_t & replyValue)571 ErrCode IntentionService::GetDeviceStatusData(int32_t type, int32_t &replyType, int32_t &replyValue)
572 {
573     CallingContext context = GetCallingContext();
574     return PostSyncTask([this, &context, type, &replyType, &replyValue] {
575        return stationary_.GetDeviceStatusData(context, type, replyType, replyValue);
576     });
577 }
578 
GetDevicePostureDataSync(SequenceablePostureData & data)579 ErrCode IntentionService::GetDevicePostureDataSync(SequenceablePostureData &data)
580 {
581     CallingContext context = GetCallingContext();
582     return PostSyncTask([this, &context, &data] {
583         DevicePostureData rawPostureData;
584         int32_t ret = stationary_.GetDevicePostureDataSync(context, rawPostureData);
585         if (ret != RET_OK) {
586             return ret;
587         }
588         data.SetPostureData(rawPostureData);
589         return RET_OK;
590     });
591 }
592 
GetPageContent(const OnScreen::SequenceableContentOption & contentOption,OnScreen::SequenceablePageContent & pageContent)593 ErrCode IntentionService::GetPageContent(const OnScreen::SequenceableContentOption &contentOption,
594     OnScreen::SequenceablePageContent &pageContent)
595 {
596     CallingContext context = GetCallingContext();
597     return PostSyncTask([this, &context, &contentOption, &pageContent] {
598         OnScreen::PageContent rawPageContent;
599         int32_t ret = onScreen_.GetPageContent(context, contentOption.option_, rawPageContent);
600         if (ret != RET_OK) {
601             return ret;
602         }
603         pageContent.pageContent_ = rawPageContent;
604         return RET_OK;
605     });
606 }
607 
SendControlEvent(const OnScreen::SequenceableControlEvent & event)608 ErrCode IntentionService::SendControlEvent(const OnScreen::SequenceableControlEvent &event)
609 {
610     CallingContext context = GetCallingContext();
611     return PostSyncTask([this, &context, &event] {
612         return onScreen_.SendControlEvent(context, event.controlEvent_);
613     });
614 }
615 } // namespace DeviceStatus
616 } // namespace Msdp
617 } // namespace OHOS
618