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()