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 16 #include "accessibility_power_manager.h" 17 #include "running_lock.h" 18 #ifdef OHOS_BUILD_ENABLE_DISPLAY_MANAGER 19 #include "display_power_mgr_client.h" 20 #endif 21 #include "hilog_wrapper.h" 22 23 namespace OHOS { 24 namespace Accessibility { 25 namespace { 26 const std::string HOLD_LOCK_NAME = "AccessibilityWakeLock"; 27 } AccessibilityPowerManager()28AccessibilityPowerManager::AccessibilityPowerManager() 29 { 30 } 31 ~AccessibilityPowerManager()32AccessibilityPowerManager::~AccessibilityPowerManager() 33 { 34 } 35 DiscountBrightness(const float discount)36bool AccessibilityPowerManager::DiscountBrightness(const float discount) 37 { 38 #ifdef OHOS_BUILD_ENABLE_DISPLAY_MANAGER 39 auto& displayPowerMgrClient = DisplayPowerMgr::DisplayPowerMgrClient::GetInstance(); 40 if (!displayPowerMgrClient.DiscountBrightness(discount)) { 41 HILOG_ERROR("Failed to set brightness discount"); 42 return false; 43 } 44 #else 45 HILOG_DEBUG("not support display manager"); 46 #endif 47 return true; 48 } 49 RefreshActivity()50bool AccessibilityPowerManager::RefreshActivity() 51 { 52 HILOG_DEBUG(); 53 return PowerMgr::PowerMgrClient::GetInstance().RefreshActivity( 54 OHOS::PowerMgr::UserActivityType::USER_ACTIVITY_TYPE_TOUCH); 55 } 56 InitRunningLock()57bool AccessibilityPowerManager::InitRunningLock() 58 { 59 wakeLock_ = PowerMgr::PowerMgrClient::GetInstance().CreateRunningLock( 60 HOLD_LOCK_NAME, PowerMgr::RunningLockType::RUNNINGLOCK_SCREEN); 61 if (wakeLock_ == nullptr) { 62 HILOG_INFO("CreateRunningLock InitRunningLock failed."); 63 return false; 64 } 65 HILOG_INFO("CreateRunningLock InitRunningLock."); 66 return true; 67 } 68 GetWakeLockAbilities()69std::set<std::string> AccessibilityPowerManager::GetWakeLockAbilities() 70 { 71 std::lock_guard<ffrt::mutex> lock(powerWakeLockMutex_); 72 return wakeLockAbilities_; 73 } 74 HoldRunningLock(std::string & bundleName)75bool AccessibilityPowerManager::HoldRunningLock(std::string &bundleName) 76 { 77 HILOG_DEBUG(); 78 std::lock_guard<ffrt::mutex> lock(powerWakeLockMutex_); 79 if (wakeLock_ == nullptr) { 80 if (!InitRunningLock()) { 81 return false; 82 } 83 } 84 if (!wakeLockAbilities_.count(bundleName)) { 85 wakeLockAbilities_.insert(bundleName); 86 } 87 wakeLock_->Lock(); 88 HILOG_DEBUG("wakeLock_ Lock success."); 89 return true; 90 } 91 UnholdRunningLock(std::string & bundleName)92bool AccessibilityPowerManager::UnholdRunningLock(std::string &bundleName) 93 { 94 HILOG_DEBUG(); 95 std::lock_guard<ffrt::mutex> lock(powerWakeLockMutex_); 96 if (wakeLock_ == nullptr) { 97 if (!InitRunningLock()) { 98 return false; 99 } 100 } 101 102 if (bundleName == "") { 103 wakeLockAbilities_.clear(); 104 wakeLock_->UnLock(); 105 wakeLock_ = nullptr; 106 HILOG_DEBUG("wakeLock_ unLock success."); 107 } else { 108 if (!wakeLockAbilities_.count(bundleName)) { 109 HILOG_DEBUG("bundleName: %{public}s not in holdRunningLock status.", bundleName.c_str()); 110 return true; 111 } 112 wakeLockAbilities_.erase(bundleName); 113 if (wakeLockAbilities_.empty()) { 114 wakeLock_->UnLock(); 115 wakeLock_ = nullptr; 116 HILOG_DEBUG("bundleName: %{public}s erased, wakeLock_ unLock success.", bundleName.c_str()); 117 } 118 } 119 return true; 120 } 121 } // namespace Accessibility 122 } // namespace OHOS