Remove the old battery page
This CL removes PowerUsageSummaryLegacy and PowerUsageAdvancedLegacy
and their related layouts and strigns.
Also remove the isBatteryV2Enabled method in feature provider.
Change-Id: I1ec30f713d733ed24335a3e698fb515751232948
Fixes: 76027338
Test: robo test still pass
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 836fa75..e3fcd5c 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -158,7 +158,6 @@
public static class NetworkDashboardActivity extends SettingsActivity {}
public static class ConnectedDeviceDashboardActivity extends SettingsActivity {}
public static class PowerUsageSummaryActivity extends SettingsActivity { /* empty */ }
- public static class PowerUsageSummaryLegacyActivity extends SettingsActivity { /* empty */ }
public static class AppAndNotificationDashboardActivity extends SettingsActivity {}
public static class StorageDashboardActivity extends SettingsActivity {}
public static class AccountDashboardActivity extends SettingsActivity {}
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 16e1a7b..970692d 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -655,17 +655,9 @@
Utils.showSimCardTile(this), isAdmin)
|| somethingChanged;
- final boolean isBatterySettingsV2Enabled = featureFactory
- .getPowerUsageFeatureProvider(this)
- .isBatteryV2Enabled();
- // Enable new battery page if v2 enabled
somethingChanged = setTileEnabled(new ComponentName(packageName,
Settings.PowerUsageSummaryActivity.class.getName()),
- mBatteryPresent && isBatterySettingsV2Enabled, isAdmin) || somethingChanged;
- // Enable legacy battery page if v2 disabled
- somethingChanged = setTileEnabled(new ComponentName(packageName,
- Settings.PowerUsageSummaryLegacyActivity.class.getName()),
- mBatteryPresent && !isBatterySettingsV2Enabled, isAdmin) || somethingChanged;
+ mBatteryPresent, isAdmin) || somethingChanged;
final boolean isDataUsageSettingsV2Enabled =
FeatureFlagUtils.isEnabled(this, FeatureFlags.DATA_USAGE_SETTINGS_V2);
diff --git a/src/com/android/settings/core/FeatureFlags.java b/src/com/android/settings/core/FeatureFlags.java
index a5edf3c..a6e961b 100644
--- a/src/com/android/settings/core/FeatureFlags.java
+++ b/src/com/android/settings/core/FeatureFlags.java
@@ -20,7 +20,6 @@
* This class keeps track of all feature flags in Settings.
*/
public class FeatureFlags {
- public static final String BATTERY_SETTINGS_V2 = "settings_battery_v2";
public static final String BATTERY_DISPLAY_APP_LIST = "settings_battery_display_app_list";
public static final String ZONE_PICKER_V2 = "settings_zone_picker_v2";
public static final String ABOUT_PHONE_V2 = "settings_about_phone_v2";
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index dbe8fba..bbba8ea 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -76,7 +76,6 @@
import com.android.settings.enterprise.EnterprisePrivacySettings;
import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
import com.android.settings.fuelgauge.PowerUsageSummary;
-import com.android.settings.fuelgauge.PowerUsageSummaryLegacy;
import com.android.settings.fuelgauge.batterysaver.BatterySaverSettings;
import com.android.settings.gestures.AssistGestureSettings;
import com.android.settings.gestures.DoubleTapPowerSettings;
@@ -184,7 +183,6 @@
AndroidBeam.class.getName(),
WifiDisplaySettings.class.getName(),
PowerUsageSummary.class.getName(),
- PowerUsageSummaryLegacy.class.getName(),
AccountSyncSettings.class.getName(),
AssistGestureSettings.class.getName(),
SwipeToNotificationSettings.class.getName(),
@@ -270,7 +268,6 @@
Settings.SoundSettingsActivity.class.getName(),
Settings.StorageDashboardActivity.class.getName(),
Settings.PowerUsageSummaryActivity.class.getName(),
- Settings.PowerUsageSummaryLegacyActivity.class.getName(),
Settings.AccountDashboardActivity.class.getName(),
Settings.SecurityDashboardActivity.class.getName(),
Settings.AccessibilitySettingsActivity.class.getName(),
diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
index 9666a6c..3ee5db1 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -450,8 +450,6 @@
controllers.add(new ShortcutManagerThrottlingPreferenceController(context));
controllers.add(new EnableGnssRawMeasFullTrackingPreferenceController(context));
controllers.add(new DefaultLaunchPreferenceController(context, "running_apps"));
- controllers.add(
- new DefaultLaunchPreferenceController(context, "android_o_battery_settings"));
controllers.add(new DefaultLaunchPreferenceController(context, "demo_mode"));
controllers.add(new DefaultLaunchPreferenceController(context, "quick_settings_tiles"));
controllers.add(new DefaultLaunchPreferenceController(context, "feature_flags_dashboard"));
diff --git a/src/com/android/settings/fuelgauge/PowerUsageAdvancedLegacy.java b/src/com/android/settings/fuelgauge/PowerUsageAdvancedLegacy.java
deleted file mode 100644
index a4e3fef..0000000
--- a/src/com/android/settings/fuelgauge/PowerUsageAdvancedLegacy.java
+++ /dev/null
@@ -1,485 +0,0 @@
-/*
- * Copyright (C) 2017 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 android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.PackageManager;
-import android.content.pm.UserInfo;
-import android.os.BatteryManager;
-import android.os.BatteryStats;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.os.UserManager;
-import android.provider.SearchIndexableResource;
-import android.support.annotation.ColorInt;
-import android.support.annotation.IntDef;
-import android.support.annotation.NonNull;
-import android.support.annotation.StringRes;
-import android.support.annotation.VisibleForTesting;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceGroup;
-import android.text.TextUtils;
-
-import com.android.internal.logging.nano.MetricsProto;
-import com.android.internal.os.BatterySipper;
-import com.android.internal.os.BatterySipper.DrainType;
-import com.android.internal.os.BatteryStatsHelper;
-import com.android.settings.R;
-import com.android.settings.Utils;
-import com.android.settings.datausage.DataUsageUtils;
-import com.android.settings.fuelgauge.PowerUsageAdvancedLegacy.PowerUsageData.UsageType;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settingslib.core.AbstractPreferenceController;
-
-import com.android.settingslib.utils.StringUtil;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class PowerUsageAdvancedLegacy extends PowerUsageBase {
- private static final String TAG = "AdvancedBatteryUsage";
- private static final String KEY_BATTERY_GRAPH = "battery_graph_legacy";
- private static final String KEY_BATTERY_USAGE_LIST = "battery_usage_list_legacy";
- private static final int STATUS_TYPE = BatteryStats.STATS_SINCE_CHARGED;
-
- @VisibleForTesting
- final int[] mUsageTypes = {
- UsageType.WIFI,
- UsageType.CELL,
- UsageType.SYSTEM,
- UsageType.BLUETOOTH,
- UsageType.USER,
- UsageType.IDLE,
- UsageType.APP,
- UsageType.UNACCOUNTED,
- UsageType.OVERCOUNTED};
-
- @VisibleForTesting BatteryHistoryPreference mHistPref;
- @VisibleForTesting PreferenceGroup mUsageListGroup;
- private BatteryUtils mBatteryUtils;
- private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
- private PackageManager mPackageManager;
- private UserManager mUserManager;
- private Map<Integer, PowerUsageData> mBatteryDataMap;
-
- Handler mHandler = new Handler() {
-
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case BatteryEntry.MSG_UPDATE_NAME_ICON:
- final int dischargeAmount = mStatsHelper.getStats().getDischargeAmount(
- STATUS_TYPE);
- final double totalPower = mStatsHelper.getTotalPower();
- final BatteryEntry entry = (BatteryEntry) msg.obj;
- final int usageType = extractUsageType(entry.sipper);
-
- PowerUsageData usageData = mBatteryDataMap.get(usageType);
- Preference pref = findPreference(String.valueOf(usageType));
- if (pref != null && usageData != null) {
- updateUsageDataSummary(usageData, totalPower, dischargeAmount);
- pref.setSummary(usageData.summary);
- }
- break;
- case BatteryEntry.MSG_REPORT_FULLY_DRAWN:
- Activity activity = getActivity();
- if (activity != null) {
- activity.reportFullyDrawn();
- }
- break;
- }
- super.handleMessage(msg);
- }
- };
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- mHistPref = (BatteryHistoryPreference) findPreference(KEY_BATTERY_GRAPH);
- mUsageListGroup = (PreferenceGroup) findPreference(KEY_BATTERY_USAGE_LIST);
-
- final Context context = getContext();
- mPowerUsageFeatureProvider = FeatureFactory.getFactory(context)
- .getPowerUsageFeatureProvider(context);
- mPackageManager = context.getPackageManager();
- mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
- mBatteryUtils = BatteryUtils.getInstance(context);
-
- // init the summary so other preferences won't have unnecessary move
- updateHistPrefSummary(context);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- }
-
- @Override
- public void onPause() {
- BatteryEntry.stopRequestQueue();
- mHandler.removeMessages(BatteryEntry.MSG_UPDATE_NAME_ICON);
- super.onPause();
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- if (getActivity().isChangingConfigurations()) {
- BatteryEntry.clearUidCache();
- }
- }
-
- @Override
- public int getMetricsCategory() {
- return MetricsProto.MetricsEvent.FUELGAUGE_BATTERY_HISTORY_DETAIL;
- }
-
- @Override
- protected String getLogTag() {
- return TAG;
- }
-
- @Override
- protected int getPreferenceScreenResId() {
- return R.xml.power_usage_advanced_legacy;
- }
-
- @Override
- protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
- return null;
- }
-
- @Override
- protected void refreshUi() {
- final long startTime = System.currentTimeMillis();
- final Context context = getContext();
- if (context == null) {
- return;
- }
- updatePreference(mHistPref);
- refreshPowerUsageDataList(mStatsHelper, mUsageListGroup);
- updateHistPrefSummary(context);
-
- BatteryEntry.startRequestQueue();
- BatteryUtils.logRuntime(TAG, "refreshUI", startTime);
- }
-
- private void updateHistPrefSummary(Context context) {
- Intent batteryIntent =
- context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
- final boolean plugged = batteryIntent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) != 0;
-
- if (mPowerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(context) && !plugged) {
- mHistPref.setBottomSummary(
- mPowerUsageFeatureProvider.getAdvancedUsageScreenInfoString());
- } else {
- mHistPref.hideBottomSummary();
- }
- }
-
- @VisibleForTesting
- void refreshPowerUsageDataList(BatteryStatsHelper statsHelper,
- PreferenceGroup preferenceGroup) {
- List<PowerUsageData> dataList = parsePowerUsageData(statsHelper);
- preferenceGroup.removeAll();
- for (int i = 0, size = dataList.size(); i < size; i++) {
- final PowerUsageData batteryData = dataList.get(i);
- if (shouldHideCategory(batteryData)) {
- continue;
- }
- final PowerGaugePreference pref = new PowerGaugePreference(getPrefContext());
-
- pref.setKey(String.valueOf(batteryData.usageType));
- pref.setTitle(batteryData.titleResId);
- pref.setSummary(batteryData.summary);
- pref.setPercent(batteryData.percentage);
- pref.setSelectable(false);
- preferenceGroup.addPreference(pref);
- }
- }
-
- @VisibleForTesting
- @UsageType
- int extractUsageType(BatterySipper sipper) {
- final DrainType drainType = sipper.drainType;
- final int uid = sipper.getUid();
-
- if (drainType == DrainType.WIFI) {
- return UsageType.WIFI;
- } else if (drainType == DrainType.BLUETOOTH) {
- return UsageType.BLUETOOTH;
- } else if (drainType == DrainType.IDLE) {
- return UsageType.IDLE;
- } else if (drainType == DrainType.USER) {
- return UsageType.USER;
- } else if (drainType == DrainType.CELL) {
- return UsageType.CELL;
- } else if (drainType == DrainType.UNACCOUNTED) {
- return UsageType.UNACCOUNTED;
- } else if (drainType == DrainType.OVERCOUNTED) {
- return UsageType.OVERCOUNTED;
- } else if (mPowerUsageFeatureProvider.isTypeSystem(sipper)
- || mPowerUsageFeatureProvider.isTypeService(sipper)) {
- return UsageType.SYSTEM;
- } else {
- return UsageType.APP;
- }
- }
-
- @VisibleForTesting
- boolean shouldHideCategory(PowerUsageData powerUsageData) {
- return powerUsageData.usageType == UsageType.UNACCOUNTED
- || powerUsageData.usageType == UsageType.OVERCOUNTED
- || (powerUsageData.usageType == UsageType.USER && isSingleNormalUser())
- || (powerUsageData.usageType == UsageType.CELL
- && !DataUsageUtils.hasMobileData(getContext()));
- }
-
- @VisibleForTesting
- boolean shouldShowBatterySipper(BatterySipper batterySipper) {
- return batterySipper.drainType != DrainType.SCREEN;
- }
-
- @VisibleForTesting
- List<PowerUsageData> parsePowerUsageData(BatteryStatsHelper statusHelper) {
- final List<BatterySipper> batterySippers = statusHelper.getUsageList();
- final Map<Integer, PowerUsageData> batteryDataMap = new HashMap<>();
-
- for (final @UsageType Integer type : mUsageTypes) {
- batteryDataMap.put(type, new PowerUsageData(type));
- }
-
- // Accumulate power usage based on usage type
- for (final BatterySipper sipper : batterySippers) {
- sipper.mPackages = mPackageManager.getPackagesForUid(sipper.getUid());
- final PowerUsageData usageData = batteryDataMap.get(extractUsageType(sipper));
- usageData.totalPowerMah += sipper.totalPowerMah;
- if (sipper.drainType == DrainType.APP && sipper.usageTimeMs != 0) {
- sipper.usageTimeMs = mBatteryUtils.getProcessTimeMs(
- BatteryUtils.StatusType.FOREGROUND, sipper.uidObj, STATUS_TYPE);
- }
- usageData.totalUsageTimeMs += sipper.usageTimeMs;
- if (shouldShowBatterySipper(sipper)) {
- usageData.usageList.add(sipper);
- }
- }
-
- final List<PowerUsageData> batteryDataList = new ArrayList<>(batteryDataMap.values());
- final int dischargeAmount = statusHelper.getStats().getDischargeAmount(STATUS_TYPE);
- final double totalPower = statusHelper.getTotalPower();
- final double hiddenPower = calculateHiddenPower(batteryDataList);
- for (final PowerUsageData usageData : batteryDataList) {
- usageData.percentage = mBatteryUtils.calculateBatteryPercent(usageData.totalPowerMah,
- totalPower, hiddenPower, dischargeAmount);
- updateUsageDataSummary(usageData, totalPower, dischargeAmount);
- }
-
- Collections.sort(batteryDataList);
-
- mBatteryDataMap = batteryDataMap;
- return batteryDataList;
- }
-
- @VisibleForTesting
- double calculateHiddenPower(List<PowerUsageData> batteryDataList) {
- for (final PowerUsageData usageData : batteryDataList) {
- if (usageData.usageType == UsageType.UNACCOUNTED) {
- return usageData.totalPowerMah;
- }
- }
-
- return 0;
- }
-
- @VisibleForTesting
- void updateUsageDataSummary(PowerUsageData usageData, double totalPower, int dischargeAmount) {
- if (shouldHideSummary(usageData)) {
- return;
- }
- if (usageData.usageList.size() <= 1) {
- CharSequence timeSequence = StringUtil.formatElapsedTime(getContext(),
- usageData.totalUsageTimeMs, false);
- usageData.summary = usageData.usageType == UsageType.IDLE ? timeSequence
- : TextUtils.expandTemplate(getText(R.string.battery_used_for), timeSequence);
- } else {
- BatterySipper sipper = findBatterySipperWithMaxBatteryUsage(usageData.usageList);
- BatteryEntry batteryEntry = new BatteryEntry(getContext(), mHandler, mUserManager,
- sipper);
- final double percentage = (sipper.totalPowerMah / totalPower) * dischargeAmount;
- usageData.summary = getString(R.string.battery_used_by,
- Utils.formatPercentage(percentage, true), batteryEntry.name);
- }
- }
-
- @VisibleForTesting
- boolean shouldHideSummary(PowerUsageData powerUsageData) {
- @UsageType final int usageType = powerUsageData.usageType;
-
- return usageType == UsageType.CELL
- || usageType == UsageType.BLUETOOTH
- || usageType == UsageType.WIFI
- || usageType == UsageType.APP
- || usageType == UsageType.SYSTEM;
- }
-
- @VisibleForTesting
- BatterySipper findBatterySipperWithMaxBatteryUsage(List<BatterySipper> usageList) {
- BatterySipper sipper = usageList.get(0);
- for (int i = 1, size = usageList.size(); i < size; i++) {
- final BatterySipper comparedSipper = usageList.get(i);
- if (comparedSipper.totalPowerMah > sipper.totalPowerMah) {
- sipper = comparedSipper;
- }
- }
-
- return sipper;
- }
-
- @VisibleForTesting
- void setPackageManager(PackageManager packageManager) {
- mPackageManager = packageManager;
- }
-
- @VisibleForTesting
- void setPowerUsageFeatureProvider(PowerUsageFeatureProvider provider) {
- mPowerUsageFeatureProvider = provider;
- }
- @VisibleForTesting
- void setUserManager(UserManager userManager) {
- mUserManager = userManager;
- }
- @VisibleForTesting
- void setBatteryUtils(BatteryUtils batteryUtils) {
- mBatteryUtils = batteryUtils;
- }
-
- @VisibleForTesting
- boolean isSingleNormalUser() {
- int count = 0;
- for (UserInfo userInfo : mUserManager.getUsers()) {
- if (userInfo.isEnabled() && !userInfo.isManagedProfile()) {
- count++;
- }
- }
-
- return count == 1;
- }
-
- /**
- * Class that contains data used in {@link PowerGaugePreference}.
- */
- @VisibleForTesting
- static class PowerUsageData implements Comparable<PowerUsageData> {
-
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({UsageType.APP,
- UsageType.WIFI,
- UsageType.CELL,
- UsageType.SYSTEM,
- UsageType.BLUETOOTH,
- UsageType.USER,
- UsageType.IDLE,
- UsageType.UNACCOUNTED,
- UsageType.OVERCOUNTED})
- public @interface UsageType {
- int APP = 0;
- int WIFI = 1;
- int CELL = 2;
- int SYSTEM = 3;
- int BLUETOOTH = 4;
- int USER = 5;
- int IDLE = 6;
- int UNACCOUNTED = 7;
- int OVERCOUNTED = 8;
- }
-
- @StringRes
- public int titleResId;
- public CharSequence summary;
- public double percentage;
- public double totalPowerMah;
- public long totalUsageTimeMs;
- @ColorInt
- public int iconColor;
- @UsageType
- public int usageType;
- public List<BatterySipper> usageList;
-
- public PowerUsageData(@UsageType int usageType) {
- this(usageType, 0);
- }
-
- public PowerUsageData(@UsageType int usageType, double totalPower) {
- this.usageType = usageType;
- totalPowerMah = 0;
- totalUsageTimeMs = 0;
- titleResId = getTitleResId(usageType);
- totalPowerMah = totalPower;
- usageList = new ArrayList<>();
- }
-
- private int getTitleResId(@UsageType int usageType) {
- switch (usageType) {
- case UsageType.WIFI:
- return R.string.power_wifi;
- case UsageType.CELL:
- return R.string.power_cell;
- case UsageType.SYSTEM:
- return R.string.power_system;
- case UsageType.BLUETOOTH:
- return R.string.power_bluetooth;
- case UsageType.USER:
- return R.string.power_user;
- case UsageType.IDLE:
- return R.string.power_idle;
- case UsageType.UNACCOUNTED:
- return R.string.power_unaccounted;
- case UsageType.OVERCOUNTED:
- return R.string.power_overcounted;
- case UsageType.APP:
- default:
- return R.string.power_apps;
- }
- }
-
- @Override
- public int compareTo(@NonNull PowerUsageData powerUsageData) {
- final int diff = Double.compare(powerUsageData.totalPowerMah, totalPowerMah);
- return diff != 0 ? diff : usageType - powerUsageData.usageType;
- }
- }
-
- public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider() {
- @Override
- public List<SearchIndexableResource> getXmlResourcesToIndex(
- Context context, boolean enabled) {
- final SearchIndexableResource sir = new SearchIndexableResource(context);
- sir.xmlResId = R.xml.power_usage_advanced_legacy;
- return Arrays.asList(sir);
- }
- };
-
-}
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
index 861ee56..a6474fb 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
@@ -106,11 +106,6 @@
String getAdvancedUsageScreenInfoString();
/**
- * Checks whether to display the battery v2.
- */
- boolean isBatteryV2Enabled();
-
- /**
* Returns a signal to indicate if the device will need to warn the user they may not make it
* to their next charging time.
*
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
index 6c3897d..e727521 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
@@ -16,13 +16,10 @@
package com.android.settings.fuelgauge;
-import static com.android.settings.core.FeatureFlags.BATTERY_SETTINGS_V2;
-
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Process;
-import android.util.FeatureFlagUtils;
import android.util.SparseIntArray;
import com.android.internal.os.BatterySipper;
@@ -128,11 +125,6 @@
}
@Override
- public boolean isBatteryV2Enabled() {
- return FeatureFlagUtils.isEnabled(mContext, BATTERY_SETTINGS_V2);
- }
-
- @Override
public boolean getEarlyWarningSignal(Context context, String id) {
return false;
}
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java b/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java
deleted file mode 100644
index d321bb7..0000000
--- a/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java
+++ /dev/null
@@ -1,911 +0,0 @@
-/*
- * Copyright (C) 2009 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 android.app.Activity;
-import android.app.LoaderManager;
-import android.app.LoaderManager.LoaderCallbacks;
-import android.content.Context;
-import android.content.Loader;
-import android.graphics.drawable.Drawable;
-import android.os.BatteryStats;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.os.Process;
-import android.os.UserHandle;
-import android.support.annotation.VisibleForTesting;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceGroup;
-import android.text.TextUtils;
-import android.text.format.DateUtils;
-import android.text.format.Formatter;
-import android.util.Log;
-import android.util.SparseArray;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.View.OnLongClickListener;
-import android.widget.TextView;
-
-import com.android.internal.hardware.AmbientDisplayConfiguration;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.internal.os.BatterySipper;
-import com.android.internal.os.BatterySipper.DrainType;
-import com.android.internal.os.PowerProfile;
-import com.android.settings.R;
-import com.android.settings.Settings.HighPowerApplicationsActivity;
-import com.android.settings.SettingsActivity;
-import com.android.settings.Utils;
-import com.android.settings.applications.LayoutPreference;
-import com.android.settings.applications.manageapplications.ManageApplications;
-import com.android.settings.core.SubSettingLauncher;
-import com.android.settings.dashboard.SummaryLoader;
-import com.android.settings.display.AmbientDisplayPreferenceController;
-import com.android.settings.display.AutoBrightnessPreferenceController;
-import com.android.settings.display.BatteryPercentagePreferenceController;
-import com.android.settings.display.TimeoutPreferenceController;
-import com.android.settings.fuelgauge.anomaly.Anomaly;
-import com.android.settings.fuelgauge.anomaly.AnomalyDetectionPolicy;
-import com.android.settings.fuelgauge.anomaly.AnomalyDialogFragment.AnomalyDialogListener;
-import com.android.settings.fuelgauge.anomaly.AnomalyLoader;
-import com.android.settings.fuelgauge.anomaly.AnomalySummaryPreferenceController;
-import com.android.settings.fuelgauge.anomaly.AnomalyUtils;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
-import com.android.settingslib.utils.PowerUtil;
-import com.android.settingslib.utils.StringUtil;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Displays a list of apps and subsystems that consume power, ordered by how much power was
- * consumed since the last time it was unplugged.
- *
- * This is the battery page used in Android O with the app usage list. It is also used for battery
- * debug.
- */
-public class PowerUsageSummaryLegacy extends PowerUsageBase implements
- AnomalyDialogListener, OnLongClickListener, OnClickListener {
-
- static final String TAG = "PowerUsageSummaryLegacy";
-
- private static final boolean DEBUG = false;
- private static final boolean USE_FAKE_DATA = false;
- private static final String KEY_APP_LIST = "app_list";
- private static final String KEY_BATTERY_HEADER = "battery_header";
- private static final String KEY_SHOW_ALL_APPS = "show_all_apps";
- private static final int MAX_ITEMS_TO_LIST = USE_FAKE_DATA ? 30 : 10;
- private static final int MIN_AVERAGE_POWER_THRESHOLD_MILLI_AMP = 10;
-
- private static final String KEY_SCREEN_USAGE = "screen_usage";
- private static final String KEY_TIME_SINCE_LAST_FULL_CHARGE = "last_full_charge";
-
- private static final String KEY_AUTO_BRIGHTNESS = "auto_brightness_battery";
- private static final String KEY_SCREEN_TIMEOUT = "screen_timeout_battery";
- private static final String KEY_AMBIENT_DISPLAY = "ambient_display_battery";
- private static final String KEY_BATTERY_SAVER_SUMMARY = "battery_saver_summary";
- private static final String KEY_HIGH_USAGE = "high_usage";
-
- @VisibleForTesting
- static final int ANOMALY_LOADER = 1;
- @VisibleForTesting
- static final int BATTERY_INFO_LOADER = 2;
- private static final int MENU_STATS_TYPE = Menu.FIRST;
- @VisibleForTesting
- static final int MENU_HIGH_POWER_APPS = Menu.FIRST + 3;
- @VisibleForTesting
- static final int MENU_TOGGLE_APPS = Menu.FIRST + 4;
- private static final int MENU_HELP = Menu.FIRST + 5;
- public static final int DEBUG_INFO_LOADER = 3;
-
- @VisibleForTesting
- boolean mShowAllApps = false;
- @VisibleForTesting
- PowerGaugePreference mScreenUsagePref;
- @VisibleForTesting
- PowerGaugePreference mLastFullChargePref;
- @VisibleForTesting
- PowerUsageFeatureProvider mPowerFeatureProvider;
- @VisibleForTesting
- BatteryUtils mBatteryUtils;
- @VisibleForTesting
- LayoutPreference mBatteryLayoutPref;
-
- /**
- * SparseArray that maps uid to {@link Anomaly}, so we could find {@link Anomaly} by uid
- */
- @VisibleForTesting
- SparseArray<List<Anomaly>> mAnomalySparseArray;
- @VisibleForTesting
- PreferenceGroup mAppListGroup;
- @VisibleForTesting
- BatteryHeaderPreferenceController mBatteryHeaderPreferenceController;
- private AnomalySummaryPreferenceController mAnomalySummaryPreferenceController;
- private int mStatsType = BatteryStats.STATS_SINCE_CHARGED;
-
- private LoaderCallbacks<List<Anomaly>> mAnomalyLoaderCallbacks =
- new LoaderCallbacks<List<Anomaly>>() {
-
- @Override
- public Loader<List<Anomaly>> onCreateLoader(int id, Bundle args) {
- return new AnomalyLoader(getContext(), mStatsHelper);
- }
-
- @Override
- public void onLoadFinished(Loader<List<Anomaly>> loader, List<Anomaly> data) {
- final AnomalyUtils anomalyUtils = AnomalyUtils.getInstance(getContext());
- anomalyUtils.logAnomalies(mMetricsFeatureProvider, data,
- MetricsEvent.FUELGAUGE_POWER_USAGE_SUMMARY);
-
- // show high usage preference if possible
- mAnomalySummaryPreferenceController.updateAnomalySummaryPreference(data);
-
- updateAnomalySparseArray(data);
- refreshAnomalyIcon();
- }
-
- @Override
- public void onLoaderReset(Loader<List<Anomaly>> loader) {
-
- }
- };
-
- @VisibleForTesting
- LoaderCallbacks<BatteryInfo> mBatteryInfoLoaderCallbacks =
- new LoaderCallbacks<BatteryInfo>() {
-
- @Override
- public Loader<BatteryInfo> onCreateLoader(int i, Bundle bundle) {
- return new BatteryInfoLoader(getContext(), mStatsHelper);
- }
-
- @Override
- public void onLoadFinished(Loader<BatteryInfo> loader, BatteryInfo batteryInfo) {
- mBatteryHeaderPreferenceController.updateHeaderPreference(batteryInfo);
- }
-
- @Override
- public void onLoaderReset(Loader<BatteryInfo> loader) {
- // do nothing
- }
- };
-
- LoaderManager.LoaderCallbacks<List<BatteryInfo>> mBatteryInfoDebugLoaderCallbacks =
- new LoaderCallbacks<List<BatteryInfo>>() {
- @Override
- public Loader<List<BatteryInfo>> onCreateLoader(int i, Bundle bundle) {
- return new DebugEstimatesLoader(getContext(), mStatsHelper);
- }
-
- @Override
- public void onLoadFinished(Loader<List<BatteryInfo>> loader,
- List<BatteryInfo> batteryInfos) {
- updateViews(batteryInfos);
- }
-
- @Override
- public void onLoaderReset(Loader<List<BatteryInfo>> loader) {
- }
- };
-
- protected void updateViews(List<BatteryInfo> batteryInfos) {
- final BatteryMeterView batteryView = mBatteryLayoutPref
- .findViewById(R.id.battery_header_icon);
- final TextView percentRemaining =
- mBatteryLayoutPref.findViewById(R.id.battery_percent);
- final TextView summary1 = mBatteryLayoutPref.findViewById(R.id.summary1);
- final TextView summary2 = mBatteryLayoutPref.findViewById(R.id.summary2);
- BatteryInfo oldInfo = batteryInfos.get(0);
- BatteryInfo newInfo = batteryInfos.get(1);
- percentRemaining.setText(Utils.formatPercentage(oldInfo.batteryLevel));
-
- // set the text to the old estimate (copied from battery info). Note that this
- // can sometimes say 0 time remaining because battery stats requires the phone
- // be unplugged for a period of time before being willing ot make an estimate.
- summary1.setText(mPowerFeatureProvider.getOldEstimateDebugString(
- Formatter.formatShortElapsedTime(getContext(),
- PowerUtil.convertUsToMs(oldInfo.remainingTimeUs))));
-
- // for this one we can just set the string directly
- summary2.setText(mPowerFeatureProvider.getEnhancedEstimateDebugString(
- Formatter.formatShortElapsedTime(getContext(),
- PowerUtil.convertUsToMs(newInfo.remainingTimeUs))));
-
- batteryView.setBatteryLevel(oldInfo.batteryLevel);
- batteryView.setCharging(!oldInfo.discharging);
- }
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- setAnimationAllowed(true);
-
- initFeatureProvider();
- mBatteryLayoutPref = (LayoutPreference) findPreference(KEY_BATTERY_HEADER);
-
- mAppListGroup = (PreferenceGroup) findPreference(KEY_APP_LIST);
- mScreenUsagePref = (PowerGaugePreference) findPreference(KEY_SCREEN_USAGE);
- mLastFullChargePref = (PowerGaugePreference) findPreference(
- KEY_TIME_SINCE_LAST_FULL_CHARGE);
- mFooterPreferenceMixin.createFooterPreference().setTitle(R.string.battery_footer_summary);
- mAnomalySummaryPreferenceController = new AnomalySummaryPreferenceController(
- (SettingsActivity) getActivity(), this);
- mBatteryUtils = BatteryUtils.getInstance(getContext());
- mAnomalySparseArray = new SparseArray<>();
-
- restartBatteryInfoLoader();
- restoreSavedInstance(icicle);
- }
-
- @Override
- public int getMetricsCategory() {
- return MetricsEvent.FUELGAUGE_POWER_USAGE_SUMMARY;
- }
-
- @Override
- public void onPause() {
- BatteryEntry.stopRequestQueue();
- mHandler.removeMessages(BatteryEntry.MSG_UPDATE_NAME_ICON);
- super.onPause();
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- if (getActivity().isChangingConfigurations()) {
- BatteryEntry.clearUidCache();
- }
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- outState.putBoolean(KEY_SHOW_ALL_APPS, mShowAllApps);
- }
-
- @Override
- public boolean onPreferenceTreeClick(Preference preference) {
- if (mAnomalySummaryPreferenceController.onPreferenceTreeClick(preference)) {
- return true;
- }
- if (KEY_BATTERY_HEADER.equals(preference.getKey())) {
- performBatteryHeaderClick();
- return true;
- } else if (!(preference instanceof PowerGaugePreference)) {
- return super.onPreferenceTreeClick(preference);
- }
- PowerGaugePreference pgp = (PowerGaugePreference) preference;
- BatteryEntry entry = pgp.getInfo();
- AdvancedPowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(),
- this, mStatsHelper, mStatsType, entry, pgp.getPercent(),
- mAnomalySparseArray.get(entry.sipper.getUid()));
- return super.onPreferenceTreeClick(preference);
- }
-
- @Override
- protected String getLogTag() {
- return TAG;
- }
-
- @Override
- protected int getPreferenceScreenResId() {
- return R.xml.power_usage_summary_legacy;
- }
-
- @Override
- protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
- final List<AbstractPreferenceController> controllers = new ArrayList<>();
- mBatteryHeaderPreferenceController = new BatteryHeaderPreferenceController(
- context, getActivity(), this /* host */, getLifecycle());
- controllers.add(mBatteryHeaderPreferenceController);
- controllers.add(new AutoBrightnessPreferenceController(context, KEY_AUTO_BRIGHTNESS));
- controllers.add(new TimeoutPreferenceController(context, KEY_SCREEN_TIMEOUT));
- controllers.add(new BatteryPercentagePreferenceController(context));
- controllers.add(new AmbientDisplayPreferenceController(
- context,
- new AmbientDisplayConfiguration(context),
- KEY_AMBIENT_DISPLAY));
- BatterySaverController batterySaverController = new BatterySaverController(context);
- controllers.add(batterySaverController);
- getLifecycle().addObserver(batterySaverController);
- return controllers;
- }
-
- @Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- if (DEBUG) {
- menu.add(Menu.NONE, MENU_STATS_TYPE, Menu.NONE, R.string.menu_stats_total)
- .setIcon(com.android.internal.R.drawable.ic_menu_info_details)
- .setAlphabeticShortcut('t');
- }
-
- menu.add(Menu.NONE, MENU_HIGH_POWER_APPS, Menu.NONE, R.string.high_power_apps);
-
- if (mPowerFeatureProvider.isPowerAccountingToggleEnabled()) {
- menu.add(Menu.NONE, MENU_TOGGLE_APPS, Menu.NONE,
- mShowAllApps ? R.string.hide_extra_apps : R.string.show_all_apps);
- }
-
- super.onCreateOptionsMenu(menu, inflater);
- }
-
- @Override
- public int getHelpResource() {
- return R.string.help_url_battery;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- final SettingsActivity sa = (SettingsActivity) getActivity();
- final Context context = getContext();
- final MetricsFeatureProvider metricsFeatureProvider =
- FeatureFactory.getFactory(context).getMetricsFeatureProvider();
-
- switch (item.getItemId()) {
- case MENU_STATS_TYPE:
- if (mStatsType == BatteryStats.STATS_SINCE_CHARGED) {
- mStatsType = BatteryStats.STATS_SINCE_UNPLUGGED;
- } else {
- mStatsType = BatteryStats.STATS_SINCE_CHARGED;
- }
- refreshUi();
- return true;
- case MENU_HIGH_POWER_APPS:
- Bundle args = new Bundle();
- args.putString(ManageApplications.EXTRA_CLASSNAME,
- HighPowerApplicationsActivity.class.getName());
- new SubSettingLauncher(context)
- .setDestination(ManageApplications.class.getName())
- .setArguments(args)
- .setTitle(R.string.high_power_apps)
- .setSourceMetricsCategory(getMetricsCategory())
- .launch();
- metricsFeatureProvider.action(context,
- MetricsEvent.ACTION_SETTINGS_MENU_BATTERY_OPTIMIZATION);
- return true;
- case MENU_TOGGLE_APPS:
- mShowAllApps = !mShowAllApps;
- item.setTitle(mShowAllApps ? R.string.hide_extra_apps : R.string.show_all_apps);
- metricsFeatureProvider.action(context,
- MetricsEvent.ACTION_SETTINGS_MENU_BATTERY_APPS_TOGGLE, mShowAllApps);
- restartBatteryStatsLoader(false /* clearHeader */);
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
- }
-
- @VisibleForTesting
- void restoreSavedInstance(Bundle savedInstance) {
- if (savedInstance != null) {
- mShowAllApps = savedInstance.getBoolean(KEY_SHOW_ALL_APPS, false);
- }
- }
-
- private void addNotAvailableMessage() {
- final String NOT_AVAILABLE = "not_available";
- Preference notAvailable = getCachedPreference(NOT_AVAILABLE);
- if (notAvailable == null) {
- notAvailable = new Preference(getPrefContext());
- notAvailable.setKey(NOT_AVAILABLE);
- notAvailable.setTitle(R.string.power_usage_not_available);
- mAppListGroup.addPreference(notAvailable);
- }
- }
-
- private void performBatteryHeaderClick() {
- if (mPowerFeatureProvider.isAdvancedUiEnabled()) {
- new SubSettingLauncher(getContext())
- .setDestination(PowerUsageAdvancedLegacy.class.getName())
- .setSourceMetricsCategory(getMetricsCategory())
- .setTitle(R.string.advanced_battery_title)
- .launch();
- } else {
- mStatsHelper.storeStatsHistoryInFile(BatteryHistoryDetail.BATTERY_HISTORY_FILE);
- Bundle args = new Bundle(2);
- args.putString(BatteryHistoryDetail.EXTRA_STATS,
- BatteryHistoryDetail.BATTERY_HISTORY_FILE);
- args.putParcelable(BatteryHistoryDetail.EXTRA_BROADCAST,
- mStatsHelper.getBatteryBroadcast());
- new SubSettingLauncher(getContext())
- .setDestination(BatteryHistoryDetail.class.getName())
- .setSourceMetricsCategory(getMetricsCategory())
- .setArguments(args)
- .setTitle(R.string.history_details_title)
- .launch();
- }
- }
-
- private static boolean isSharedGid(int uid) {
- return UserHandle.getAppIdFromSharedAppGid(uid) > 0;
- }
-
- private static boolean isSystemUid(int uid) {
- final int appUid = UserHandle.getAppId(uid);
- return appUid >= Process.SYSTEM_UID && appUid < Process.FIRST_APPLICATION_UID;
- }
-
- /**
- * We want to coalesce some UIDs. For example, dex2oat runs under a shared gid that
- * exists for all users of the same app. We detect this case and merge the power use
- * for dex2oat to the device OWNER's use of the app.
- *
- * @return A sorted list of apps using power.
- */
- private List<BatterySipper> getCoalescedUsageList(final List<BatterySipper> sippers) {
- final SparseArray<BatterySipper> uidList = new SparseArray<>();
-
- final ArrayList<BatterySipper> results = new ArrayList<>();
- final int numSippers = sippers.size();
- for (int i = 0; i < numSippers; i++) {
- BatterySipper sipper = sippers.get(i);
- if (sipper.getUid() > 0) {
- int realUid = sipper.getUid();
-
- // Check if this UID is a shared GID. If so, we combine it with the OWNER's
- // actual app UID.
- if (isSharedGid(sipper.getUid())) {
- realUid = UserHandle.getUid(UserHandle.USER_SYSTEM,
- UserHandle.getAppIdFromSharedAppGid(sipper.getUid()));
- }
-
- // Check if this UID is a system UID (mediaserver, logd, nfc, drm, etc).
- if (isSystemUid(realUid)
- && !"mediaserver".equals(sipper.packageWithHighestDrain)) {
- // Use the system UID for all UIDs running in their own sandbox that
- // are not apps. We exclude mediaserver because we already are expected to
- // report that as a separate item.
- realUid = Process.SYSTEM_UID;
- }
-
- if (realUid != sipper.getUid()) {
- // Replace the BatterySipper with a new one with the real UID set.
- BatterySipper newSipper = new BatterySipper(sipper.drainType,
- new FakeUid(realUid), 0.0);
- newSipper.add(sipper);
- newSipper.packageWithHighestDrain = sipper.packageWithHighestDrain;
- newSipper.mPackages = sipper.mPackages;
- sipper = newSipper;
- }
-
- int index = uidList.indexOfKey(realUid);
- if (index < 0) {
- // New entry.
- uidList.put(realUid, sipper);
- } else {
- // Combine BatterySippers if we already have one with this UID.
- final BatterySipper existingSipper = uidList.valueAt(index);
- existingSipper.add(sipper);
- if (existingSipper.packageWithHighestDrain == null
- && sipper.packageWithHighestDrain != null) {
- existingSipper.packageWithHighestDrain = sipper.packageWithHighestDrain;
- }
-
- final int existingPackageLen = existingSipper.mPackages != null ?
- existingSipper.mPackages.length : 0;
- final int newPackageLen = sipper.mPackages != null ?
- sipper.mPackages.length : 0;
- if (newPackageLen > 0) {
- String[] newPackages = new String[existingPackageLen + newPackageLen];
- if (existingPackageLen > 0) {
- System.arraycopy(existingSipper.mPackages, 0, newPackages, 0,
- existingPackageLen);
- }
- System.arraycopy(sipper.mPackages, 0, newPackages, existingPackageLen,
- newPackageLen);
- existingSipper.mPackages = newPackages;
- }
- }
- } else {
- results.add(sipper);
- }
- }
-
- final int numUidSippers = uidList.size();
- for (int i = 0; i < numUidSippers; i++) {
- results.add(uidList.valueAt(i));
- }
-
- // The sort order must have changed, so re-sort based on total power use.
- mBatteryUtils.sortUsageList(results);
- return results;
- }
-
- protected void refreshUi() {
- final Context context = getContext();
- if (context == null) {
- return;
- }
-
- restartAnomalyDetectionIfPossible();
-
- // reload BatteryInfo and updateUI
- restartBatteryInfoLoader();
- final long lastFullChargeTime = mBatteryUtils.calculateLastFullChargeTime(mStatsHelper,
- System.currentTimeMillis());
- updateScreenPreference();
- updateLastFullChargePreference(lastFullChargeTime);
-
- final CharSequence timeSequence = StringUtil.formatRelativeTime(context, lastFullChargeTime,
- false);
- final int resId = mShowAllApps ? R.string.power_usage_list_summary_device
- : R.string.power_usage_list_summary;
- mAppListGroup.setTitle(TextUtils.expandTemplate(getText(resId), timeSequence));
-
- refreshAppListGroup();
- }
-
- private void refreshAppListGroup() {
- final PowerProfile powerProfile = mStatsHelper.getPowerProfile();
- final BatteryStats stats = mStatsHelper.getStats();
- final double averagePower = powerProfile.getAveragePower(PowerProfile.POWER_SCREEN_FULL);
- boolean addedSome = false;
- final int dischargeAmount = USE_FAKE_DATA ? 5000
- : stats != null ? stats.getDischargeAmount(mStatsType) : 0;
-
- cacheRemoveAllPrefs(mAppListGroup);
- mAppListGroup.setOrderingAsAdded(false);
-
- if (averagePower >= MIN_AVERAGE_POWER_THRESHOLD_MILLI_AMP || USE_FAKE_DATA) {
- final List<BatterySipper> usageList = getCoalescedUsageList(
- USE_FAKE_DATA ? getFakeStats() : mStatsHelper.getUsageList());
- double hiddenPowerMah = mShowAllApps ? 0 :
- mBatteryUtils.removeHiddenBatterySippers(usageList);
- mBatteryUtils.sortUsageList(usageList);
-
- final int numSippers = usageList.size();
- for (int i = 0; i < numSippers; i++) {
- final BatterySipper sipper = usageList.get(i);
- double totalPower = USE_FAKE_DATA ? 4000 : mStatsHelper.getTotalPower();
-
- final double percentOfTotal = mBatteryUtils.calculateBatteryPercent(
- sipper.totalPowerMah, totalPower, hiddenPowerMah, dischargeAmount);
-
- if (((int) (percentOfTotal + .5)) < 1) {
- continue;
- }
- if (shouldHideSipper(sipper)) {
- continue;
- }
- final UserHandle userHandle = new UserHandle(UserHandle.getUserId(sipper.getUid()));
- final BatteryEntry entry = new BatteryEntry(getActivity(), mHandler, mUm, sipper);
- final Drawable badgedIcon = mUm.getBadgedIconForUser(entry.getIcon(),
- userHandle);
- final CharSequence contentDescription = mUm.getBadgedLabelForUser(entry.getLabel(),
- userHandle);
-
- final String key = extractKeyFromSipper(sipper);
- PowerGaugePreference pref = (PowerGaugePreference) getCachedPreference(key);
- if (pref == null) {
- pref = new PowerGaugePreference(getPrefContext(), badgedIcon,
- contentDescription, entry);
- pref.setKey(key);
- }
- sipper.percent = percentOfTotal;
- pref.setTitle(entry.getLabel());
- pref.setOrder(i + 1);
- pref.setPercent(percentOfTotal);
- pref.shouldShowAnomalyIcon(false);
- if (sipper.usageTimeMs == 0 && sipper.drainType == DrainType.APP) {
- sipper.usageTimeMs = mBatteryUtils.getProcessTimeMs(
- BatteryUtils.StatusType.FOREGROUND, sipper.uidObj, mStatsType);
- }
- setUsageSummary(pref, sipper);
- addedSome = true;
- mAppListGroup.addPreference(pref);
- if (mAppListGroup.getPreferenceCount() - getCachedCount()
- > (MAX_ITEMS_TO_LIST + 1)) {
- break;
- }
- }
- }
- if (!addedSome) {
- addNotAvailableMessage();
- }
- removeCachedPrefs(mAppListGroup);
-
- BatteryEntry.startRequestQueue();
- }
-
- @VisibleForTesting
- boolean shouldHideSipper(BatterySipper sipper) {
- // Don't show over-counted and unaccounted in any condition
- return sipper.drainType == DrainType.OVERCOUNTED
- || sipper.drainType == DrainType.UNACCOUNTED;
- }
-
- @VisibleForTesting
- void refreshAnomalyIcon() {
- for (int i = 0, size = mAnomalySparseArray.size(); i < size; i++) {
- final String key = extractKeyFromUid(mAnomalySparseArray.keyAt(i));
- final PowerGaugePreference pref = (PowerGaugePreference) mAppListGroup.findPreference(
- key);
- if (pref != null) {
- pref.shouldShowAnomalyIcon(true);
- }
- }
- }
-
- @VisibleForTesting
- void restartAnomalyDetectionIfPossible() {
- if (getAnomalyDetectionPolicy().isAnomalyDetectionEnabled()) {
- getLoaderManager().restartLoader(ANOMALY_LOADER, Bundle.EMPTY, mAnomalyLoaderCallbacks);
- }
- }
-
- @VisibleForTesting
- AnomalyDetectionPolicy getAnomalyDetectionPolicy() {
- return new AnomalyDetectionPolicy(getContext());
- }
-
- @VisibleForTesting
- BatterySipper findBatterySipperByType(List<BatterySipper> usageList, DrainType type) {
- for (int i = 0, size = usageList.size(); i < size; i++) {
- final BatterySipper sipper = usageList.get(i);
- if (sipper.drainType == type) {
- return sipper;
- }
- }
- return null;
- }
-
- @VisibleForTesting
- void updateScreenPreference() {
- final BatterySipper sipper = findBatterySipperByType(
- mStatsHelper.getUsageList(), DrainType.SCREEN);
- final long usageTimeMs = sipper != null ? sipper.usageTimeMs : 0;
-
- mScreenUsagePref.setSubtitle(
- StringUtil.formatElapsedTime(getContext(), usageTimeMs, false));
- }
-
- @VisibleForTesting
- void updateLastFullChargePreference(long timeMs) {
- final CharSequence timeSequence = StringUtil.formatRelativeTime(getContext(), timeMs, false);
- mLastFullChargePref.setSubtitle(timeSequence);
- }
-
- @VisibleForTesting
- void showBothEstimates() {
- final Context context = getContext();
- if (context == null
- || !mPowerFeatureProvider.isEnhancedBatteryPredictionEnabled(context)) {
- return;
- }
- getLoaderManager().restartLoader(DEBUG_INFO_LOADER, Bundle.EMPTY,
- mBatteryInfoDebugLoaderCallbacks);
- }
-
- @VisibleForTesting
- double calculatePercentage(double powerUsage, double dischargeAmount) {
- final double totalPower = mStatsHelper.getTotalPower();
- return totalPower == 0 ? 0 :
- ((powerUsage / totalPower) * dischargeAmount);
- }
-
- @VisibleForTesting
- void setUsageSummary(Preference preference, BatterySipper sipper) {
- // Only show summary when usage time is longer than one minute
- final long usageTimeMs = sipper.usageTimeMs;
- if (usageTimeMs >= DateUtils.MINUTE_IN_MILLIS) {
- final CharSequence timeSequence =
- StringUtil.formatElapsedTime(getContext(), usageTimeMs, false);
- preference.setSummary(
- (sipper.drainType != DrainType.APP || mBatteryUtils.shouldHideSipper(sipper))
- ? timeSequence
- : TextUtils.expandTemplate(getText(R.string.battery_used_for),
- timeSequence));
- }
- }
-
- @VisibleForTesting
- String extractKeyFromSipper(BatterySipper sipper) {
- if (sipper.uidObj != null) {
- return extractKeyFromUid(sipper.getUid());
- } else if (sipper.drainType == DrainType.USER) {
- return sipper.drainType.toString() + sipper.userId;
- } else if (sipper.drainType != DrainType.APP) {
- return sipper.drainType.toString();
- } else if (sipper.getPackages() != null) {
- return TextUtils.concat(sipper.getPackages()).toString();
- } else {
- Log.w(TAG, "Inappropriate BatterySipper without uid and package names: " + sipper);
- return "-1";
- }
- }
-
- @VisibleForTesting
- String extractKeyFromUid(int uid) {
- return Integer.toString(uid);
- }
-
- @VisibleForTesting
- void setBatteryLayoutPreference(LayoutPreference layoutPreference) {
- mBatteryLayoutPref = layoutPreference;
- }
-
- @VisibleForTesting
- void initFeatureProvider() {
- final Context context = getContext();
- mPowerFeatureProvider = FeatureFactory.getFactory(context)
- .getPowerUsageFeatureProvider(context);
- }
-
- @VisibleForTesting
- void updateAnomalySparseArray(List<Anomaly> anomalies) {
- mAnomalySparseArray.clear();
- for (int i = 0, size = anomalies.size(); i < size; i++) {
- final Anomaly anomaly = anomalies.get(i);
- if (mAnomalySparseArray.get(anomaly.uid) == null) {
- mAnomalySparseArray.append(anomaly.uid, new ArrayList<>());
- }
- mAnomalySparseArray.get(anomaly.uid).add(anomaly);
- }
- }
-
- @VisibleForTesting
- void restartBatteryInfoLoader() {
- getLoaderManager().restartLoader(BATTERY_INFO_LOADER, Bundle.EMPTY,
- mBatteryInfoLoaderCallbacks);
- if (mPowerFeatureProvider.isEstimateDebugEnabled()) {
- // Unfortunately setting a long click listener on a view means it will no
- // longer pass the regular click event to the parent, so we have to register
- // a regular click listener as well.
- View header = mBatteryLayoutPref.findViewById(R.id.summary1);
- header.setOnLongClickListener(this);
- header.setOnClickListener(this);
- }
- }
-
- private static List<BatterySipper> getFakeStats() {
- ArrayList<BatterySipper> stats = new ArrayList<>();
- float use = 5;
- for (DrainType type : DrainType.values()) {
- if (type == DrainType.APP) {
- continue;
- }
- stats.add(new BatterySipper(type, null, use));
- use += 5;
- }
- for (int i = 0; i < 100; i++) {
- stats.add(new BatterySipper(DrainType.APP,
- new FakeUid(Process.FIRST_APPLICATION_UID + i), use));
- }
- stats.add(new BatterySipper(DrainType.APP,
- new FakeUid(0), use));
-
- // Simulate dex2oat process.
- BatterySipper sipper = new BatterySipper(DrainType.APP,
- new FakeUid(UserHandle.getSharedAppGid(Process.FIRST_APPLICATION_UID)), 10.0f);
- sipper.packageWithHighestDrain = "dex2oat";
- stats.add(sipper);
-
- sipper = new BatterySipper(DrainType.APP,
- new FakeUid(UserHandle.getSharedAppGid(Process.FIRST_APPLICATION_UID + 1)), 10.0f);
- sipper.packageWithHighestDrain = "dex2oat";
- stats.add(sipper);
-
- sipper = new BatterySipper(DrainType.APP,
- new FakeUid(UserHandle.getSharedAppGid(Process.LOG_UID)), 9.0f);
- stats.add(sipper);
-
- return stats;
- }
-
- Handler mHandler = new Handler() {
-
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case BatteryEntry.MSG_UPDATE_NAME_ICON:
- BatteryEntry entry = (BatteryEntry) msg.obj;
- PowerGaugePreference pgp =
- (PowerGaugePreference) findPreference(
- Integer.toString(entry.sipper.uidObj.getUid()));
- if (pgp != null) {
- final int userId = UserHandle.getUserId(entry.sipper.getUid());
- final UserHandle userHandle = new UserHandle(userId);
- pgp.setIcon(mUm.getBadgedIconForUser(entry.getIcon(), userHandle));
- pgp.setTitle(entry.name);
- if (entry.sipper.drainType == DrainType.APP) {
- pgp.setContentDescription(entry.name);
- }
- }
- break;
- case BatteryEntry.MSG_REPORT_FULLY_DRAWN:
- Activity activity = getActivity();
- if (activity != null) {
- activity.reportFullyDrawn();
- }
- break;
- }
- super.handleMessage(msg);
- }
- };
-
- @Override
- public void onAnomalyHandled(Anomaly anomaly) {
- mAnomalySummaryPreferenceController.hideHighUsagePreference();
- }
-
- @Override
- public boolean onLongClick(View view) {
- showBothEstimates();
- view.setOnLongClickListener(null);
- return true;
- }
-
- @Override
- public void onClick(View view) {
- performBatteryHeaderClick();
- }
-
- @Override
- protected void restartBatteryStatsLoader() {
- restartBatteryStatsLoader(true /* clearHeader */);
- }
-
- void restartBatteryStatsLoader(boolean clearHeader) {
- super.restartBatteryStatsLoader();
- if (clearHeader) {
- mBatteryHeaderPreferenceController.quickUpdateHeaderPreference();
- }
- }
-
- private static class SummaryProvider implements SummaryLoader.SummaryProvider {
- private final Context mContext;
- private final SummaryLoader mLoader;
- private final BatteryBroadcastReceiver mBatteryBroadcastReceiver;
-
- private SummaryProvider(Context context, SummaryLoader loader) {
- mContext = context;
- mLoader = loader;
- mBatteryBroadcastReceiver = new BatteryBroadcastReceiver(mContext);
- mBatteryBroadcastReceiver.setBatteryChangedListener(() -> {
- BatteryInfo.getBatteryInfo(mContext, new BatteryInfo.Callback() {
- @Override
- public void onBatteryInfoLoaded(BatteryInfo info) {
- mLoader.setSummary(PowerUsageSummaryLegacy.SummaryProvider.this, info.chargeLabel);
- }
- }, true /* shortString */);
- });
- }
-
- @Override
- public void setListening(boolean listening) {
- if (listening) {
- mBatteryBroadcastReceiver.register();
- } else {
- mBatteryBroadcastReceiver.unRegister();
- }
- }
- }
-
- public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
- = new SummaryLoader.SummaryProviderFactory() {
- @Override
- public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
- SummaryLoader summaryLoader) {
- return new SummaryProvider(activity, summaryLoader);
- }
- };
-}
diff --git a/src/com/android/settings/search/SearchIndexableResourcesImpl.java b/src/com/android/settings/search/SearchIndexableResourcesImpl.java
index 61f5fec..0bc8de6 100644
--- a/src/com/android/settings/search/SearchIndexableResourcesImpl.java
+++ b/src/com/android/settings/search/SearchIndexableResourcesImpl.java
@@ -50,7 +50,6 @@
import com.android.settings.dream.DreamSettings;
import com.android.settings.enterprise.EnterprisePrivacySettings;
import com.android.settings.fuelgauge.PowerUsageAdvanced;
-import com.android.settings.fuelgauge.PowerUsageAdvancedLegacy;
import com.android.settings.fuelgauge.batterysaver.BatterySaverSettings;
import com.android.settings.fuelgauge.PowerUsageSummary;
import com.android.settings.fuelgauge.SmartBatterySettings;
@@ -124,7 +123,6 @@
addIndex(ZenModeSettings.class);
addIndex(StorageSettings.class);
addIndex(PowerUsageAdvanced.class);
- addIndex(PowerUsageAdvancedLegacy.class);
addIndex(DefaultAppSettings.class);
addIndex(ManageAssist.class);
addIndex(SpecialAccessSettings.class);