1c7afe287Sopenharmony_ci/*
2c7afe287Sopenharmony_ci * Copyright (c) 2023 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#ifndef OHOS_CLOUD_OAID_SERVICES_H
17c7afe287Sopenharmony_ci#define OHOS_CLOUD_OAID_SERVICES_H
18c7afe287Sopenharmony_ci
19c7afe287Sopenharmony_ci#include <mutex>
20c7afe287Sopenharmony_ci#include <string>
21c7afe287Sopenharmony_ci
22c7afe287Sopenharmony_ci#include "iremote_proxy.h"
23c7afe287Sopenharmony_ci#include "distributed_kv_data_manager.h"
24c7afe287Sopenharmony_ci#include "securec.h"
25c7afe287Sopenharmony_ci#include "system_ability.h"
26c7afe287Sopenharmony_ci#include "oaid_service_stub.h"
27c7afe287Sopenharmony_ci
28c7afe287Sopenharmony_cinamespace OHOS {
29c7afe287Sopenharmony_cinamespace Cloud {
30c7afe287Sopenharmony_cienum class ServiceRunningState { STATE_NOT_START, STATE_RUNNING };
31c7afe287Sopenharmony_ci
32c7afe287Sopenharmony_ciclass OAIDService : public SystemAbility, public OAIDServiceStub {
33c7afe287Sopenharmony_ci    DECLARE_SYSTEM_ABILITY(OAIDService);
34c7afe287Sopenharmony_ci
35c7afe287Sopenharmony_cipublic:
36c7afe287Sopenharmony_ci    DISALLOW_COPY_AND_MOVE(OAIDService);
37c7afe287Sopenharmony_ci    OAIDService(int32_t systemAbilityId, bool runOnCreate);
38c7afe287Sopenharmony_ci    static sptr<OAIDService> GetInstance();
39c7afe287Sopenharmony_ci    OAIDService();
40c7afe287Sopenharmony_ci    bool InitOaidKvStore();
41c7afe287Sopenharmony_ci    virtual ~OAIDService() override;
42c7afe287Sopenharmony_ci
43c7afe287Sopenharmony_ci    /**
44c7afe287Sopenharmony_ci     * Get OAID
45c7afe287Sopenharmony_ci     *
46c7afe287Sopenharmony_ci     * @return std::string, OAID.
47c7afe287Sopenharmony_ci     */
48c7afe287Sopenharmony_ci    std::string GetOAID() override;
49c7afe287Sopenharmony_ci
50c7afe287Sopenharmony_ci    /**
51c7afe287Sopenharmony_ci     * Reset open advertising id.
52c7afe287Sopenharmony_ci     */
53c7afe287Sopenharmony_ci    int32_t ResetOAID() override;
54c7afe287Sopenharmony_ci
55c7afe287Sopenharmony_ciprotected:
56c7afe287Sopenharmony_ci    void OnStart() override;
57c7afe287Sopenharmony_ci    void OnStop() override;
58c7afe287Sopenharmony_ci    void OnAddSystemAbility(int32_t systemAbilityId, const std::string& deviceId) override;
59c7afe287Sopenharmony_ciprivate:
60c7afe287Sopenharmony_ci    int32_t Init();
61c7afe287Sopenharmony_ci    bool CheckKvStore();
62c7afe287Sopenharmony_ci    bool ReadValueFromKvStore(const std::string &kvStoreKey, std::string &kvStoreValue);
63c7afe287Sopenharmony_ci    bool WriteValueToKvStore(const std::string &kvStoreKey, const std::string &kvStoreValue);
64c7afe287Sopenharmony_ci    std::string GainOAID();
65c7afe287Sopenharmony_ci
66c7afe287Sopenharmony_ci    ServiceRunningState state_;
67c7afe287Sopenharmony_ci    static std::mutex mutex_;
68c7afe287Sopenharmony_ci    static sptr<OAIDService> instance_;
69c7afe287Sopenharmony_ci
70c7afe287Sopenharmony_ci    std::shared_ptr<DistributedKv::SingleKvStore> oaidKvStore_;
71c7afe287Sopenharmony_ci    std::mutex updateMutex_;
72c7afe287Sopenharmony_ci    std::string oaid_;
73c7afe287Sopenharmony_ci};
74c7afe287Sopenharmony_ci} // namespace Cloud
75c7afe287Sopenharmony_ci} // namespace OHOS
76c7afe287Sopenharmony_ci#endif // OHOS_CLOUD_OAID_SERVICES_H
77