From 7c987c9d986ff6e1ad2bc36eda9bef501f887a61 Mon Sep 17 00:00:00 2001 From: Zaiyue Xue Date: Wed, 4 Jan 2023 17:09:09 +0800 Subject: [PATCH] [Battery usage U] Add an item "Others" in the app list to group small usage apps. This will make the total percetage 100%, which is easy to understand for users. Bug: 258124173 Fix: 258124173 Test: manual Change-Id: I5965eeb73a2071c4a9994655e4ed24ec3adf64e8 --- res/values/strings.xml | 2 + .../fuelgauge/PowerUsageFeatureProvider.java | 5 +++ .../PowerUsageFeatureProviderImpl.java | 5 +++ .../batteryusage/BatteryDiffEntry.java | 41 +++++++++++++++++++ .../fuelgauge/batteryusage/DataProcessor.java | 28 +++++++++++++ 5 files changed, 81 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index caad32e93c8..40d47eb05fd 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -5079,6 +5079,8 @@ System apps + + Others Estimated time left diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java index 3b4ab3716b3..db9a8bd361d 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java +++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java @@ -132,6 +132,11 @@ public interface PowerUsageFeatureProvider { */ Intent getResumeChargeIntent(boolean isDockDefender); + /** + * Returns {@link Set} for the system component ids which are combined into others. + */ + Set getOthersSystemComponentSet(Context context); + /** * Returns {@link Set} for hiding system component ids in the usage screen. */ diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java index 522f6232b36..06cb8bec90e 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java +++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java @@ -152,6 +152,11 @@ public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider return true; } + @Override + public Set getOthersSystemComponentSet(Context context) { + return new ArraySet<>(); + } + @Override public Set getHideSystemComponentSet(Context context) { return new ArraySet<>(); diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntry.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntry.java index bbd2b66a054..9e0c6d79196 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntry.java +++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntry.java @@ -435,4 +435,45 @@ public class BatteryDiffEntry { return false; } } + + /** Specific battery diff entry for others. */ + static class OthersBatteryDiffEntry extends BatteryDiffEntry { + OthersBatteryDiffEntry(Context context) { + super(context, + /*foregroundUsageTimeInMs=*/ 0, + /*backgroundUsageTimeInMs=*/ 0, + /*screenOnTimeInMs=*/ 0, + /*consumePower=*/ 0, + /*foregroundUsageConsumePower=*/ 0, + /*foregroundServiceUsageConsumePower=*/ 0, + /*backgroundUsageConsumePower=*/ 0, + /*cachedUsageConsumePower=*/ 0, + new BatteryHistEntry(new ContentValues())); + } + + @Override + public String getKey() { + return "S|Others"; + } + + @Override + public String getAppLabel() { + return mContext.getString(R.string.battery_usage_others); + } + + @Override + public Drawable getAppIcon() { + return mContext.getDrawable(R.drawable.ic_settings_ethernet); + } + + @Override + public boolean validForRestriction() { + return false; + } + + @Override + public boolean isSystemEntry() { + return true; + } + } } diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java index b0128bf0231..649adbe8069 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java +++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java @@ -1719,6 +1719,7 @@ public final class DataProcessor { batteryDiffData.setTotalConsumePower(); batteryDiffData.sortEntries(); combineIntoSystemApps(context, batteryDiffData); + combineSystemItemsIntoOthers(context, batteryDiffData); }); }); } @@ -1744,6 +1745,33 @@ public final class DataProcessor { } } + private static void combineSystemItemsIntoOthers( + final Context context, final BatteryDiffData batteryDiffData) { + final Set othersSystemComponentSet = + FeatureFactory.getFactory(context) + .getPowerUsageFeatureProvider(context) + .getOthersSystemComponentSet(context); + + BatteryDiffEntry.OthersBatteryDiffEntry othersDiffEntry = null; + final Iterator systemListIterator = + batteryDiffData.getSystemDiffEntryList().iterator(); + while (systemListIterator.hasNext()) { + final BatteryDiffEntry batteryDiffEntry = systemListIterator.next(); + if (othersSystemComponentSet.contains(batteryDiffEntry.mBatteryHistEntry.mDrainType)) { + if (othersDiffEntry == null) { + othersDiffEntry = new BatteryDiffEntry.OthersBatteryDiffEntry(context); + } + othersDiffEntry.mConsumePower += batteryDiffEntry.mConsumePower; + othersDiffEntry.setTotalConsumePower( + batteryDiffEntry.getTotalConsumePower()); + systemListIterator.remove(); + } + } + if (othersDiffEntry != null) { + batteryDiffData.getSystemDiffEntryList().add(othersDiffEntry); + } + } + private static void combineIntoSystemApps( final Context context, final BatteryDiffData batteryDiffData) { final List systemAppsAllowlist =