From 362def5275a4528c375ae366ead47bef6b34a0fc Mon Sep 17 00:00:00 2001 From: Kuan Wang Date: Thu, 1 Dec 2022 12:04:12 +0800 Subject: [PATCH] Fix the issue that no data is returned when there is no full charge data in the database. Test: make RunSettingsRoboTests + manual Bug: 260938983 Bug: 253553141 Change-Id: Ie12f239ce83a6ac2cd95c1663cd82e2974a7eaf3 --- .../batteryusage/db/BatteryStateDao.java | 4 ++-- .../batteryusage/db/BatteryStateDaoTest.java | 24 +++++++++++++++---- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/fuelgauge/batteryusage/db/BatteryStateDao.java b/src/com/android/settings/fuelgauge/batteryusage/db/BatteryStateDao.java index 936d5e053c7..6d2ab8d3c26 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/db/BatteryStateDao.java +++ b/src/com/android/settings/fuelgauge/batteryusage/db/BatteryStateDao.java @@ -43,8 +43,8 @@ public interface BatteryStateDao { /** Gets the {@link Cursor} of all recorded data since last full charge within 7 days. */ @Query("SELECT * FROM BatteryState WHERE timestamp >= :timestampSixDaysAgo AND timestamp >= " - + "(SELECT MAX(timestamp) FROM BatteryState WHERE isFullChargeCycleStart = 1)" - + " ORDER BY timestamp ASC") + + "(SELECT IFNULL((SELECT MAX(timestamp) FROM BatteryState " + + "WHERE isFullChargeCycleStart = 1), 0)) ORDER BY timestamp ASC") Cursor getCursorSinceLastFullCharge(long timestampSixDaysAgo); /** Get the count of distinct timestamp after a specific timestamp. */ diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/db/BatteryStateDaoTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/db/BatteryStateDaoTest.java index 33735b31e9f..3b887addb40 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/db/BatteryStateDaoTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/db/BatteryStateDaoTest.java @@ -53,10 +53,8 @@ public final class BatteryStateDaoTest { mContext = ApplicationProvider.getApplicationContext(); mDatabase = BatteryTestUtils.setUpBatteryStateDatabase(mContext); mBatteryStateDao = mDatabase.batteryStateDao(); - BatteryTestUtils.insertDataToBatteryStateDatabase( - mContext, TIMESTAMP3, PACKAGE_NAME3); - BatteryTestUtils.insertDataToBatteryStateDatabase( - mContext, TIMESTAMP2, PACKAGE_NAME2); + BatteryTestUtils.insertDataToBatteryStateDatabase(mContext, TIMESTAMP3, PACKAGE_NAME3); + BatteryTestUtils.insertDataToBatteryStateDatabase(mContext, TIMESTAMP2, PACKAGE_NAME2); BatteryTestUtils.insertDataToBatteryStateDatabase( mContext, TIMESTAMP1, PACKAGE_NAME1, /*multiple=*/ true, /*isFullChargeStart=*/ true); @@ -100,6 +98,24 @@ public final class BatteryStateDaoTest { assertThat(cursor2.getString(3 /*packageName*/)).isEqualTo(PACKAGE_NAME3); } + @Test + public void batteryStateDao_getCursorSinceLastFullCharge_noFullChargeData_returnSevenDaysData() + throws Exception { + mBatteryStateDao.clearAll(); + BatteryTestUtils.insertDataToBatteryStateDatabase(mContext, TIMESTAMP3, PACKAGE_NAME3); + BatteryTestUtils.insertDataToBatteryStateDatabase(mContext, TIMESTAMP2, PACKAGE_NAME2); + BatteryTestUtils.insertDataToBatteryStateDatabase(mContext, TIMESTAMP1, PACKAGE_NAME1); + final Cursor cursor = mBatteryStateDao.getCursorSinceLastFullCharge(TIMESTAMP2); + assertThat(cursor.getCount()).isEqualTo(2); + assertThat(cursor.getColumnCount()).isEqualTo(CURSOR_COLUMN_SIZE); + // Verifies the queried first battery state. + cursor.moveToFirst(); + assertThat(cursor.getString(3 /*packageName*/)).isEqualTo(PACKAGE_NAME2); + // Verifies the queried third battery state. + cursor.moveToNext(); + assertThat(cursor.getString(3 /*packageName*/)).isEqualTo(PACKAGE_NAME3); + } + @Test public void batteryStateDao_clearAllBefore() throws Exception { mBatteryStateDao.clearAllBefore(TIMESTAMP2);