• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 "hgm_command.h"
17 #include "hgm_log.h"
18 
19 
20 namespace OHOS::Rosen {
21 namespace {
22 const PolicyConfigData::ScreenSetting NULL_SCREEN_SETTING{};
23 }
24 
PolicyConfigVisitorImpl(const PolicyConfigData & configData)25 PolicyConfigVisitorImpl::PolicyConfigVisitorImpl(const PolicyConfigData& configData)
26     : configData_(configData)
27 {
28 }
29 
GetXmlData() const30 const PolicyConfigData& PolicyConfigVisitorImpl::GetXmlData() const
31 {
32     return configData_;
33 }
34 
SetSettingModeId(int32_t settingModeId)35 void PolicyConfigVisitorImpl::SetSettingModeId(int32_t settingModeId)
36 {
37     HGM_LOGI("Cur settingModeId: %{public}d, new settingModeId: %{public}d", settingModeId_, settingModeId);
38     // index of non-auto mode is settingModeId
39     auto xmlModeId = SettingModeId2XmlModeId(settingModeId);
40     if (!xmlModeId.has_value()) {
41         HGM_LOGE("SetSettingModeId %{public}d fail", settingModeId);
42         return;
43     }
44     settingModeId_ = settingModeId;
45     if (xmlModeId_ == xmlModeId.value()) {
46         return;
47     }
48     HGM_LOGI("Cur xmlModeId: %{public}s, new xmlModeId: %{public}s", xmlModeId_.c_str(), xmlModeId.value().c_str());
49     xmlModeId_ = xmlModeId.value();
50     OnUpdate();
51 }
52 
SetXmlModeId(const std::string & xmlModeId)53 void PolicyConfigVisitorImpl::SetXmlModeId(const std::string& xmlModeId)
54 {
55     if (xmlModeId_ == xmlModeId) {
56         return;
57     }
58     auto settingModeId = XmlModeId2SettingModeId(xmlModeId);
59     if (!settingModeId.has_value()) {
60         HGM_LOGE("SetXmlModeId %{public}s fail", xmlModeId.c_str());
61         return;
62     }
63     HGM_LOGI("SetXmlModeId : %{public}s -> settingModeId: %{public}d", xmlModeId.c_str(), settingModeId.value());
64     xmlModeId_ = xmlModeId;
65     settingModeId_ = settingModeId.value();
66     OnUpdate();
67 }
68 
GetRefreshRateModeName(int32_t refreshRateModeId) const69 int32_t PolicyConfigVisitorImpl::GetRefreshRateModeName(int32_t refreshRateModeId) const
70 {
71     auto iter = std::find_if(configData_.refreshRateForSettings_.begin(), configData_.refreshRateForSettings_.end(),
72         [&](auto nameModeId) {
73             return nameModeId.second == refreshRateModeId;
74         });
75     if (iter != configData_.refreshRateForSettings_.end()) {
76         return iter->first;
77     }
78     return 0;
79 }
80 
ChangeScreen(const std::string & screenConfigType)81 void PolicyConfigVisitorImpl::ChangeScreen(const std::string& screenConfigType)
82 {
83     if (screenConfigType_ == screenConfigType) {
84         return;
85     }
86     screenConfigType_ = screenConfigType;
87     OnUpdate();
88 }
89 
GetStrategyConfig(const std::string & strategyName,PolicyConfigData::StrategyConfig & strategyRes) const90 HgmErrCode PolicyConfigVisitorImpl::GetStrategyConfig(
91     const std::string& strategyName, PolicyConfigData::StrategyConfig& strategyRes) const
92 {
93     if (auto iter = configData_.strategyConfigs_.find(strategyName); iter != configData_.strategyConfigs_.end()) {
94         strategyRes = iter->second;
95         return EXEC_SUCCESS;
96     }
97     return HGM_ERROR;
98 }
99 
GetScreenSetting() const100 const PolicyConfigData::ScreenSetting& PolicyConfigVisitorImpl::GetScreenSetting() const
101 {
102     const auto& screenConfigs = configData_.screenConfigs_;
103     if (auto screenConfigsIter = screenConfigs.find(screenConfigType_); screenConfigsIter != screenConfigs.end()) {
104         const auto& screenConfig = screenConfigsIter->second;
105         if (auto iter = screenConfig.find(xmlModeId_); iter != screenConfig.end()) {
106             return iter->second;
107         } else {
108             HGM_LOGD("xmlModeId not existed: %{public}s", xmlModeId_.c_str());
109         }
110     } else {
111         HGM_LOGD("curScreenStrategyId not existed: %{public}s", screenConfigType_.c_str());
112     }
113     return NULL_SCREEN_SETTING;
114 }
115 
GetAceSceneDynamicSettingMap() const116 const PolicyConfigData::DynamicSettingMap& PolicyConfigVisitorImpl::GetAceSceneDynamicSettingMap() const
117 {
118     return GetScreenSetting().aceSceneDynamicSettings;
119 }
120 
GetAppStrategyConfigName(const std::string & pkgName,int32_t appType) const121 std::string PolicyConfigVisitorImpl::GetAppStrategyConfigName(const std::string& pkgName, int32_t appType) const
122 {
123     const auto& screenSetting = GetScreenSetting();
124 
125     const auto& appConfigMap = screenSetting.appList;
126     if (auto iter = appConfigMap.find(pkgName); iter != appConfigMap.end()) {
127         return iter->second;
128     }
129 
130     const auto& appTypes = screenSetting.appTypes;
131     if (auto iter = appTypes.find(appType); iter != appTypes.end()) {
132         return iter->second;
133     }
134 
135     return screenSetting.strategy;
136 }
137 
GetAppStrategyConfig(const std::string & pkgName,int32_t appType,PolicyConfigData::StrategyConfig & strategyRes) const138 HgmErrCode PolicyConfigVisitorImpl::GetAppStrategyConfig(
139     const std::string& pkgName, int32_t appType, PolicyConfigData::StrategyConfig& strategyRes) const
140 {
141     return GetStrategyConfig(GetAppStrategyConfigName(pkgName, appType), strategyRes);
142 }
143 
GetGameNodeName(const std::string & pkgName) const144 std::string PolicyConfigVisitorImpl::GetGameNodeName(const std::string& pkgName) const
145 {
146     const auto& appNodeMap = GetScreenSetting().gameAppNodeList;
147     if (auto iter = appNodeMap.find(pkgName); iter != appNodeMap.end()) {
148         return iter->second;
149     }
150     return "";
151 }
152 
GetDynamicAppStrategyConfig(const std::string & pkgName,PolicyConfigData::StrategyConfig & strategyRes) const153 HgmErrCode PolicyConfigVisitorImpl::GetDynamicAppStrategyConfig(const std::string& pkgName,
154     PolicyConfigData::StrategyConfig& strategyRes) const
155 {
156     return HGM_ERROR;
157 }
158 
SettingModeId2XmlModeId(int32_t settingModeId) const159 std::optional<std::string> PolicyConfigVisitorImpl::SettingModeId2XmlModeId(int32_t settingModeId) const
160 {
161     std::optional<std::string> xmlModeId;
162     auto ret = configData_.SettingModeId2XmlModeId(settingModeId);
163     if (ret == 0) {
164         HGM_LOGI("In SettingModeId2XmlModeId settingModeId: %{public}d -> ret: 0", settingModeId);
165         return xmlModeId;
166     }
167     HGM_LOGI("In SettingModeId2XmlModeId settingModeId: %{public}d -> ret: %{public}d", settingModeId, ret);
168     return std::to_string(ret);
169 }
170 
XmlModeId2SettingModeId(const std::string & xmlModeId) const171 std::optional<int32_t> PolicyConfigVisitorImpl::XmlModeId2SettingModeId(const std::string& xmlModeId) const
172 {
173     std::optional<int32_t> settingModeId;
174     auto ret = configData_.XmlModeId2SettingModeId(xmlModeId);
175     if (ret == 0) {
176         return settingModeId;
177     }
178     return ret;
179 }
180 } // namespace OHOS::Rosen