1 /*
2 * Copyright (c) 2023-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
16 #include "brightness_setting_helper.h"
17
18 #include "display_log.h"
19 #include "setting_provider.h"
20 #include "system_ability_definition.h"
21
22 namespace OHOS {
23 namespace DisplayPowerMgr {
24 namespace {
25 constexpr int32_t AUTO_BRIGHTNESS_DISABLE = 0;
26 constexpr int32_t AUTO_BRIGHTNESS_ENABLE = 1;
27 }
28
29 using namespace OHOS::PowerMgr;
30 sptr<SettingObserver> BrightnessSettingHelper::mAutoBrightnessObserver;
31 sptr<SettingObserver> BrightnessSettingHelper::mBrightnessObserver;
32
RegisterSettingBrightnessObserver(SettingObserver::UpdateFunc func)33 void BrightnessSettingHelper::RegisterSettingBrightnessObserver(SettingObserver::UpdateFunc func)
34 {
35 if (mBrightnessObserver) {
36 DISPLAY_HILOGD(FEAT_BRIGHTNESS, "setting brightness observer is already registered");
37 return;
38 }
39 SettingProvider& provider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_ID);
40 mBrightnessObserver = provider.CreateObserver(SETTING_BRIGHTNESS_KEY, func);
41 ErrCode ret = provider.RegisterObserver(mBrightnessObserver);
42 if (ret != ERR_OK) {
43 DISPLAY_HILOGW(FEAT_BRIGHTNESS, "register setting brightness observer failed, ret=%{public}d", ret);
44 mBrightnessObserver = nullptr;
45 }
46 }
47
UnregisterSettingBrightnessObserver()48 void BrightnessSettingHelper::UnregisterSettingBrightnessObserver()
49 {
50 if (mBrightnessObserver == nullptr) {
51 DISPLAY_HILOGD(FEAT_BRIGHTNESS, "mBrightnessObserver is nullptr, no need to unregister");
52 return;
53 }
54 SettingProvider& provider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_ID);
55 ErrCode ret = provider.UnregisterObserver(mBrightnessObserver);
56 if (ret != ERR_OK) {
57 DISPLAY_HILOGW(FEAT_BRIGHTNESS, "unregister setting brightness observer failed, ret=%{public}d", ret);
58 }
59 mBrightnessObserver = nullptr;
60 }
61
SetSettingBrightness(uint32_t value)62 void BrightnessSettingHelper::SetSettingBrightness(uint32_t value)
63 {
64 uint32_t settingBrightness;
65 if (GetSettingBrightness(settingBrightness) != ERR_OK) {
66 return;
67 }
68 if (value == static_cast<uint32_t>(settingBrightness)) {
69 DISPLAY_HILOGI(FEAT_BRIGHTNESS, "no need to set setting brightness");
70 return;
71 }
72 SettingProvider& provider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_ID);
73 auto ret = provider.PutIntValue(SETTING_BRIGHTNESS_KEY, static_cast<int32_t>(value));
74 if (ret != ERR_OK) {
75 DISPLAY_HILOGW(FEAT_BRIGHTNESS, "set setting brightness failed, ret=%{public}d", ret);
76 return;
77 }
78 DISPLAY_HILOGI(FEAT_BRIGHTNESS, "set setting brightness=%{public}u", value);
79 }
80
GetSettingBrightness(uint32_t & brightness,const std::string & key)81 ErrCode BrightnessSettingHelper::GetSettingBrightness(uint32_t& brightness, const std::string& key)
82 {
83 SettingProvider& provider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_ID);
84 int32_t value;
85 ErrCode ret = provider.GetIntValue(key, value);
86 if (ret != ERR_OK) {
87 DISPLAY_HILOGW(FEAT_BRIGHTNESS, "get setting brightness failed, ret=%{public}d", ret);
88 return ret;
89 }
90 brightness = static_cast<uint32_t>(value);
91 return ERR_OK;
92 }
93
RegisterSettingAutoBrightnessObserver(SettingObserver::UpdateFunc func)94 void BrightnessSettingHelper::RegisterSettingAutoBrightnessObserver(SettingObserver::UpdateFunc func)
95 {
96 if (mAutoBrightnessObserver) {
97 DISPLAY_HILOGD(FEAT_BRIGHTNESS, "setting auto brightness observer is already registered");
98 return;
99 }
100 SettingProvider& provider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_ID);
101 mAutoBrightnessObserver = provider.CreateObserver(SETTING_AUTO_ADJUST_BRIGHTNESS_KEY, func);
102 ErrCode ret = provider.RegisterObserver(mAutoBrightnessObserver);
103 if (ret != ERR_OK) {
104 DISPLAY_HILOGW(FEAT_BRIGHTNESS, "register setting auto brightness observer failed, ret=%{public}d", ret);
105 mAutoBrightnessObserver = nullptr;
106 }
107 }
108
UnregisterSettingAutoBrightnessObserver()109 void BrightnessSettingHelper::UnregisterSettingAutoBrightnessObserver()
110 {
111 if (mAutoBrightnessObserver == nullptr) {
112 DISPLAY_HILOGD(FEAT_BRIGHTNESS, "mAutoBrightnessObserver is nullptr, no need to unregister");
113 return;
114 }
115 SettingProvider& provider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_ID);
116 ErrCode ret = provider.UnregisterObserver(mAutoBrightnessObserver);
117 if (ret != ERR_OK) {
118 DISPLAY_HILOGW(FEAT_BRIGHTNESS, "unregister setting auto brightness observer failed, ret=%{public}d", ret);
119 }
120 mAutoBrightnessObserver = nullptr;
121 }
122
SetSettingAutoBrightness(bool enable)123 void BrightnessSettingHelper::SetSettingAutoBrightness(bool enable)
124 {
125 DISPLAY_HILOGI(FEAT_BRIGHTNESS, "SetSettingAutoBrightness mode, enable=%{public}d", enable);
126 SettingProvider& provider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_ID);
127 int32_t value = enable ? AUTO_BRIGHTNESS_ENABLE : AUTO_BRIGHTNESS_DISABLE;
128 ErrCode ret = provider.PutIntValue(SETTING_AUTO_ADJUST_BRIGHTNESS_KEY, value);
129 if (ret != ERR_OK) {
130 DISPLAY_HILOGW(
131 FEAT_BRIGHTNESS, "set setting auto brightness failed, enable=%{public}d, ret=%{public}d", enable, ret);
132 }
133 }
134
GetSettingAutoBrightness(const std::string & key)135 bool BrightnessSettingHelper::GetSettingAutoBrightness(const std::string& key)
136 {
137 SettingProvider& provider = SettingProvider::GetInstance(DISPLAY_MANAGER_SERVICE_ID);
138 int32_t value;
139 ErrCode ret = provider.GetIntValue(key, value);
140 if (ret != ERR_OK) {
141 DISPLAY_HILOGW(
142 FEAT_BRIGHTNESS, "get setting auto brightness failed key=%{public}s, ret=%{public}d", key.c_str(), ret);
143 }
144 return (value == AUTO_BRIGHTNESS_ENABLE);
145 }
146 } // namespace DisplayPowerMgr
147 } // namespace OHOS