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