• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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 #ifndef PPSOPENHARMONYSA_OPEN_CONNECT_ADS_STUB_H
16 #define PPSOPENHARMONYSA_OPEN_CONNECT_ADS_STUB_H
17 
18 #include "extension_manager_client.h"
19 #include "ability_connect_callback_stub.h"
20 #include "oaid_common.h"
21 #include "oaid_service_define.h"
22 using OHOS::AAFwk::ExtensionManagerClient;
23 using OHOS::AAFwk::AbilityConnectionStub;
24 using OHOS::AppExecFwk::ElementName;
25 using OHOS::AAFwk::Want;
26 using OHOS::IRemoteObject;
27 using OHOS::sptr;
28 
29 namespace OHOS {
30 namespace Cloud {
31 class AdsCallback : public IRemoteBroker {
32 public:
33     DECLARE_INTERFACE_DESCRIPTOR(u"ohos.cloud.oaid.AdsCallback");
34 };
35 
36 class ADSCallbackStub : public IRemoteStub<AdsCallback> {
37 public:
38     DISALLOW_COPY_AND_MOVE(ADSCallbackStub);
39     ADSCallbackStub() = default;
40     virtual ~ADSCallbackStub() = default;
41 
42     int OnRemoteRequest(
43             uint32_t code, MessageParcel& data, MessageParcel& reply, MessageOption& option) override;
44 };
45 
46 class ConnectAdsStub : public AbilityConnectionStub {
47 public:
48 
OnAbilityConnectDone(const ElementName & element,const sptr<IRemoteObject> & remoteObject,int resultCode)49     void OnAbilityConnectDone(const ElementName &element, const sptr<IRemoteObject> &remoteObject,
50                               int resultCode) override
51     {
52         OAID_HILOGI(OAID_MODULE_SERVICE, "enter OnAbilityConnectDone");
53         proxy_ = remoteObject;
54         SendMessage();
55     }
56 
OnAbilityDisconnectDone(const ElementName & element,int resultCode)57     void OnAbilityDisconnectDone(const ElementName &element, int resultCode) override
58     {
59         OAID_HILOGI(OAID_MODULE_SERVICE, "enter OnAbilityDisconnectDone");
60         proxy_ = nullptr;
61     }
62 
GetRemoteObject()63     sptr<IRemoteObject> GetRemoteObject()
64     {
65         return proxy_;
66     }
67 
SendMessage()68     void SendMessage()
69     {
70         OAID_HILOGI(OAID_MODULE_SERVICE, "SendMessage enter");
71         if (proxy_ == nullptr) {
72             return;
73         }
74         MessageParcel data;
75         MessageParcel reply;
76         MessageOption option;
77         std::lock_guard<std::mutex> lock(checkMutex_);
78         if (OAID_INFO_TOKEN.empty() || !data.WriteInterfaceToken(OAID_INFO_TOKEN)) {
79             OAID_HILOGW(OAID_MODULE_SERVICE, "SendMessage WriteInterfaceToken failed");
80             return;
81         }
82         auto callback = new ADSCallbackStub();
83         if (!data.WriteRemoteObject(callback->AsObject())) {
84             OAID_HILOGW(OAID_MODULE_SERVICE, "Callback write failed.");
85             return;
86         }
87         proxy_->SendRequest(CODE_ALLOW_GET_OAID, data, reply, option);
88         OAID_HILOGI(OAID_MODULE_SERVICE, "SendMessage finished");
89     }
90 
setToken(std::u16string token)91     static void setToken(std::u16string token)
92     {
93         OAID_HILOGI(OAID_MODULE_SERVICE, "setToken enter");
94         std::lock_guard<std::mutex> lock(checkMutex_);
95         OAID_INFO_TOKEN = token;
96     }
97 
98 private:
99     sptr<IRemoteObject> proxy_;
100     static std::u16string OAID_INFO_TOKEN;
101     static std::mutex checkMutex_;
102 };
103 std::u16string ConnectAdsStub::OAID_INFO_TOKEN = u"";
104 std::mutex ConnectAdsStub::checkMutex_;
105 
106 class ConnectAdsManager {
107 public:
108 
109     ConnectAdsManager(ConnectAdsManager &) = delete;
110     ConnectAdsManager& operator=(const ConnectAdsManager&)=delete;
111 
~ConnectAdsManager()112     ~ConnectAdsManager()
113     {
114         DisconnectService();
115         OAID_HILOGI(OAID_MODULE_SERVICE, "destructor ConnectAdsManager");
116     }
117 
GetInstance()118     static ConnectAdsManager* GetInstance()
119     {
120         static ConnectAdsManager instance;
121         return &instance;
122     }
123 
ConnectToAds(Want want)124     bool ConnectToAds(Want want)
125     {
126         OAID_HILOGI(OAID_MODULE_SERVICE, "enter ConnectToAds isConnect=%{public}d", isConnect);
127         if (!isConnect) {
128             OAID_HILOGI(OAID_MODULE_SERVICE, "start ConnectToAds ");
129             int32_t resultNumber = ExtensionManagerClient::GetInstance().ConnectServiceExtensionAbility(want,
130                 connectObject_, nullptr, DEFAULT_VALUE);
131             OAID_HILOGI(OAID_MODULE_SERVICE, "ConnectToAds result=%{public}d", resultNumber);
132             if (resultNumber != ERR_OK) {
133                 OAID_HILOGI(OAID_MODULE_SERVICE, " failed to ConnectToAds ability");
134                 return false;
135             }
136             isConnect = true;
137         }
138         return true;
139     }
140 
DisconnectService()141     int32_t DisconnectService()
142     {
143         OAID_HILOGI(OAID_MODULE_SERVICE, "enter DisconnectService isConnect=%{public}d", isConnect);
144         if (isConnect) {
145             OAID_HILOGI(OAID_MODULE_SERVICE, "start DisconnectService ");
146             ExtensionManagerClient::GetInstance().DisconnectAbility(connectObject_);
147             isConnect = false;
148         }
149         return 0;
150     }
151 
152     Want getWantInfo();
153 
154     bool checkAllowGetOaid();
155 
getAllowGetOAIDFromKit()156     static void getAllowGetOAIDFromKit()
157     {
158         OAID_HILOGI(OAID_MODULE_SERVICE, "getAllowGetOAIDFromKit isConnect = %{public}d", isConnect);
159         if (!isConnect) {
160             OAID_HILOGI(OAID_MODULE_SERVICE, "getAllowGetOAIDFromKit enter ConnectToAds");
161             Want want = ConnectAdsManager::GetInstance()->getWantInfo();
162             ConnectAdsManager::GetInstance()->ConnectToAds(want);
163         }
164     }
165 
getConnection()166     sptr<ConnectAdsStub> getConnection()
167     {
168         return connectObject_;
169     }
170 
171 private:
172     sptr<ConnectAdsStub> connectObject_;
173     int32_t DEFAULT_VALUE = -1;
174     static bool isConnect;
ConnectAdsManager()175     ConnectAdsManager()
176     {
177         connectObject_ = sptr<ConnectAdsStub>(new ConnectAdsStub);
178         OAID_HILOGI(OAID_MODULE_SERVICE, "constructor ConnectAdsManager");
179     }
180 };
181 bool ConnectAdsManager::isConnect = false;
182 
183 } // namespace Cloud
184 } // namespace OHOS
185 #endif //PPSOPENHARMONYSA_OPEN_CONNECT_ADS_STUB_H
186