1 /*
2 * Copyright (c) 2023 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 #include "screen_setting_helper.h"
16
17 #include "window_manager_hilog.h"
18 #include "setting_provider.h"
19 #include "system_ability_definition.h"
20
21 namespace OHOS {
22 namespace Rosen {
23 sptr<SettingObserver> ScreenSettingHelper::dpiObserver_;
24 sptr<SettingObserver> ScreenSettingHelper::castObserver_;
25 sptr<SettingObserver> ScreenSettingHelper::rotationObserver_;
26
RegisterSettingDpiObserver(SettingObserver::UpdateFunc func)27 void ScreenSettingHelper::RegisterSettingDpiObserver(SettingObserver::UpdateFunc func)
28 {
29 if (dpiObserver_) {
30 TLOGD(WmsLogTag::DMS, "setting dpi observer is already registered");
31 return;
32 }
33 SettingProvider& provider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_SA_ID);
34 dpiObserver_ = provider.CreateObserver(SETTING_DPI_KEY, func);
35 ErrCode ret = provider.RegisterObserver(dpiObserver_);
36 if (ret != ERR_OK) {
37 TLOGW(WmsLogTag::DMS, "register setting dpi observer failed, ret=%{public}d", ret);
38 dpiObserver_ = nullptr;
39 }
40 }
41
UnregisterSettingDpiObserver()42 void ScreenSettingHelper::UnregisterSettingDpiObserver()
43 {
44 if (dpiObserver_ == nullptr) {
45 TLOGD(WmsLogTag::DMS, "dpiObserver_ is nullptr, no need to unregister");
46 return;
47 }
48 SettingProvider& provider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_SA_ID);
49 ErrCode ret = provider.UnregisterObserver(dpiObserver_);
50 if (ret != ERR_OK) {
51 TLOGW(WmsLogTag::DMS, "unregister setting dpi observer failed, ret=%{public}d", ret);
52 }
53 dpiObserver_ = nullptr;
54 }
55
GetSettingDpi(uint32_t & dpi,const std::string & key)56 bool ScreenSettingHelper::GetSettingDpi(uint32_t& dpi, const std::string& key)
57 {
58 SettingProvider& provider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_SA_ID);
59 int32_t value;
60 ErrCode ret = provider.GetIntValue(key, value);
61 if (ret != ERR_OK) {
62 TLOGW(WmsLogTag::DMS, "get setting dpi failed, ret=%{public}d", ret);
63 return false;
64 }
65 dpi = static_cast<uint32_t>(value);
66 return true;
67 }
68
GetSettingValue(uint32_t & value,const std::string & key)69 bool ScreenSettingHelper::GetSettingValue(uint32_t& value, const std::string& key)
70 {
71 SettingProvider& settingData = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_SA_ID);
72 int32_t getValue;
73 ErrCode ret = settingData.GetIntValue(key, getValue);
74 if (ret != ERR_OK) {
75 TLOGW(WmsLogTag::DMS, "get setting value failed, ret=%{public}d", ret);
76 return false;
77 }
78 value = static_cast<uint32_t>(getValue);
79 return true;
80 }
81
SetSettingDefaultDpi(uint32_t & dpi,const std::string & key)82 bool ScreenSettingHelper::SetSettingDefaultDpi(uint32_t& dpi, const std::string& key)
83 {
84 SettingProvider& provider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_SA_ID);
85 ErrCode ret = provider.PutIntValue(key, dpi, false);
86 if (ret != ERR_OK) {
87 TLOGW(WmsLogTag::DMS, "put int value failed, ret=%{public}d", ret);
88 return false;
89 }
90 return true;
91 }
92
RegisterSettingCastObserver(SettingObserver::UpdateFunc func)93 void ScreenSettingHelper::RegisterSettingCastObserver(SettingObserver::UpdateFunc func)
94 {
95 if (castObserver_) {
96 TLOGD(WmsLogTag::DMS, "setting cast observer is already registered");
97 return;
98 }
99 SettingProvider& castProvider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_SA_ID);
100 castObserver_ = castProvider.CreateObserver(SETTING_CAST_KEY, func);
101 ErrCode ret = castProvider.RegisterObserver(castObserver_);
102 if (ret != ERR_OK) {
103 TLOGW(WmsLogTag::DMS, "register setting cast observer failed, ret=%{public}d", ret);
104 castObserver_ = nullptr;
105 }
106 }
107
UnregisterSettingCastObserver()108 void ScreenSettingHelper::UnregisterSettingCastObserver()
109 {
110 if (castObserver_ == nullptr) {
111 TLOGD(WmsLogTag::DMS, "castObserver_ is nullptr, no need to unregister");
112 return;
113 }
114 SettingProvider& castProvider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_SA_ID);
115 ErrCode ret = castProvider.UnregisterObserver(castObserver_);
116 if (ret != ERR_OK) {
117 TLOGW(WmsLogTag::DMS, "unregister setting cast observer failed, ret=%{public}d", ret);
118 }
119 castObserver_ = nullptr;
120 }
121
GetSettingCast(bool & enable,const std::string & key)122 bool ScreenSettingHelper::GetSettingCast(bool& enable, const std::string& key)
123 {
124 SettingProvider& castProvider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_SA_ID);
125 ErrCode ret = castProvider.GetBoolValue(key, enable);
126 if (ret != ERR_OK) {
127 TLOGW(WmsLogTag::DMS, "get setting dpi failed, ret=%{public}d", ret);
128 return false;
129 }
130 return true;
131 }
132
RegisterSettingRotationObserver(SettingObserver::UpdateFunc func)133 void ScreenSettingHelper::RegisterSettingRotationObserver(SettingObserver::UpdateFunc func)
134 {
135 if (rotationObserver_ != nullptr) {
136 TLOGI(WmsLogTag::DMS, "setting rotation observer is already registered");
137 return;
138 }
139 SettingProvider& settingProvider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_SA_ID);
140 rotationObserver_ = settingProvider.CreateObserver(SETTING_ROTATION_KEY, func);
141 ErrCode ret = settingProvider.RegisterObserver(rotationObserver_);
142 if (ret != ERR_OK) {
143 TLOGE(WmsLogTag::DMS, "register setting rotation observer failed, ret:%{public}d", ret);
144 rotationObserver_ = nullptr;
145 }
146 }
147
UnregisterSettingRotationObserver()148 void ScreenSettingHelper::UnregisterSettingRotationObserver()
149 {
150 if (rotationObserver_ == nullptr) {
151 TLOGI(WmsLogTag::DMS, "rotationObserver_ is nullptr, no need to unregister");
152 return;
153 }
154 SettingProvider& settingProvider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_SA_ID);
155 ErrCode ret = settingProvider.UnregisterObserver(rotationObserver_);
156 if (ret != ERR_OK) {
157 TLOGE(WmsLogTag::DMS, "unregister setting rotation observer failed, ret:%{public}d", ret);
158 }
159 rotationObserver_ = nullptr;
160 }
161
SetSettingRotation(int32_t rotation)162 void ScreenSettingHelper::SetSettingRotation(int32_t rotation)
163 {
164 SettingProvider& settingProvider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_SA_ID);
165 ErrCode ret = settingProvider.PutIntValue(SETTING_ROTATION_KEY, rotation, true);
166 if (ret != ERR_OK) {
167 TLOGE(WmsLogTag::DMS, "set setting rotation failed, ret:%{public}d", ret);
168 return;
169 }
170 TLOGE(WmsLogTag::DMS, "set setting rotation succeed, ret:%{public}d", ret);
171 }
172
GetSettingRotation(int32_t & rotation,const std::string & key)173 bool ScreenSettingHelper::GetSettingRotation(int32_t& rotation, const std::string& key)
174 {
175 SettingProvider& settingProvider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_SA_ID);
176 ErrCode ret = settingProvider.GetIntValue(key, rotation);
177 if (ret != ERR_OK) {
178 TLOGE(WmsLogTag::DMS, "get setting rotation failed, ret:%{public}d", ret);
179 return false;
180 }
181 TLOGE(WmsLogTag::DMS, "current rotation:%{public}d", rotation);
182 return true;
183 }
184
SetSettingRotationScreenId(int32_t screenId)185 void ScreenSettingHelper::SetSettingRotationScreenId(int32_t screenId)
186 {
187 SettingProvider& settingProvider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_SA_ID);
188 ErrCode ret = settingProvider.PutIntValue(SETTING_ROTATION_SCREEN_ID_KEY, screenId, false);
189 if (ret != ERR_OK) {
190 TLOGE(WmsLogTag::DMS, "set setting rotation screen id failed, ret:%{public}d", ret);
191 return;
192 }
193 TLOGE(WmsLogTag::DMS, "set setting rotation screen id succeed, ret:%{public}d", ret);
194 }
195
GetSettingRotationScreenId(int32_t & screenId,const std::string & key)196 bool ScreenSettingHelper::GetSettingRotationScreenId(int32_t& screenId, const std::string& key)
197 {
198 SettingProvider& settingProvider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_SA_ID);
199 ErrCode ret = settingProvider.GetIntValue(key, screenId);
200 if (ret != ERR_OK) {
201 TLOGE(WmsLogTag::DMS, "get setting rotation screen id failed, ret:%{public}d", ret);
202 return false;
203 }
204 TLOGE(WmsLogTag::DMS, "current rotation screen id:%{public}d", screenId);
205 return true;
206 }
207 } // namespace Rosen
208 } // namespace OHOS
209