/* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.fuelgauge; import static com.android.settings.Utils.SYSTEMUI_PACKAGE_NAME; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Process; import android.util.ArrayMap; import android.util.ArraySet; import android.util.SparseIntArray; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.internal.util.ArrayUtils; import com.android.settings.fuelgauge.batteryusage.BatteryDiffData; import com.android.settings.fuelgauge.batteryusage.BatteryEvent; import com.android.settings.fuelgauge.batteryusage.DetectRequestSourceType; import com.android.settings.fuelgauge.batteryusage.PowerAnomalyEventList; import com.android.settingslib.fuelgauge.Estimate; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; /** Implementation of {@code PowerUsageFeatureProvider} */ public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider { private static final String PACKAGE_CALENDAR_PROVIDER = "com.android.providers.calendar"; private static final String PACKAGE_MEDIA_PROVIDER = "com.android.providers.media"; private static final String[] PACKAGES_SYSTEM = { PACKAGE_MEDIA_PROVIDER, PACKAGE_CALENDAR_PROVIDER, SYSTEMUI_PACKAGE_NAME }; protected PackageManager mPackageManager; protected Context mContext; public PowerUsageFeatureProviderImpl(Context context) { mPackageManager = context.getPackageManager(); mContext = context.getApplicationContext(); } @Override public boolean isTypeService(int uid) { return false; } @Override public boolean isTypeSystem(int uid, String[] packages) { // Classify all the sippers to type system if the range of uid is 0...FIRST_APPLICATION_UID if (uid >= Process.ROOT_UID && uid < Process.FIRST_APPLICATION_UID) { return true; } else if (packages != null) { for (final String packageName : packages) { if (ArrayUtils.contains(PACKAGES_SYSTEM, packageName)) { return true; } } } return false; } @Override public boolean isBatteryUsageEnabled() { return true; } @Override public boolean isBatteryTipsEnabled() { return false; } @Override public boolean isAppOptimizationModeLogged() { return false; } @Override public double getBatteryUsageListScreenOnTimeThresholdInMs() { return 0; } @Override public double getBatteryUsageListConsumePowerThreshold() { return 0; } @Override public List getSystemAppsAllowlist() { return new ArrayList<>(); } @Override public boolean isLocationSettingEnabled(String[] packages) { return false; } @Override public Intent getAdditionalBatteryInfoIntent() { return null; } @Override public Estimate getEnhancedBatteryPrediction(Context context) { return null; } @Override public SparseIntArray getEnhancedBatteryPredictionCurve(Context context, long zeroTime) { return null; } @Override public boolean isEnhancedBatteryPredictionEnabled(Context context) { return false; } @Override public String getEnhancedEstimateDebugString(String timeRemaining) { return null; } @Override public boolean isEstimateDebugEnabled() { return false; } @Override public String getOldEstimateDebugString(String timeRemaining) { return null; } @Override public boolean isSmartBatterySupported() { return mContext.getResources() .getBoolean(com.android.internal.R.bool.config_smart_battery_available); } @Override public boolean isChartGraphSlotsEnabled(Context context) { return false; } @Override public boolean isAdaptiveChargingSupported() { return false; } @Override public boolean isBatteryManagerSupported() { return true; } @Override public Intent getResumeChargeIntent(boolean isDockDefender) { return null; } @Override public String getFullChargeIntentAction() { return Intent.ACTION_BATTERY_LEVEL_CHANGED; } @Override public boolean isExtraDefend() { return false; } @Override public boolean delayHourlyJobWhenBooting() { return true; } @Override @Nullable public PowerAnomalyEventList detectPowerAnomaly( Context context, double displayDrain, DetectRequestSourceType detectRequestSourceType) { return null; } @Override public Set getOthersSystemComponentSet() { return new ArraySet<>(); } @Override public Set getOthersCustomComponentNameSet() { return new ArraySet<>(); } @Override public Set getHideSystemComponentSet() { return new ArraySet<>(); } @Override public Set getHideApplicationSet() { return new ArraySet<>(); } @Override public Set getHideBackgroundUsageTimeSet() { return new ArraySet<>(); } @Override public Set getIgnoreScreenOnTimeTaskRootSet() { return new ArraySet<>(); } @Override public String getBuildMetadata1(Context context) { return null; } @Override public String getBuildMetadata2(Context context) { return null; } @Override public boolean isValidToRestoreOptimizationMode(ArrayMap deviceInfoMap) { return false; } @Override public boolean isBatteryDefend(BatteryInfo info) { return info.isBatteryDefender && !isExtraDefend(); } @Override public boolean isBatteryUsageReattributeEnabled() { return false; } @Override public boolean processBatteryReattributeData( @NonNull Context context, @NonNull Map batteryDiffDataMap, @NonNull List batteryEventList, final boolean isFromPeriodJob) { return false; } }