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 =