• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-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 "device_manager_notify.h"
17 
18 #include "device_manager.h"
19 #include "dm_anonymous.h"
20 #include "dm_constants.h"
21 #include "dm_log.h"
22 
23 namespace OHOS {
24 namespace DistributedHardware {
25 IMPLEMENT_SINGLE_INSTANCE(DeviceManagerNotify);
26 
RegisterDeathRecipientCallback(const std::string & pkgName,std::shared_ptr<DmInitCallback> dmInitCallback)27 void DeviceManagerNotify::RegisterDeathRecipientCallback(const std::string &pkgName,
28                                                          std::shared_ptr<DmInitCallback> dmInitCallback)
29 {
30     if (pkgName.empty()) {
31         LOGE("Invalid parameter, pkgName is empty.");
32         return;
33     }
34     std::lock_guard<std::mutex> autoLock(lock_);
35     dmInitCallback_[pkgName] = dmInitCallback;
36 }
37 
UnRegisterDeathRecipientCallback(const std::string & pkgName)38 void DeviceManagerNotify::UnRegisterDeathRecipientCallback(const std::string &pkgName)
39 {
40     if (pkgName.empty()) {
41         LOGE("Invalid parameter, pkgName is empty.");
42         return;
43     }
44     std::lock_guard<std::mutex> autoLock(lock_);
45     dmInitCallback_.erase(pkgName);
46 }
47 
RegisterDeviceStateCallback(const std::string & pkgName,std::shared_ptr<DeviceStateCallback> callback)48 void DeviceManagerNotify::RegisterDeviceStateCallback(const std::string &pkgName,
49                                                       std::shared_ptr<DeviceStateCallback> callback)
50 {
51     if (pkgName.empty()) {
52         LOGE("Invalid parameter, pkgName is empty.");
53         return;
54     }
55     std::lock_guard<std::mutex> autoLock(lock_);
56     deviceStateCallback_[pkgName] = callback;
57 }
58 
UnRegisterDeviceStateCallback(const std::string & pkgName)59 void DeviceManagerNotify::UnRegisterDeviceStateCallback(const std::string &pkgName)
60 {
61     if (pkgName.empty()) {
62         LOGE("Invalid parameter, pkgName is empty.");
63         return;
64     }
65     std::lock_guard<std::mutex> autoLock(lock_);
66     deviceStateCallback_.erase(pkgName);
67 }
68 
RegisterDiscoveryCallback(const std::string & pkgName,uint16_t subscribeId,std::shared_ptr<DiscoveryCallback> callback)69 void DeviceManagerNotify::RegisterDiscoveryCallback(const std::string &pkgName, uint16_t subscribeId,
70                                                     std::shared_ptr<DiscoveryCallback> callback)
71 {
72     if (pkgName.empty()) {
73         LOGE("Invalid parameter, pkgName is empty.");
74         return;
75     }
76     std::lock_guard<std::mutex> autoLock(lock_);
77     if (deviceDiscoveryCallbacks_.count(pkgName) == 0) {
78         deviceDiscoveryCallbacks_[pkgName] = std::map<uint16_t, std::shared_ptr<DiscoveryCallback>>();
79     }
80     deviceDiscoveryCallbacks_[pkgName][subscribeId] = callback;
81 }
82 
UnRegisterDiscoveryCallback(const std::string & pkgName,uint16_t subscribeId)83 void DeviceManagerNotify::UnRegisterDiscoveryCallback(const std::string &pkgName, uint16_t subscribeId)
84 {
85     if (pkgName.empty()) {
86         LOGE("Invalid parameter, pkgName is empty.");
87         return;
88     }
89     std::lock_guard<std::mutex> autoLock(lock_);
90     if (deviceDiscoveryCallbacks_.count(pkgName) > 0) {
91         deviceDiscoveryCallbacks_[pkgName].erase(subscribeId);
92         if (deviceDiscoveryCallbacks_[pkgName].empty()) {
93             deviceDiscoveryCallbacks_.erase(pkgName);
94         }
95     }
96 }
97 
RegisterPublishCallback(const std::string & pkgName,int32_t publishId,std::shared_ptr<PublishCallback> callback)98 void DeviceManagerNotify::RegisterPublishCallback(const std::string &pkgName,
99                                                   int32_t publishId,
100                                                   std::shared_ptr<PublishCallback> callback)
101 {
102     if (pkgName.empty()) {
103         LOGE("Invalid parameter, pkgName is empty.");
104         return;
105     }
106     std::lock_guard<std::mutex> autoLock(lock_);
107     if (devicePublishCallbacks_.count(pkgName) == 0) {
108         devicePublishCallbacks_[pkgName] = std::map<int32_t, std::shared_ptr<PublishCallback>>();
109     }
110     devicePublishCallbacks_[pkgName][publishId] = callback;
111 }
112 
UnRegisterPublishCallback(const std::string & pkgName,int32_t publishId)113 void DeviceManagerNotify::UnRegisterPublishCallback(const std::string &pkgName, int32_t publishId)
114 {
115     if (pkgName.empty()) {
116         LOGE("Invalid parameter, pkgName is empty.");
117         return;
118     }
119     std::lock_guard<std::mutex> autoLock(lock_);
120     if (devicePublishCallbacks_.count(pkgName) > 0) {
121         devicePublishCallbacks_[pkgName].erase(publishId);
122         if (devicePublishCallbacks_[pkgName].empty()) {
123             devicePublishCallbacks_.erase(pkgName);
124         }
125     }
126 }
127 
RegisterAuthenticateCallback(const std::string & pkgName,const std::string & deviceId,std::shared_ptr<AuthenticateCallback> callback)128 void DeviceManagerNotify::RegisterAuthenticateCallback(const std::string &pkgName, const std::string &deviceId,
129                                                        std::shared_ptr<AuthenticateCallback> callback)
130 {
131     if (pkgName.empty() || deviceId.empty()) {
132         LOGE("DeviceManagerNotify::RegisterAuthenticateCallback error: Invalid parameter, pkgName: %s, deviceId: %s",
133             pkgName.c_str(), GetAnonyString(deviceId).c_str());
134         return;
135     }
136     std::lock_guard<std::mutex> autoLock(lock_);
137     if (authenticateCallback_.count(pkgName) == 0) {
138         authenticateCallback_[pkgName] = std::map<std::string, std::shared_ptr<AuthenticateCallback>>();
139     }
140     authenticateCallback_[pkgName][deviceId] = callback;
141 }
142 
UnRegisterAuthenticateCallback(const std::string & pkgName,const std::string & deviceId)143 void DeviceManagerNotify::UnRegisterAuthenticateCallback(const std::string &pkgName, const std::string &deviceId)
144 {
145     if (pkgName.empty() || deviceId.empty()) {
146         LOGE("DeviceManagerNotify::UnRegisterAuthenticateCallback error: Invalid parameter, pkgName: %s, deviceId: %s",
147             pkgName.c_str(), GetAnonyString(deviceId).c_str());
148         return;
149     }
150     std::lock_guard<std::mutex> autoLock(lock_);
151     if (authenticateCallback_.count(pkgName) > 0) {
152         authenticateCallback_[pkgName].erase(deviceId);
153         if (authenticateCallback_[pkgName].empty()) {
154             authenticateCallback_.erase(pkgName);
155         }
156     }
157 }
158 
UnRegisterPackageCallback(const std::string & pkgName)159 void DeviceManagerNotify::UnRegisterPackageCallback(const std::string &pkgName)
160 {
161     if (pkgName.empty()) {
162         LOGE("Invalid parameter, pkgName is empty.");
163         return;
164     }
165     std::lock_guard<std::mutex> autoLock(lock_);
166     deviceStateCallback_.erase(pkgName);
167     deviceDiscoveryCallbacks_.erase(pkgName);
168     devicePublishCallbacks_.erase(pkgName);
169     authenticateCallback_.erase(pkgName);
170     dmInitCallback_.erase(pkgName);
171 }
172 
RegisterVerifyAuthenticationCallback(const std::string & pkgName,const std::string & authPara,std::shared_ptr<VerifyAuthCallback> callback)173 void DeviceManagerNotify::RegisterVerifyAuthenticationCallback(const std::string &pkgName, const std::string &authPara,
174                                                                std::shared_ptr<VerifyAuthCallback> callback)
175 {
176     std::lock_guard<std::mutex> autoLock(lock_);
177     verifyAuthCallback_[pkgName] = callback;
178 }
179 
UnRegisterVerifyAuthenticationCallback(const std::string & pkgName)180 void DeviceManagerNotify::UnRegisterVerifyAuthenticationCallback(const std::string &pkgName)
181 {
182     if (pkgName.empty()) {
183         LOGE("Invalid parameter, pkgName is empty.");
184         return;
185     }
186     std::lock_guard<std::mutex> autoLock(lock_);
187     verifyAuthCallback_.erase(pkgName);
188 }
189 
RegisterDeviceManagerFaCallback(const std::string & pkgName,std::shared_ptr<DeviceManagerUiCallback> callback)190 void DeviceManagerNotify::RegisterDeviceManagerFaCallback(const std::string &pkgName,
191                                                           std::shared_ptr<DeviceManagerUiCallback> callback)
192 {
193     std::lock_guard<std::mutex> autoLock(lock_);
194     dmUiCallback_[pkgName] = callback;
195 }
196 
UnRegisterDeviceManagerFaCallback(const std::string & pkgName)197 void DeviceManagerNotify::UnRegisterDeviceManagerFaCallback(const std::string &pkgName)
198 {
199     if (pkgName.empty()) {
200         LOGE("Invalid parameter, pkgName is empty.");
201         return;
202     }
203     std::lock_guard<std::mutex> autoLock(lock_);
204     dmUiCallback_.erase(pkgName);
205 }
206 
RegisterCredentialCallback(const std::string & pkgName,std::shared_ptr<CredentialCallback> callback)207 void DeviceManagerNotify::RegisterCredentialCallback(const std::string &pkgName,
208                                                      std::shared_ptr<CredentialCallback> callback)
209 {
210     std::lock_guard<std::mutex> autoLock(lock_);
211     credentialCallback_[pkgName] = callback;
212 }
213 
UnRegisterCredentialCallback(const std::string & pkgName)214 void DeviceManagerNotify::UnRegisterCredentialCallback(const std::string &pkgName)
215 {
216     std::lock_guard<std::mutex> autoLock(lock_);
217     credentialCallback_.erase(pkgName);
218 }
219 
OnRemoteDied()220 void DeviceManagerNotify::OnRemoteDied()
221 {
222     LOGW("DeviceManagerNotify::OnRemoteDied");
223     for (auto iter : dmInitCallback_) {
224         LOGI("DeviceManagerNotify::OnRemoteDied, pkgName:%s", iter.first.c_str());
225         if (iter.second != nullptr) {
226             iter.second->OnRemoteDied();
227         }
228     }
229 }
230 
OnDeviceOnline(const std::string & pkgName,const DmDeviceInfo & deviceInfo)231 void DeviceManagerNotify::OnDeviceOnline(const std::string &pkgName, const DmDeviceInfo &deviceInfo)
232 {
233     if (pkgName.empty()) {
234         LOGE("Invalid parameter, pkgName is empty.");
235         return;
236     }
237     LOGI("DeviceManagerNotify::OnDeviceOnline in, pkgName:%s", pkgName.c_str());
238     std::shared_ptr<DeviceStateCallback> tempCbk;
239     {
240         std::lock_guard<std::mutex> autoLock(lock_);
241         if (deviceStateCallback_.count(pkgName) == 0) {
242             LOGE("OnDeviceOnline error, device state callback not register.");
243             return;
244         }
245         tempCbk = deviceStateCallback_[pkgName];
246     }
247     if (tempCbk == nullptr) {
248         LOGE("OnDeviceOnline error, registered device state callback is nullptr.");
249         return;
250     }
251     tempCbk->OnDeviceOnline(deviceInfo);
252 }
253 
OnDeviceOffline(const std::string & pkgName,const DmDeviceInfo & deviceInfo)254 void DeviceManagerNotify::OnDeviceOffline(const std::string &pkgName, const DmDeviceInfo &deviceInfo)
255 {
256     if (pkgName.empty()) {
257         LOGE("Invalid parameter, pkgName is empty.");
258         return;
259     }
260     LOGI("DeviceManagerNotify::OnDeviceOffline in, pkgName:%s", pkgName.c_str());
261     std::shared_ptr<DeviceStateCallback> tempCbk;
262     {
263         std::lock_guard<std::mutex> autoLock(lock_);
264         if (deviceStateCallback_.count(pkgName) == 0) {
265             LOGE("OnDeviceOffline error, device state callback not register.");
266             return;
267         }
268         tempCbk = deviceStateCallback_[pkgName];
269     }
270     if (tempCbk == nullptr) {
271         LOGE("OnDeviceOffline error, registered device state callback is nullptr.");
272         return;
273     }
274     tempCbk->OnDeviceOffline(deviceInfo);
275 }
276 
OnDeviceChanged(const std::string & pkgName,const DmDeviceInfo & deviceInfo)277 void DeviceManagerNotify::OnDeviceChanged(const std::string &pkgName, const DmDeviceInfo &deviceInfo)
278 {
279     if (pkgName.empty()) {
280         LOGE("Invalid parameter, pkgName is empty.");
281         return;
282     }
283     LOGI("DeviceManagerNotify::OnDeviceChanged in, pkgName:%s", pkgName.c_str());
284     std::shared_ptr<DeviceStateCallback> tempCbk;
285     {
286         std::lock_guard<std::mutex> autoLock(lock_);
287         if (deviceStateCallback_.count(pkgName) == 0) {
288             LOGE("OnDeviceChanged error, device state callback not register.");
289             return;
290         }
291         tempCbk = deviceStateCallback_[pkgName];
292     }
293     if (tempCbk == nullptr) {
294         LOGE("OnDeviceChanged error, registered device state callback is nullptr.");
295         return;
296     }
297     tempCbk->OnDeviceChanged(deviceInfo);
298 }
299 
OnDeviceReady(const std::string & pkgName,const DmDeviceInfo & deviceInfo)300 void DeviceManagerNotify::OnDeviceReady(const std::string &pkgName, const DmDeviceInfo &deviceInfo)
301 {
302     if (pkgName.empty()) {
303         LOGE("Invalid parameter, pkgName is empty.");
304         return;
305     }
306     LOGI("DeviceManagerNotify::OnDeviceReady in, pkgName:%s", pkgName.c_str());
307     std::shared_ptr<DeviceStateCallback> tempCbk;
308     {
309         std::lock_guard<std::mutex> autoLock(lock_);
310         if (deviceStateCallback_.count(pkgName) == 0) {
311             LOGE("OnDeviceReady error, device state callback not register.");
312             return;
313         }
314         tempCbk = deviceStateCallback_[pkgName];
315     }
316     if (tempCbk == nullptr) {
317         LOGE("OnDeviceReady error, registered device state callback is nullptr.");
318         return;
319     }
320     tempCbk->OnDeviceReady(deviceInfo);
321 }
322 
OnDeviceFound(const std::string & pkgName,uint16_t subscribeId,const DmDeviceInfo & deviceInfo)323 void DeviceManagerNotify::OnDeviceFound(const std::string &pkgName, uint16_t subscribeId,
324                                         const DmDeviceInfo &deviceInfo)
325 {
326     if (pkgName.empty()) {
327         LOGE("Invalid parameter, pkgName is empty.");
328         return;
329     }
330     LOGI("DeviceManagerNotify::OnDeviceFound in, pkgName:%s, subscribeId:%d.", pkgName.c_str(), (int32_t)subscribeId);
331     std::shared_ptr<DiscoveryCallback> tempCbk;
332     {
333         std::lock_guard<std::mutex> autoLock(lock_);
334         if (deviceDiscoveryCallbacks_.count(pkgName) == 0) {
335             LOGE("DeviceManagerNotify::OnDeviceFound error, device discovery callback not register for pkgName %s.",
336                 pkgName.c_str());
337             return;
338         }
339         std::map<uint16_t, std::shared_ptr<DiscoveryCallback>> &discoverCallMap = deviceDiscoveryCallbacks_[pkgName];
340         auto iter = discoverCallMap.find(subscribeId);
341         if (iter == discoverCallMap.end()) {
342             LOGE("OnDeviceFound error, device discovery callback not register for subscribeId %d.", subscribeId);
343             return;
344         }
345         tempCbk = iter->second;
346     }
347     if (tempCbk == nullptr) {
348         LOGE("OnDeviceFound error, registered device discovery callback is nullptr.");
349         return;
350     }
351     tempCbk->OnDeviceFound(subscribeId, deviceInfo);
352 }
353 
OnDiscoveryFailed(const std::string & pkgName,uint16_t subscribeId,int32_t failedReason)354 void DeviceManagerNotify::OnDiscoveryFailed(const std::string &pkgName, uint16_t subscribeId, int32_t failedReason)
355 {
356     if (pkgName.empty()) {
357         LOGE("Invalid parameter, pkgName is empty.");
358         return;
359     }
360     LOGI("DeviceManagerNotify::OnDiscoveryFailed in, pkgName:%s, subscribeId %d, failed reason %d", pkgName.c_str(),
361         subscribeId, failedReason);
362     std::shared_ptr<DiscoveryCallback> tempCbk;
363     {
364         std::lock_guard<std::mutex> autoLock(lock_);
365         if (deviceDiscoveryCallbacks_.count(pkgName) == 0) {
366             LOGE("DeviceManagerNotify::OnDiscoveryFailed error, device discovery callback not register for pkgName %s.",
367                 pkgName.c_str());
368             return;
369         }
370         std::map<uint16_t, std::shared_ptr<DiscoveryCallback>> &discoverCallMap = deviceDiscoveryCallbacks_[pkgName];
371         auto iter = discoverCallMap.find(subscribeId);
372         if (iter == discoverCallMap.end()) {
373             LOGE("OnDiscoveryFailed error, device discovery callback not register for subscribeId %d.", subscribeId);
374             return;
375         }
376         tempCbk = iter->second;
377     }
378     if (tempCbk == nullptr) {
379         LOGE("OnDiscoveryFailed error, registered device discovery callback is nullptr.");
380         return;
381     }
382     tempCbk->OnDiscoveryFailed(subscribeId, failedReason);
383 }
384 
OnDiscoverySuccess(const std::string & pkgName,uint16_t subscribeId)385 void DeviceManagerNotify::OnDiscoverySuccess(const std::string &pkgName, uint16_t subscribeId)
386 {
387     if (pkgName.empty()) {
388         LOGE("Invalid parameter, pkgName is empty.");
389         return;
390     }
391     LOGI("DeviceManagerNotify::OnDiscoverySuccess in, pkgName:%s, subscribeId:%d.", pkgName.c_str(), subscribeId);
392     std::shared_ptr<DiscoveryCallback> tempCbk;
393     {
394         std::lock_guard<std::mutex> autoLock(lock_);
395         if (deviceDiscoveryCallbacks_.count(pkgName) == 0) {
396             LOGE("OnDiscoverySuccess error, device discovery callback not register for pkgName %s.", pkgName.c_str());
397             return;
398         }
399         std::map<uint16_t, std::shared_ptr<DiscoveryCallback>> &discoverCallMap = deviceDiscoveryCallbacks_[pkgName];
400         auto iter = discoverCallMap.find(subscribeId);
401         if (iter == discoverCallMap.end()) {
402             LOGE("OnDiscoverySuccess error, device discovery callback not register for subscribeId %d.", subscribeId);
403             return;
404         }
405         tempCbk = iter->second;
406     }
407     if (tempCbk == nullptr) {
408         LOGE("OnDiscoverySuccess error, registered device discovery callback is nullptr.");
409         return;
410     }
411     tempCbk->OnDiscoverySuccess(subscribeId);
412 }
413 
OnPublishResult(const std::string & pkgName,int32_t publishId,int32_t publishResult)414 void DeviceManagerNotify::OnPublishResult(const std::string &pkgName, int32_t publishId, int32_t publishResult)
415 {
416     if (pkgName.empty()) {
417         LOGE("Invalid parameter, pkgName is empty.");
418         return;
419     }
420     LOGI("DeviceManagerNotify::OnPublishResult in, pkgName:%s, publishId %d, publishResult %d", pkgName.c_str(),
421         publishId, publishResult);
422     std::shared_ptr<PublishCallback> tempCbk;
423     {
424         std::lock_guard<std::mutex> autoLock(lock_);
425         if (devicePublishCallbacks_.count(pkgName) == 0) {
426             LOGE("DeviceManagerNotify::OnPublishResult error, device publish callback not register for pkgName %s.",
427                 pkgName.c_str());
428             return;
429         }
430         std::map<int32_t, std::shared_ptr<PublishCallback>> &publishCallMap = devicePublishCallbacks_[pkgName];
431         auto iter = publishCallMap.find(publishId);
432         if (iter == publishCallMap.end()) {
433             LOGE("OnPublishResult error, device publish callback not register for publishId %d.", publishId);
434             return;
435         }
436         tempCbk = iter->second;
437     }
438     if (tempCbk == nullptr) {
439         LOGE("OnPublishResult error, registered device publish callback is nullptr.");
440         return;
441     }
442     tempCbk->OnPublishResult(publishId, publishResult);
443 }
444 
OnAuthResult(const std::string & pkgName,const std::string & deviceId,const std::string & token,uint32_t status,uint32_t reason)445 void DeviceManagerNotify::OnAuthResult(const std::string &pkgName, const std::string &deviceId,
446                                        const std::string &token, uint32_t status, uint32_t reason)
447 {
448     if (pkgName.empty() || token.empty() || deviceId.empty()) {
449         LOGE("Invalid para, pkgName: %s, token: %s", pkgName.c_str(), token.c_str());
450         return;
451     }
452     LOGI("DeviceManagerNotify::OnAuthResult in, pkgName:%s, status:%d, reason:%u", pkgName.c_str(), status, reason);
453     std::shared_ptr<AuthenticateCallback> tempCbk;
454     {
455         std::lock_guard<std::mutex> autoLock(lock_);
456         if (authenticateCallback_.count(pkgName) == 0) {
457             LOGE("DeviceManagerNotify::OnAuthResult error, authenticate callback not register for pkgName %s.",
458                 pkgName.c_str());
459             return;
460         }
461         std::map<std::string, std::shared_ptr<AuthenticateCallback>> &authCallMap = authenticateCallback_[pkgName];
462         auto iter = authCallMap.find(deviceId);
463         if (iter == authCallMap.end()) {
464             LOGE("OnAuthResult error, authenticate callback not register.");
465             return;
466         }
467         tempCbk = iter->second;
468     }
469     if (tempCbk == nullptr) {
470         LOGE("OnAuthResult error, registered authenticate callback is nullptr.");
471         return;
472     }
473     tempCbk->OnAuthResult(deviceId, token, status, (int32_t)reason);
474     {
475         std::lock_guard<std::mutex> autoLock(lock_);
476         authenticateCallback_[pkgName].erase(deviceId);
477         if (authenticateCallback_[pkgName].empty()) {
478             authenticateCallback_.erase(pkgName);
479         }
480     }
481 }
482 
OnVerifyAuthResult(const std::string & pkgName,const std::string & deviceId,int32_t resultCode,int32_t flag)483 void DeviceManagerNotify::OnVerifyAuthResult(const std::string &pkgName, const std::string &deviceId,
484                                              int32_t resultCode, int32_t flag)
485 {
486     if (pkgName.empty()) {
487         LOGE("Invalid parameter, pkgName is empty.");
488         return;
489     }
490     LOGI("DeviceManagerNotify::OnVerifyAuthResult in, pkgName:%s, resultCode:%d, flag:%d", pkgName.c_str(),
491         resultCode, flag);
492     std::shared_ptr<VerifyAuthCallback> tempCbk;
493     {
494         std::lock_guard<std::mutex> autoLock(lock_);
495         if (verifyAuthCallback_.count(pkgName) == 0) {
496             LOGE("DeviceManagerNotify::OnVerifyAuthResult error, verify auth callback not register for pkgName %s.",
497                 pkgName.c_str());
498             return;
499         }
500         tempCbk = verifyAuthCallback_[pkgName];
501     }
502     if (tempCbk == nullptr) {
503         LOGE("OnVerifyAuthResult error, registered verify auth callback is nullptr.");
504         return;
505     }
506     tempCbk->OnVerifyAuthResult(deviceId, resultCode, flag);
507     {
508         std::lock_guard<std::mutex> autoLock(lock_);
509         verifyAuthCallback_.erase(pkgName);
510     }
511 }
512 
OnUiCall(std::string & pkgName,std::string & paramJson)513 void DeviceManagerNotify::OnUiCall(std::string &pkgName, std::string &paramJson)
514 {
515     if (pkgName.empty()) {
516         LOGE("DeviceManagerNotify::OnUiCall error: Invalid parameter, pkgName: %s", pkgName.c_str());
517         return;
518     }
519     LOGI("DeviceManagerNotify::OnUiCall in, pkgName:%s", pkgName.c_str());
520     std::shared_ptr<DeviceManagerUiCallback> tempCbk;
521     {
522         std::lock_guard<std::mutex> autoLock(lock_);
523         if (dmUiCallback_.count(pkgName) == 0) {
524             LOGE("OnUiCall error, dm Ui callback not register for pkgName %d.", pkgName.c_str());
525             return;
526         }
527         tempCbk = dmUiCallback_[pkgName];
528     }
529     if (tempCbk == nullptr) {
530         LOGE("OnUiCall error, registered dm Ui callback is nullptr.");
531         return;
532     }
533     tempCbk->OnCall(paramJson);
534 }
535 
OnCredentialResult(const std::string & pkgName,int32_t & action,const std::string & credentialResult)536 void DeviceManagerNotify::OnCredentialResult(const std::string &pkgName, int32_t &action,
537                                              const std::string &credentialResult)
538 {
539     if (pkgName.empty()) {
540         LOGE("DeviceManagerNotify::OnCredentialResult error: Invalid parameter, pkgName: %s", pkgName.c_str());
541         return;
542     }
543     LOGI("DeviceManagerNotify::OnCredentialResult in, pkgName:%s, action:%d", pkgName.c_str(), action);
544     std::shared_ptr<CredentialCallback> tempCbk;
545     {
546         std::lock_guard<std::mutex> autoLock(lock_);
547         if (credentialCallback_.count(pkgName) == 0) {
548             LOGE("DeviceManagerNotify::OnCredentialResult error, credential callback not register for pkgName %s.",
549                 pkgName.c_str());
550             return;
551         }
552         tempCbk = credentialCallback_[pkgName];
553     }
554     if (tempCbk == nullptr) {
555         LOGE("OnCredentialResult error, registered credential callback is nullptr.");
556         return;
557     }
558     tempCbk->OnCredentialResult(action, credentialResult);
559 }
560 } // namespace DistributedHardware
561 } // namespace OHOS
562