1c7afe287Sopenharmony_ci/*
2c7afe287Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
3c7afe287Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4c7afe287Sopenharmony_ci * you may not use this file except in compliance with the License.
5c7afe287Sopenharmony_ci * You may obtain a copy of the License at
6c7afe287Sopenharmony_ci *
7c7afe287Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
8c7afe287Sopenharmony_ci *
9c7afe287Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10c7afe287Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11c7afe287Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12c7afe287Sopenharmony_ci * See the License for the specific language governing permissions and
13c7afe287Sopenharmony_ci * limitations under the License.
14c7afe287Sopenharmony_ci */
15c7afe287Sopenharmony_ci
16c7afe287Sopenharmony_ci#include <memory>
17c7afe287Sopenharmony_ci
18c7afe287Sopenharmony_ci#include "oaid_service.h"
19c7afe287Sopenharmony_ci#include "oaid_common.h"
20c7afe287Sopenharmony_ci#include "oaid_observer_manager.h"
21c7afe287Sopenharmony_ci
22c7afe287Sopenharmony_cinamespace OHOS {
23c7afe287Sopenharmony_cinamespace Cloud {
24c7afe287Sopenharmony_ciconst std::string OAID_VIRTUAL_STR = "-****-****-****-************";
25c7afe287Sopenharmony_ciOaidObserverManager::OaidObserverManager()
26c7afe287Sopenharmony_ci{
27c7afe287Sopenharmony_ci    OAID_HILOGI(OAID_MODULE_SERVICE, "OaidObserverManager construct");
28c7afe287Sopenharmony_ci}
29c7afe287Sopenharmony_ci
30c7afe287Sopenharmony_ciOaidObserverManager::~OaidObserverManager()
31c7afe287Sopenharmony_ci{
32c7afe287Sopenharmony_ci    OAID_HILOGI(OAID_MODULE_SERVICE, "OaidObserverManager destruct");
33c7afe287Sopenharmony_ci}
34c7afe287Sopenharmony_ci
35c7afe287Sopenharmony_ciint32_t OaidObserverManager::RegisterObserver(const sptr<IRemoteConfigObserver> &observer)
36c7afe287Sopenharmony_ci{
37c7afe287Sopenharmony_ci    if (observer == nullptr) {
38c7afe287Sopenharmony_ci        OAID_HILOGI(OAID_MODULE_SERVICE, "observer is null");
39c7afe287Sopenharmony_ci        return ERR_INVALID_PARAM;
40c7afe287Sopenharmony_ci    }
41c7afe287Sopenharmony_ci    std::unique_lock<std::shared_mutex> lockRegister(observerMutex_);
42c7afe287Sopenharmony_ci    observer_ = observer;
43c7afe287Sopenharmony_ci
44c7afe287Sopenharmony_ci    auto oaid = OAIDService::GetInstance()->GetOAID();
45c7afe287Sopenharmony_ci    std::string target = oaid.substr(0, 9).append(OAID_VIRTUAL_STR);
46c7afe287Sopenharmony_ci    OAID_HILOGI(OAID_MODULE_SERVICE, "registerObserver success, getOaid is: %{public}s", target.c_str());
47c7afe287Sopenharmony_ci    observer->OnOaidUpdated(oaid);
48c7afe287Sopenharmony_ci    return ERR_OK;
49c7afe287Sopenharmony_ci}
50c7afe287Sopenharmony_ci
51c7afe287Sopenharmony_civoid OaidObserverManager::OnUpdateOaid(const std::string &oaid)
52c7afe287Sopenharmony_ci{
53c7afe287Sopenharmony_ci    std::shared_lock<std::shared_mutex> lockUpdate(observerMutex_);
54c7afe287Sopenharmony_ci    if (observer_ == nullptr) {
55c7afe287Sopenharmony_ci        OAID_HILOGI(OAID_MODULE_SERVICE, "observer is null, error code is: %{public}d", ERR_NULL_POINTER);
56c7afe287Sopenharmony_ci        return;
57c7afe287Sopenharmony_ci    }
58c7afe287Sopenharmony_ci    std::string target = oaid.substr(0, 9).append(OAID_VIRTUAL_STR);
59c7afe287Sopenharmony_ci    OAID_HILOGI(OAID_MODULE_SERVICE, "OnOaidUpdated success oaid is: %{public}s", target.c_str());
60c7afe287Sopenharmony_ci    observer_->OnOaidUpdated(oaid);
61c7afe287Sopenharmony_ci}
62c7afe287Sopenharmony_ci}  // namespace Cloud
63c7afe287Sopenharmony_ci}  // namespace OHOS