1 /*
2 * Copyright (c) 2023 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 "zidl/screen_session_manager_client_stub.h"
17
18 #include "window_manager_hilog.h"
19
20 namespace OHOS::Rosen {
21
InitScreenChangeMap()22 void ScreenSessionManagerClientStub::InitScreenChangeMap()
23 {
24 if (HandleScreenChangeMap_.size() != 0) {
25 TLOGI(WmsLogTag::DMS, "screen change map has init!");
26 return;
27 }
28 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_SCREEN_CONNECTION_CHANGED] =
29 [this](MessageParcel& data, MessageParcel& reply) {
30 return HandleOnScreenConnectionChanged(data, reply);
31 };
32 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_PROPERTY_CHANGED] =
33 [this](MessageParcel& data, MessageParcel& reply) {
34 return HandleOnPropertyChanged(data, reply);
35 };
36 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_POWER_STATUS_CHANGED] =
37 [this](MessageParcel& data, MessageParcel& reply) {
38 return HandleOnPowerStatusChanged(data, reply);
39 };
40 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_SCREEN_EXTEND_CHANGED] =
41 [this](MessageParcel& data, MessageParcel& reply) {
42 return HandleOnScreenExtendChanged(data, reply);
43 };
44 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_SENSOR_ROTATION_CHANGED] =
45 [this](MessageParcel& data, MessageParcel& reply) {
46 return HandleOnSensorRotationChanged(data, reply);
47 };
48 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_HOVER_STATUS_CHANGED] =
49 [this](MessageParcel& data, MessageParcel& reply) {
50 return HandleOnHoverStatusChanged(data, reply);
51 };
52 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_SCREEN_ORIENTATION_CHANGED] =
53 [this](MessageParcel& data, MessageParcel& reply) {
54 return HandleOnScreenOrientationChanged(data, reply);
55 };
56 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_SCREEN_ROTATION_LOCKED_CHANGED] =
57 [this](MessageParcel& data, MessageParcel& reply) {
58 return HandleOnScreenRotationLockedChanged(data, reply);
59 };
60 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_DISPLAY_STATE_CHANGED] =
61 [this](MessageParcel& data, MessageParcel& reply) {
62 return HandleOnDisplayStateChanged(data, reply);
63 };
64 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_SCREEN_SHOT] =
65 [this](MessageParcel& data, MessageParcel& reply) {
66 return HandleOnScreenshot(data, reply);
67 };
68 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_IMMERSIVE_STATE_CHANGED] =
69 [this](MessageParcel& data, MessageParcel& reply) {
70 return HandleOnImmersiveStateChanged(data, reply);
71 };
72 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_SET_DISPLAY_NODE_SCREEN_ID] =
73 [this](MessageParcel& data, MessageParcel& reply) {
74 return HandleOnSetDisplayNodeScreenId(data, reply);
75 };
76 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_GET_SURFACENODEID_FROM_MISSIONID] =
77 [this](MessageParcel& data, MessageParcel& reply) {
78 return HandleOnGetSurfaceNodeIdsFromMissionIdsChanged(data, reply);
79 };
80 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_SET_SURFACENODEIDS] =
81 [this](MessageParcel& data, MessageParcel& reply) {
82 return HandleOnSetSurfaceNodeIdsChanged(data, reply);
83 };
84 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_VIRTUAL_SCREEN_DISCONNECTED] =
85 [this](MessageParcel& data, MessageParcel& reply) {
86 return HandleOnVirtualScreenDisconnected(data, reply);
87 };
88 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_SET_FOLD_DISPLAY_MODE] =
89 [this](MessageParcel& data, MessageParcel& reply) {
90 return HandleOnUpdateFoldDisplayMode(data, reply);
91 };
92 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_SWITCH_USER_CMD] =
93 [this](MessageParcel& data, MessageParcel& reply) {
94 return HandleSwitchUserCallback(data, reply);
95 };
96 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_SET_VIRTUAL_PIXEL_RATIO_SYSTEM] =
97 [this](MessageParcel& data, MessageParcel& reply) {
98 return HandleSetVirtualPixelRatioSystem(data, reply);
99 };
100 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_FOLDSTATUS_CHANGED_REPORT_UE] =
101 [this](MessageParcel& data, MessageParcel& reply) {
102 return HandleOnFoldStatusChangedReportUE(data, reply);
103 };
104 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_SCREEN_CAPTURE_NOTIFY] =
105 [this](MessageParcel& data, MessageParcel& reply) {
106 return HandleScreenCaptureNotify(data, reply);
107 };
108 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_SUPER_FOLD_STATUS_CHANGED] =
109 [this](MessageParcel& data, MessageParcel& reply) {
110 return HandleOnSuperFoldStatusChanged(data, reply);
111 };
112 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_SECONDARY_REFLEXION_CHANGED] =
113 [this](MessageParcel& data, MessageParcel& reply) {
114 return HandleOnSecondaryReflexionChanged(data, reply);
115 };
116 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_CAMERA_BACKSELFIE_CHANGED] =
117 [this](MessageParcel& data, MessageParcel& reply) {
118 return HandleOnCameraBackSelfieChanged(data, reply);
119 };
120 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_EXTEND_SCREEN_CONNECT_STATUS_CHANGED] =
121 [this](MessageParcel& data, MessageParcel& reply) {
122 return HandleOnExtendScreenConnectStatusChanged(data, reply);
123 };
124 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_EXTEND_CHANGED] =
125 [this](MessageParcel& data, MessageParcel& reply) {
126 return HandleOnExtendDisplayNodeChange(data, reply);
127 };
128 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_CREATE_SCREEN_SESSION_ONLY] =
129 [this](MessageParcel& data, MessageParcel& reply) {
130 return HandleOnCreateScreenSessionOnly(data, reply);
131 };
132 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_MAIN_CHANGED] =
133 [this](MessageParcel& data, MessageParcel& reply) {
134 return HandleOnMainDisplayNodeChange(data, reply);
135 };
136 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_SET_SCREEN_COMBINATION] =
137 [this](MessageParcel& data, MessageParcel& reply) {
138 return HandleSyncScreenCombination(data, reply);
139 };
140 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_DUMP_SCREEN_SESSION] =
141 [this](MessageParcel& data, MessageParcel& reply) {
142 return HandleOnDumperClientScreenSessions(data, reply);
143 };
144 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_BEFORE_PROPERTY_CHANGED] =
145 [this](MessageParcel& data, MessageParcel& reply) {
146 return HandleOnBeforeScreenPropertyChange(data, reply);
147 };
148 HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_SCREEN_MODE_CHANGED] =
149 [this](MessageParcel& data, MessageParcel& reply) {
150 return HandleOnScreenModeChanged(data, reply);
151 };
152 }
153
ScreenSessionManagerClientStub()154 ScreenSessionManagerClientStub::ScreenSessionManagerClientStub()
155 {
156 InitScreenChangeMap();
157 }
158
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)159 int ScreenSessionManagerClientStub::OnRemoteRequest(uint32_t code, MessageParcel& data, MessageParcel& reply,
160 MessageOption& option)
161 {
162 int handleRet = ERR_INVALID_STATE;
163 if (data.ReadInterfaceToken() != GetDescriptor()) {
164 TLOGE(WmsLogTag::DMS, "Failed to check interface token!");
165 return handleRet;
166 }
167 ScreenSessionManagerClientMessage msgId = static_cast<ScreenSessionManagerClientMessage>(code);
168 auto handleCall = HandleScreenChangeMap_.find(msgId);
169 if (handleCall != HandleScreenChangeMap_.end() && handleCall->second != nullptr) {
170 auto handleFunc = handleCall->second;
171 handleRet = handleFunc(data, reply);
172 } else {
173 TLOGE(WmsLogTag::DMS, "Failed to find function handler!");
174 handleRet = IPCObjectStub::OnRemoteRequest(code, data, reply, option);
175 }
176 return handleRet;
177 }
178
HandleSwitchUserCallback(MessageParcel & data,MessageParcel & reply)179 int ScreenSessionManagerClientStub::HandleSwitchUserCallback(MessageParcel& data, MessageParcel& reply)
180 {
181 TLOGD(WmsLogTag::DMS, "enter");
182 std::vector<int32_t> oldScbPids;
183 data.ReadInt32Vector(&oldScbPids);
184 int32_t currentScbPid = data.ReadInt32();
185 SwitchUserCallback(oldScbPids, currentScbPid);
186 return ERR_NONE;
187 }
188
HandleOnScreenConnectionChanged(MessageParcel & data,MessageParcel & reply)189 int ScreenSessionManagerClientStub::HandleOnScreenConnectionChanged(MessageParcel& data, MessageParcel& reply)
190 {
191 TLOGD(WmsLogTag::DMS, "enter");
192 auto rsId = static_cast<ScreenId>(data.ReadUint64());
193 auto name = data.ReadString();
194 bool isExtend = data.ReadBool();
195 auto innerName = data.ReadString();
196 auto screenId = static_cast<ScreenId>(data.ReadUint64());
197 auto screenEvent = static_cast<ScreenEvent>(data.ReadUint8());
198 SessionOption option = {
199 .rsId_ = rsId,
200 .name_ = name,
201 .isExtend_ = isExtend,
202 .innerName_ = innerName,
203 .screenId_ = screenId,
204 };
205 OnScreenConnectionChanged(option, screenEvent);
206 return ERR_NONE;
207 }
208
HandleOnPropertyChanged(MessageParcel & data,MessageParcel & reply)209 int ScreenSessionManagerClientStub::HandleOnPropertyChanged(MessageParcel& data, MessageParcel& reply)
210 {
211 TLOGD(WmsLogTag::DMS, "enter");
212 auto screenId = static_cast<ScreenId>(data.ReadUint64());
213 ScreenProperty property;
214 if (!RSMarshallingHelper::Unmarshalling(data, property)) {
215 TLOGE(WmsLogTag::DMS, "Read property failed");
216 return ERR_INVALID_DATA;
217 }
218 auto reason = static_cast<ScreenPropertyChangeReason>(data.ReadUint32());
219 OnPropertyChanged(screenId, property, reason);
220 return ERR_NONE;
221 }
222
HandleOnPowerStatusChanged(MessageParcel & data,MessageParcel & reply)223 int ScreenSessionManagerClientStub::HandleOnPowerStatusChanged(MessageParcel& data, MessageParcel& reply)
224 {
225 TLOGD(WmsLogTag::DMS, "enter");
226 auto event = static_cast<DisplayPowerEvent>(data.ReadUint32());
227 auto status = static_cast<EventStatus>(data.ReadUint32());
228 auto reason = static_cast<PowerStateChangeReason>(data.ReadUint32());
229 OnPowerStatusChanged(event, status, reason);
230 return ERR_NONE;
231 }
232
HandleOnSensorRotationChanged(MessageParcel & data,MessageParcel & reply)233 int ScreenSessionManagerClientStub::HandleOnSensorRotationChanged(MessageParcel& data, MessageParcel& reply)
234 {
235 TLOGD(WmsLogTag::DMS, "enter");
236 auto screenId = static_cast<ScreenId>(data.ReadUint64());
237 auto sensorRotation = data.ReadFloat();
238 OnSensorRotationChanged(screenId, sensorRotation);
239 return ERR_NONE;
240 }
241
HandleOnScreenExtendChanged(MessageParcel & data,MessageParcel & reply)242 int ScreenSessionManagerClientStub::HandleOnScreenExtendChanged(MessageParcel& data, MessageParcel& reply)
243 {
244 auto mainScreenId = static_cast<ScreenId>(data.ReadUint64());
245 auto extendScreenId = static_cast<ScreenId>(data.ReadUint64());
246 TLOGI(WmsLogTag::DMS, "mainScreenId=%{public}" PRIu64" extendScreenId=%{public}" PRIu64, mainScreenId,
247 extendScreenId);
248 OnScreenExtendChanged(mainScreenId, extendScreenId);
249 return ERR_NONE;
250 }
251
HandleOnScreenOrientationChanged(MessageParcel & data,MessageParcel & reply)252 int ScreenSessionManagerClientStub::HandleOnScreenOrientationChanged(MessageParcel& data, MessageParcel& reply)
253 {
254 TLOGD(WmsLogTag::DMS, "enter");
255 auto screenId = static_cast<ScreenId>(data.ReadUint64());
256 auto screenOrientation = data.ReadFloat();
257 OnScreenOrientationChanged(screenId, screenOrientation);
258 return ERR_NONE;
259 }
260
HandleOnScreenRotationLockedChanged(MessageParcel & data,MessageParcel & reply)261 int ScreenSessionManagerClientStub::HandleOnScreenRotationLockedChanged(MessageParcel& data, MessageParcel& reply)
262 {
263 TLOGD(WmsLogTag::DMS, "enter");
264 auto screenId = static_cast<ScreenId>(data.ReadUint64());
265 auto isLocked = data.ReadBool();
266 OnScreenRotationLockedChanged(screenId, isLocked);
267 return ERR_NONE;
268 }
269
HandleOnDisplayStateChanged(MessageParcel & data,MessageParcel & reply)270 int ScreenSessionManagerClientStub::HandleOnDisplayStateChanged(MessageParcel& data, MessageParcel& reply)
271 {
272 TLOGD(WmsLogTag::DMS, "enter");
273 auto defaultDisplayId = static_cast<DisplayId>(data.ReadUint64());
274 auto displayInfo = data.ReadStrongParcelable<DisplayInfo>();
275 auto mapSize = data.ReadUint32();
276 std::map<DisplayId, sptr<DisplayInfo>> displayInfoMap;
277 while (mapSize--) {
278 auto displayId = data.ReadUint64();
279 auto displayInfoValue = data.ReadStrongParcelable<DisplayInfo>();
280 displayInfoMap.emplace(displayId, displayInfoValue);
281 }
282 auto type = static_cast<DisplayStateChangeType>(data.ReadUint32());
283 OnDisplayStateChanged(defaultDisplayId, displayInfo, displayInfoMap, type);
284 return ERR_NONE;
285 }
286
HandleOnUpdateFoldDisplayMode(MessageParcel & data,MessageParcel & reply)287 int ScreenSessionManagerClientStub::HandleOnUpdateFoldDisplayMode(MessageParcel& data, MessageParcel& reply)
288 {
289 TLOGD(WmsLogTag::DMS, "enter");
290 auto foldDisplayMode = static_cast<FoldDisplayMode>(data.ReadUint32());
291 OnUpdateFoldDisplayMode(foldDisplayMode);
292 return ERR_NONE;
293 }
294
HandleOnGetSurfaceNodeIdsFromMissionIdsChanged(MessageParcel & data,MessageParcel & reply)295 int ScreenSessionManagerClientStub::HandleOnGetSurfaceNodeIdsFromMissionIdsChanged(MessageParcel& data,
296 MessageParcel& reply)
297 {
298 std::vector<uint64_t> missionIds;
299 data.ReadUInt64Vector(&missionIds);
300 std::vector<uint64_t> surfaceNodeIds;
301 data.ReadUInt64Vector(&surfaceNodeIds);
302 bool isBlackList = data.ReadBool();
303 OnGetSurfaceNodeIdsFromMissionIdsChanged(missionIds, surfaceNodeIds, isBlackList);
304 if (!reply.WriteUInt64Vector(surfaceNodeIds)) {
305 TLOGE(WmsLogTag::DMS, "Write surfaceNodeIds failed");
306 return ERR_TRANSACTION_FAILED;
307 }
308 return ERR_NONE;
309 }
310
HandleOnSetSurfaceNodeIdsChanged(MessageParcel & data,MessageParcel & reply)311 int ScreenSessionManagerClientStub::HandleOnSetSurfaceNodeIdsChanged(MessageParcel& data, MessageParcel& reply)
312 {
313 auto displayId = static_cast<DisplayId>(data.ReadUint64());
314 std::vector<uint64_t> surfaceNodeIds;
315 data.ReadUInt64Vector(&surfaceNodeIds);
316 OnSetSurfaceNodeIdsChanged(displayId, surfaceNodeIds);
317 return ERR_NONE;
318 }
319
HandleOnVirtualScreenDisconnected(MessageParcel & data,MessageParcel & reply)320 int ScreenSessionManagerClientStub::HandleOnVirtualScreenDisconnected(MessageParcel& data, MessageParcel& reply)
321 {
322 auto displayId = static_cast<DisplayId>(data.ReadUint64());
323 OnVirtualScreenDisconnected(displayId);
324 return ERR_NONE;
325 }
326
HandleOnScreenshot(MessageParcel & data,MessageParcel & reply)327 int ScreenSessionManagerClientStub::HandleOnScreenshot(MessageParcel& data, MessageParcel& reply)
328 {
329 TLOGD(WmsLogTag::DMS, "enter");
330 auto displayId = static_cast<DisplayId>(data.ReadUint64());
331 OnScreenshot(displayId);
332 return ERR_NONE;
333 }
334
HandleOnImmersiveStateChanged(MessageParcel & data,MessageParcel & reply)335 int ScreenSessionManagerClientStub::HandleOnImmersiveStateChanged(MessageParcel& data, MessageParcel& reply)
336 {
337 TLOGD(WmsLogTag::DMS, "enter");
338 auto screenId = static_cast<ScreenId>(data.ReadUint64());
339 bool immersive = false;
340 OnImmersiveStateChanged(screenId, immersive);
341 if (!reply.WriteBool(immersive)) {
342 TLOGE(WmsLogTag::DMS, "Write immersive failed");
343 return ERR_TRANSACTION_FAILED;
344 }
345 return ERR_NONE;
346 }
347
HandleOnSetDisplayNodeScreenId(MessageParcel & data,MessageParcel & reply)348 int ScreenSessionManagerClientStub::HandleOnSetDisplayNodeScreenId(MessageParcel& data, MessageParcel& reply)
349 {
350 TLOGD(WmsLogTag::DMS, "enter");
351 auto screenId = static_cast<ScreenId>(data.ReadUint64());
352 auto displayNodeScreenId = static_cast<ScreenId>(data.ReadUint64());
353 SetDisplayNodeScreenId(screenId, displayNodeScreenId);
354 return ERR_NONE;
355 }
356
HandleSetVirtualPixelRatioSystem(MessageParcel & data,MessageParcel & reply)357 int ScreenSessionManagerClientStub::HandleSetVirtualPixelRatioSystem(MessageParcel& data, MessageParcel& reply)
358 {
359 TLOGD(WmsLogTag::DMS, "enter");
360 auto screenId = static_cast<ScreenId>(data.ReadUint64());
361 float virtualPixelRatio = data.ReadFloat();
362 SetVirtualPixelRatioSystem(screenId, virtualPixelRatio);
363 return ERR_NONE;
364 }
365
HandleOnFoldStatusChangedReportUE(MessageParcel & data,MessageParcel & reply)366 int ScreenSessionManagerClientStub::HandleOnFoldStatusChangedReportUE(MessageParcel& data, MessageParcel& reply)
367 {
368 std::vector<std::string> screenFoldInfo;
369 data.ReadStringVector(&screenFoldInfo);
370 OnFoldStatusChangedReportUE(screenFoldInfo);
371 return ERR_NONE;
372 }
373
HandleOnHoverStatusChanged(MessageParcel & data,MessageParcel & reply)374 int ScreenSessionManagerClientStub::HandleOnHoverStatusChanged(MessageParcel& data, MessageParcel& reply)
375 {
376 TLOGD(WmsLogTag::DMS, "enter");
377 auto screenId = static_cast<ScreenId>(data.ReadUint64());
378 auto hoverStatus = data.ReadInt32();
379 auto needRotate = data.ReadBool();
380 OnHoverStatusChanged(screenId, hoverStatus, needRotate);
381 return ERR_NONE;
382 }
383
HandleScreenCaptureNotify(MessageParcel & data,MessageParcel & reply)384 int ScreenSessionManagerClientStub::HandleScreenCaptureNotify(MessageParcel& data, MessageParcel& reply)
385 {
386 auto screenId = static_cast<ScreenId>(data.ReadUint64());
387 auto uid = data.ReadInt32();
388 auto clientName = data.ReadString();
389 TLOGI(WmsLogTag::DMS, "notify scb capture screenId=%{public}" PRIu64", uid=%{public}d.", screenId, uid);
390 ScreenCaptureNotify(screenId, uid, clientName);
391 return ERR_NONE;
392 }
393
HandleOnCameraBackSelfieChanged(MessageParcel & data,MessageParcel & reply)394 int ScreenSessionManagerClientStub::HandleOnCameraBackSelfieChanged(MessageParcel& data, MessageParcel& reply)
395 {
396 TLOGD(WmsLogTag::DMS, "enter");
397 auto screenId = static_cast<ScreenId>(data.ReadUint64());
398 bool isCameraBackSelfie = data.ReadBool();
399 OnCameraBackSelfieChanged(screenId, isCameraBackSelfie);
400 return ERR_NONE;
401 }
402
HandleOnSuperFoldStatusChanged(MessageParcel & data,MessageParcel & reply)403 int ScreenSessionManagerClientStub::HandleOnSuperFoldStatusChanged(MessageParcel& data, MessageParcel& reply)
404 {
405 auto screenId = static_cast<ScreenId>(data.ReadUint64());
406 auto superFoldStatus = static_cast<SuperFoldStatus>(data.ReadUint32());
407 TLOGI(WmsLogTag::DMS, "super fold status screenId=%{public}" PRIu64", superFoldStatus=%{public}d.",
408 screenId, static_cast<uint32_t>(superFoldStatus));
409 OnSuperFoldStatusChanged(screenId, superFoldStatus);
410 return ERR_NONE;
411 }
412
HandleOnSecondaryReflexionChanged(MessageParcel & data,MessageParcel & reply)413 int ScreenSessionManagerClientStub::HandleOnSecondaryReflexionChanged(MessageParcel& data, MessageParcel& reply)
414 {
415 auto screenId = static_cast<ScreenId>(data.ReadUint64());
416 auto isSecondaryReflexion = static_cast<bool>(data.ReadUint32());
417 TLOGI(WmsLogTag::DMS, "secondary reflexion screenId=%{public}" PRIu64", isSecondaryReflexion=%{public}d.",
418 screenId, static_cast<uint32_t>(isSecondaryReflexion));
419 OnSecondaryReflexionChanged(screenId, isSecondaryReflexion);
420 return ERR_NONE;
421 }
422
HandleOnExtendScreenConnectStatusChanged(MessageParcel & data,MessageParcel & reply)423 int ScreenSessionManagerClientStub::HandleOnExtendScreenConnectStatusChanged(MessageParcel& data, MessageParcel& reply)
424 {
425 auto screenId = static_cast<ScreenId>(data.ReadUint64());
426 auto extendScreenConnectStatus = static_cast<ExtendScreenConnectStatus>(data.ReadUint32());
427 TLOGI(WmsLogTag::DMS, "extendScreenConnectStatus screenId=%{public}" PRIu64", extendScreenConnectStatus"
428 "=%{public}d.", screenId, static_cast<uint32_t>(extendScreenConnectStatus));
429 OnExtendScreenConnectStatusChanged(screenId, extendScreenConnectStatus);
430 return ERR_NONE;
431 }
432
HandleOnExtendDisplayNodeChange(MessageParcel & data,MessageParcel & reply)433 int ScreenSessionManagerClientStub::HandleOnExtendDisplayNodeChange(MessageParcel& data, MessageParcel& reply)
434 {
435 ScreenId mainScreenId = static_cast<ScreenId>(data.ReadUint64());
436 ScreenId extendScreenId = static_cast<ScreenId>(data.ReadUint64());
437 bool changeStatus = OnExtendDisplayNodeChange(mainScreenId, extendScreenId);
438 reply.WriteBool(changeStatus);
439 TLOGI(WmsLogTag::DMS, "extend display change status=%{public}d", changeStatus);
440 return ERR_NONE;
441 }
442
HandleOnCreateScreenSessionOnly(MessageParcel & data,MessageParcel & reply)443 int ScreenSessionManagerClientStub::HandleOnCreateScreenSessionOnly(MessageParcel& data, MessageParcel& reply)
444 {
445 auto screenId = static_cast<ScreenId>(data.ReadUint64());
446 auto rsId = static_cast<ScreenId>(data.ReadUint64());
447 auto name = data.ReadString();
448 bool isExtend = data.ReadBool();
449 bool refreshStatus = OnCreateScreenSessionOnly(screenId, rsId, name, isExtend);
450 reply.WriteBool(refreshStatus);
451 return ERR_NONE;
452 }
453
HandleOnMainDisplayNodeChange(MessageParcel & data,MessageParcel & reply)454 int ScreenSessionManagerClientStub::HandleOnMainDisplayNodeChange(MessageParcel& data, MessageParcel& reply)
455 {
456 ScreenId mainScreenId = static_cast<ScreenId>(data.ReadUint64());
457 ScreenId extendScreenId = static_cast<ScreenId>(data.ReadUint64());
458 ScreenId extendRSId = static_cast<ScreenId>(data.ReadUint64());
459 bool changeStatus = OnMainDisplayNodeChange(mainScreenId, extendScreenId, extendRSId);
460 reply.WriteBool(changeStatus);
461 TLOGI(WmsLogTag::DMS, "main node change status=%{public}d", changeStatus);
462 return ERR_NONE;
463 }
464
HandleOnDumperClientScreenSessions(MessageParcel & data,MessageParcel & reply)465 int ScreenSessionManagerClientStub::HandleOnDumperClientScreenSessions(MessageParcel& data, MessageParcel& reply)
466 {
467 std::string screenInfos = OnDumperClientScreenSessions();
468 reply.WriteString(screenInfos);
469 return ERR_NONE;
470 }
471
HandleSyncScreenCombination(MessageParcel & data,MessageParcel & reply)472 int ScreenSessionManagerClientStub::HandleSyncScreenCombination(MessageParcel& data, MessageParcel& reply)
473 {
474 auto mainScreenId = static_cast<ScreenId>(data.ReadUint64());
475 auto extendScreenId = static_cast<ScreenId>(data.ReadUint64());
476 auto extendCombination = static_cast<ScreenCombination>(data.ReadUint32());
477 SetScreenCombination(mainScreenId, extendScreenId, extendCombination);
478 return ERR_NONE;
479 }
480
HandleOnBeforeScreenPropertyChange(MessageParcel & data,MessageParcel & reply)481 int ScreenSessionManagerClientStub::HandleOnBeforeScreenPropertyChange(MessageParcel& data, MessageParcel& reply)
482 {
483 uint32_t status = data.ReadUint32();
484 FoldStatus foldStatus = FoldStatus::UNKNOWN;
485 if (status > static_cast<uint32_t>(FoldStatus::HALF_FOLD)) {
486 return ERR_INVALID_VALUE;
487 }
488 foldStatus = static_cast<FoldStatus>(status);
489 TLOGI(WmsLogTag::DMS, "fold status %{public}d", foldStatus);
490 OnBeforeScreenPropertyChanged(foldStatus);
491 return ERR_NONE;
492 }
493
HandleOnScreenModeChanged(MessageParcel & data,MessageParcel & reply)494 int ScreenSessionManagerClientStub::HandleOnScreenModeChanged(MessageParcel& data, MessageParcel& reply)
495 {
496 auto screenModeChangeEvent = static_cast<ScreenModeChangeEvent>(data.ReadUint32());
497 TLOGI(WmsLogTag::DMS, "screenModeChangeEvent: %{public}d", screenModeChangeEvent);
498 OnScreenModeChanged(screenModeChangeEvent);
499 return ERR_NONE;
500 }
501 } // namespace OHOS::Rosen
502