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