diff --git a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java index 47b2a0af649..a55d0d34bfb 100644 --- a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java +++ b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java @@ -257,6 +257,27 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro BatteryEntry.startRequestQueue(); } + /** + * Gets the BatteryEntry list by using the supplied BatteryUsageStats. + */ + public List getBatteryEntryList( + BatteryUsageStats batteryUsageStats, boolean showAllApps) { + mBatteryUsageStats = USE_FAKE_DATA ? getFakeStats() : batteryUsageStats; + if (!sConfig.shouldShowBatteryAttributionList(mContext)) { + return null; + } + final int dischargePercentage = getDischargePercentage(batteryUsageStats); + final List usageList = getCoalescedUsageList(showAllApps); + final double totalPower = batteryUsageStats.getConsumedPower(); + for (int i = 0; i < usageList.size(); i++) { + final BatteryEntry entry = usageList.get(i); + final double percentOfTotal = mBatteryUtils.calculateBatteryPercent( + entry.getConsumedPower(), totalPower, dischargePercentage); + entry.percent = percentOfTotal; + } + return usageList; + } + private int getDischargePercentage(BatteryUsageStats batteryUsageStats) { int dischargePercentage = batteryUsageStats.getDischargePercentage(); if (dischargePercentage < 0) { @@ -311,7 +332,7 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro final int index = batteryEntryList.indexOfKey(realUid); if (index < 0) { // New entry. - batteryEntryList.put(realUid, new BatteryEntry(mActivity, mHandler, mUserManager, + batteryEntryList.put(realUid, new BatteryEntry(mContext, mHandler, mUserManager, consumer, isHidden, packages, null)); } else { // Combine BatterySippers if we already have one with this UID. @@ -328,7 +349,7 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro continue; } - results.add(new BatteryEntry(mActivity, mHandler, mUserManager, + results.add(new BatteryEntry(mContext, mHandler, mUserManager, consumer, /* isHidden */ true, null, null)); } @@ -337,7 +358,7 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro mBatteryUsageStats.getUserBatteryConsumers(); for (int i = 0, size = userBatteryConsumers.size(); i < size; i++) { final UserBatteryConsumer consumer = userBatteryConsumers.get(i); - results.add(new BatteryEntry(mActivity, mHandler, mUserManager, + results.add(new BatteryEntry(mContext, mHandler, mUserManager, consumer, /* isHidden */ true, null, null)); } } diff --git a/src/com/android/settings/fuelgauge/BatteryEntry.java b/src/com/android/settings/fuelgauge/BatteryEntry.java index 9fafefd154b..6c3add3f366 100644 --- a/src/com/android/settings/fuelgauge/BatteryEntry.java +++ b/src/com/android/settings/fuelgauge/BatteryEntry.java @@ -35,6 +35,7 @@ import android.os.UserBatteryConsumer; import android.os.UserHandle; import android.os.UserManager; import android.util.Log; +import android.util.Pair; import androidx.annotation.NonNull; @@ -182,49 +183,10 @@ public class BatteryEntry { getQuickNameIconForUid(uid, packages); return; } else if (batteryConsumer instanceof SystemBatteryConsumer) { - switch(((SystemBatteryConsumer) batteryConsumer).getDrainType()) { - case SystemBatteryConsumer.DRAIN_TYPE_AMBIENT_DISPLAY: - name = context.getResources().getString(R.string.ambient_display_screen_title); - iconId = R.drawable.ic_settings_aod; - break; - case SystemBatteryConsumer.DRAIN_TYPE_BLUETOOTH: - name = context.getResources().getString(R.string.power_bluetooth); - iconId = com.android.internal.R.drawable.ic_settings_bluetooth; - break; - case SystemBatteryConsumer.DRAIN_TYPE_CAMERA: - name = context.getResources().getString(R.string.power_camera); - iconId = R.drawable.ic_settings_camera; - break; - case SystemBatteryConsumer.DRAIN_TYPE_MOBILE_RADIO: - name = context.getResources().getString(R.string.power_cell); - iconId = R.drawable.ic_cellular_1_bar; - break; - case SystemBatteryConsumer.DRAIN_TYPE_FLASHLIGHT: - name = context.getResources().getString(R.string.power_flashlight); - iconId = R.drawable.ic_settings_display; - break; - case SystemBatteryConsumer.DRAIN_TYPE_PHONE: - name = context.getResources().getString(R.string.power_phone); - iconId = R.drawable.ic_settings_voice_calls; - break; - case SystemBatteryConsumer.DRAIN_TYPE_SCREEN: - name = context.getResources().getString(R.string.power_screen); - iconId = R.drawable.ic_settings_display; - break; - case SystemBatteryConsumer.DRAIN_TYPE_WIFI: - name = context.getResources().getString(R.string.power_wifi); - iconId = R.drawable.ic_settings_wireless; - break; - case SystemBatteryConsumer.DRAIN_TYPE_IDLE: - case SystemBatteryConsumer.DRAIN_TYPE_MEMORY: - name = context.getResources().getString(R.string.power_idle); - iconId = R.drawable.ic_settings_phone_idle; - break; - case SystemBatteryConsumer.DRAIN_TYPE_CUSTOM: - name = null; - iconId = R.drawable.ic_power_system; - break; - } + final Pair resourcePair = getResourcePairFromDrainType( + context, ((SystemBatteryConsumer) batteryConsumer).getDrainType()); + iconId = resourcePair.first; + name = resourcePair.second; } else if (batteryConsumer instanceof UserBatteryConsumer) { UserInfo info = um.getUserInfo(((UserBatteryConsumer) batteryConsumer).getUserId()); if (info != null) { @@ -493,4 +455,57 @@ public class BatteryEntry { ((UidBatteryConsumer) batteryConsumer).getPackageWithHighestDrain(); } } + + /** + * Gets icon ID and name from system battery consumer drain type. + */ + public static Pair getResourcePairFromDrainType( + Context context, int drainType) { + String name = null; + int iconId = 0; + switch (drainType) { + case SystemBatteryConsumer.DRAIN_TYPE_AMBIENT_DISPLAY: + name = context.getResources().getString(R.string.ambient_display_screen_title); + iconId = R.drawable.ic_settings_aod; + break; + case SystemBatteryConsumer.DRAIN_TYPE_BLUETOOTH: + name = context.getResources().getString(R.string.power_bluetooth); + iconId = com.android.internal.R.drawable.ic_settings_bluetooth; + break; + case SystemBatteryConsumer.DRAIN_TYPE_CAMERA: + name = context.getResources().getString(R.string.power_camera); + iconId = R.drawable.ic_settings_camera; + break; + case SystemBatteryConsumer.DRAIN_TYPE_MOBILE_RADIO: + name = context.getResources().getString(R.string.power_cell); + iconId = R.drawable.ic_cellular_1_bar; + break; + case SystemBatteryConsumer.DRAIN_TYPE_FLASHLIGHT: + name = context.getResources().getString(R.string.power_flashlight); + iconId = R.drawable.ic_settings_display; + break; + case SystemBatteryConsumer.DRAIN_TYPE_PHONE: + name = context.getResources().getString(R.string.power_phone); + iconId = R.drawable.ic_settings_voice_calls; + break; + case SystemBatteryConsumer.DRAIN_TYPE_SCREEN: + name = context.getResources().getString(R.string.power_screen); + iconId = R.drawable.ic_settings_display; + break; + case SystemBatteryConsumer.DRAIN_TYPE_WIFI: + name = context.getResources().getString(R.string.power_wifi); + iconId = R.drawable.ic_settings_wireless; + break; + case SystemBatteryConsumer.DRAIN_TYPE_IDLE: + case SystemBatteryConsumer.DRAIN_TYPE_MEMORY: + name = context.getResources().getString(R.string.power_idle); + iconId = R.drawable.ic_settings_phone_idle; + break; + case SystemBatteryConsumer.DRAIN_TYPE_CUSTOM: + name = null; + iconId = R.drawable.ic_power_system; + break; + } + return new Pair<>(Integer.valueOf(iconId), name); + } }