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 <dlfcn.h> 17#include <string> 18#include "power_log.h" 19#include "power_utils.h" 20 21namespace OHOS { 22namespace PowerMgr { 23const std::string PowerUtils::GetReasonTypeString(StateChangeReason type) 24{ 25 switch (type) { 26 case StateChangeReason::STATE_CHANGE_REASON_INIT: 27 return std::string("INIT"); 28 case StateChangeReason::STATE_CHANGE_REASON_TIMEOUT: 29 return std::string("TIMEOUT"); 30 case StateChangeReason::STATE_CHANGE_REASON_RUNNING_LOCK: 31 return std::string("RUNNING_LOCK"); 32 case StateChangeReason::STATE_CHANGE_REASON_BATTERY: 33 return std::string("BATTERY"); 34 case StateChangeReason::STATE_CHANGE_REASON_THERMAL: 35 return std::string("THERMAL"); 36 case StateChangeReason::STATE_CHANGE_REASON_WORK: 37 return std::string("WORK"); 38 case StateChangeReason::STATE_CHANGE_REASON_SYSTEM: 39 return std::string("SYSTEM"); 40 case StateChangeReason::STATE_CHANGE_REASON_APPLICATION: 41 return std::string("APPLICATION"); 42 case StateChangeReason::STATE_CHANGE_REASON_SETTINGS: 43 return std::string("SETTINGS"); 44 case StateChangeReason::STATE_CHANGE_REASON_HARD_KEY: 45 return std::string("HARD_KEY"); 46 case StateChangeReason::STATE_CHANGE_REASON_TOUCH: 47 return std::string("TOUCH"); 48 case StateChangeReason::STATE_CHANGE_REASON_CABLE: 49 return std::string("CABLE"); 50 case StateChangeReason::STATE_CHANGE_REASON_SENSOR: 51 return std::string("SENSOR"); 52 case StateChangeReason::STATE_CHANGE_REASON_LID: 53 return std::string("LID"); 54 case StateChangeReason::STATE_CHANGE_REASON_CAMERA: 55 return std::string("CAMERA"); 56 case StateChangeReason::STATE_CHANGE_REASON_ACCESSIBILITY: 57 return std::string("ACCESS"); 58 case StateChangeReason::STATE_CHANGE_REASON_RESET: 59 return std::string("RESET"); 60 case StateChangeReason::STATE_CHANGE_REASON_POWER_KEY: 61 return std::string("POWER_KEY"); 62 case StateChangeReason::STATE_CHANGE_REASON_KEYBOARD: 63 return std::string("KEYBOARD"); 64 case StateChangeReason::STATE_CHANGE_REASON_MOUSE: 65 return std::string("MOUSE"); 66 case StateChangeReason::STATE_CHANGE_REASON_DOUBLE_CLICK: 67 return std::string("DOUBLE_CLICK"); 68 case StateChangeReason::STATE_CHANGE_REASON_PEN: 69 return std::string("PEN"); 70 case StateChangeReason::STATE_CHANGE_REASON_SWITCH: 71 return std::string("SWITCH"); 72 case StateChangeReason::STATE_CHANGE_REASON_PRE_BRIGHT: 73 return std::string("PRE_BRIGHT"); 74 case StateChangeReason::STATE_CHANGE_REASON_PRE_BRIGHT_AUTH_SUCCESS: 75 return std::string("PRE_BRIGHT_ATUH_SUCCESS"); 76 case StateChangeReason::STATE_CHANGE_REASON_PRE_BRIGHT_AUTH_FAIL_SCREEN_ON: 77 return std::string("PRE_BRIGHT_ATUH_FAIL_SCREEN_ON"); 78 case StateChangeReason::STATE_CHANGE_REASON_PRE_BRIGHT_AUTH_FAIL_SCREEN_OFF: 79 return std::string("PRE_BRIGHT_ATUH_FAIL_SCREEN_OFF"); 80 case StateChangeReason::STATE_CHANGE_REASON_AOD_SLIDING: 81 return std::string("AOD_SLIDING"); 82 case StateChangeReason::STATE_CHANGE_REASON_REMOTE: 83 return std::string("REMOTE"); 84 case StateChangeReason::STATE_CHANGE_REASON_REFRESH: 85 return std::string("REFRESH"); 86 case StateChangeReason::STATE_CHANGE_REASON_COORDINATION: 87 return std::string("COORDINATION_OVERRIDE"); 88 case StateChangeReason::STATE_CHANGE_REASON_PROXIMITY: 89 return std::string("PROXIMITY"); 90 case StateChangeReason::STATE_CHANGE_REASON_INCOMING_CALL: 91 return std::string("INCOMING_CALL"); 92 case StateChangeReason::STATE_CHANGE_REASON_SHELL: 93 return std::string("SHELL"); 94 case StateChangeReason::STATE_CHANGE_REASON_TIMEOUT_NO_SCREEN_LOCK: 95 return std::string("TIMEOUT_NO_SCREEN_LOCK"); 96 case StateChangeReason::STATE_CHANGE_REASON_PICKUP: 97 return std::string("PICKUP"); 98 case StateChangeReason::STATE_CHANGE_REASON_EXIT_SYSTEM_STR: 99 return std::string("EXIT_SYSTEM_STR"); 100 case StateChangeReason::STATE_CHANGE_REASON_UNKNOWN: 101 return std::string("UNKNOWN"); 102 default: 103 break; 104 } 105 return std::string("UNKNOWN"); 106} 107 108const std::string PowerUtils::GetPowerStateString(PowerState state) 109{ 110 switch (state) { 111 case PowerState::AWAKE: 112 return std::string("AWAKE"); 113 case PowerState::FREEZE: 114 return std::string("FREEZE"); 115 case PowerState::INACTIVE: 116 return std::string("INACTIVE"); 117 case PowerState::STAND_BY: 118 return std::string("STAND_BY"); 119 case PowerState::DOZE: 120 return std::string("DOZE"); 121 case PowerState::SLEEP: 122 return std::string("SLEEP"); 123 case PowerState::HIBERNATE: 124 return std::string("HIBERNATE"); 125 case PowerState::SHUTDOWN: 126 return std::string("SHUTDOWN"); 127 case PowerState::DIM: 128 return std::string("DIM"); 129 case PowerState::UNKNOWN: 130 return std::string("UNKNOWN"); 131 default: 132 break; 133 } 134 return std::string("UNKNOWN"); 135} 136 137const std::string PowerUtils::GetDisplayStateString(DisplayState state) 138{ 139 switch (state) { 140 case DisplayState::DISPLAY_OFF: 141 return std::string("DISPLAY_OFF"); 142 case DisplayState::DISPLAY_DIM: 143 return std::string("DISPLAY_DIM"); 144 case DisplayState::DISPLAY_ON: 145 return std::string("DISPLAY_ON"); 146 case DisplayState::DISPLAY_SUSPEND: 147 return std::string("DISPLAY_SUSPEND"); 148 case DisplayState::DISPLAY_UNKNOWN: 149 return std::string("DISPLAY_UNKNOWN"); 150 default: 151 break; 152 } 153 return std::string("DISPLAY_UNKNOWN"); 154} 155 156const std::string PowerUtils::GetRunningLockTypeString(RunningLockType type) 157{ 158 switch (type) { 159 case RunningLockType::RUNNINGLOCK_SCREEN: 160 return "SCREEN"; 161 case RunningLockType::RUNNINGLOCK_BACKGROUND: 162 return "BACKGROUND"; 163 case RunningLockType::RUNNINGLOCK_PROXIMITY_SCREEN_CONTROL: 164 return "PROXIMITY_SCREEN_CONTROL"; 165 case RunningLockType::RUNNINGLOCK_COORDINATION: 166 return "RUNNINGLOCK_COORDINATION"; 167 case RunningLockType::RUNNINGLOCK_BACKGROUND_PHONE: 168 return "BACKGROUND_PHONE"; 169 case RunningLockType::RUNNINGLOCK_BACKGROUND_NOTIFICATION: 170 return "BACKGROUND_NOTIFICATION"; 171 case RunningLockType::RUNNINGLOCK_BACKGROUND_AUDIO: 172 return "BACKGROUND_AUDIO"; 173 case RunningLockType::RUNNINGLOCK_BACKGROUND_SPORT: 174 return "BACKGROUND_SPORT"; 175 case RunningLockType::RUNNINGLOCK_BACKGROUND_NAVIGATION: 176 return "BACKGROUND_NAVIGATION"; 177 case RunningLockType::RUNNINGLOCK_BACKGROUND_TASK: 178 return "BACKGROUND_TASK"; 179 case RunningLockType::RUNNINGLOCK_BUTT: 180 return "BUTT"; 181 default: 182 break; 183 } 184 return "UNKNOWN"; 185} 186 187const std::string PowerUtils::JsonToSimpleStr(const std::string& json) 188{ 189 std::string str; 190 for (auto ch : json) { 191 if (ch != ' ' && ch != '\n') { 192 str += ch; 193 } 194 } 195 return str; 196} 197 198bool PowerUtils::IsForegroundApplication(const std::string& appName) 199{ 200 void* handler = dlopen("libpower_ability.z.so", RTLD_NOW); 201 if (handler == nullptr) { 202 POWER_HILOGE(FEATURE_UTIL, "dlopen libpower_ability.z.so failed, reason : %{public}s", dlerror()); 203 return false; 204 } 205 206 auto powerIsForegroundApplicationFunc = 207 reinterpret_cast<bool (*)(const std::string&)>(dlsym(handler, "PowerIsForegroundApplication")); 208 if (powerIsForegroundApplicationFunc == nullptr) { 209 POWER_HILOGE(FEATURE_UTIL, "find PowerIsForegroundApplication function failed, reason : %{public}s", dlerror()); 210#ifndef FUZZ_TEST 211 dlclose(handler); 212#endif 213 handler = nullptr; 214 return false; 215 } 216 bool isForeground = powerIsForegroundApplicationFunc(appName); 217#ifndef FUZZ_TEST 218 dlclose(handler); 219#endif 220 handler = nullptr; 221 return isForeground; 222} 223} // namespace PowerMgr 224} // namespace OHOS 225