diff --git a/res/values/strings.xml b/res/values/strings.xml index 31e5de48820..42dcd9205d1 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -5099,6 +5099,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 =