1 /*
2 * Copyright (c) 2021 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 #include "ui_service_stub.h"
16
17 namespace OHOS {
18 namespace Ace {
UIServiceStub()19 UIServiceStub::UIServiceStub()
20 {
21 requestFuncMap_[UI_SERVICE_PUSH_CALL_BACK] = &UIServiceStub::OnPushCallBackInner;
22 requestFuncMap_[UI_SERVICE_REQUEST_CALL_BACK] = &UIServiceStub::OnRequestCallBackInner;
23 requestFuncMap_[UI_SERVICE_RETURN_REQUEST] = &UIServiceStub::OnReturnRequestInner;
24 }
25
~UIServiceStub()26 UIServiceStub::~UIServiceStub()
27 {
28 requestFuncMap_.clear();
29 }
30
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)31 int32_t UIServiceStub::OnRemoteRequest(
32 uint32_t code, MessageParcel& data, MessageParcel& reply, MessageOption& option)
33 {
34 std::u16string descriptor = UIServiceStub::GetDescriptor();
35 std::u16string remoteDescriptor = data.ReadInterfaceToken();
36 if (descriptor != remoteDescriptor) {
37 return ERR_INVALID_STATE;
38 }
39
40 auto itFunc = requestFuncMap_.find(code);
41 if (itFunc != requestFuncMap_.end()) {
42 auto requestFunc = itFunc->second;
43 if (requestFunc != nullptr) {
44 return (this->*requestFunc)(data, reply);
45 }
46 }
47 return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
48 }
49
OnPushCallBackInner(MessageParcel & data,MessageParcel & reply)50 int32_t UIServiceStub::OnPushCallBackInner(MessageParcel& data, MessageParcel& reply)
51 {
52 std::shared_ptr<AAFwk::Want> want(data.ReadParcelable<AAFwk::Want>());
53 if (want == nullptr) {
54 return ERR_INVALID_VALUE;
55 }
56 const std::string& name = data.ReadString();
57 const std::string& jsonPath = data.ReadString();
58 const std::string& dataStr = data.ReadString();
59 const std::string& extraData = data.ReadString();
60 OnPushCallBack(*want, name, jsonPath, dataStr, extraData);
61 return ERR_NONE;
62 }
63
OnReturnRequestInner(MessageParcel & data,MessageParcel & reply)64 int32_t UIServiceStub::OnReturnRequestInner(MessageParcel& data, MessageParcel& reply)
65 {
66 std::shared_ptr<AAFwk::Want> want(data.ReadParcelable<AAFwk::Want>());
67 if (want == nullptr) {
68 return ERR_INVALID_VALUE;
69 }
70 const std::string& source = data.ReadString();
71 const std::string& dataStr = data.ReadString();
72 const std::string& extraData = data.ReadString();
73 OnReturnRequest(*want, source, dataStr, extraData);
74 return ERR_NONE;
75 }
76
OnRequestCallBackInner(MessageParcel & data,MessageParcel & reply)77 int32_t UIServiceStub::OnRequestCallBackInner(MessageParcel& data, MessageParcel& reply)
78 {
79 std::shared_ptr<AAFwk::Want> want(data.ReadParcelable<AAFwk::Want>());
80 if (want == nullptr) {
81 return ERR_INVALID_VALUE;
82 }
83 const std::string& name = data.ReadString();
84 const std::string& dataStr = data.ReadString();
85 OnRequestCallBack(*want, name, dataStr);
86 return ERR_NONE;
87 }
88
OnRemoteDied(const wptr<IRemoteObject> & remote)89 void UIServiceCallbackRecipient::OnRemoteDied(const wptr<IRemoteObject>& remote)
90 {
91 if (handler_) {
92 handler_(remote);
93 }
94 }
95
UIServiceCallbackRecipient(RemoteDiedHandler handler)96 UIServiceCallbackRecipient::UIServiceCallbackRecipient(RemoteDiedHandler handler) : handler_(handler) {}
97
98 UIServiceCallbackRecipient::~UIServiceCallbackRecipient() = default;
99 } // namespace Ace
100 } // namespace OHOS
101