• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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 <unistd.h>
17 
18 #include "ashmem.h"
19 #include "hilog_wrapper.h"
20 #include "ipc_skeleton.h"
21 #include "memory_guard.h"
22 #include "parcel.h"
23 #include "pixel_map.h"
24 #include "wallpaper_common.h"
25 #include "wallpaper_service_ipc_interface_code.h"
26 #include "wallpaper_service_stub.h"
27 
28 namespace OHOS {
29 namespace WallpaperMgrService {
30 using namespace OHOS::HiviewDFX;
31 using namespace OHOS::Media;
32 
WallpaperServiceStub(bool serialInvokeFlag)33 WallpaperServiceStub::WallpaperServiceStub(bool serialInvokeFlag) : IRemoteStub(serialInvokeFlag)
34 {
35     requestHandlers = {
36         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::SET_WALLPAPER),
37             [this](MessageParcel &data, MessageParcel &reply) { return OnSetWallpaper(data, reply); } },
38         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::GET_PIXELMAP),
39             [this](MessageParcel &data, MessageParcel &reply) { return OnGetPixelMap(data, reply); } },
40         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::GET_COLORS),
41             [this](MessageParcel &data, MessageParcel &reply) { return OnGetColors(data, reply); } },
42         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::GET_WALLPAPER_ID),
43             [this](MessageParcel &data, MessageParcel &reply) { return OnGetWallpaperId(data, reply); } },
44         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::GET_FILE),
45             [this](MessageParcel &data, MessageParcel &reply) { return OnGetFile(data, reply); } },
46         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::ON),
47             [this](MessageParcel &data, MessageParcel &reply) { return OnWallpaperOn(data, reply); } },
48         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::OFF),
49             [this](MessageParcel &data, MessageParcel &reply) { return OnWallpaperOff(data, reply); } },
50         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::IS_CHANGE_PERMITTED),
51             [this](MessageParcel &data, MessageParcel &reply) { return OnIsChangePermitted(data, reply); } },
52         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::IS_OPERATION_ALLOWED),
53             [this](MessageParcel &data, MessageParcel &reply) { return OnIsOperationAllowed(data, reply); } },
54         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::RESET_WALLPAPER),
55             [this](MessageParcel &data, MessageParcel &reply) { return OnResetWallpaper(data, reply); } },
56         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::REGISTER_CALLBACK),
57             [this](MessageParcel &data, MessageParcel &reply) { return OnRegisterWallpaperCallback(data, reply); } },
58         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::SET_WALLPAPER_V9),
59             [this](MessageParcel &data, MessageParcel &reply) { return OnSetWallpaperV9(data, reply); } },
60         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::GET_PIXELMAP_V9),
61             [this](MessageParcel &data, MessageParcel &reply) { return OnGetPixelMapV9(data, reply); } },
62         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::GET_COLORS_V9),
63             [this](MessageParcel &data, MessageParcel &reply) { return OnGetColorsV9(data, reply); } },
64         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::RESET_WALLPAPER_V9),
65             [this](MessageParcel &data, MessageParcel &reply) { return OnResetWallpaperV9(data, reply); } },
66         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::SET_VIDEO),
67             [this](MessageParcel &data, MessageParcel &reply) { return OnSetVideo(data, reply); } },
68         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::SET_CUSTOM),
69             [this](MessageParcel &data, MessageParcel &reply) { return OnSetCustomWallpaper(data, reply); } },
70         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::SEND_EVENT),
71             [this](MessageParcel &data, MessageParcel &reply) { return OnSendEvent(data, reply); } },
72         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::SET_WALLPAPER_PIXELMAP),
73             [this](MessageParcel &data, MessageParcel &reply) { return OnSetWallpaperByPixelMap(data, reply); } },
74         { static_cast<uint32_t>(WallpaperServiceIpcInterfaceCode::SET_WALLPAPER_PIXELMAP_V9),
75             [this](MessageParcel &data, MessageParcel &reply) { return OnSetWallpaperV9ByPixelMap(data, reply); } },
76     };
77 }
78 
~WallpaperServiceStub()79 WallpaperServiceStub::~WallpaperServiceStub()
80 {
81 }
82 
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)83 int32_t WallpaperServiceStub::OnRemoteRequest(
84     uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option)
85 {
86     MemoryGuard cacheGuard;
87     std::u16string myDescriptor = WallpaperServiceStub::GetDescriptor();
88     std::u16string remoteDescriptor = data.ReadInterfaceToken();
89     if (myDescriptor != remoteDescriptor) {
90         HILOG_ERROR("Remote descriptor not the same as local descriptor.");
91         return E_CHECK_DESCRIPTOR_ERROR;
92     }
93     return HandleWallpaperRequest(code, data, reply, option);
94 }
95 
GetWallpaperRequestHandler(uint32_t code)96 WallpaperRequestHandler WallpaperServiceStub::GetWallpaperRequestHandler(uint32_t code)
97 {
98     auto it = requestHandlers.find(code);
99     if (it != requestHandlers.end()) {
100         return it->second;
101     }
102     return nullptr;
103 }
104 
HandleWallpaperRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)105 int32_t WallpaperServiceStub::HandleWallpaperRequest(
106     uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option)
107 {
108     WallpaperRequestHandler handler = GetWallpaperRequestHandler(code);
109     if (handler) {
110         return handler(data, reply);
111     }
112     HILOG_ERROR("remote request unhandled: %{public}d", code);
113     return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
114 }
115 
OnSetWallpaper(MessageParcel & data,MessageParcel & reply)116 int32_t WallpaperServiceStub::OnSetWallpaper(MessageParcel &data, MessageParcel &reply)
117 {
118     return OnSetWallpaperInner(data, reply, false);
119 }
120 
OnSetWallpaperV9(MessageParcel & data,MessageParcel & reply)121 int32_t WallpaperServiceStub::OnSetWallpaperV9(MessageParcel &data, MessageParcel &reply)
122 {
123     return OnSetWallpaperInner(data, reply, true);
124 }
125 
OnSetWallpaperInner(MessageParcel & data,MessageParcel & reply,bool isSystemApi)126 int32_t WallpaperServiceStub::OnSetWallpaperInner(MessageParcel &data, MessageParcel &reply, bool isSystemApi)
127 {
128     HILOG_DEBUG("WallpaperServiceStub::SetWallpaper start.");
129     int32_t fd = data.ReadFileDescriptor();
130     if (fd < 0) {
131         HILOG_ERROR("ReadFileDescriptor fail. fd[%{public}d]", fd);
132         return IPC_STUB_INVALID_DATA_ERR;
133     }
134     int32_t wallpaperType = data.ReadInt32();
135     int32_t length = data.ReadInt32();
136     ErrorCode wallpaperErrorCode = E_UNKNOWN;
137     if (isSystemApi) {
138         wallpaperErrorCode = SetWallpaperV9(fd, wallpaperType, length);
139     } else {
140         wallpaperErrorCode = SetWallpaper(fd, wallpaperType, length);
141     }
142     close(fd);
143     if (!reply.WriteInt32(static_cast<int32_t>(wallpaperErrorCode))) {
144         HILOG_ERROR("WriteInt32 fail!");
145         return IPC_STUB_WRITE_PARCEL_ERR;
146     }
147     return ERR_NONE;
148 }
149 
OnSetWallpaperByPixelMap(MessageParcel & data,MessageParcel & reply)150 int32_t WallpaperServiceStub::OnSetWallpaperByPixelMap(MessageParcel &data, MessageParcel &reply)
151 {
152     return OnSetWallpaperInnerByPixelMap(data, reply, false);
153 }
154 
OnSetWallpaperV9ByPixelMap(MessageParcel & data,MessageParcel & reply)155 int32_t WallpaperServiceStub::OnSetWallpaperV9ByPixelMap(MessageParcel &data, MessageParcel &reply)
156 {
157     return OnSetWallpaperInnerByPixelMap(data, reply, true);
158 }
159 
OnSetWallpaperInnerByPixelMap(MessageParcel & data,MessageParcel & reply,bool isSystemApi)160 int32_t WallpaperServiceStub::OnSetWallpaperInnerByPixelMap(MessageParcel &data, MessageParcel &reply, bool isSystemApi)
161 {
162     HILOG_DEBUG("WallpaperServiceStub::SetWallpaper start.");
163     int32_t vectorPixelMapSize = data.ReadInt32();
164     if (vectorPixelMapSize <= 0) {
165         HILOG_ERROR("ReadInt32 fail!");
166         return IPC_STUB_INVALID_DATA_ERR;
167     }
168     auto *rawData = (uint8_t *)data.ReadRawData(vectorPixelMapSize);
169     if (rawData == nullptr) {
170         HILOG_ERROR("ReadRawData fail!");
171         return IPC_STUB_INVALID_DATA_ERR;
172     }
173     std::vector<uint8_t> VectorPixelMap(rawData, rawData + vectorPixelMapSize);
174     int32_t wallpaperType = data.ReadInt32();
175     std::shared_ptr<OHOS::Media::PixelMap> pixelMap = VectorToPixelMap(VectorPixelMap);
176     if (pixelMap == nullptr) {
177         HILOG_ERROR("VectorToPixelMap fail!");
178         return IPC_STUB_INVALID_DATA_ERR;
179     }
180     ErrorCode wallpaperErrorCode = E_UNKNOWN;
181     if (isSystemApi) {
182         wallpaperErrorCode = SetWallpaperV9ByPixelMap(pixelMap, wallpaperType);
183     } else {
184         wallpaperErrorCode = SetWallpaperByPixelMap(pixelMap, wallpaperType);
185     }
186     if (!reply.WriteInt32(static_cast<int32_t>(wallpaperErrorCode))) {
187         HILOG_ERROR("WriteInt32 fail!");
188         return IPC_STUB_WRITE_PARCEL_ERR;
189     }
190     return ERR_NONE;
191 }
192 
OnGetPixelMap(MessageParcel & data,MessageParcel & reply)193 int32_t WallpaperServiceStub::OnGetPixelMap(MessageParcel &data, MessageParcel &reply)
194 {
195     return OnGetPixelMapInner(data, reply, false);
196 }
197 
OnSetVideo(MessageParcel & data,MessageParcel & reply)198 int32_t WallpaperServiceStub::OnSetVideo(MessageParcel &data, MessageParcel &reply)
199 {
200     HILOG_DEBUG("WallpaperServiceStub::OnSetVideo start.");
201     int32_t fd = data.ReadFileDescriptor();
202     int32_t wallpaperType = data.ReadInt32();
203     int32_t length = data.ReadInt32();
204     ErrorCode wallpaperErrorCode = SetVideo(fd, wallpaperType, length);
205     close(fd);
206     if (!reply.WriteInt32(static_cast<int32_t>(wallpaperErrorCode))) {
207         HILOG_ERROR("Write int is failed!");
208         return IPC_STUB_WRITE_PARCEL_ERR;
209     }
210     return ERR_NONE;
211 }
212 
OnSetCustomWallpaper(MessageParcel & data,MessageParcel & reply)213 int32_t WallpaperServiceStub::OnSetCustomWallpaper(MessageParcel &data, MessageParcel &reply)
214 {
215     HILOG_DEBUG("WallpaperServiceStub::SetCustomWallpaper start.");
216     auto fd = data.ReadFileDescriptor();
217     int32_t wallpaperType = data.ReadInt32();
218     int32_t length = data.ReadInt32();
219     ErrorCode wallpaperErrorCode = SetCustomWallpaper(fd, wallpaperType, length);
220     close(fd);
221     if (!reply.WriteInt32(static_cast<int32_t>(wallpaperErrorCode))) {
222         HILOG_ERROR("Write int is failed!");
223         return IPC_STUB_WRITE_PARCEL_ERR;
224     }
225     return ERR_NONE;
226 }
227 
OnGetPixelMapV9(MessageParcel & data,MessageParcel & reply)228 int32_t WallpaperServiceStub::OnGetPixelMapV9(MessageParcel &data, MessageParcel &reply)
229 {
230     return OnGetPixelMapInner(data, reply, true);
231 }
232 
OnGetPixelMapInner(MessageParcel & data,MessageParcel & reply,bool isSystemApi)233 int32_t WallpaperServiceStub::OnGetPixelMapInner(MessageParcel &data, MessageParcel &reply, bool isSystemApi)
234 {
235     HILOG_DEBUG("WallpaperServiceStub::GetPixelMap start.");
236     int32_t wallpaperType = data.ReadInt32();
237     IWallpaperService::FdInfo fdInfo;
238     ErrorCode wallpaperErrorCode = E_UNKNOWN;
239     if (isSystemApi) {
240         wallpaperErrorCode = GetPixelMapV9(wallpaperType, fdInfo);
241     } else {
242         wallpaperErrorCode = GetPixelMap(wallpaperType, fdInfo);
243     }
244     HILOG_INFO(" OnGetPixelMap wallpaperErrorCode = %{public}d", wallpaperErrorCode);
245     if (!reply.WriteInt32(static_cast<int32_t>(wallpaperErrorCode))) {
246         HILOG_ERROR("WriteInt32 fail!");
247         close(fdInfo.fd);
248         return IPC_STUB_WRITE_PARCEL_ERR;
249     }
250     if (wallpaperErrorCode == E_OK) {
251         if (!reply.WriteInt32(fdInfo.size)) {
252             HILOG_ERROR("WriteInt32 fail!");
253             close(fdInfo.fd);
254             return IPC_STUB_WRITE_PARCEL_ERR;
255         }
256         if (!reply.WriteFileDescriptor(fdInfo.fd)) {
257             HILOG_ERROR("WriteFileDescriptor fail!");
258             close(fdInfo.fd);
259             return IPC_STUB_WRITE_PARCEL_ERR;
260         }
261     }
262     close(fdInfo.fd);
263     return ERR_NONE;
264 }
265 
OnGetColors(MessageParcel & data,MessageParcel & reply)266 int32_t WallpaperServiceStub::OnGetColors(MessageParcel &data, MessageParcel &reply)
267 {
268     return OnGetColorsInner(data, reply, false);
269 }
270 
OnGetColorsV9(MessageParcel & data,MessageParcel & reply)271 int32_t WallpaperServiceStub::OnGetColorsV9(MessageParcel &data, MessageParcel &reply)
272 {
273     return OnGetColorsInner(data, reply, true);
274 }
275 
OnGetColorsInner(MessageParcel & data,MessageParcel & reply,bool isSystemApi)276 int32_t WallpaperServiceStub::OnGetColorsInner(MessageParcel &data, MessageParcel &reply, bool isSystemApi)
277 {
278     HILOG_DEBUG("WallpaperServiceStub::OnGetColors start.");
279     int32_t wallpaperType = data.ReadInt32();
280     std::vector<uint64_t> vecWallpaperColors;
281     ErrorCode wallpaperErrorCode = E_UNKNOWN;
282     if (isSystemApi) {
283         wallpaperErrorCode = GetColorsV9(wallpaperType, vecWallpaperColors);
284     } else {
285         wallpaperErrorCode = GetColors(wallpaperType, vecWallpaperColors);
286     }
287     auto size = vecWallpaperColors.size();
288     if (!reply.WriteInt32(static_cast<int32_t>(wallpaperErrorCode))) {
289         HILOG_ERROR("WriteInt32 fail!");
290         return IPC_STUB_WRITE_PARCEL_ERR;
291     }
292     if (wallpaperErrorCode == E_OK) {
293         if (!reply.WriteUInt64Vector(vecWallpaperColors)) {
294             HILOG_ERROR("WallpaperServiceStub::OnGetColors WriteUInt64Vector error!");
295             return IPC_STUB_WRITE_PARCEL_ERR;
296         }
297     }
298     return (size == 0) ? IPC_STUB_INVALID_DATA_ERR : ERR_NONE;
299 }
300 
OnGetFile(MessageParcel & data,MessageParcel & reply)301 int32_t WallpaperServiceStub::OnGetFile(MessageParcel &data, MessageParcel &reply)
302 {
303     HILOG_DEBUG("WallpaperServiceStub::OnGetFile start.");
304     int32_t wallpaperType = data.ReadInt32();
305     int32_t wallpaperFd = INVALID_FD;
306     ErrorCode wallpaperErrorCode = GetFile(wallpaperType, wallpaperFd);
307     if (!reply.WriteInt32(static_cast<int32_t>(wallpaperErrorCode))) {
308         HILOG_ERROR("WriteInt32 fail!");
309         if (wallpaperFd > INVALID_FD) {
310             close(wallpaperFd);
311         }
312         return IPC_STUB_WRITE_PARCEL_ERR;
313     }
314     if (wallpaperErrorCode == E_OK && !reply.WriteFileDescriptor(wallpaperFd)) {
315         HILOG_ERROR("WriteFileDescriptor fail!");
316         close(wallpaperFd);
317         return IPC_STUB_WRITE_PARCEL_ERR;
318     }
319     if (wallpaperFd > INVALID_FD) {
320         close(wallpaperFd);
321     }
322     return ERR_NONE;
323 }
324 
OnGetWallpaperId(MessageParcel & data,MessageParcel & reply)325 int32_t WallpaperServiceStub::OnGetWallpaperId(MessageParcel &data, MessageParcel &reply)
326 {
327     HILOG_DEBUG("WallpaperServiceStub::OnGetWallpaperId start.");
328     int32_t wallpaperType = data.ReadInt32();
329     int32_t wallpaperId = GetWallpaperId(wallpaperType);
330     if (!reply.WriteInt32(wallpaperId)) {
331         HILOG_ERROR("Write result data failed!");
332         return IPC_STUB_WRITE_PARCEL_ERR;
333     }
334     HILOG_INFO("End. Id[%{public}d]", wallpaperId);
335     return ERR_NONE;
336 }
337 
OnIsChangePermitted(MessageParcel & data,MessageParcel & reply)338 int32_t WallpaperServiceStub::OnIsChangePermitted(MessageParcel &data, MessageParcel &reply)
339 {
340     HILOG_DEBUG("WallpaperServiceStub::OnIsChangePermitted start.");
341     auto bResult = IsChangePermitted();
342     if (!reply.WriteBool(bResult)) {
343         HILOG_ERROR("Write result data failed!");
344         return IPC_STUB_WRITE_PARCEL_ERR;
345     }
346     return ERR_NONE;
347 }
348 
OnIsOperationAllowed(MessageParcel & data,MessageParcel & reply)349 int32_t WallpaperServiceStub::OnIsOperationAllowed(MessageParcel &data, MessageParcel &reply)
350 {
351     HILOG_DEBUG("WallpaperServiceStub::OnIsOperationAllowed start.");
352     auto bResult = IsOperationAllowed();
353     if (!reply.WriteBool(bResult)) {
354         HILOG_ERROR("Write result data failed!");
355         return IPC_STUB_WRITE_PARCEL_ERR;
356     }
357     return ERR_NONE;
358 }
359 
OnResetWallpaper(MessageParcel & data,MessageParcel & reply)360 int32_t WallpaperServiceStub::OnResetWallpaper(MessageParcel &data, MessageParcel &reply)
361 {
362     return OnResetWallpaperInner(data, reply, false);
363 }
364 
OnResetWallpaperV9(MessageParcel & data,MessageParcel & reply)365 int32_t WallpaperServiceStub::OnResetWallpaperV9(MessageParcel &data, MessageParcel &reply)
366 {
367     return OnResetWallpaperInner(data, reply, true);
368 }
369 
OnResetWallpaperInner(MessageParcel & data,MessageParcel & reply,bool isSystemApi)370 int32_t WallpaperServiceStub::OnResetWallpaperInner(MessageParcel &data, MessageParcel &reply, bool isSystemApi)
371 {
372     HILOG_DEBUG("WallpaperServiceStub::OnResetWallpaper start.");
373     int32_t wallpaperType = data.ReadInt32();
374     ErrorCode wallpaperErrorCode = E_UNKNOWN;
375     if (isSystemApi) {
376         wallpaperErrorCode = ResetWallpaperV9(wallpaperType);
377     } else {
378         wallpaperErrorCode = ResetWallpaper(wallpaperType);
379     }
380     if (!reply.WriteInt32(static_cast<int32_t>(wallpaperErrorCode))) {
381         HILOG_ERROR("Write result data failed!");
382         return IPC_STUB_WRITE_PARCEL_ERR;
383     }
384     return ERR_NONE;
385 }
386 
OnWallpaperOn(MessageParcel & data,MessageParcel & reply)387 int32_t WallpaperServiceStub::OnWallpaperOn(MessageParcel &data, MessageParcel &reply)
388 {
389     HILOG_DEBUG("WallpaperServiceStub::OnWallpaperOn in.");
390     std::string type = data.ReadString();
391     if (type.empty()) {
392         HILOG_ERROR("OnWallpaperOn type is empty after ipc.");
393         return IPC_STUB_INVALID_DATA_ERR;
394     }
395     sptr<IRemoteObject> remote = data.ReadRemoteObject();
396     if (remote == nullptr) {
397         HILOG_ERROR("OnWallpaperOn nullptr after ipc.");
398         return IPC_STUB_INVALID_DATA_ERR;
399     }
400 
401     sptr<IWallpaperEventListener> wallpaperListenerProxy = iface_cast<IWallpaperEventListener>(remote);
402     ErrorCode errorCode = On(type, std::move(wallpaperListenerProxy));
403     int32_t ret = static_cast<int32_t>(errorCode);
404     if (!reply.WriteInt32(ret)) {
405         HILOG_ERROR("WriteInt32 failed!");
406         return IPC_STUB_WRITE_PARCEL_ERR;
407     }
408     return ERR_NONE;
409 }
410 
OnWallpaperOff(MessageParcel & data,MessageParcel & reply)411 int32_t WallpaperServiceStub::OnWallpaperOff(MessageParcel &data, MessageParcel &reply)
412 {
413     HILOG_DEBUG("WallpaperServiceStub::OnWallpaperOff in.");
414     std::string type = data.ReadString();
415     if (type.empty()) {
416         HILOG_ERROR("OnWallpaperOff type is empty after ipc.");
417         return IPC_STUB_INVALID_DATA_ERR;
418     }
419     sptr<IRemoteObject> remote = data.ReadRemoteObject();
420     ErrorCode errorCode = E_UNKNOWN;
421     if (remote == nullptr) {
422         errorCode = Off(type, nullptr);
423     } else {
424         sptr<IWallpaperEventListener> wallpaperListenerProxy = iface_cast<IWallpaperEventListener>(remote);
425         errorCode = Off(type, std::move(wallpaperListenerProxy));
426     }
427     int32_t ret = static_cast<int32_t>(errorCode);
428     if (!reply.WriteInt32(ret)) {
429         HILOG_ERROR("WriteInt32 failed!");
430         return IPC_STUB_WRITE_PARCEL_ERR;
431     }
432     return ERR_NONE;
433 }
434 
OnSendEvent(MessageParcel & data,MessageParcel & reply)435 int32_t WallpaperServiceStub::OnSendEvent(MessageParcel &data, MessageParcel &reply)
436 {
437     HILOG_DEBUG("WallpaperServiceStub::OnSendEvent start.");
438     std::string eventType = data.ReadString();
439     auto result = SendEvent(eventType);
440     if (!reply.WriteInt32(result)) {
441         HILOG_ERROR("Write int is failed!");
442         return IPC_STUB_WRITE_PARCEL_ERR;
443     }
444     return ERR_NONE;
445 }
446 
OnRegisterWallpaperCallback(MessageParcel & data,MessageParcel & reply)447 int32_t WallpaperServiceStub::OnRegisterWallpaperCallback(MessageParcel &data, MessageParcel &reply)
448 {
449     HILOG_DEBUG("WallpaperServiceStub::OnRegisterWallpaperCallback start.");
450     sptr<IRemoteObject> object = data.ReadRemoteObject();
451     bool status = false;
452     if (object == nullptr) {
453         HILOG_ERROR("RegisterWallpaperCallback failed!");
454         return IPC_STUB_INVALID_DATA_ERR;
455     }
456     sptr<IWallpaperCallback> callbackProxy = iface_cast<IWallpaperCallback>(object);
457 
458     status = RegisterWallpaperCallback(callbackProxy);
459     int32_t ret = status ? static_cast<int32_t>(E_OK) : static_cast<int32_t>(E_DEAL_FAILED);
460     if (!reply.WriteInt32(ret)) {
461         HILOG_ERROR("WriteInt32 failed!");
462         return IPC_STUB_WRITE_PARCEL_ERR;
463     }
464     return ERR_NONE;
465 }
466 
VectorToPixelMap(std::vector<std::uint8_t> value)467 std::shared_ptr<OHOS::Media::PixelMap> WallpaperServiceStub::VectorToPixelMap(std::vector<std::uint8_t> value)
468 {
469     HILOG_DEBUG("VectorToPixelMap start.!");
470     if (value.size() == 0) {
471         return nullptr;
472     }
473     return std::shared_ptr<PixelMap>(PixelMap::DecodeTlv(value));
474 }
475 } // namespace WallpaperMgrService
476 } // namespace OHOS