1595d5899Sopenharmony_ci/* 2595d5899Sopenharmony_ci * Copyright (c) 2021-2023 Huawei Device Co., Ltd. 3595d5899Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4595d5899Sopenharmony_ci * you may not use this file except in compliance with the License. 5595d5899Sopenharmony_ci * You may obtain a copy of the License at 6595d5899Sopenharmony_ci * 7595d5899Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8595d5899Sopenharmony_ci * 9595d5899Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10595d5899Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11595d5899Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12595d5899Sopenharmony_ci * See the License for the specific language governing permissions and 13595d5899Sopenharmony_ci * limitations under the License. 14595d5899Sopenharmony_ci */ 15595d5899Sopenharmony_ci 16595d5899Sopenharmony_ci#include "brightness.h" 17595d5899Sopenharmony_ci#include "napi/native_common.h" 18595d5899Sopenharmony_ci#include "display_common.h" 19595d5899Sopenharmony_ci#include "display_log.h" 20595d5899Sopenharmony_ci#include "display_power_mgr_client.h" 21595d5899Sopenharmony_ci 22595d5899Sopenharmony_ciusing namespace OHOS::PowerMgr; 23595d5899Sopenharmony_ci 24595d5899Sopenharmony_cinamespace OHOS { 25595d5899Sopenharmony_cinamespace DisplayPowerMgr { 26595d5899Sopenharmony_cinamespace { 27595d5899Sopenharmony_ciconst uint32_t MAX_ARGC = 2; 28595d5899Sopenharmony_ciconst uint32_t CALLBACK_ARGC = 1; 29595d5899Sopenharmony_ciconst uint32_t ARGV_BRIGHTNESS_INDEX = 0; 30595d5899Sopenharmony_ciconst uint32_t ARGV_CONTINUOUS_INDEX = 1; 31595d5899Sopenharmony_ciconst uint32_t ERR_DATA_INDEX = 0; 32595d5899Sopenharmony_ciconst uint32_t ERR_CODE_INDEX = 1; 33595d5899Sopenharmony_ciconst uint32_t MAX_FAIL_ARGC = 2; 34595d5899Sopenharmony_ciconst uint32_t MAX_BRIGHTNESS = DisplayPowerMgrClient::GetInstance().GetMaxBrightness(); 35595d5899Sopenharmony_ciconst uint32_t MIN_BRIGHTNESS = DisplayPowerMgrClient::GetInstance().GetMinBrightness(); 36595d5899Sopenharmony_ciconst uint32_t DEFAULT_BRIGHTNESS = DisplayPowerMgrClient::GetInstance().GetDefaultBrightness(); 37595d5899Sopenharmony_ciconst uint32_t MAIN_DISPLAY_ID = DisplayPowerMgrClient::GetInstance().GetMainDisplayId(); 38595d5899Sopenharmony_ci 39595d5899Sopenharmony_ciconst std::string FUNC_SUCEESS_NAME = "success"; 40595d5899Sopenharmony_ciconst std::string FUNC_FAIL_NAME = "fail"; 41595d5899Sopenharmony_ciconst std::string FUNC_COMPLETE_NAME = "complete"; 42595d5899Sopenharmony_ci 43595d5899Sopenharmony_ciconst int32_t COMMON_ERROR_COED = 200; 44595d5899Sopenharmony_ciconst int32_t INPUT_ERROR_CODE = 202; 45595d5899Sopenharmony_ci 46595d5899Sopenharmony_ciconst std::string SET_VALUE_ERROR_MGR = "value is not an available number"; 47595d5899Sopenharmony_ciconst std::string GET_VALUE_ERROR_MGR = "get system screen brightness fail"; 48595d5899Sopenharmony_ciconst std::string SET_MODE_ERROR_MGR = "value is not an available number"; 49595d5899Sopenharmony_ciconst std::string SET_MODE_NOT_SUPPORTED_ERROR_MGR = "Auto adjusting brightness is not supported"; 50595d5899Sopenharmony_ciconst std::string SET_KEEP_SCREENON_ERROR_MGR = "value is not an available boolean"; 51595d5899Sopenharmony_ci} // namespace 52595d5899Sopenharmony_ci 53595d5899Sopenharmony_cistd::map<DisplayErrors, std::string> Brightness::Result::errorTable_ = { 54595d5899Sopenharmony_ci {DisplayErrors::ERR_CONNECTION_FAIL, "Failed to connect to the service."}, 55595d5899Sopenharmony_ci {DisplayErrors::ERR_PERMISSION_DENIED, "Permission is denied" }, 56595d5899Sopenharmony_ci {DisplayErrors::ERR_SYSTEM_API_DENIED, "System permission is denied" }, 57595d5899Sopenharmony_ci {DisplayErrors::ERR_PARAM_INVALID, "Invalid input parameter." } 58595d5899Sopenharmony_ci}; 59595d5899Sopenharmony_ci 60595d5899Sopenharmony_ciBrightness::Brightness(napi_env env, std::shared_ptr<RunningLock> runningLock) : env_(env), runningLock_(runningLock) {} 61595d5899Sopenharmony_ci 62595d5899Sopenharmony_ciBrightness::~Brightness() 63595d5899Sopenharmony_ci{ 64595d5899Sopenharmony_ci ReleaseReference(successRef_); 65595d5899Sopenharmony_ci ReleaseReference(failRef_); 66595d5899Sopenharmony_ci ReleaseReference(completeRef_); 67595d5899Sopenharmony_ci ReleaseReference(napiValRef_); 68595d5899Sopenharmony_ci} 69595d5899Sopenharmony_ci 70595d5899Sopenharmony_civoid Brightness::GetValue() 71595d5899Sopenharmony_ci{ 72595d5899Sopenharmony_ci uint32_t brightness = brightnessInfo_.GetBrightness(); 73595d5899Sopenharmony_ci if (brightness < MIN_BRIGHTNESS || brightness > MAX_BRIGHTNESS) { 74595d5899Sopenharmony_ci result_.Error(COMMON_ERROR_COED, GET_VALUE_ERROR_MGR); 75595d5899Sopenharmony_ci } else { 76595d5899Sopenharmony_ci result_.SetResult(BRIGHTNESS_VALUE, brightness); 77595d5899Sopenharmony_ci } 78595d5899Sopenharmony_ci ExecuteCallback(); 79595d5899Sopenharmony_ci} 80595d5899Sopenharmony_ci 81595d5899Sopenharmony_civoid Brightness::SetValue(napi_callback_info& info) 82595d5899Sopenharmony_ci{ 83595d5899Sopenharmony_ci DISPLAY_HILOGD(FEAT_BRIGHTNESS, "Brightness interface"); 84595d5899Sopenharmony_ci napi_value napiBrightness = GetCallbackInfo(info, ARGV_BRIGHTNESS_INDEX, napi_number); 85595d5899Sopenharmony_ci napi_value napiUndefined = GetCallbackInfo(info, ARGV_BRIGHTNESS_INDEX, napi_undefined); 86595d5899Sopenharmony_ci if (napiBrightness == nullptr && napiUndefined == nullptr) { 87595d5899Sopenharmony_ci result_.ThrowError(env_, DisplayErrors::ERR_PARAM_INVALID); 88595d5899Sopenharmony_ci return; 89595d5899Sopenharmony_ci } 90595d5899Sopenharmony_ci 91595d5899Sopenharmony_ci int32_t value = MIN_BRIGHTNESS; 92595d5899Sopenharmony_ci bool continuous = false; 93595d5899Sopenharmony_ci if (napi_get_value_int32(env_, napiBrightness, &value) != napi_ok) { 94595d5899Sopenharmony_ci if (napiUndefined != nullptr) { 95595d5899Sopenharmony_ci return; 96595d5899Sopenharmony_ci } else { 97595d5899Sopenharmony_ci DISPLAY_HILOGW(COMP_FWK, "Failed to get the input number"); 98595d5899Sopenharmony_ci result_.ThrowError(env_, DisplayErrors::ERR_PARAM_INVALID); 99595d5899Sopenharmony_ci return; 100595d5899Sopenharmony_ci } 101595d5899Sopenharmony_ci } 102595d5899Sopenharmony_ci napi_value napiContinuous = GetCallbackInfo(info, ARGV_CONTINUOUS_INDEX, napi_boolean); 103595d5899Sopenharmony_ci if (napiContinuous != nullptr) { 104595d5899Sopenharmony_ci napi_get_value_bool(env_, napiContinuous, &continuous); 105595d5899Sopenharmony_ci } 106595d5899Sopenharmony_ci 107595d5899Sopenharmony_ci if (!brightnessInfo_.SetBrightness(value, continuous)) { 108595d5899Sopenharmony_ci DisplayErrors error = brightnessInfo_.GetServiceError(); 109595d5899Sopenharmony_ci if (error != DisplayErrors::ERR_OK) { 110595d5899Sopenharmony_ci result_.ThrowError(env_, error); 111595d5899Sopenharmony_ci } 112595d5899Sopenharmony_ci } 113595d5899Sopenharmony_ci} 114595d5899Sopenharmony_ci 115595d5899Sopenharmony_civoid Brightness::SystemSetValue() 116595d5899Sopenharmony_ci{ 117595d5899Sopenharmony_ci DISPLAY_HILOGD(FEAT_BRIGHTNESS, "System brightness interface"); 118595d5899Sopenharmony_ci if (napiValRef_ == nullptr) { 119595d5899Sopenharmony_ci result_.Error(INPUT_ERROR_CODE, SET_VALUE_ERROR_MGR); 120595d5899Sopenharmony_ci } else { 121595d5899Sopenharmony_ci int32_t brightness = MIN_BRIGHTNESS; 122595d5899Sopenharmony_ci napi_value napiVal = nullptr; 123595d5899Sopenharmony_ci napi_get_reference_value(env_, napiValRef_, &napiVal); 124595d5899Sopenharmony_ci napi_get_value_int32(env_, napiVal, &brightness); 125595d5899Sopenharmony_ci brightnessInfo_.SetBrightness(brightness, false); 126595d5899Sopenharmony_ci ReleaseReference(napiValRef_); 127595d5899Sopenharmony_ci } 128595d5899Sopenharmony_ci ExecuteCallback(); 129595d5899Sopenharmony_ci} 130595d5899Sopenharmony_ci 131595d5899Sopenharmony_civoid Brightness::GetMode() 132595d5899Sopenharmony_ci{ 133595d5899Sopenharmony_ci int32_t isAuto = brightnessInfo_.GetAutoMode(); 134595d5899Sopenharmony_ci result_.SetResult(BRIGHTNESS_MODE, isAuto); 135595d5899Sopenharmony_ci ExecuteCallback(); 136595d5899Sopenharmony_ci} 137595d5899Sopenharmony_ci 138595d5899Sopenharmony_civoid Brightness::SetMode() 139595d5899Sopenharmony_ci{ 140595d5899Sopenharmony_ci DISPLAY_HILOGD(COMP_FWK, "Set auto brightness"); 141595d5899Sopenharmony_ci if (napiValRef_ == nullptr) { 142595d5899Sopenharmony_ci result_.Error(INPUT_ERROR_CODE, SET_MODE_ERROR_MGR); 143595d5899Sopenharmony_ci } else { 144595d5899Sopenharmony_ci int32_t mode = 0; 145595d5899Sopenharmony_ci napi_value napiMode = nullptr; 146595d5899Sopenharmony_ci napi_get_reference_value(env_, napiValRef_, &napiMode); 147595d5899Sopenharmony_ci napi_get_value_int32(env_, napiMode, &mode); 148595d5899Sopenharmony_ci if (!brightnessInfo_.SetAutoMode(static_cast<bool>(mode))) { 149595d5899Sopenharmony_ci result_.Error(COMMON_ERROR_COED, SET_MODE_NOT_SUPPORTED_ERROR_MGR); 150595d5899Sopenharmony_ci } 151595d5899Sopenharmony_ci ReleaseReference(napiValRef_); 152595d5899Sopenharmony_ci } 153595d5899Sopenharmony_ci ExecuteCallback(); 154595d5899Sopenharmony_ci} 155595d5899Sopenharmony_ci 156595d5899Sopenharmony_civoid Brightness::SetKeepScreenOn() 157595d5899Sopenharmony_ci{ 158595d5899Sopenharmony_ci DISPLAY_HILOGD(COMP_FWK, "Set keep screen on"); 159595d5899Sopenharmony_ci if (napiValRef_ == nullptr) { 160595d5899Sopenharmony_ci result_.Error(INPUT_ERROR_CODE, SET_KEEP_SCREENON_ERROR_MGR); 161595d5899Sopenharmony_ci } else { 162595d5899Sopenharmony_ci napi_value napiKeep = nullptr; 163595d5899Sopenharmony_ci napi_get_reference_value(env_, napiValRef_, &napiKeep); 164595d5899Sopenharmony_ci bool screenOn = false; 165595d5899Sopenharmony_ci napi_get_value_bool(env_, napiKeep, &screenOn); 166595d5899Sopenharmony_ci brightnessInfo_.ScreenOn(screenOn, runningLock_); 167595d5899Sopenharmony_ci ReleaseReference(napiValRef_); 168595d5899Sopenharmony_ci } 169595d5899Sopenharmony_ci ExecuteCallback(); 170595d5899Sopenharmony_ci} 171595d5899Sopenharmony_ci 172595d5899Sopenharmony_cinapi_value Brightness::GetCallbackInfo(napi_callback_info& info, uint32_t index, napi_valuetype checkType) 173595d5899Sopenharmony_ci{ 174595d5899Sopenharmony_ci size_t argc = MAX_ARGC; 175595d5899Sopenharmony_ci napi_value argv[argc]; 176595d5899Sopenharmony_ci napi_value thisVar = nullptr; 177595d5899Sopenharmony_ci void* data = nullptr; 178595d5899Sopenharmony_ci if (napi_ok != napi_get_cb_info(env_, info, &argc, argv, &thisVar, &data)) { 179595d5899Sopenharmony_ci DISPLAY_HILOGW(COMP_FWK, "Failed to get the input parameter"); 180595d5899Sopenharmony_ci return nullptr; 181595d5899Sopenharmony_ci } 182595d5899Sopenharmony_ci 183595d5899Sopenharmony_ci if (argc > MAX_ARGC || index >= argc) { 184595d5899Sopenharmony_ci DISPLAY_HILOGW(COMP_FWK, "parameter %{public}u is invalid", index); 185595d5899Sopenharmony_ci return nullptr; 186595d5899Sopenharmony_ci } 187595d5899Sopenharmony_ci 188595d5899Sopenharmony_ci napi_value options = argv[index]; 189595d5899Sopenharmony_ci RETURN_IF_WITH_RET(!CheckValueType(options, checkType), nullptr); 190595d5899Sopenharmony_ci return options; 191595d5899Sopenharmony_ci} 192595d5899Sopenharmony_ci 193595d5899Sopenharmony_cibool Brightness::CreateCallbackRef(napi_value& options) 194595d5899Sopenharmony_ci{ 195595d5899Sopenharmony_ci RETURN_IF_WITH_RET(!CheckValueType(options, napi_object), false); 196595d5899Sopenharmony_ci 197595d5899Sopenharmony_ci napi_value succCallBack = GetOptions(options, FUNC_SUCEESS_NAME, napi_function); 198595d5899Sopenharmony_ci if (succCallBack != nullptr) { 199595d5899Sopenharmony_ci napi_create_reference(env_, succCallBack, 1, &successRef_); 200595d5899Sopenharmony_ci } 201595d5899Sopenharmony_ci 202595d5899Sopenharmony_ci napi_value failCallBack = GetOptions(options, FUNC_FAIL_NAME, napi_function); 203595d5899Sopenharmony_ci if (failCallBack != nullptr) { 204595d5899Sopenharmony_ci napi_create_reference(env_, failCallBack, 1, &failRef_); 205595d5899Sopenharmony_ci } 206595d5899Sopenharmony_ci 207595d5899Sopenharmony_ci napi_value completeCallBack = GetOptions(options, FUNC_COMPLETE_NAME, napi_function); 208595d5899Sopenharmony_ci if (completeCallBack != nullptr) { 209595d5899Sopenharmony_ci napi_create_reference(env_, completeCallBack, 1, &completeRef_); 210595d5899Sopenharmony_ci } 211595d5899Sopenharmony_ci return true; 212595d5899Sopenharmony_ci} 213595d5899Sopenharmony_ci 214595d5899Sopenharmony_civoid Brightness::CreateValueRef(napi_value& options, const std::string& valName, napi_valuetype checkType) 215595d5899Sopenharmony_ci{ 216595d5899Sopenharmony_ci napi_value value = GetOptions(options, valName, checkType); 217595d5899Sopenharmony_ci if (value != nullptr) { 218595d5899Sopenharmony_ci napi_create_reference(env_, value, 1, &napiValRef_); 219595d5899Sopenharmony_ci } 220595d5899Sopenharmony_ci} 221595d5899Sopenharmony_ci 222595d5899Sopenharmony_civoid Brightness::Result::Error(int32_t code, const std::string& msg) 223595d5899Sopenharmony_ci{ 224595d5899Sopenharmony_ci code_ = code; 225595d5899Sopenharmony_ci msg_ = msg; 226595d5899Sopenharmony_ci DISPLAY_HILOGW(COMP_FWK, "Error message, code: %{public}d, msg: %{public}s", code_, msg_.c_str()); 227595d5899Sopenharmony_ci} 228595d5899Sopenharmony_ci 229595d5899Sopenharmony_civoid Brightness::Result::GetError(napi_env env, napi_value* error, size_t& size) const 230595d5899Sopenharmony_ci{ 231595d5899Sopenharmony_ci if (!error) { 232595d5899Sopenharmony_ci DISPLAY_HILOGW(COMP_FWK, "error is null"); 233595d5899Sopenharmony_ci return; 234595d5899Sopenharmony_ci } 235595d5899Sopenharmony_ci napi_value data = nullptr; 236595d5899Sopenharmony_ci napi_value code = nullptr; 237595d5899Sopenharmony_ci napi_create_string_utf8(env, msg_.c_str(), msg_.size(), &data); 238595d5899Sopenharmony_ci napi_create_int32(env, code_, &code); 239595d5899Sopenharmony_ci size = MAX_FAIL_ARGC; 240595d5899Sopenharmony_ci error[ERR_DATA_INDEX] = data; 241595d5899Sopenharmony_ci error[ERR_CODE_INDEX] = code; 242595d5899Sopenharmony_ci} 243595d5899Sopenharmony_ci 244595d5899Sopenharmony_cinapi_value Brightness::Result::GetError(napi_env& env) 245595d5899Sopenharmony_ci{ 246595d5899Sopenharmony_ci napi_value napiError = nullptr; 247595d5899Sopenharmony_ci if (!IsError()) { 248595d5899Sopenharmony_ci napi_get_undefined(env, &napiError); 249595d5899Sopenharmony_ci return napiError; 250595d5899Sopenharmony_ci } 251595d5899Sopenharmony_ci 252595d5899Sopenharmony_ci std::string msg; 253595d5899Sopenharmony_ci auto item = errorTable_.find(static_cast<DisplayErrors>(code_)); 254595d5899Sopenharmony_ci if (item != errorTable_.end()) { 255595d5899Sopenharmony_ci msg = item->second; 256595d5899Sopenharmony_ci } 257595d5899Sopenharmony_ci napi_value napiMsg; 258595d5899Sopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, msg.c_str(), msg.size(), &napiMsg)); 259595d5899Sopenharmony_ci NAPI_CALL(env, napi_create_error(env, nullptr, napiMsg, &napiError)); 260595d5899Sopenharmony_ci 261595d5899Sopenharmony_ci napi_value napiCode; 262595d5899Sopenharmony_ci NAPI_CALL(env, napi_create_int32(env, code_, &napiCode)); 263595d5899Sopenharmony_ci 264595d5899Sopenharmony_ci napi_set_named_property(env, napiError, "code", napiCode); 265595d5899Sopenharmony_ci napi_set_named_property(env, napiError, "message", napiMsg); 266595d5899Sopenharmony_ci 267595d5899Sopenharmony_ci DISPLAY_HILOGW(COMP_FWK, "throw error code: %{public}d, msg: %{public}s,", code_, msg.c_str()); 268595d5899Sopenharmony_ci return napiError; 269595d5899Sopenharmony_ci} 270595d5899Sopenharmony_ci 271595d5899Sopenharmony_cinapi_value Brightness::Result::ThrowError(napi_env& env, DisplayErrors code) 272595d5899Sopenharmony_ci{ 273595d5899Sopenharmony_ci Error(static_cast<int32_t>(code)); 274595d5899Sopenharmony_ci napi_value error = GetError(env); 275595d5899Sopenharmony_ci RETURN_IF_WITH_RET(error == nullptr, nullptr); 276595d5899Sopenharmony_ci napi_throw(env, error); 277595d5899Sopenharmony_ci return nullptr; 278595d5899Sopenharmony_ci} 279595d5899Sopenharmony_ci 280595d5899Sopenharmony_cinapi_value Brightness::Result::GetResult(napi_env env) 281595d5899Sopenharmony_ci{ 282595d5899Sopenharmony_ci napi_value result = nullptr; 283595d5899Sopenharmony_ci NAPI_CALL(env, napi_create_object(env, &result)); 284595d5899Sopenharmony_ci for (const auto& it : mapResult_) { 285595d5899Sopenharmony_ci napi_value napiValue = 0; 286595d5899Sopenharmony_ci NAPI_CALL(env, napi_create_int32(env, it.second, &napiValue)); 287595d5899Sopenharmony_ci NAPI_CALL(env, napi_set_named_property(env, result, it.first.c_str(), napiValue)); 288595d5899Sopenharmony_ci } 289595d5899Sopenharmony_ci return result; 290595d5899Sopenharmony_ci} 291595d5899Sopenharmony_ci 292595d5899Sopenharmony_ciuint32_t Brightness::BrightnessInfo::GetBrightness() const 293595d5899Sopenharmony_ci{ 294595d5899Sopenharmony_ci uint32_t brightness = DisplayPowerMgrClient::GetInstance().GetBrightness(MAIN_DISPLAY_ID); 295595d5899Sopenharmony_ci DISPLAY_HILOGI(FEAT_BRIGHTNESS, "Get brightness: %{public}d", brightness); 296595d5899Sopenharmony_ci return brightness; 297595d5899Sopenharmony_ci} 298595d5899Sopenharmony_ci 299595d5899Sopenharmony_cibool Brightness::BrightnessInfo::SetBrightness(int32_t value, bool continuous) 300595d5899Sopenharmony_ci{ 301595d5899Sopenharmony_ci DISPLAY_HILOGI(FEAT_BRIGHTNESS, "Set brightness: %{public}d, %{public}d", value, continuous); 302595d5899Sopenharmony_ci value = value > static_cast<int32_t>(MAX_BRIGHTNESS) ? static_cast<int32_t>(MAX_BRIGHTNESS) : value; 303595d5899Sopenharmony_ci value = value < static_cast<int32_t>(MIN_BRIGHTNESS) ? static_cast<int32_t>(MIN_BRIGHTNESS) : value; 304595d5899Sopenharmony_ci bool isSucc = DisplayPowerMgrClient::GetInstance().SetBrightness(value, 0, continuous); 305595d5899Sopenharmony_ci if (!isSucc) { 306595d5899Sopenharmony_ci DISPLAY_HILOGW(FEAT_BRIGHTNESS, "Failed to set brightness: %{public}d", value); 307595d5899Sopenharmony_ci } 308595d5899Sopenharmony_ci return isSucc; 309595d5899Sopenharmony_ci} 310595d5899Sopenharmony_ci 311595d5899Sopenharmony_ciint32_t Brightness::BrightnessInfo::GetAutoMode() const 312595d5899Sopenharmony_ci{ 313595d5899Sopenharmony_ci bool isAuto = DisplayPowerMgrClient::GetInstance().IsAutoAdjustBrightness(); 314595d5899Sopenharmony_ci DISPLAY_HILOGD(FEAT_BRIGHTNESS, "Automatic brightness adjustment: %{public}d", isAuto); 315595d5899Sopenharmony_ci return static_cast<int32_t>(isAuto); 316595d5899Sopenharmony_ci} 317595d5899Sopenharmony_ci 318595d5899Sopenharmony_cibool Brightness::BrightnessInfo::SetAutoMode(bool mode) 319595d5899Sopenharmony_ci{ 320595d5899Sopenharmony_ci DISPLAY_HILOGD(FEAT_BRIGHTNESS, "AutoAdjustBrightness begin"); 321595d5899Sopenharmony_ci bool isSucc = DisplayPowerMgrClient::GetInstance().AutoAdjustBrightness(mode); 322595d5899Sopenharmony_ci DISPLAY_HILOGD(FEAT_BRIGHTNESS, "set auto brightness mode: %{public}d, succ: %{public}d", mode, isSucc); 323595d5899Sopenharmony_ci return isSucc; 324595d5899Sopenharmony_ci} 325595d5899Sopenharmony_ci 326595d5899Sopenharmony_civoid Brightness::BrightnessInfo::ScreenOn(bool keep, std::shared_ptr<RunningLock>& runningLock) 327595d5899Sopenharmony_ci{ 328595d5899Sopenharmony_ci if (runningLock != nullptr) { 329595d5899Sopenharmony_ci DISPLAY_HILOGD(COMP_FWK, "Keep screen on, keep: %{public}d, isUsed: %{public}d", keep, runningLock->IsUsed()); 330595d5899Sopenharmony_ci keep ? runningLock->Lock() : runningLock->UnLock(); 331595d5899Sopenharmony_ci } 332595d5899Sopenharmony_ci} 333595d5899Sopenharmony_ci 334595d5899Sopenharmony_ciDisplayErrors Brightness::BrightnessInfo::GetServiceError() const 335595d5899Sopenharmony_ci{ 336595d5899Sopenharmony_ci return DisplayPowerMgrClient::GetInstance().GetError(); 337595d5899Sopenharmony_ci} 338595d5899Sopenharmony_ci 339595d5899Sopenharmony_civoid Brightness::ExecuteCallback() 340595d5899Sopenharmony_ci{ 341595d5899Sopenharmony_ci bool error = result_.IsError(); 342595d5899Sopenharmony_ci if (!error) { 343595d5899Sopenharmony_ci DISPLAY_HILOGD(COMP_FWK, "Call the js success method"); 344595d5899Sopenharmony_ci napi_value result = result_.GetResult(env_); 345595d5899Sopenharmony_ci size_t argc = result ? CALLBACK_ARGC : 0; 346595d5899Sopenharmony_ci CallFunction(successRef_, argc, result ? &result : nullptr); 347595d5899Sopenharmony_ci } 348595d5899Sopenharmony_ci 349595d5899Sopenharmony_ci if (error) { 350595d5899Sopenharmony_ci DISPLAY_HILOGD(COMP_FWK, "Call the js fail method"); 351595d5899Sopenharmony_ci size_t argc = MAX_FAIL_ARGC; 352595d5899Sopenharmony_ci napi_value argv[argc]; 353595d5899Sopenharmony_ci result_.GetError(env_, argv, argc); 354595d5899Sopenharmony_ci CallFunction(failRef_, argc, argv); 355595d5899Sopenharmony_ci } 356595d5899Sopenharmony_ci DISPLAY_HILOGD(COMP_FWK, "Call the js complete method"); 357595d5899Sopenharmony_ci CallFunction(completeRef_, 0, nullptr); 358595d5899Sopenharmony_ci} 359595d5899Sopenharmony_ci 360595d5899Sopenharmony_cibool Brightness::CheckValueType(napi_value& value, napi_valuetype checkType) 361595d5899Sopenharmony_ci{ 362595d5899Sopenharmony_ci napi_valuetype valueType = napi_undefined; 363595d5899Sopenharmony_ci napi_typeof(env_, value, &valueType); 364595d5899Sopenharmony_ci if (valueType != checkType) { 365595d5899Sopenharmony_ci DISPLAY_HILOGD(COMP_FWK, "Check input parameter error"); 366595d5899Sopenharmony_ci return false; 367595d5899Sopenharmony_ci } 368595d5899Sopenharmony_ci return true; 369595d5899Sopenharmony_ci} 370595d5899Sopenharmony_ci 371595d5899Sopenharmony_cinapi_value Brightness::GetOptions(napi_value& options, const std::string& name, napi_valuetype checkType) 372595d5899Sopenharmony_ci{ 373595d5899Sopenharmony_ci napi_value property = nullptr; 374595d5899Sopenharmony_ci napi_status status = napi_get_named_property(env_, options, name.c_str(), &property); 375595d5899Sopenharmony_ci if (status != napi_ok) { 376595d5899Sopenharmony_ci DISPLAY_HILOGW(COMP_FWK, "Failed to get the %{public}s Options property", name.c_str()); 377595d5899Sopenharmony_ci return nullptr; 378595d5899Sopenharmony_ci } 379595d5899Sopenharmony_ci if (!CheckValueType(property, checkType)) { 380595d5899Sopenharmony_ci DISPLAY_HILOGW(COMP_FWK, "Get %{public}s Options property type mismatch", name.c_str()); 381595d5899Sopenharmony_ci return nullptr; 382595d5899Sopenharmony_ci } 383595d5899Sopenharmony_ci return property; 384595d5899Sopenharmony_ci} 385595d5899Sopenharmony_ci 386595d5899Sopenharmony_civoid Brightness::CallFunction(napi_ref& callbackRef, size_t argc, napi_value* response) 387595d5899Sopenharmony_ci{ 388595d5899Sopenharmony_ci RETURN_IF(callbackRef == nullptr); 389595d5899Sopenharmony_ci 390595d5899Sopenharmony_ci napi_value callResult = 0; 391595d5899Sopenharmony_ci napi_value callback = nullptr; 392595d5899Sopenharmony_ci napi_get_reference_value(env_, callbackRef, &callback); 393595d5899Sopenharmony_ci napi_status status = napi_call_function(env_, nullptr, callback, argc, response, &callResult); 394595d5899Sopenharmony_ci if (status != napi_ok) { 395595d5899Sopenharmony_ci DISPLAY_HILOGW(COMP_FWK, "Failed to call the callback function"); 396595d5899Sopenharmony_ci } 397595d5899Sopenharmony_ci ReleaseReference(callbackRef); 398595d5899Sopenharmony_ci} 399595d5899Sopenharmony_ci 400595d5899Sopenharmony_civoid Brightness::ReleaseReference(napi_ref& ref) 401595d5899Sopenharmony_ci{ 402595d5899Sopenharmony_ci if (ref != nullptr) { 403595d5899Sopenharmony_ci napi_delete_reference(env_, ref); 404595d5899Sopenharmony_ci ref = nullptr; 405595d5899Sopenharmony_ci } 406595d5899Sopenharmony_ci} 407595d5899Sopenharmony_ci} // namespace DisplayPowerMgr 408595d5899Sopenharmony_ci} // namespace OHOS 409