diff --git a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java index c435f8f5415..a8032256bd6 100644 --- a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java +++ b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java @@ -35,6 +35,7 @@ import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.core.InstrumentedPreferenceFragment; import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; @@ -591,6 +592,27 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll return true; } + static List getBatteryLast24HrUsageData(Context context) { + final long start = System.currentTimeMillis(); + final Map> batteryHistoryMap = + FeatureFactory.getFactory(context) + .getPowerUsageFeatureProvider(context) + .getBatteryHistory(context); + if (batteryHistoryMap == null || batteryHistoryMap.isEmpty()) { + return null; + } + Log.d(TAG, String.format("getBatteryLast24HrData() size=%d time=&d/ms", + batteryHistoryMap.size(), (System.currentTimeMillis() - start))); + final Map> batteryIndexedMap = + ConvertUtils.getIndexedUsageMap( + context, + /*timeSlotSize=*/ CHART_LEVEL_ARRAY_SIZE - 1, + getBatteryHistoryKeys(batteryHistoryMap), + batteryHistoryMap, + /*purgeLowPercentageAndFakeData=*/ true); + return batteryIndexedMap.get(BatteryChartView.SELECTED_INDEX_ALL); + } + private static long[] getBatteryHistoryKeys( final Map> batteryHistoryMap) { final List batteryHistoryKeyList = diff --git a/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java index 216b118a029..63a0b3d71d1 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java @@ -26,6 +26,8 @@ import android.os.BatteryManager; import android.os.BatteryUsageStats; import android.os.UserHandle; +import com.android.settings.testutils.FakeFeatureFactory; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -45,15 +47,18 @@ import java.util.TimeZone; public final class ConvertUtilsTest { private Context mContext; - @Mock - private BatteryUsageStats mBatteryUsageStats; - @Mock - private BatteryEntry mockBatteryEntry; + @Mock private BatteryUsageStats mBatteryUsageStats; + @Mock private BatteryEntry mockBatteryEntry; + + private FakeFeatureFactory mFeatureFactory; + private PowerUsageFeatureProvider mPowerUsageFeatureProvider; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); + mFeatureFactory = FakeFeatureFactory.setupForTest(); + mPowerUsageFeatureProvider = mFeatureFactory.powerUsageFeatureProvider; } @Test @@ -250,6 +255,21 @@ public final class ConvertUtilsTest { // Verifies the fake data is cleared out. assertThat(entryList.get(0).getPackageName()) .isNotEqualTo(ConvertUtils.FAKE_PACKAGE_NAME); + + // Adds lacked data into the battery history map. + final int remainingSize = 25 - batteryHistoryKeys.length; + for (int index = 0; index < remainingSize; index++) { + batteryHistoryMap.put(105L + index + 1, new HashMap<>()); + } + when(mPowerUsageFeatureProvider.getBatteryHistory(mContext)) + .thenReturn(batteryHistoryMap); + + final List batteryDiffEntryList = + BatteryChartPreferenceController.getBatteryLast24HrUsageData(mContext); + + assertThat(batteryDiffEntryList).isNotEmpty(); + final BatteryDiffEntry resultEntry = batteryDiffEntryList.get(0); + assertThat(resultEntry.getPackageName()).isEqualTo("package2"); } @Test