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
This commit is contained in:
Kuan Wang
2022-12-01 12:04:12 +08:00
parent 8b49b96569
commit 362def5275
2 changed files with 22 additions and 6 deletions

View File

@@ -43,8 +43,8 @@ public interface BatteryStateDao {
/** Gets the {@link Cursor} of all recorded data since last full charge within 7 days. */ /** Gets the {@link Cursor} of all recorded data since last full charge within 7 days. */
@Query("SELECT * FROM BatteryState WHERE timestamp >= :timestampSixDaysAgo AND timestamp >= " @Query("SELECT * FROM BatteryState WHERE timestamp >= :timestampSixDaysAgo AND timestamp >= "
+ "(SELECT MAX(timestamp) FROM BatteryState WHERE isFullChargeCycleStart = 1)" + "(SELECT IFNULL((SELECT MAX(timestamp) FROM BatteryState "
+ " ORDER BY timestamp ASC") + "WHERE isFullChargeCycleStart = 1), 0)) ORDER BY timestamp ASC")
Cursor getCursorSinceLastFullCharge(long timestampSixDaysAgo); Cursor getCursorSinceLastFullCharge(long timestampSixDaysAgo);
/** Get the count of distinct timestamp after a specific timestamp. */ /** Get the count of distinct timestamp after a specific timestamp. */

View File

@@ -53,10 +53,8 @@ public final class BatteryStateDaoTest {
mContext = ApplicationProvider.getApplicationContext(); mContext = ApplicationProvider.getApplicationContext();
mDatabase = BatteryTestUtils.setUpBatteryStateDatabase(mContext); mDatabase = BatteryTestUtils.setUpBatteryStateDatabase(mContext);
mBatteryStateDao = mDatabase.batteryStateDao(); mBatteryStateDao = mDatabase.batteryStateDao();
BatteryTestUtils.insertDataToBatteryStateDatabase( BatteryTestUtils.insertDataToBatteryStateDatabase(mContext, TIMESTAMP3, PACKAGE_NAME3);
mContext, TIMESTAMP3, PACKAGE_NAME3); BatteryTestUtils.insertDataToBatteryStateDatabase(mContext, TIMESTAMP2, PACKAGE_NAME2);
BatteryTestUtils.insertDataToBatteryStateDatabase(
mContext, TIMESTAMP2, PACKAGE_NAME2);
BatteryTestUtils.insertDataToBatteryStateDatabase( BatteryTestUtils.insertDataToBatteryStateDatabase(
mContext, TIMESTAMP1, PACKAGE_NAME1, /*multiple=*/ true, mContext, TIMESTAMP1, PACKAGE_NAME1, /*multiple=*/ true,
/*isFullChargeStart=*/ true); /*isFullChargeStart=*/ true);
@@ -100,6 +98,24 @@ public final class BatteryStateDaoTest {
assertThat(cursor2.getString(3 /*packageName*/)).isEqualTo(PACKAGE_NAME3); 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 @Test
public void batteryStateDao_clearAllBefore() throws Exception { public void batteryStateDao_clearAllBefore() throws Exception {
mBatteryStateDao.clearAllBefore(TIMESTAMP2); mBatteryStateDao.clearAllBefore(TIMESTAMP2);