• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 namespace {
22 constexpr HiviewDFX::HiLogLabel LABEL = { LOG_CORE, HILOG_DOMAIN_DISPLAY, "ScreenSessionManagerClientStub" };
23 }  // namespace
24 
InitScreenChangeMap()25 void ScreenSessionManagerClientStub::InitScreenChangeMap()
26 {
27     if (HandleScreenChangeMap_.size() != 0) {
28         WLOGFI("screen change map has init!");
29         return;
30     }
31     HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_SCREEN_CONNECTION_CHANGED] =
32         [this](MessageParcel& data, MessageParcel& reply) {
33             return HandleOnScreenConnectionChanged(data, reply);
34         };
35     HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_PROPERTY_CHANGED] =
36         [this](MessageParcel& data, MessageParcel& reply) {
37         return HandleOnPropertyChanged(data, reply);
38     };
39     HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_POWER_STATUS_CHANGED] =
40         [this](MessageParcel& data, MessageParcel& reply) {
41         return HandleOnPowerStatusChanged(data, reply);
42     };
43     HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_SENSOR_ROTATION_CHANGED] =
44         [this](MessageParcel& data, MessageParcel& reply) {
45         return HandleOnSensorRotationChanged(data, reply);
46     };
47     HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_HOVER_STATUS_CHANGED] =
48         [this](MessageParcel& data, MessageParcel& reply) {
49         return HandleOnHoverStatusChanged(data, reply);
50     };
51     HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_SCREEN_ORIENTATION_CHANGED] =
52         [this](MessageParcel& data, MessageParcel& reply) {
53         return HandleOnScreenOrientationChanged(data, reply);
54     };
55     HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_SCREEN_ROTATION_LOCKED_CHANGED] =
56         [this](MessageParcel& data, MessageParcel& reply) {
57         return HandleOnScreenRotationLockedChanged(data, reply);
58     };
59     HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_DISPLAY_STATE_CHANGED] =
60         [this](MessageParcel& data, MessageParcel& reply) {
61         return HandleOnDisplayStateChanged(data, reply);
62     };
63     HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_SCREEN_SHOT] =
64         [this](MessageParcel& data, MessageParcel& reply) {
65         return HandleOnScreenshot(data, reply);
66     };
67     HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_IMMERSIVE_STATE_CHANGED] =
68         [this](MessageParcel& data, MessageParcel& reply) {
69         return HandleOnImmersiveStateChanged(data, reply);
70     };
71     HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_SET_DISPLAY_NODE_SCREEN_ID] =
72         [this](MessageParcel& data, MessageParcel& reply) {
73         return HandleOnSetDisplayNodeScreenId(data, reply);
74     };
75     HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_GET_SURFACENODEID_FROM_MISSIONID] =
76         [this](MessageParcel& data, MessageParcel& reply) {
77         return HandleOnGetSurfaceNodeIdsFromMissionIdsChanged(data, reply);
78     };
79     HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_SET_FOLD_DISPLAY_MODE] =
80         [this](MessageParcel& data, MessageParcel& reply) {
81         return HandleOnUpdateFoldDisplayMode(data, reply);
82     };
83     HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_SWITCH_USER_CMD] =
84         [this](MessageParcel& data, MessageParcel& reply) {
85         return HandleSwitchUserCallback(data, reply);
86     };
87     HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_SET_VIRTUAL_PIXEL_RATIO_SYSTEM] =
88         [this](MessageParcel& data, MessageParcel& reply) {
89         return HandleSetVirtualPixelRatioSystem(data, reply);
90     };
91     HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_FOLDSTATUS_CHANGED_REPORT_UE] =
92         [this](MessageParcel& data, MessageParcel& reply) {
93         return HandleOnFoldStatusChangedReportUE(data, reply);
94     };
95     HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_SCREEN_CAPTURE_NOTIFY] =
96         [this](MessageParcel& data, MessageParcel& reply) {
97         return HandleScreenCaptureNotify(data, reply);
98     };
99     HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_CAMERA_BACKSELFIE_CHANGED] =
100         [this](MessageParcel& data, MessageParcel& reply) {
101         return HandleOnCameraBackSelfieChanged(data, reply);
102     };
103     HandleScreenChangeMap_[ScreenSessionManagerClientMessage::TRANS_ID_ON_SECONDARY_REFLEXION_CHANGED] =
104         [this](MessageParcel& data, MessageParcel& reply) {
105         return HandleOnSecondaryReflexionChanged(data, reply);
106     };
107 }
108 
ScreenSessionManagerClientStub()109 ScreenSessionManagerClientStub::ScreenSessionManagerClientStub()
110 {
111     InitScreenChangeMap();
112 }
113 
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)114 int ScreenSessionManagerClientStub::OnRemoteRequest(uint32_t code, MessageParcel& data, MessageParcel& reply,
115     MessageOption& option)
116 {
117     int handleRet = ERR_INVALID_STATE;
118     if (data.ReadInterfaceToken() != GetDescriptor()) {
119         WLOGFE("Failed to check interface token!");
120         return handleRet;
121     }
122     ScreenSessionManagerClientMessage msgId = static_cast<ScreenSessionManagerClientMessage>(code);
123     auto handleCall = HandleScreenChangeMap_.find(msgId);
124     if (handleCall != HandleScreenChangeMap_.end() && handleCall->second != nullptr) {
125         auto handleFunc = handleCall->second;
126         handleRet = handleFunc(data, reply);
127     } else {
128         WLOGFE("Failed to find function handler!");
129         handleRet = IPCObjectStub::OnRemoteRequest(code, data, reply, option);
130     }
131     return handleRet;
132 }
133 
HandleSwitchUserCallback(MessageParcel & data,MessageParcel & reply)134 int ScreenSessionManagerClientStub::HandleSwitchUserCallback(MessageParcel& data, MessageParcel& reply)
135 {
136     WLOGD("HandleSwitchUserCallback");
137     std::vector<int32_t> oldScbPids;
138     data.ReadInt32Vector(&oldScbPids);
139     int32_t currentScbPid = data.ReadInt32();
140     SwitchUserCallback(oldScbPids, currentScbPid);
141     return ERR_NONE;
142 }
143 
HandleOnScreenConnectionChanged(MessageParcel & data,MessageParcel & reply)144 int ScreenSessionManagerClientStub::HandleOnScreenConnectionChanged(MessageParcel& data, MessageParcel& reply)
145 {
146     WLOGD("HandleOnScreenConnectionChanged");
147     auto screenId = static_cast<ScreenId>(data.ReadUint64());
148     auto screenEvent = static_cast<ScreenEvent>(data.ReadUint8());
149     auto rsId = static_cast<ScreenId>(data.ReadUint64());
150     auto name = data.ReadString();
151     OnScreenConnectionChanged(screenId, screenEvent, rsId, name);
152     return ERR_NONE;
153 }
154 
HandleOnPropertyChanged(MessageParcel & data,MessageParcel & reply)155 int ScreenSessionManagerClientStub::HandleOnPropertyChanged(MessageParcel& data, MessageParcel& reply)
156 {
157     WLOGD("HandleOnPropertyChanged");
158     auto screenId = static_cast<ScreenId>(data.ReadUint64());
159     ScreenProperty property;
160     if (!RSMarshallingHelper::Unmarshalling(data, property)) {
161         WLOGFE("Read property failed");
162         return ERR_INVALID_DATA;
163     }
164     auto reason = static_cast<ScreenPropertyChangeReason>(data.ReadUint32());
165     OnPropertyChanged(screenId, property, reason);
166     return ERR_NONE;
167 }
168 
HandleOnPowerStatusChanged(MessageParcel & data,MessageParcel & reply)169 int ScreenSessionManagerClientStub::HandleOnPowerStatusChanged(MessageParcel& data, MessageParcel& reply)
170 {
171     WLOGD("HandleOnPowerStatusChanged");
172     auto event = static_cast<DisplayPowerEvent>(data.ReadUint32());
173     auto status = static_cast<EventStatus>(data.ReadUint32());
174     auto reason = static_cast<PowerStateChangeReason>(data.ReadUint32());
175     OnPowerStatusChanged(event, status, reason);
176     return ERR_NONE;
177 }
178 
HandleOnSensorRotationChanged(MessageParcel & data,MessageParcel & reply)179 int ScreenSessionManagerClientStub::HandleOnSensorRotationChanged(MessageParcel& data, MessageParcel& reply)
180 {
181     WLOGD("HandleOnSensorRotationChanged");
182     auto screenId = static_cast<ScreenId>(data.ReadUint64());
183     auto sensorRotation = data.ReadFloat();
184     OnSensorRotationChanged(screenId, sensorRotation);
185     return ERR_NONE;
186 }
187 
HandleOnScreenOrientationChanged(MessageParcel & data,MessageParcel & reply)188 int ScreenSessionManagerClientStub::HandleOnScreenOrientationChanged(MessageParcel& data, MessageParcel& reply)
189 {
190     WLOGD("HandleOnScreenOrientationChanged");
191     auto screenId = static_cast<ScreenId>(data.ReadUint64());
192     auto screenOrientation = data.ReadFloat();
193     OnScreenOrientationChanged(screenId, screenOrientation);
194     return ERR_NONE;
195 }
196 
HandleOnScreenRotationLockedChanged(MessageParcel & data,MessageParcel & reply)197 int ScreenSessionManagerClientStub::HandleOnScreenRotationLockedChanged(MessageParcel& data, MessageParcel& reply)
198 {
199     WLOGD("HandleOnScreenRotationLockedChanged");
200     auto screenId = static_cast<ScreenId>(data.ReadUint64());
201     auto isLocked = data.ReadBool();
202     OnScreenRotationLockedChanged(screenId, isLocked);
203     return ERR_NONE;
204 }
205 
HandleOnDisplayStateChanged(MessageParcel & data,MessageParcel & reply)206 int ScreenSessionManagerClientStub::HandleOnDisplayStateChanged(MessageParcel& data, MessageParcel& reply)
207 {
208     WLOGD("HandleOnDisplayStateChanged");
209     auto defaultDisplayId = static_cast<DisplayId>(data.ReadUint64());
210     auto displayInfo = data.ReadStrongParcelable<DisplayInfo>();
211     auto mapSize = data.ReadUint32();
212     std::map<DisplayId, sptr<DisplayInfo>> displayInfoMap;
213     while (mapSize--) {
214         auto displayId = data.ReadUint64();
215         auto displayInfoValue = data.ReadStrongParcelable<DisplayInfo>();
216         displayInfoMap.emplace(displayId, displayInfoValue);
217     }
218     auto type = static_cast<DisplayStateChangeType>(data.ReadUint32());
219     OnDisplayStateChanged(defaultDisplayId, displayInfo, displayInfoMap, type);
220     return ERR_NONE;
221 }
222 
HandleOnUpdateFoldDisplayMode(MessageParcel & data,MessageParcel & reply)223 int ScreenSessionManagerClientStub::HandleOnUpdateFoldDisplayMode(MessageParcel& data, MessageParcel& reply)
224 {
225     WLOGD("HandleOnUpdateFoldDisplayMode");
226     auto foldDisplayMode = static_cast<FoldDisplayMode>(data.ReadUint32());
227     OnUpdateFoldDisplayMode(foldDisplayMode);
228     return ERR_NONE;
229 }
230 
HandleOnGetSurfaceNodeIdsFromMissionIdsChanged(MessageParcel & data,MessageParcel & reply)231 int ScreenSessionManagerClientStub::HandleOnGetSurfaceNodeIdsFromMissionIdsChanged(MessageParcel& data,
232     MessageParcel& reply)
233 {
234     std::vector<uint64_t> missionIds;
235     data.ReadUInt64Vector(&missionIds);
236     std::vector<uint64_t> surfaceNodeIds;
237     data.ReadUInt64Vector(&surfaceNodeIds);
238     bool isBlackList = data.ReadBool();
239     OnGetSurfaceNodeIdsFromMissionIdsChanged(missionIds, surfaceNodeIds, isBlackList);
240     if (!reply.WriteUInt64Vector(surfaceNodeIds)) {
241         WLOGFE("Write surfaceNodeIds failed");
242         return ERR_TRANSACTION_FAILED;
243     }
244     return ERR_NONE;
245 }
246 
HandleOnScreenshot(MessageParcel & data,MessageParcel & reply)247 int ScreenSessionManagerClientStub::HandleOnScreenshot(MessageParcel& data, MessageParcel& reply)
248 {
249     WLOGD("HandleOnScreenshot");
250     auto displayId = static_cast<DisplayId>(data.ReadUint64());
251     OnScreenshot(displayId);
252     return ERR_NONE;
253 }
254 
HandleOnImmersiveStateChanged(MessageParcel & data,MessageParcel & reply)255 int ScreenSessionManagerClientStub::HandleOnImmersiveStateChanged(MessageParcel& data, MessageParcel& reply)
256 {
257     WLOGD("HandleOnImmersiveStateChanged");
258     bool immersive = false;
259     OnImmersiveStateChanged(immersive);
260     if (!reply.WriteBool(immersive)) {
261         WLOGFE("Write immersive failed");
262         return ERR_TRANSACTION_FAILED;
263     }
264     return ERR_NONE;
265 }
266 
HandleOnSetDisplayNodeScreenId(MessageParcel & data,MessageParcel & reply)267 int ScreenSessionManagerClientStub::HandleOnSetDisplayNodeScreenId(MessageParcel& data, MessageParcel& reply)
268 {
269     WLOGD("HandleOnSetDisplayNodeScreenId");
270     auto screenId = static_cast<ScreenId>(data.ReadUint64());
271     auto displayNodeScreenId = static_cast<ScreenId>(data.ReadUint64());
272     SetDisplayNodeScreenId(screenId, displayNodeScreenId);
273     return ERR_NONE;
274 }
275 
HandleSetVirtualPixelRatioSystem(MessageParcel & data,MessageParcel & reply)276 int ScreenSessionManagerClientStub::HandleSetVirtualPixelRatioSystem(MessageParcel& data, MessageParcel& reply)
277 {
278     WLOGD("HandleSetVirtualPixelRatioSystem");
279     auto screenId = static_cast<ScreenId>(data.ReadUint64());
280     float virtualPixelRatio = data.ReadFloat();
281     SetVirtualPixelRatioSystem(screenId, virtualPixelRatio);
282     return ERR_NONE;
283 }
284 
HandleOnFoldStatusChangedReportUE(MessageParcel & data,MessageParcel & reply)285 int ScreenSessionManagerClientStub::HandleOnFoldStatusChangedReportUE(MessageParcel& data, MessageParcel& reply)
286 {
287     std::vector<std::string> screenFoldInfo;
288     data.ReadStringVector(&screenFoldInfo);
289     OnFoldStatusChangedReportUE(screenFoldInfo);
290     return ERR_NONE;
291 }
292 
HandleOnHoverStatusChanged(MessageParcel & data,MessageParcel & reply)293 int ScreenSessionManagerClientStub::HandleOnHoverStatusChanged(MessageParcel& data, MessageParcel& reply)
294 {
295     WLOGD("HandleOnHoverStatusChanged");
296     auto screenId = static_cast<ScreenId>(data.ReadUint64());
297     auto hoverStatus = data.ReadInt32();
298     auto needRotate = data.ReadBool();
299     OnHoverStatusChanged(screenId, hoverStatus, needRotate);
300     return ERR_NONE;
301 }
302 
HandleScreenCaptureNotify(MessageParcel & data,MessageParcel & reply)303 int ScreenSessionManagerClientStub::HandleScreenCaptureNotify(MessageParcel& data, MessageParcel& reply)
304 {
305     auto screenId = static_cast<ScreenId>(data.ReadUint64());
306     auto uid = data.ReadInt32();
307     auto clientName = data.ReadString();
308     WLOGI("notify scb capture screenId=%{public}" PRIu64", uid=%{public}d.", screenId, uid);
309     ScreenCaptureNotify(screenId, uid, clientName);
310     return ERR_NONE;
311 }
312 
HandleOnCameraBackSelfieChanged(MessageParcel & data,MessageParcel & reply)313 int ScreenSessionManagerClientStub::HandleOnCameraBackSelfieChanged(MessageParcel& data, MessageParcel& reply)
314 {
315     WLOGD("HandleOnCameraBackSelfieChanged");
316     auto screenId = static_cast<ScreenId>(data.ReadUint64());
317     bool isCameraBackSelfie = data.ReadBool();
318     OnCameraBackSelfieChanged(screenId, isCameraBackSelfie);
319     return ERR_NONE;
320 }
321 
HandleOnSecondaryReflexionChanged(MessageParcel & data,MessageParcel & reply)322 int ScreenSessionManagerClientStub::HandleOnSecondaryReflexionChanged(MessageParcel& data, MessageParcel& reply)
323 {
324     auto screenId = static_cast<ScreenId>(data.ReadUint64());
325     auto isSecondaryReflexion = data.ReadBool();
326     WLOGI("secondary reflexion screenId=%{public}" PRIu64", isSecondaryReflexion=%{public}d.",
327         screenId, static_cast<uint32_t>(isSecondaryReflexion));
328     OnSecondaryReflexionChanged(screenId, isSecondaryReflexion);
329     return ERR_NONE;
330 }
331 } // namespace OHOS::Rosen
332