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