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, ¬ifyCallback] {
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