199552fe9Sopenharmony_ci/*
299552fe9Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
399552fe9Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
499552fe9Sopenharmony_ci * you may not use this file except in compliance with the License.
599552fe9Sopenharmony_ci * You may obtain a copy of the License at
699552fe9Sopenharmony_ci *
799552fe9Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
899552fe9Sopenharmony_ci *
999552fe9Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1099552fe9Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1199552fe9Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1299552fe9Sopenharmony_ci * See the License for the specific language governing permissions and
1399552fe9Sopenharmony_ci * limitations under the License.
1499552fe9Sopenharmony_ci */
1599552fe9Sopenharmony_ci
1699552fe9Sopenharmony_ci#include "strategy_manager_adapter.h"
1799552fe9Sopenharmony_ci
1899552fe9Sopenharmony_ci#include "ibase_strategy.h"
1999552fe9Sopenharmony_ci#include "standby_service_log.h"
2099552fe9Sopenharmony_ci#ifdef STANDBY_COMMUNICATION_NETMANAGER_BASE_ENABLE
2199552fe9Sopenharmony_ci#include "network_strategy.h"
2299552fe9Sopenharmony_ci#endif
2399552fe9Sopenharmony_ci#include "standby_config_manager.h"
2499552fe9Sopenharmony_ci#include "running_lock_strategy.h"
2599552fe9Sopenharmony_ci
2699552fe9Sopenharmony_cinamespace OHOS {
2799552fe9Sopenharmony_cinamespace DevStandbyMgr {
2899552fe9Sopenharmony_cinamespace {
2999552fe9Sopenharmony_ciconst std::map<std::string, std::shared_ptr<IBaseStrategy>> strategyMap_ {
3099552fe9Sopenharmony_ci    #ifdef STANDBY_COMMUNICATION_NETMANAGER_BASE_ENABLE
3199552fe9Sopenharmony_ci    { "NETWORK", std::make_shared<NetworkStrategy>() },
3299552fe9Sopenharmony_ci    #endif
3399552fe9Sopenharmony_ci    { "RUNNING_LOCK", std::make_shared<RunningLockStrategy>() },
3499552fe9Sopenharmony_ci};
3599552fe9Sopenharmony_ci}
3699552fe9Sopenharmony_ci
3799552fe9Sopenharmony_cibool StrategyManagerAdapter::Init()
3899552fe9Sopenharmony_ci{
3999552fe9Sopenharmony_ci    if (StandbyConfigManager::GetInstance() == nullptr) {
4099552fe9Sopenharmony_ci        STANDBYSERVICE_LOGE("standby service ptr is nullptr, init failed");
4199552fe9Sopenharmony_ci        return false;
4299552fe9Sopenharmony_ci    }
4399552fe9Sopenharmony_ci    const auto& strategyConfigList = StandbyConfigManager::GetInstance()->GetStrategyConfigList();
4499552fe9Sopenharmony_ci    if (strategyConfigList.empty()) {
4599552fe9Sopenharmony_ci        STANDBYSERVICE_LOGI("strategies is disabled");
4699552fe9Sopenharmony_ci        return true;
4799552fe9Sopenharmony_ci    }
4899552fe9Sopenharmony_ci    RegisterPolicy(strategyConfigList);
4999552fe9Sopenharmony_ci    STANDBYSERVICE_LOGI("strategy manager plugin initialization succeed");
5099552fe9Sopenharmony_ci    return true;
5199552fe9Sopenharmony_ci}
5299552fe9Sopenharmony_ci
5399552fe9Sopenharmony_cibool StrategyManagerAdapter::UnInit()
5499552fe9Sopenharmony_ci{
5599552fe9Sopenharmony_ci    for (const auto& strategy : strategyList_) {
5699552fe9Sopenharmony_ci        strategy->OnDestroy();
5799552fe9Sopenharmony_ci    }
5899552fe9Sopenharmony_ci    strategyList_.clear();
5999552fe9Sopenharmony_ci    return true;
6099552fe9Sopenharmony_ci}
6199552fe9Sopenharmony_ci
6299552fe9Sopenharmony_civoid StrategyManagerAdapter::RegisterPolicy(const std::vector<std::string>& strategies)
6399552fe9Sopenharmony_ci{
6499552fe9Sopenharmony_ci    for (const auto& item : strategies) {
6599552fe9Sopenharmony_ci        auto strategy = strategyMap_.find(item);
6699552fe9Sopenharmony_ci        if (strategy == strategyMap_.end()) {
6799552fe9Sopenharmony_ci            continue;
6899552fe9Sopenharmony_ci        }
6999552fe9Sopenharmony_ci        STANDBYSERVICE_LOGI("strategy manager init %{public}s", item.c_str());
7099552fe9Sopenharmony_ci        auto strategyPtr = strategy->second;
7199552fe9Sopenharmony_ci        if (!strategyPtr) {
7299552fe9Sopenharmony_ci            continue;
7399552fe9Sopenharmony_ci        }
7499552fe9Sopenharmony_ci        if (strategyPtr->OnCreated() == ERR_OK) {
7599552fe9Sopenharmony_ci            strategyList_.emplace_back(strategyPtr);
7699552fe9Sopenharmony_ci        }
7799552fe9Sopenharmony_ci    }
7899552fe9Sopenharmony_ci}
7999552fe9Sopenharmony_ci
8099552fe9Sopenharmony_civoid StrategyManagerAdapter::HandleEvent(const StandbyMessage& message)
8199552fe9Sopenharmony_ci{
8299552fe9Sopenharmony_ci    STANDBYSERVICE_LOGD("StrategyManagerAdapter revceive message %{public}u, action: %{public}s",
8399552fe9Sopenharmony_ci        message.eventId_, message.action_.c_str());
8499552fe9Sopenharmony_ci    for (const auto &strategy : strategyList_) {
8599552fe9Sopenharmony_ci        strategy->HandleEvent(message);
8699552fe9Sopenharmony_ci    }
8799552fe9Sopenharmony_ci}
8899552fe9Sopenharmony_ci
8999552fe9Sopenharmony_civoid StrategyManagerAdapter::ShellDump(const std::vector<std::string>& argsInStr, std::string& result)
9099552fe9Sopenharmony_ci{
9199552fe9Sopenharmony_ci    for (const auto &strategy : strategyList_) {
9299552fe9Sopenharmony_ci        strategy->ShellDump(argsInStr, result);
9399552fe9Sopenharmony_ci    }
9499552fe9Sopenharmony_ci}
9599552fe9Sopenharmony_ci}  // namespace DevStandbyMgr
9699552fe9Sopenharmony_ci}  // namespace OHOS