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 com.android.internal.util.ArrayUtils; 30 import com.android.settings.fuelgauge.batteryusage.PowerAnomalyEventList; 31 import com.android.settingslib.fuelgauge.Estimate; 32 33 import java.util.ArrayList; 34 import java.util.List; 35 import java.util.Set; 36 37 /** Implementation of {@code PowerUsageFeatureProvider} */ 38 public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider { 39 40 private static final String PACKAGE_CALENDAR_PROVIDER = "com.android.providers.calendar"; 41 private static final String PACKAGE_MEDIA_PROVIDER = "com.android.providers.media"; 42 private static final String[] PACKAGES_SYSTEM = {PACKAGE_MEDIA_PROVIDER, 43 PACKAGE_CALENDAR_PROVIDER, SYSTEMUI_PACKAGE_NAME}; 44 45 protected PackageManager mPackageManager; 46 protected Context mContext; 47 PowerUsageFeatureProviderImpl(Context context)48 public PowerUsageFeatureProviderImpl(Context context) { 49 mPackageManager = context.getPackageManager(); 50 mContext = context.getApplicationContext(); 51 } 52 53 @Override isTypeService(int uid)54 public boolean isTypeService(int uid) { 55 return false; 56 } 57 58 @Override isTypeSystem(int uid, String[] packages)59 public boolean isTypeSystem(int uid, String[] packages) { 60 // Classify all the sippers to type system if the range of uid is 0...FIRST_APPLICATION_UID 61 if (uid >= Process.ROOT_UID && uid < Process.FIRST_APPLICATION_UID) { 62 return true; 63 } else if (packages != null) { 64 for (final String packageName : packages) { 65 if (ArrayUtils.contains(PACKAGES_SYSTEM, packageName)) { 66 return true; 67 } 68 } 69 } 70 return false; 71 } 72 73 @Override isBatteryUsageEnabled()74 public boolean isBatteryUsageEnabled() { 75 return true; 76 } 77 78 @Override isBatteryTipsEnabled()79 public boolean isBatteryTipsEnabled() { 80 return false; 81 } 82 83 @Override getBatteryUsageListScreenOnTimeThresholdInMs()84 public double getBatteryUsageListScreenOnTimeThresholdInMs() { 85 return 0; 86 } 87 88 @Override getBatteryUsageListConsumePowerThreshold()89 public double getBatteryUsageListConsumePowerThreshold() { 90 return 0; 91 } 92 93 @Override getSystemAppsAllowlist()94 public List<String> getSystemAppsAllowlist() { 95 return new ArrayList<>(); 96 } 97 98 @Override isLocationSettingEnabled(String[] packages)99 public boolean isLocationSettingEnabled(String[] packages) { 100 return false; 101 } 102 103 @Override getAdditionalBatteryInfoIntent()104 public Intent getAdditionalBatteryInfoIntent() { 105 return null; 106 } 107 108 @Override getEnhancedBatteryPrediction(Context context)109 public Estimate getEnhancedBatteryPrediction(Context context) { 110 return null; 111 } 112 113 @Override getEnhancedBatteryPredictionCurve(Context context, long zeroTime)114 public SparseIntArray getEnhancedBatteryPredictionCurve(Context context, long zeroTime) { 115 return null; 116 } 117 118 @Override isEnhancedBatteryPredictionEnabled(Context context)119 public boolean isEnhancedBatteryPredictionEnabled(Context context) { 120 return false; 121 } 122 123 @Override getEnhancedEstimateDebugString(String timeRemaining)124 public String getEnhancedEstimateDebugString(String timeRemaining) { 125 return null; 126 } 127 128 @Override isEstimateDebugEnabled()129 public boolean isEstimateDebugEnabled() { 130 return false; 131 } 132 133 @Override getOldEstimateDebugString(String timeRemaining)134 public String getOldEstimateDebugString(String timeRemaining) { 135 return null; 136 } 137 138 @Override isSmartBatterySupported()139 public boolean isSmartBatterySupported() { 140 return mContext.getResources().getBoolean( 141 com.android.internal.R.bool.config_smart_battery_available); 142 } 143 144 @Override isChartGraphSlotsEnabled(Context context)145 public boolean isChartGraphSlotsEnabled(Context context) { 146 return false; 147 } 148 149 @Override getResumeChargeIntent(boolean isDockDefender)150 public Intent getResumeChargeIntent(boolean isDockDefender) { 151 return null; 152 } 153 154 @Override getFullChargeIntentAction()155 public String getFullChargeIntentAction() { 156 return Intent.ACTION_BATTERY_LEVEL_CHANGED; 157 } 158 159 @Override isExtraDefend()160 public boolean isExtraDefend() { 161 return false; 162 } 163 164 @Override delayHourlyJobWhenBooting()165 public boolean delayHourlyJobWhenBooting() { 166 return true; 167 } 168 169 @Override insertSettingsData(Context context, double displayDrain)170 public void insertSettingsData(Context context, double displayDrain) {} 171 172 @Override detectSettingsAnomaly(Context context, double displayDrain)173 public PowerAnomalyEventList detectSettingsAnomaly(Context context, double displayDrain) { 174 return null; 175 } 176 177 @Override getOthersSystemComponentSet()178 public Set<Integer> getOthersSystemComponentSet() { 179 return new ArraySet<>(); 180 } 181 182 @Override getOthersCustomComponentNameSet()183 public Set<String> getOthersCustomComponentNameSet() { 184 return new ArraySet<>(); 185 } 186 187 @Override getHideSystemComponentSet()188 public Set<Integer> getHideSystemComponentSet() { 189 return new ArraySet<>(); 190 } 191 192 @Override getHideApplicationSet()193 public Set<String> getHideApplicationSet() { 194 return new ArraySet<>(); 195 } 196 197 @Override getHideBackgroundUsageTimeSet()198 public Set<String> getHideBackgroundUsageTimeSet() { 199 return new ArraySet<>(); 200 } 201 202 @Override getIgnoreScreenOnTimeTaskRootSet()203 public Set<String> getIgnoreScreenOnTimeTaskRootSet() { 204 return new ArraySet<>(); 205 } 206 207 @Override getBuildMetadata1(Context context)208 public String getBuildMetadata1(Context context) { 209 return null; 210 } 211 212 @Override getBuildMetadata2(Context context)213 public String getBuildMetadata2(Context context) { 214 return null; 215 } 216 217 @Override isValidToRestoreOptimizationMode(ArrayMap<String, String> deviceInfoMap)218 public boolean isValidToRestoreOptimizationMode(ArrayMap<String, String> deviceInfoMap) { 219 return false; 220 } 221 } 222