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
21 namespace OHOS {
22 namespace PowerMgr {
GetReasonTypeString(StateChangeReason type)23 const 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_UNKNOWN:
99 return std::string("UNKNOWN");
100 default:
101 break;
102 }
103 return std::string("UNKNOWN");
104 }
105
GetPowerStateString(PowerState state)106 const std::string PowerUtils::GetPowerStateString(PowerState state)
107 {
108 switch (state) {
109 case PowerState::AWAKE:
110 return std::string("AWAKE");
111 case PowerState::FREEZE:
112 return std::string("FREEZE");
113 case PowerState::INACTIVE:
114 return std::string("INACTIVE");
115 case PowerState::STAND_BY:
116 return std::string("STAND_BY");
117 case PowerState::DOZE:
118 return std::string("DOZE");
119 case PowerState::SLEEP:
120 return std::string("SLEEP");
121 case PowerState::HIBERNATE:
122 return std::string("HIBERNATE");
123 case PowerState::SHUTDOWN:
124 return std::string("SHUTDOWN");
125 case PowerState::DIM:
126 return std::string("DIM");
127 case PowerState::UNKNOWN:
128 return std::string("UNKNOWN");
129 default:
130 break;
131 }
132 return std::string("UNKNOWN");
133 }
134
GetDisplayStateString(DisplayState state)135 const std::string PowerUtils::GetDisplayStateString(DisplayState state)
136 {
137 switch (state) {
138 case DisplayState::DISPLAY_OFF:
139 return std::string("DISPLAY_OFF");
140 case DisplayState::DISPLAY_DIM:
141 return std::string("DISPLAY_DIM");
142 case DisplayState::DISPLAY_ON:
143 return std::string("DISPLAY_ON");
144 case DisplayState::DISPLAY_SUSPEND:
145 return std::string("DISPLAY_SUSPEND");
146 case DisplayState::DISPLAY_UNKNOWN:
147 return std::string("DISPLAY_UNKNOWN");
148 default:
149 break;
150 }
151 return std::string("DISPLAY_UNKNOWN");
152 }
153
GetRunningLockTypeString(RunningLockType type)154 const std::string PowerUtils::GetRunningLockTypeString(RunningLockType type)
155 {
156 switch (type) {
157 case RunningLockType::RUNNINGLOCK_SCREEN:
158 return "SCREEN";
159 case RunningLockType::RUNNINGLOCK_BACKGROUND:
160 return "BACKGROUND";
161 case RunningLockType::RUNNINGLOCK_PROXIMITY_SCREEN_CONTROL:
162 return "PROXIMITY_SCREEN_CONTROL";
163 case RunningLockType::RUNNINGLOCK_COORDINATION:
164 return "RUNNINGLOCK_COORDINATION";
165 case RunningLockType::RUNNINGLOCK_BACKGROUND_PHONE:
166 return "BACKGROUND_PHONE";
167 case RunningLockType::RUNNINGLOCK_BACKGROUND_NOTIFICATION:
168 return "BACKGROUND_NOTIFICATION";
169 case RunningLockType::RUNNINGLOCK_BACKGROUND_AUDIO:
170 return "BACKGROUND_AUDIO";
171 case RunningLockType::RUNNINGLOCK_BACKGROUND_SPORT:
172 return "BACKGROUND_SPORT";
173 case RunningLockType::RUNNINGLOCK_BACKGROUND_NAVIGATION:
174 return "BACKGROUND_NAVIGATION";
175 case RunningLockType::RUNNINGLOCK_BACKGROUND_TASK:
176 return "BACKGROUND_TASK";
177 case RunningLockType::RUNNINGLOCK_BUTT:
178 return "BUTT";
179 default:
180 break;
181 }
182 return "UNKNOWN";
183 }
184
JsonToSimpleStr(const std::string & json)185 const std::string PowerUtils::JsonToSimpleStr(const std::string& json)
186 {
187 std::string str;
188 for (auto ch : json) {
189 if (ch != ' ' && ch != '\n') {
190 str += ch;
191 }
192 }
193 return str;
194 }
195
IsForegroundApplication(const std::string & appName)196 bool PowerUtils::IsForegroundApplication(const std::string& appName)
197 {
198 void* handler = dlopen("libpower_ability.z.so", RTLD_NOW);
199 if (handler == nullptr) {
200 POWER_HILOGE(FEATURE_UTIL, "dlopen libpower_ability.z.so failed, reason : %{public}s", dlerror());
201 return false;
202 }
203
204 auto powerIsForegroundApplicationFunc =
205 reinterpret_cast<bool (*)(const std::string&)>(dlsym(handler, "PowerIsForegroundApplication"));
206 if (powerIsForegroundApplicationFunc == nullptr) {
207 POWER_HILOGE(FEATURE_UTIL, "find PowerIsForegroundApplication function failed, reason : %{public}s", dlerror());
208 #ifndef FUZZ_TEST
209 dlclose(handler);
210 #endif
211 handler = nullptr;
212 return false;
213 }
214 bool isForeground = powerIsForegroundApplicationFunc(appName);
215 #ifndef FUZZ_TEST
216 dlclose(handler);
217 #endif
218 handler = nullptr;
219 return isForeground;
220 }
221 } // namespace PowerMgr
222 } // namespace OHOS
223