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