Make percentage add up to dischargeAmount.

Refine it in PowerUsageAdvanced.

Bug: 35960502
Test: RunSettingsRoboTests
Change-Id: I46b06409102334e5e9eed4e540a27315a503f8b0
This commit is contained in:
jackqdyulei
2017-03-21 15:18:44 -07:00
parent e39e8350a1
commit da8d9fc3d0
2 changed files with 13 additions and 5 deletions

View File

@@ -15,6 +15,7 @@ package com.android.settings.fuelgauge;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.BatteryStats;
import android.os.Bundle; import android.os.Bundle;
import android.provider.SearchIndexableResource; import android.provider.SearchIndexableResource;
import android.support.annotation.ColorInt; import android.support.annotation.ColorInt;
@@ -46,6 +47,7 @@ public class PowerUsageAdvanced extends PowerUsageBase {
private static final String TAG = "AdvancedBatteryUsage"; private static final String TAG = "AdvancedBatteryUsage";
private static final String KEY_BATTERY_GRAPH = "battery_graph"; private static final String KEY_BATTERY_GRAPH = "battery_graph";
private static final String KEY_BATTERY_USAGE_LIST = "battery_usage_list"; private static final String KEY_BATTERY_USAGE_LIST = "battery_usage_list";
private static final int STATUS_TYPE = BatteryStats.STATS_SINCE_CHARGED;
@VisibleForTesting @VisibleForTesting
final int[] mUsageTypes = { final int[] mUsageTypes = {
@@ -165,9 +167,10 @@ public class PowerUsageAdvanced extends PowerUsageBase {
// TODO(b/35396770): add logic to extract the summary // TODO(b/35396770): add logic to extract the summary
final List<PowerUsageData> batteryDataList = new ArrayList<>(batteryDataMap.values()); final List<PowerUsageData> batteryDataList = new ArrayList<>(batteryDataMap.values());
final int dischargeAmount = statusHelper.getStats().getDischargeAmount(STATUS_TYPE);
final double totalPower = statusHelper.getTotalPower(); final double totalPower = statusHelper.getTotalPower();
for (final PowerUsageData usageData : batteryDataList) { for (final PowerUsageData usageData : batteryDataList) {
usageData.percentage = (usageData.totalPowerMah / totalPower) * 100; usageData.percentage = (usageData.totalPowerMah / totalPower) * dischargeAmount;
} }
Collections.sort(batteryDataList); Collections.sort(batteryDataList);

View File

@@ -27,6 +27,7 @@ import com.android.settings.fuelgauge.PowerUsageAdvanced.PowerUsageData.UsageTyp
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
@@ -38,6 +39,7 @@ import java.util.Set;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@@ -45,6 +47,7 @@ import static org.mockito.Mockito.when;
public class PowerUsageAdvancedTest { public class PowerUsageAdvancedTest {
private static final int FAKE_UID_1 = 50; private static final int FAKE_UID_1 = 50;
private static final int FAKE_UID_2 = 100; private static final int FAKE_UID_2 = 100;
private static final int DISCHARGE_AMOUNT = 60;
private static final double TYPE_APP_USAGE = 80; private static final double TYPE_APP_USAGE = 80;
private static final double TYPE_BLUETOOTH_USAGE = 50; private static final double TYPE_BLUETOOTH_USAGE = 50;
private static final double TYPE_WIFI_USAGE = 0; private static final double TYPE_WIFI_USAGE = 0;
@@ -53,7 +56,7 @@ public class PowerUsageAdvancedTest {
private static final double PRECISION = 0.001; private static final double PRECISION = 0.001;
@Mock @Mock
private BatterySipper mBatterySipper; private BatterySipper mBatterySipper;
@Mock @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private BatteryStatsHelper mBatteryStatsHelper; private BatteryStatsHelper mBatteryStatsHelper;
@Mock @Mock
private PowerUsageFeatureProvider mPowerUsageFeatureProvider; private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
@@ -76,6 +79,8 @@ public class PowerUsageAdvancedTest {
batterySippers.add(new BatterySipper(DrainType.WIFI, new FakeUid(FAKE_UID_1), batterySippers.add(new BatterySipper(DrainType.WIFI, new FakeUid(FAKE_UID_1),
TYPE_WIFI_USAGE)); TYPE_WIFI_USAGE));
when(mBatteryStatsHelper.getStats().getDischargeAmount(anyInt())).thenReturn(
DISCHARGE_AMOUNT);
when(mBatteryStatsHelper.getUsageList()).thenReturn(batterySippers); when(mBatteryStatsHelper.getUsageList()).thenReturn(batterySippers);
when(mBatteryStatsHelper.getTotalPower()).thenReturn(TOTAL_USAGE); when(mBatteryStatsHelper.getTotalPower()).thenReturn(TOTAL_USAGE);
mPowerUsageAdvanced.setPackageManager(mPackageManager); mPowerUsageAdvanced.setPackageManager(mPackageManager);
@@ -118,9 +123,9 @@ public class PowerUsageAdvancedTest {
@Test @Test
public void testParsePowerUsageData_PercentageCalculatedCorrectly() { public void testParsePowerUsageData_PercentageCalculatedCorrectly() {
final double percentApp = TYPE_APP_USAGE * 2 / TOTAL_USAGE * 100; final double percentApp = TYPE_APP_USAGE * 2 / TOTAL_USAGE * DISCHARGE_AMOUNT;
final double percentWifi = TYPE_WIFI_USAGE / TOTAL_USAGE * 100; final double percentWifi = TYPE_WIFI_USAGE / TOTAL_USAGE * DISCHARGE_AMOUNT;
final double percentBluetooth = TYPE_BLUETOOTH_USAGE / TOTAL_USAGE * 100; final double percentBluetooth = TYPE_BLUETOOTH_USAGE / TOTAL_USAGE * DISCHARGE_AMOUNT;
List<PowerUsageData> batteryData = List<PowerUsageData> batteryData =
mPowerUsageAdvanced.parsePowerUsageData(mBatteryStatsHelper); mPowerUsageAdvanced.parsePowerUsageData(mBatteryStatsHelper);