• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.settings.fuelgauge;
18 
19 import static com.android.settings.Utils.SYSTEMUI_PACKAGE_NAME;
20 
21 import android.content.Context;
22 import android.content.Intent;
23 import android.content.pm.PackageManager;
24 import android.os.Process;
25 import android.util.ArrayMap;
26 import android.util.ArraySet;
27 import android.util.SparseIntArray;
28 
29 import androidx.annotation.NonNull;
30 import androidx.annotation.Nullable;
31 
32 import com.android.internal.util.ArrayUtils;
33 import com.android.settings.fuelgauge.batteryusage.BatteryDiffData;
34 import com.android.settings.fuelgauge.batteryusage.BatteryEvent;
35 import com.android.settings.fuelgauge.batteryusage.DetectRequestSourceType;
36 import com.android.settings.fuelgauge.batteryusage.PowerAnomalyEventList;
37 import com.android.settingslib.fuelgauge.Estimate;
38 
39 import java.util.ArrayList;
40 import java.util.List;
41 import java.util.Map;
42 import java.util.Set;
43 
44 /** Implementation of {@code PowerUsageFeatureProvider} */
45 public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider {
46 
47     private static final String PACKAGE_CALENDAR_PROVIDER = "com.android.providers.calendar";
48     private static final String PACKAGE_MEDIA_PROVIDER = "com.android.providers.media";
49     private static final String[] PACKAGES_SYSTEM = {
50         PACKAGE_MEDIA_PROVIDER, PACKAGE_CALENDAR_PROVIDER, SYSTEMUI_PACKAGE_NAME
51     };
52 
53     protected PackageManager mPackageManager;
54     protected Context mContext;
55 
PowerUsageFeatureProviderImpl(Context context)56     public PowerUsageFeatureProviderImpl(Context context) {
57         mPackageManager = context.getPackageManager();
58         mContext = context.getApplicationContext();
59     }
60 
61     @Override
isTypeService(int uid)62     public boolean isTypeService(int uid) {
63         return false;
64     }
65 
66     @Override
isTypeSystem(int uid, String[] packages)67     public boolean isTypeSystem(int uid, String[] packages) {
68         // Classify all the sippers to type system if the range of uid is 0...FIRST_APPLICATION_UID
69         if (uid >= Process.ROOT_UID && uid < Process.FIRST_APPLICATION_UID) {
70             return true;
71         } else if (packages != null) {
72             for (final String packageName : packages) {
73                 if (ArrayUtils.contains(PACKAGES_SYSTEM, packageName)) {
74                     return true;
75                 }
76             }
77         }
78         return false;
79     }
80 
81     @Override
isBatteryUsageEnabled()82     public boolean isBatteryUsageEnabled() {
83         return true;
84     }
85 
86     @Override
isBatteryTipsEnabled()87     public boolean isBatteryTipsEnabled() {
88         return false;
89     }
90 
91     @Override
isRestrictedModeOverwriteEnabled()92     public boolean isRestrictedModeOverwriteEnabled() {
93         return false;
94     }
95 
96     @Override
isForceExpireAppOptimizationModeEnabled()97     public boolean isForceExpireAppOptimizationModeEnabled() {
98         return false;
99     }
100 
101     @Override
isAppOptimizationModeLogged()102     public boolean isAppOptimizationModeLogged() {
103         return false;
104     }
105 
106     @Override
getBatteryUsageListScreenOnTimeThresholdInMs()107     public double getBatteryUsageListScreenOnTimeThresholdInMs() {
108         return 0;
109     }
110 
111     @Override
getBatteryUsageListConsumePowerThreshold()112     public double getBatteryUsageListConsumePowerThreshold() {
113         return 0;
114     }
115 
116     @Override
getSystemAppsAllowlist()117     public List<String> getSystemAppsAllowlist() {
118         return new ArrayList<>();
119     }
120 
121     @Override
getDataRetentionDays()122     public int getDataRetentionDays() {
123         return 9;
124     }
125 
126     @Override
isLocationSettingEnabled(String[] packages)127     public boolean isLocationSettingEnabled(String[] packages) {
128         return false;
129     }
130 
131     @Override
getAdditionalBatteryInfoIntent()132     public Intent getAdditionalBatteryInfoIntent() {
133         return null;
134     }
135 
136     @Override
getEnhancedBatteryPrediction(Context context)137     public Estimate getEnhancedBatteryPrediction(Context context) {
138         return null;
139     }
140 
141     @Override
getEnhancedBatteryPredictionCurve(Context context, long zeroTime)142     public SparseIntArray getEnhancedBatteryPredictionCurve(Context context, long zeroTime) {
143         return null;
144     }
145 
146     @Override
isEnhancedBatteryPredictionEnabled(Context context)147     public boolean isEnhancedBatteryPredictionEnabled(Context context) {
148         return false;
149     }
150 
151     @Override
getEnhancedEstimateDebugString(String timeRemaining)152     public String getEnhancedEstimateDebugString(String timeRemaining) {
153         return null;
154     }
155 
156     @Override
isEstimateDebugEnabled()157     public boolean isEstimateDebugEnabled() {
158         return false;
159     }
160 
161     @Override
getOldEstimateDebugString(String timeRemaining)162     public String getOldEstimateDebugString(String timeRemaining) {
163         return null;
164     }
165 
166     @Override
isSmartBatterySupported()167     public boolean isSmartBatterySupported() {
168         return mContext.getResources()
169                 .getBoolean(com.android.internal.R.bool.config_smart_battery_available);
170     }
171 
172     @Override
isChartGraphSlotsEnabled(Context context)173     public boolean isChartGraphSlotsEnabled(Context context) {
174         return false;
175     }
176 
177     @Override
isAdaptiveChargingSupported()178     public boolean isAdaptiveChargingSupported() {
179         return false;
180     }
181 
182     @Override
isBatteryManagerSupported()183     public boolean isBatteryManagerSupported() {
184         return true;
185     }
186 
187     @Override
getResumeChargeIntent(boolean isDockDefender)188     public Intent getResumeChargeIntent(boolean isDockDefender) {
189         return null;
190     }
191 
192     @Override
getFullChargeIntentAction()193     public String getFullChargeIntentAction() {
194         return Intent.ACTION_BATTERY_LEVEL_CHANGED;
195     }
196 
197     @Override
isExtraDefend()198     public boolean isExtraDefend() {
199         return false;
200     }
201 
202     @Override
delayHourlyJobWhenBooting()203     public boolean delayHourlyJobWhenBooting() {
204         return true;
205     }
206 
207     @Override
208     @Nullable
detectPowerAnomaly( Context context, double displayDrain, DetectRequestSourceType detectRequestSourceType)209     public PowerAnomalyEventList detectPowerAnomaly(
210             Context context, double displayDrain, DetectRequestSourceType detectRequestSourceType) {
211         return null;
212     }
213 
214     @Override
getOthersSystemComponentSet()215     public Set<Integer> getOthersSystemComponentSet() {
216         return new ArraySet<>();
217     }
218 
219     @Override
getOthersCustomComponentNameSet()220     public Set<String> getOthersCustomComponentNameSet() {
221         return new ArraySet<>();
222     }
223 
224     @Override
getHideSystemComponentSet()225     public Set<Integer> getHideSystemComponentSet() {
226         return new ArraySet<>();
227     }
228 
229     @Override
getHideApplicationSet()230     public Set<String> getHideApplicationSet() {
231         return new ArraySet<>();
232     }
233 
234     @Override
getHideBackgroundUsageTimeSet()235     public Set<String> getHideBackgroundUsageTimeSet() {
236         return new ArraySet<>();
237     }
238 
239     @Override
getIgnoreScreenOnTimeTaskRootSet()240     public Set<String> getIgnoreScreenOnTimeTaskRootSet() {
241         return new ArraySet<>();
242     }
243 
244     @Override
getBuildMetadata1(Context context)245     public String getBuildMetadata1(Context context) {
246         return null;
247     }
248 
249     @Override
getBuildMetadata2(Context context)250     public String getBuildMetadata2(Context context) {
251         return null;
252     }
253 
254     @Override
isValidToRestoreOptimizationMode(ArrayMap<String, String> deviceInfoMap)255     public boolean isValidToRestoreOptimizationMode(ArrayMap<String, String> deviceInfoMap) {
256         return false;
257     }
258 
259     @Override
isBatteryDefend(BatteryInfo info)260     public boolean isBatteryDefend(BatteryInfo info) {
261         return info.isLongLife && !isExtraDefend();
262     }
263 
264     @Override
isBatteryUsageReattributeEnabled()265     public boolean isBatteryUsageReattributeEnabled() {
266         return false;
267     }
268 
269     @Override
processBatteryReattributeData( @onNull Context context, @NonNull Map<Long, BatteryDiffData> batteryDiffDataMap, @NonNull List<BatteryEvent> batteryEventList, final boolean isFromPeriodJob)270     public boolean processBatteryReattributeData(
271             @NonNull Context context,
272             @NonNull Map<Long, BatteryDiffData> batteryDiffDataMap,
273             @NonNull List<BatteryEvent> batteryEventList,
274             final boolean isFromPeriodJob) {
275         return false;
276     }
277 }
278