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