diff --git a/res/values/strings.xml b/res/values/strings.xml
index bdf9107e0ab..72eba8b9e06 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5350,6 +5350,8 @@
Breakdown by apps
Breakdown by system
+
+ < %1$s
diff --git a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
index 212a61903f9..8decbd99ff7 100644
--- a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
@@ -124,7 +124,7 @@ public class AppBatteryPreferenceController extends BasePreferenceController
mParent.getMetricsCategory(),
mBatteryDiffEntry,
Utils.formatPercentage(
- mBatteryDiffEntry.getPercentOfTotal(), /* round */ true),
+ mBatteryDiffEntry.getPercentage(), /* round */ true),
/*slotInformation=*/ null, /*showTimeInformation=*/ false);
return true;
}
@@ -190,7 +190,7 @@ public class AppBatteryPreferenceController extends BasePreferenceController
void updateBatteryWithDiffEntry() {
if (mBatteryDiffEntry != null && mBatteryDiffEntry.mConsumePower > 0) {
mBatteryPercent = Utils.formatPercentage(
- mBatteryDiffEntry.getPercentOfTotal(), /* round */ true);
+ mBatteryDiffEntry.getPercentage(), /* round */ true);
mPreference.setSummary(mContext.getString(
R.string.battery_summary, mBatteryPercent));
} else {
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java
index 67613ff406c..c5dfb0d357d 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java
@@ -32,6 +32,8 @@ import java.util.Set;
/** Wraps the battery usage diff data for each entry used for battery usage app list. */
public class BatteryDiffData {
+ static final double SMALL_PERCENTAGE_THRESHOLD = 1f;
+
private final List mAppEntries;
private final List mSystemEntries;
@@ -52,8 +54,8 @@ public class BatteryDiffData {
combineBatteryDiffEntry(context, featureProvider, systemAppsSet);
}
- setTotalConsumePower();
- sortEntries();
+ processAndSortEntries(mAppEntries);
+ processAndSortEntries(mSystemEntries);
}
public List getAppDiffEntryList() {
@@ -77,18 +79,6 @@ public class BatteryDiffData {
combineSystemItemsIntoOthers(context, featureProvider, mSystemEntries);
}
- /** Sets total consume power for app and system entries separately. */
- private void setTotalConsumePower() {
- setTotalConsumePowerForAllEntries(mAppEntries);
- setTotalConsumePowerForAllEntries(mSystemEntries);
- }
-
- /** Sorts entries based on consumed percentage. */
- private void sortEntries() {
- Collections.sort(mAppEntries, BatteryDiffEntry.COMPARATOR);
- Collections.sort(mSystemEntries, BatteryDiffEntry.COMPARATOR);
- }
-
private static void purgeBatteryDiffData(
final PowerUsageFeatureProvider featureProvider,
final List entries) {
@@ -177,18 +167,6 @@ public class BatteryDiffData {
}
}
- // Sets total consume power for each entry.
- private static void setTotalConsumePowerForAllEntries(
- final List batteryDiffEntries) {
- double totalConsumePower = 0.0;
- for (BatteryDiffEntry batteryDiffEntry : batteryDiffEntries) {
- totalConsumePower += batteryDiffEntry.mConsumePower;
- }
- for (BatteryDiffEntry batteryDiffEntry : batteryDiffEntries) {
- batteryDiffEntry.setTotalConsumePower(totalConsumePower);
- }
- }
-
@VisibleForTesting
static boolean needsCombineInSystemApp(final BatteryDiffEntry batteryDiffEntry,
final List systemAppsAllowlist, final Set systemAppsSet) {
@@ -207,4 +185,51 @@ public class BatteryDiffData {
return systemAppsSet != null && systemAppsSet.contains(packageName);
}
+
+ /**
+ * Sets total consume power, and adjusts the percentages to ensure the total round percentage
+ * could be 100%, and then sorts entries based on the sorting key.
+ */
+ @VisibleForTesting
+ static void processAndSortEntries(final List batteryDiffEntries) {
+ if (batteryDiffEntries.isEmpty()) {
+ return;
+ }
+
+ // Sets total consume power.
+ double totalConsumePower = 0.0;
+ for (BatteryDiffEntry batteryDiffEntry : batteryDiffEntries) {
+ totalConsumePower += batteryDiffEntry.mConsumePower;
+ }
+ for (BatteryDiffEntry batteryDiffEntry : batteryDiffEntries) {
+ batteryDiffEntry.setTotalConsumePower(totalConsumePower);
+ }
+
+ // Adjusts percentages to show.
+ // The lower bound is treating all the small percentages as 0.
+ // The upper bound is treating all the small percentages as 1.
+ int totalLowerBound = 0;
+ int totalUpperBound = 0;
+ for (BatteryDiffEntry entry : batteryDiffEntries) {
+ if (entry.getPercentage() < SMALL_PERCENTAGE_THRESHOLD) {
+ totalUpperBound += 1;
+ } else {
+ int roundPercentage = Math.round((float) entry.getPercentage());
+ totalLowerBound += roundPercentage;
+ totalUpperBound += roundPercentage;
+ }
+ }
+ if (totalLowerBound > 100 || totalUpperBound < 100) {
+ Collections.sort(batteryDiffEntries, BatteryDiffEntry.COMPARATOR);
+ for (int i = 0; i < totalLowerBound - 100 && i < batteryDiffEntries.size(); i++) {
+ batteryDiffEntries.get(i).setAdjustPercentageOffset(-1);
+ }
+ for (int i = 0; i < 100 - totalUpperBound && i < batteryDiffEntries.size(); i++) {
+ batteryDiffEntries.get(i).setAdjustPercentageOffset(1);
+ }
+ }
+
+ // Sorts entries.
+ Collections.sort(batteryDiffEntries, BatteryDiffEntry.COMPARATOR);
+ }
}
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntry.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntry.java
index d53afdf5b98..2ed91965b21 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntry.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntry.java
@@ -47,7 +47,7 @@ public class BatteryDiffEntry {
@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
public static final Map sValidForRestriction = new HashMap<>();
- /** A comparator for {@link BatteryDiffEntry} based on consumed percentage. */
+ /** A comparator for {@link BatteryDiffEntry} based on the sorting key. */
public static final Comparator COMPARATOR =
(a, b) -> Double.compare(b.getSortingKey(), a.getSortingKey());
@@ -65,7 +65,8 @@ public class BatteryDiffEntry {
protected Context mContext;
private double mTotalConsumePower;
- private double mPercentOfTotal;
+ private double mPercentage;
+ private int mAdjustPercentageOffset;
private UserManager mUserManager;
private String mDefaultPackageName = null;
@@ -107,8 +108,9 @@ public class BatteryDiffEntry {
/** Sets the total consumed power in a specific time slot. */
public void setTotalConsumePower(double totalConsumePower) {
mTotalConsumePower = totalConsumePower;
- mPercentOfTotal = totalConsumePower == 0
+ mPercentage = totalConsumePower == 0
? 0 : (mConsumePower / mTotalConsumePower) * 100.0;
+ mAdjustPercentageOffset = 0;
}
/** Gets the total consumed power in a specific time slot. */
@@ -117,13 +119,23 @@ public class BatteryDiffEntry {
}
/** Gets the percentage of total consumed power. */
- public double getPercentOfTotal() {
- return mPercentOfTotal;
+ public double getPercentage() {
+ return mPercentage;
+ }
+
+ /** Gets the percentage offset to adjust. */
+ public double getAdjustPercentageOffset() {
+ return mAdjustPercentageOffset;
+ }
+
+ /** Sets the percentage offset to adjust. */
+ public void setAdjustPercentageOffset(int offset) {
+ mAdjustPercentageOffset = offset;
}
/** Gets the key for sorting */
public double getSortingKey() {
- return getPercentOfTotal();
+ return getPercentage() + getAdjustPercentageOffset();
}
/** Clones a new instance. */
@@ -369,7 +381,7 @@ public class BatteryDiffEntry {
.append(String.format("\n\tname=%s restrictable=%b",
mAppLabel, mValidForRestriction))
.append(String.format("\n\tconsume=%.2f%% %f/%f",
- mPercentOfTotal, mConsumePower, mTotalConsumePower))
+ mPercentage, mConsumePower, mTotalConsumePower))
.append(String.format("\n\tconsume power= foreground:%f foregroundService:%f",
mForegroundUsageConsumePower, mForegroundServiceUsageConsumePower))
.append(String.format("\n\tconsume power= background:%f cached:%f",
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java
index 485c806850a..0be6c988ec7 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java
@@ -35,6 +35,7 @@ import androidx.preference.PreferenceScreen;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
+import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
@@ -86,6 +87,8 @@ public class BatteryUsageBreakdownController extends BasePreferenceController
FooterPreference mFooterPreference;
@VisibleForTesting
BatteryDiffData mBatteryDiffData;
+ @VisibleForTesting
+ String mPercentLessThanThresholdText;
public BatteryUsageBreakdownController(
Context context, Lifecycle lifecycle, SettingsActivity activity,
@@ -147,11 +150,11 @@ public class BatteryUsageBreakdownController extends BasePreferenceController
: SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM,
/* pageId */ SettingsEnums.OPEN_BATTERY_USAGE,
TextUtils.isEmpty(packageName) ? PACKAGE_NAME_NONE : packageName,
- (int) Math.round(diffEntry.getPercentOfTotal()));
+ (int) Math.round(diffEntry.getPercentage()));
Log.d(TAG, String.format("handleClick() label=%s key=%s package=%s",
diffEntry.getAppLabel(), histEntry.getKey(), histEntry.mPackageName));
AdvancedPowerUsageDetail.startBatteryDetailPage(
- mActivity, mFragment, diffEntry, powerPref.getPercent(), mSlotTimestamp);
+ mActivity, mFragment, diffEntry, powerPref.getPercentage(), mSlotTimestamp);
return true;
}
@@ -163,6 +166,9 @@ public class BatteryUsageBreakdownController extends BasePreferenceController
mSpinnerPreference = screen.findPreference(SPINNER_PREFERENCE_KEY);
mAppListPreferenceGroup = screen.findPreference(APP_LIST_PREFERENCE_KEY);
mFooterPreference = screen.findPreference(FOOTER_PREFERENCE_KEY);
+ mPercentLessThanThresholdText = mPrefContext.getString(
+ R.string.battery_usage_less_than_percent,
+ Utils.formatPercentage(BatteryDiffData.SMALL_PERCENTAGE_THRESHOLD, false));
mAppListPreferenceGroup.setOrderingAsAdded(false);
mSpinnerPreference.initializeSpinner(
@@ -279,11 +285,11 @@ public class BatteryUsageBreakdownController extends BasePreferenceController
pref.setIcon(appIcon);
pref.setTitle(appLabel);
pref.setOrder(prefIndex);
- pref.setPercent(entry.getPercentOfTotal());
pref.setSingleLineTitle(true);
// Sets the BatteryDiffEntry to preference for launching detailed page.
pref.setBatteryDiffEntry(entry);
pref.setSelectable(entry.validForRestriction());
+ setPreferencePercentage(pref, entry);
setPreferenceSummary(pref, entry);
if (!isAdded) {
mAppListPreferenceGroup.addPreference(pref);
@@ -307,6 +313,17 @@ public class BatteryUsageBreakdownController extends BasePreferenceController
mAppListPreferenceGroup.removeAll();
}
+ @VisibleForTesting
+ void setPreferencePercentage(
+ PowerGaugePreference preference, BatteryDiffEntry entry) {
+ preference.setPercentage(
+ entry.getPercentage() < BatteryDiffData.SMALL_PERCENTAGE_THRESHOLD
+ ? mPercentLessThanThresholdText
+ : Utils.formatPercentage(
+ entry.getPercentage() + entry.getAdjustPercentageOffset(),
+ /* round= */ true));
+ }
+
@VisibleForTesting
void setPreferenceSummary(
PowerGaugePreference preference, BatteryDiffEntry entry) {
diff --git a/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java b/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java
index 0aee8a57671..56ada8eca59 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java
@@ -38,7 +38,6 @@ import com.android.settingslib.widget.AppPreference;
*/
public class PowerGaugePreference extends AppPreference {
- private static final double PERCENTAGE_TO_SHOW_THRESHOLD = 1f;
// Please see go/battery-usage-app-list-alpha
private static final float SELECTABLE_ALPHA = 1f;
private static final float UNSELECTABLE_ALPHA_LIGHT_MODE = 0.65f;
@@ -81,29 +80,17 @@ public class PowerGaugePreference extends AppPreference {
notifyChanged();
}
- /** Sets the percent of total. */
- public void setPercent(double percentOfTotal) {
- mProgress = percentOfTotal < PERCENTAGE_TO_SHOW_THRESHOLD
- ? "-" : Utils.formatPercentage(percentOfTotal, true);
+ /** Sets the percentage to show. */
+ public void setPercentage(CharSequence percentage) {
+ mProgress = percentage;
notifyChanged();
}
- /** Gets the percent of total. */
- public String getPercent() {
+ /** Gets the percentage to show. */
+ public String getPercentage() {
return mProgress.toString();
}
- /** Sets the subtitle. */
- public void setSubtitle(CharSequence subtitle) {
- mProgress = subtitle;
- notifyChanged();
- }
-
- /** Gets the subtitle. */
- public CharSequence getSubtitle() {
- return mProgress;
- }
-
/** Sets whether to show anomaly icon */
public void shouldShowAnomalyIcon(boolean showAnomalyIcon) {
mShowAnomalyIcon = showAnomalyIcon;
diff --git a/src/com/android/settings/spa/app/appinfo/AppBatteryPreference.kt b/src/com/android/settings/spa/app/appinfo/AppBatteryPreference.kt
index edb2a1eaa0f..c4a89179b08 100644
--- a/src/com/android/settings/spa/app/appinfo/AppBatteryPreference.kt
+++ b/src/com/android/settings/spa/app/appinfo/AppBatteryPreference.kt
@@ -108,7 +108,7 @@ private class AppBatteryPresenter(private val context: Context, private val app:
private fun BatteryDiffEntry?.getSummary(): String =
this?.takeIf { mConsumePower > 0 }?.let {
context.getString(
- R.string.battery_summary, Utils.formatPercentage(percentOfTotal, true)
+ R.string.battery_summary, Utils.formatPercentage(percentage, true)
)
} ?: context.getString(R.string.no_battery_summary)
@@ -127,7 +127,7 @@ private class AppBatteryPresenter(private val context: Context, private val app:
context,
AppInfoSettingsProvider.METRICS_CATEGORY,
this,
- Utils.formatPercentage(percentOfTotal, true),
+ Utils.formatPercentage(percentage, true),
null,
false,
)
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java
index f4cb3f3948f..fc303c49470 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java
@@ -145,7 +145,7 @@ public class AppBatteryPreferenceControllerTest {
mController.displayPreference(mScreen);
mBatteryDiffEntry.mConsumePower = 1;
mController.mBatteryDiffEntry = mBatteryDiffEntry;
- when(mBatteryDiffEntry.getPercentOfTotal()).thenReturn(60.0);
+ when(mBatteryDiffEntry.getPercentage()).thenReturn(60.0);
mController.updateBatteryWithDiffEntry();
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffDataTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffDataTest.java
index 48a6e72a2a1..0985fe7d54b 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffDataTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffDataTest.java
@@ -37,6 +37,7 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -58,26 +59,10 @@ public class BatteryDiffDataTest {
@Test
public void needsCombineInSystemApp_isHidden_returnTrue() {
- final int currentUserId = mContext.getUserId();
- final BatteryHistEntry hiddenHistEntry = createBatteryHistEntry(
- ConvertUtils.FAKE_PACKAGE_NAME, "fake_label", /*consumePower=*/ 0,
- /*foregroundUsageConsumePower=*/ 0, /*foregroundServiceUsageConsumePower=*/ 0,
- /*backgroundUsageConsumePower=*/ 0, /*cachedUsageConsumePower=*/ 0,
- /*uid=*/ 0L, currentUserId, ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
- /*foregroundUsageTimeInMs=*/ 0L, /*backgroundUsageTimeInMs=*/ 0L, true);
- final BatteryDiffEntry hiddenDiffEntry = new BatteryDiffEntry(
- mContext,
- /*foregroundUsageTimeInMs=*/ 0,
- /*backgroundUsageTimeInMs=*/ 0,
- /*screenOnTimeInMs=*/ 0,
- /*consumePower=*/ 0,
- /*foregroundUsageConsumePower=*/ 0,
- /*foregroundServiceUsageConsumePower=*/ 0,
- /*backgroundUsageConsumePower=*/ 0,
- /*cachedUsageConsumePower=*/ 0,
- hiddenHistEntry);
+ final BatteryDiffEntry hiddenDiffEntry =
+ createBatteryDiffEntry(mContext, /*consumePower=*/ 0, /*isHidden=*/ true);
- boolean needsCombineInSystemApp = BatteryDiffData.needsCombineInSystemApp(
+ final boolean needsCombineInSystemApp = BatteryDiffData.needsCombineInSystemApp(
hiddenDiffEntry, List.of(), Set.of());
assertThat(needsCombineInSystemApp).isTrue();
@@ -85,29 +70,13 @@ public class BatteryDiffDataTest {
@Test
public void needsCombineInSystemApp_isSystemApp_returnTrue() {
- final int currentUserId = mContext.getUserId();
- final BatteryHistEntry batteryHistEntry = createBatteryHistEntry(
- ConvertUtils.FAKE_PACKAGE_NAME, "fake_label", /*consumePower=*/ 0,
- /*foregroundUsageConsumePower=*/ 0, /*foregroundServiceUsageConsumePower=*/ 0,
- /*backgroundUsageConsumePower=*/ 0, /*cachedUsageConsumePower=*/ 0,
- /*uid=*/ 0L, currentUserId, ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
- /*foregroundUsageTimeInMs=*/ 0L, /*backgroundUsageTimeInMs=*/ 0L, false);
- final BatteryDiffEntry batteryDiffEntry = new BatteryDiffEntry(
- mContext,
- /*foregroundUsageTimeInMs=*/ 0,
- /*backgroundUsageTimeInMs=*/ 0,
- /*screenOnTimeInMs=*/ 0,
- /*consumePower=*/ 0,
- /*foregroundUsageConsumePower=*/ 0,
- /*foregroundServiceUsageConsumePower=*/ 0,
- /*backgroundUsageConsumePower=*/ 0,
- /*cachedUsageConsumePower=*/ 0,
- batteryHistEntry);
+ final BatteryDiffEntry batteryDiffEntry =
+ createBatteryDiffEntry(mContext, /*consumePower=*/ 0, /*isHidden=*/ false);
doReturn(mAppEntry).when(mApplicationsState).getEntry(anyString(), anyInt());
mAppEntry.info = mApplicationInfo;
mApplicationInfo.flags = ApplicationInfo.FLAG_SYSTEM;
- boolean needsCombineInSystemApp = BatteryDiffData.needsCombineInSystemApp(
+ final boolean needsCombineInSystemApp = BatteryDiffData.needsCombineInSystemApp(
batteryDiffEntry, List.of(), Set.of(ConvertUtils.FAKE_PACKAGE_NAME));
assertThat(needsCombineInSystemApp).isTrue();
@@ -115,32 +84,78 @@ public class BatteryDiffDataTest {
@Test
public void needsCombineInSystemApp_notSystemApp_returnFalse() {
- final int currentUserId = mContext.getUserId();
+ final BatteryDiffEntry batteryDiffEntry =
+ createBatteryDiffEntry(mContext, /*consumePower=*/ 0, /*isHidden=*/ false);
+ doReturn(mAppEntry).when(mApplicationsState).getEntry(anyString(), anyInt());
+ mAppEntry.info = mApplicationInfo;
+ mApplicationInfo.flags = 0;
+
+ final boolean needsCombineInSystemApp = BatteryDiffData.needsCombineInSystemApp(
+ batteryDiffEntry, List.of(), Set.of());
+
+ assertThat(needsCombineInSystemApp).isFalse();
+ }
+
+ @Test
+ public void processPercentsAndSort_sumLessThan100_adjustTo100() {
+ List batteryDiffEntries = new ArrayList<>();
+ batteryDiffEntries.add(
+ createBatteryDiffEntry(mContext, /*consumePower=*/ 33.33, /*isHidden=*/ false));
+ batteryDiffEntries.add(
+ createBatteryDiffEntry(mContext, /*consumePower=*/ 33.34, /*isHidden=*/ false));
+ batteryDiffEntries.add(
+ createBatteryDiffEntry(mContext, /*consumePower=*/ 33.33, /*isHidden=*/ false));
+
+ BatteryDiffData.processAndSortEntries(batteryDiffEntries);
+
+ assertThat(batteryDiffEntries.get(0).getPercentage()).isEqualTo(33.34);
+ assertThat(batteryDiffEntries.get(0).getAdjustPercentageOffset()).isEqualTo(1);
+ assertThat(batteryDiffEntries.get(1).getPercentage()).isEqualTo(33.33);
+ assertThat(batteryDiffEntries.get(1).getAdjustPercentageOffset()).isEqualTo(0);
+ assertThat(batteryDiffEntries.get(2).getPercentage()).isEqualTo(33.33);
+ assertThat(batteryDiffEntries.get(2).getAdjustPercentageOffset()).isEqualTo(0);
+ }
+
+ @Test
+ public void processPercentsAndSort_sumGreaterThan100_adjustTo100() {
+ List batteryDiffEntries = new ArrayList<>();
+ batteryDiffEntries.add(
+ createBatteryDiffEntry(mContext, /*consumePower=*/ 48.5, /*isHidden=*/ false));
+ batteryDiffEntries.add(
+ createBatteryDiffEntry(mContext, /*consumePower=*/ 3, /*isHidden=*/ false));
+ batteryDiffEntries.add(
+ createBatteryDiffEntry(mContext, /*consumePower=*/ 48.5, /*isHidden=*/ false));
+
+ BatteryDiffData.processAndSortEntries(batteryDiffEntries);
+
+ assertThat(batteryDiffEntries.get(0).getPercentage()).isEqualTo(48.5);
+ assertThat(batteryDiffEntries.get(0).getAdjustPercentageOffset()).isEqualTo(0);
+ assertThat(batteryDiffEntries.get(1).getPercentage()).isEqualTo(48.5);
+ assertThat(batteryDiffEntries.get(1).getAdjustPercentageOffset()).isEqualTo(-1);
+ assertThat(batteryDiffEntries.get(2).getPercentage()).isEqualTo(3);
+ assertThat(batteryDiffEntries.get(2).getAdjustPercentageOffset()).isEqualTo(0);
+ }
+
+ private static BatteryDiffEntry createBatteryDiffEntry(
+ Context context, double consumePower, boolean isHidden) {
+ final int currentUserId = context.getUserId();
final BatteryHistEntry batteryHistEntry = createBatteryHistEntry(
- ConvertUtils.FAKE_PACKAGE_NAME, "fake_label", /*consumePower=*/ 0,
+ ConvertUtils.FAKE_PACKAGE_NAME, "fake_label", consumePower,
/*foregroundUsageConsumePower=*/ 0, /*foregroundServiceUsageConsumePower=*/ 0,
/*backgroundUsageConsumePower=*/ 0, /*cachedUsageConsumePower=*/ 0,
/*uid=*/ 0L, currentUserId, ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
- /*foregroundUsageTimeInMs=*/ 0L, /*backgroundUsageTimeInMs=*/ 0L, false);
- final BatteryDiffEntry batteryDiffEntry = new BatteryDiffEntry(
- mContext,
+ /*foregroundUsageTimeInMs=*/ 0L, /*backgroundUsageTimeInMs=*/ 0L, isHidden);
+ return new BatteryDiffEntry(
+ context,
/*foregroundUsageTimeInMs=*/ 0,
/*backgroundUsageTimeInMs=*/ 0,
/*screenOnTimeInMs=*/ 0,
- /*consumePower=*/ 0,
+ /*consumePower=*/ consumePower,
/*foregroundUsageConsumePower=*/ 0,
/*foregroundServiceUsageConsumePower=*/ 0,
/*backgroundUsageConsumePower=*/ 0,
/*cachedUsageConsumePower=*/ 0,
batteryHistEntry);
- doReturn(mAppEntry).when(mApplicationsState).getEntry(anyString(), anyInt());
- mAppEntry.info = mApplicationInfo;
- mApplicationInfo.flags = 0;
-
- boolean needsCombineInSystemApp = BatteryDiffData.needsCombineInSystemApp(
- batteryDiffEntry, List.of(), Set.of());
-
- assertThat(needsCombineInSystemApp).isFalse();
}
private static BatteryHistEntry createBatteryHistEntry(
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntryTest.java
index 1085a6b6d73..655f1e41869 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntryTest.java
@@ -106,7 +106,7 @@ public final class BatteryDiffEntryTest {
/*batteryHistEntry=*/ null);
entry.setTotalConsumePower(100.0);
- assertThat(entry.getPercentOfTotal()).isEqualTo(22.0);
+ assertThat(entry.getPercentage()).isEqualTo(22.0);
}
@Test
@@ -125,21 +125,28 @@ public final class BatteryDiffEntryTest {
/*batteryHistEntry=*/ null);
entry.setTotalConsumePower(0);
- assertThat(entry.getPercentOfTotal()).isEqualTo(0);
+ assertThat(entry.getPercentage()).isEqualTo(0);
}
@Test
public void testComparator_sortCollectionsInDescOrder() {
final List entryList = new ArrayList<>();
// Generates fake testing data.
+ BatteryDiffEntry systemAppsBatteryDiffEntry =
+ new BatteryDiffEntry.SystemAppsBatteryDiffEntry(mContext);
+ systemAppsBatteryDiffEntry.mConsumePower = 16;
+ systemAppsBatteryDiffEntry.setTotalConsumePower(100);
+ entryList.add(systemAppsBatteryDiffEntry);
entryList.add(createBatteryDiffEntry(30, mBatteryHistEntry));
entryList.add(createBatteryDiffEntry(20, mBatteryHistEntry));
entryList.add(createBatteryDiffEntry(10, mBatteryHistEntry));
+
Collections.sort(entryList, BatteryDiffEntry.COMPARATOR);
- assertThat(entryList.get(0).getPercentOfTotal()).isEqualTo(30);
- assertThat(entryList.get(1).getPercentOfTotal()).isEqualTo(20);
- assertThat(entryList.get(2).getPercentOfTotal()).isEqualTo(10);
+ assertThat(entryList.get(0).getPercentage()).isEqualTo(30);
+ assertThat(entryList.get(1).getPercentage()).isEqualTo(20);
+ assertThat(entryList.get(2).getPercentage()).isEqualTo(10);
+ assertThat(entryList.get(3).getPercentage()).isEqualTo(16);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java
index f312936db7b..395f655d739 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java
@@ -234,6 +234,40 @@ public final class BatteryUsageBreakdownControllerTest {
/* percentage of total */ 100);
}
+ @Test
+ public void setPreferencePercent_lessThanThreshold_expectedFormat() {
+ final PowerGaugePreference pref = new PowerGaugePreference(mContext);
+ final BatteryDiffEntry batteryDiffEntry = createBatteryDiffEntry(
+ /*isSystem=*/ true,
+ /*screenOnTimeInMs=*/ 0,
+ /*foregroundUsageTimeInMs=*/ 0,
+ /*backgroundUsageTimeInMs=*/ 0);
+ batteryDiffEntry.mConsumePower = 0.8;
+ batteryDiffEntry.setTotalConsumePower(100);
+ mBatteryUsageBreakdownController.mPercentLessThanThresholdText = "< 1%";
+
+ mBatteryUsageBreakdownController.setPreferencePercentage(pref, batteryDiffEntry);
+
+ assertThat(pref.getPercentage()).isEqualTo("< 1%");
+ }
+
+ @Test
+ public void setPreferencePercent_greaterThanThreshold_expectedFormat() {
+ final PowerGaugePreference pref = new PowerGaugePreference(mContext);
+ final BatteryDiffEntry batteryDiffEntry = createBatteryDiffEntry(
+ /*isSystem=*/ true,
+ /*screenOnTimeInMs=*/ 0,
+ /*foregroundUsageTimeInMs=*/ 0,
+ /*backgroundUsageTimeInMs=*/ 0);
+ batteryDiffEntry.mConsumePower = 16;
+ batteryDiffEntry.setTotalConsumePower(100);
+ mBatteryUsageBreakdownController.mPercentLessThanThresholdText = "< 1%";
+
+ mBatteryUsageBreakdownController.setPreferencePercentage(pref, batteryDiffEntry);
+
+ assertThat(pref.getPercentage()).isEqualTo("16%");
+ }
+
@Test
public void setPreferenceSummary_systemEntryTotalUsageTimeIsZero_emptySummary() {
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
index 0ecf50ead18..1d3f72b8bfd 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
@@ -1993,7 +1993,7 @@ public final class DataProcessorTest {
assertThat(entry.mBatteryHistEntry.mUserId).isEqualTo(userId);
assertThat(entry.mBatteryHistEntry.mUid).isEqualTo(uid);
assertThat(entry.mBatteryHistEntry.mConsumerType).isEqualTo(consumerType);
- assertThat(entry.getPercentOfTotal()).isEqualTo(consumePercentage);
+ assertThat(entry.getPercentage()).isEqualTo(consumePercentage);
assertThat(entry.mForegroundUsageConsumePower).isEqualTo(foregroundUsageConsumePower);
assertThat(entry.mForegroundServiceUsageConsumePower)
.isEqualTo(foregroundServiceUsageConsumePower);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreferenceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreferenceTest.java
index e9573f1e436..bee30454060 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreferenceTest.java
@@ -65,15 +65,6 @@ public class PowerGaugePreferenceTest {
assertThat(mPowerGaugePreference.getLayoutResource()).isEqualTo(R.layout.preference_app);
}
- @Test
- public void testOnBindViewHolder_bindSubtitle() {
- mPowerGaugePreference.setSubtitle(SUBTITLE);
- mPowerGaugePreference.onBindViewHolder(mPreferenceViewHolder);
-
- TextView widgetSummary = (TextView) mPreferenceViewHolder.findViewById(R.id.widget_summary);
- assertThat(widgetSummary.getText()).isEqualTo(SUBTITLE);
- }
-
@Test
public void testOnBindViewHolder_showAnomaly_bindAnomalyIcon() {
mPowerGaugePreference.shouldShowAnomalyIcon(true);
@@ -104,18 +95,4 @@ public class PowerGaugePreferenceTest {
assertThat(mPreferenceViewHolder.findViewById(android.R.id.title).getContentDescription())
.isEqualTo(CONTENT_DESCRIPTION);
}
-
- @Test
- public void setPercent_greaterThanThreshold_showNumber() {
- mPowerGaugePreference.setPercent(99.5);
-
- assertThat(mPowerGaugePreference.getPercent()).isEqualTo("100%");
- }
-
- @Test
- public void setPercent_lessThanThreshold_showBar() {
- mPowerGaugePreference.setPercent(0.95);
-
- assertThat(mPowerGaugePreference.getPercent()).isEqualTo("-");
- }
}
diff --git a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppBatteryPreferenceTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppBatteryPreferenceTest.kt
index 276b711a104..8dd494596f0 100644
--- a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppBatteryPreferenceTest.kt
+++ b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppBatteryPreferenceTest.kt
@@ -37,8 +37,6 @@ import com.android.settings.fuelgauge.AdvancedPowerUsageDetail
import com.android.settings.fuelgauge.batteryusage.BatteryChartPreferenceController
import com.android.settings.fuelgauge.batteryusage.BatteryDiffEntry
import com.android.settings.testutils.mockAsUser
-import com.android.settingslib.spaprivileged.framework.common.asUser
-import com.android.settingslib.spaprivileged.model.app.userHandle
import com.android.settingslib.spaprivileged.model.app.userId
import org.junit.After
import org.junit.Before
@@ -142,7 +140,7 @@ class AppBatteryPreferenceTest {
val batteryDiffEntry = mock(BatteryDiffEntry::class.java).apply {
mConsumePower = 12.3
}
- whenever(batteryDiffEntry.percentOfTotal).thenReturn(45.6)
+ whenever(batteryDiffEntry.percentage).thenReturn(45.6)
mockBatteryDiffEntry(batteryDiffEntry)
setContent()
@@ -153,7 +151,7 @@ class AppBatteryPreferenceTest {
@Test
fun whenClick_openDetailsPage() {
val batteryDiffEntry = mock(BatteryDiffEntry::class.java)
- whenever(batteryDiffEntry.percentOfTotal).thenReturn(10.0)
+ whenever(batteryDiffEntry.percentage).thenReturn(10.0)
mockBatteryDiffEntry(batteryDiffEntry)
setContent()