Exclude screen on time in battery usage page when the device is in charging.
Bug: 265751163 Fix: 265751163 Test: manual Change-Id: I4ed71e1d6fad56a7cbfc9cd47ed4d791f45261ce
This commit is contained in:
@@ -31,6 +31,7 @@ import android.net.Uri;
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
|
||||
import com.android.settings.fuelgauge.batteryusage.db.AppUsageEventEntity;
|
||||
import com.android.settings.fuelgauge.batteryusage.db.BatteryEventEntity;
|
||||
import com.android.settings.fuelgauge.batteryusage.db.BatteryState;
|
||||
import com.android.settings.fuelgauge.batteryusage.db.BatteryStateDatabase;
|
||||
import com.android.settings.testutils.BatteryTestUtils;
|
||||
@@ -353,6 +354,28 @@ public final class BatteryUsageContentProviderTest {
|
||||
assertThat(entities.get(0).taskRootPackageName).isEqualTo("com.android.settings2");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void insert_batteryEvent_returnsExpectedResult() {
|
||||
mProvider.onCreate();
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(BatteryEventEntity.KEY_TIMESTAMP, 10001L);
|
||||
values.put(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE,
|
||||
BatteryEventType.POWER_CONNECTED.getNumber());
|
||||
values.put(BatteryEventEntity.KEY_BATTERY_LEVEL, 66);
|
||||
|
||||
final Uri uri = mProvider.insert(DatabaseUtils.BATTERY_EVENT_URI, values);
|
||||
|
||||
assertThat(uri).isEqualTo(DatabaseUtils.BATTERY_EVENT_URI);
|
||||
// Verifies the AppUsageEventEntity content.
|
||||
final List<BatteryEventEntity> entities =
|
||||
BatteryStateDatabase.getInstance(mContext).batteryEventDao().getAll();
|
||||
assertThat(entities).hasSize(1);
|
||||
assertThat(entities.get(0).timestamp).isEqualTo(10001L);
|
||||
assertThat(entities.get(0).batteryEventType).isEqualTo(
|
||||
BatteryEventType.POWER_CONNECTED.getNumber());
|
||||
assertThat(entities.get(0).batteryLevel).isEqualTo(66);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void delete_throwsUnsupportedOperationException() {
|
||||
assertThrows(
|
||||
|
@@ -39,6 +39,7 @@ import android.os.RemoteException;
|
||||
import android.os.UserHandle;
|
||||
|
||||
import com.android.settings.fuelgauge.batteryusage.db.AppUsageEventEntity;
|
||||
import com.android.settings.fuelgauge.batteryusage.db.BatteryEventEntity;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -194,6 +195,22 @@ public final class ConvertUtilsTest {
|
||||
.isEqualTo("com.android.settings2");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void convertBatteryEventToContentValues_normalCase_returnsExpectedContentValues() {
|
||||
final BatteryEvent batteryEvent =
|
||||
BatteryEvent.newBuilder()
|
||||
.setTimestamp(10001L)
|
||||
.setType(BatteryEventType.POWER_CONNECTED)
|
||||
.setBatteryLevel(66)
|
||||
.build();
|
||||
final ContentValues values =
|
||||
ConvertUtils.convertBatteryEventToContentValues(batteryEvent);
|
||||
assertThat(values.getAsLong(BatteryEventEntity.KEY_TIMESTAMP)).isEqualTo(10001L);
|
||||
assertThat(values.getAsInteger(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE)).isEqualTo(
|
||||
BatteryEventType.POWER_CONNECTED.getNumber());
|
||||
assertThat(values.getAsInteger(BatteryEventEntity.KEY_BATTERY_LEVEL)).isEqualTo(66);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void convertToBatteryHistEntry_returnsExpectedResult() {
|
||||
final int expectedType = 3;
|
||||
@@ -405,6 +422,15 @@ public final class ConvertUtilsTest {
|
||||
assertThat(appUsageEvent.getInstanceId()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void convertToBatteryEvent_normalCase_returnsExpectedResult() {
|
||||
final BatteryEvent batteryEvent = ConvertUtils.convertToBatteryEvent(
|
||||
666L, BatteryEventType.POWER_DISCONNECTED, 88);
|
||||
assertThat(batteryEvent.getTimestamp()).isEqualTo(666L);
|
||||
assertThat(batteryEvent.getType()).isEqualTo(BatteryEventType.POWER_DISCONNECTED);
|
||||
assertThat(batteryEvent.getBatteryLevel()).isEqualTo(88);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getLocale_nullContext_returnDefaultLocale() {
|
||||
assertThat(ConvertUtils.getLocale(/*context=*/ null))
|
||||
|
@@ -183,7 +183,7 @@ public final class DataProcessManagerTest {
|
||||
assertThat(dataProcessManager.getIsCurrentBatteryHistoryLoaded()).isTrue();
|
||||
assertThat(dataProcessManager.getShowScreenOnTime()).isTrue();
|
||||
final List<AppUsageEvent> appUsageEventList = dataProcessManager.getAppUsageEventList();
|
||||
Collections.sort(appUsageEventList, DataProcessor.TIMESTAMP_COMPARATOR);
|
||||
Collections.sort(appUsageEventList, DataProcessor.APP_USAGE_EVENT_TIMESTAMP_COMPARATOR);
|
||||
assertThat(appUsageEventList.size()).isEqualTo(6);
|
||||
assertAppUsageEvent(
|
||||
appUsageEventList.get(0), AppUsageEventType.ACTIVITY_RESUMED, /*timestamp=*/ 1);
|
||||
|
@@ -250,7 +250,7 @@ public final class DataProcessorTest {
|
||||
|
||||
final Map<Integer, Map<Integer, Map<Long, Map<String, List<AppUsagePeriod>>>>> periodMap =
|
||||
DataProcessor.generateAppUsagePeriodMap(
|
||||
14400000L, hourlyBatteryLevelsPerDay, appUsageEventList);
|
||||
14400000L, hourlyBatteryLevelsPerDay, appUsageEventList, new ArrayList<>());
|
||||
|
||||
assertThat(periodMap).hasSize(3);
|
||||
// Day 1
|
||||
@@ -288,7 +288,7 @@ public final class DataProcessorTest {
|
||||
hourlyBatteryLevelsPerDay.add(
|
||||
new BatteryLevelData.PeriodBatteryLevelData(new ArrayList<>(), new ArrayList<>()));
|
||||
assertThat(DataProcessor.generateAppUsagePeriodMap(
|
||||
0L, hourlyBatteryLevelsPerDay, new ArrayList<>())).isNull();
|
||||
0L, hourlyBatteryLevelsPerDay, new ArrayList<>(), new ArrayList<>())).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -1669,7 +1669,8 @@ public final class DataProcessorTest {
|
||||
/*instanceId=*/ 4, packageName2));
|
||||
|
||||
final Map<Long, Map<String, List<AppUsagePeriod>>> appUsagePeriodMap =
|
||||
DataProcessor.buildAppUsagePeriodList(appUsageEvents, 0, 5);
|
||||
DataProcessor.buildAppUsagePeriodList(
|
||||
appUsageEvents, new ArrayList<>(), 0, 5);
|
||||
|
||||
assertThat(appUsagePeriodMap).hasSize(2);
|
||||
final Map<String, List<AppUsagePeriod>> userMap1 = appUsagePeriodMap.get(1L);
|
||||
@@ -1693,7 +1694,7 @@ public final class DataProcessorTest {
|
||||
@Test
|
||||
public void buildAppUsagePeriodList_emptyEventList_returnNull() {
|
||||
assertThat(DataProcessor.buildAppUsagePeriodList(
|
||||
new ArrayList<>(), 0, 1)).isNull();
|
||||
new ArrayList<>(), new ArrayList<>(), 0, 1)).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -1705,7 +1706,7 @@ public final class DataProcessorTest {
|
||||
AppUsageEventType.DEVICE_SHUTDOWN, /*timestamp=*/ 2));
|
||||
|
||||
assertThat(DataProcessor.buildAppUsagePeriodList(
|
||||
appUsageEvents, 0, 3)).isNull();
|
||||
appUsageEvents, new ArrayList<>(), 0, 3)).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -1765,6 +1766,89 @@ public final class DataProcessorTest {
|
||||
assertAppUsagePeriod(appUsagePeriodList.get(6), 1000000, 1100000);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void excludePowerConnectedTime_startEndNotCharging_returnExpectedResult() {
|
||||
final List<AppUsagePeriod> appUsagePeriodList = List.of(
|
||||
AppUsagePeriod.newBuilder().setStartTime(100).setEndTime(200).build());
|
||||
final List<BatteryEvent> batteryEventList = List.of(
|
||||
BatteryEvent.newBuilder().setTimestamp(50).setType(
|
||||
BatteryEventType.POWER_DISCONNECTED).build(),
|
||||
BatteryEvent.newBuilder().setTimestamp(166).setType(
|
||||
BatteryEventType.POWER_CONNECTED).build(),
|
||||
BatteryEvent.newBuilder().setTimestamp(188).setType(
|
||||
BatteryEventType.POWER_DISCONNECTED).build(),
|
||||
BatteryEvent.newBuilder().setTimestamp(280).setType(
|
||||
BatteryEventType.POWER_CONNECTED).build());
|
||||
|
||||
final List<AppUsagePeriod> resultList =
|
||||
DataProcessor.excludePowerConnectedTimeFromAppUsagePeriodList(
|
||||
appUsagePeriodList, batteryEventList);
|
||||
|
||||
assertThat(resultList).hasSize(2);
|
||||
assertAppUsagePeriod(resultList.get(0), 100, 166);
|
||||
assertAppUsagePeriod(resultList.get(1), 188, 200);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void excludePowerConnectedTime_startEndInCharging_returnExpectedResult() {
|
||||
final List<AppUsagePeriod> appUsagePeriodList = List.of(
|
||||
AppUsagePeriod.newBuilder().setStartTime(100).setEndTime(200).build());
|
||||
final List<BatteryEvent> batteryEventList = List.of(
|
||||
BatteryEvent.newBuilder().setTimestamp(50).setType(
|
||||
BatteryEventType.POWER_DISCONNECTED).build(),
|
||||
BatteryEvent.newBuilder().setTimestamp(80).setType(
|
||||
BatteryEventType.POWER_CONNECTED).build(),
|
||||
BatteryEvent.newBuilder().setTimestamp(120).setType(
|
||||
BatteryEventType.POWER_DISCONNECTED).build(),
|
||||
BatteryEvent.newBuilder().setTimestamp(150).setType(
|
||||
BatteryEventType.POWER_CONNECTED).build(),
|
||||
BatteryEvent.newBuilder().setTimestamp(160).setType(
|
||||
BatteryEventType.POWER_DISCONNECTED).build(),
|
||||
BatteryEvent.newBuilder().setTimestamp(180).setType(
|
||||
BatteryEventType.POWER_CONNECTED).build());
|
||||
|
||||
final List<AppUsagePeriod> resultList =
|
||||
DataProcessor.excludePowerConnectedTimeFromAppUsagePeriodList(
|
||||
appUsagePeriodList, batteryEventList);
|
||||
|
||||
assertThat(resultList).hasSize(2);
|
||||
assertAppUsagePeriod(resultList.get(0), 120, 150);
|
||||
assertAppUsagePeriod(resultList.get(1), 160, 180);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void excludePowerConnectedTime_wholePeriodNotCharging_returnExpectedResult() {
|
||||
final List<AppUsagePeriod> appUsagePeriodList = List.of(
|
||||
AppUsagePeriod.newBuilder().setStartTime(100).setEndTime(200).build());
|
||||
final List<BatteryEvent> batteryEventList = List.of(
|
||||
BatteryEvent.newBuilder().setTimestamp(50).setType(
|
||||
BatteryEventType.POWER_DISCONNECTED).build(),
|
||||
BatteryEvent.newBuilder().setTimestamp(80).setType(
|
||||
BatteryEventType.POWER_CONNECTED).build());
|
||||
|
||||
final List<AppUsagePeriod> resultList =
|
||||
DataProcessor.excludePowerConnectedTimeFromAppUsagePeriodList(
|
||||
appUsagePeriodList, batteryEventList);
|
||||
|
||||
assertThat(resultList).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void excludePowerConnectedTime_wholePeriodInCharging_returnExpectedResult() {
|
||||
final List<AppUsagePeriod> appUsagePeriodList = List.of(
|
||||
AppUsagePeriod.newBuilder().setStartTime(100).setEndTime(200).build());
|
||||
final List<BatteryEvent> batteryEventList = List.of(
|
||||
BatteryEvent.newBuilder().setTimestamp(50).setType(
|
||||
BatteryEventType.POWER_DISCONNECTED).build());
|
||||
|
||||
final List<AppUsagePeriod> resultList =
|
||||
DataProcessor.excludePowerConnectedTimeFromAppUsagePeriodList(
|
||||
appUsagePeriodList, batteryEventList);
|
||||
|
||||
assertThat(resultList).hasSize(1);
|
||||
assertAppUsagePeriod(resultList.get(0), 100, 200);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getScreenOnTime_returnExpectedResult() {
|
||||
final long userId = 1;
|
||||
|
@@ -36,6 +36,7 @@ import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
|
||||
import com.android.settings.fuelgauge.batteryusage.db.AppUsageEventEntity;
|
||||
import com.android.settings.fuelgauge.batteryusage.db.BatteryEventEntity;
|
||||
import com.android.settings.testutils.BatteryTestUtils;
|
||||
|
||||
import org.junit.Before;
|
||||
@@ -136,6 +137,28 @@ public final class DatabaseUtilsTest {
|
||||
verifyNoMoreInteractions(mMockContentResolver);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sendBatteryEventData_returnsExpectedList() {
|
||||
final BatteryEvent batteryEvent =
|
||||
BatteryEvent.newBuilder()
|
||||
.setTimestamp(10001L)
|
||||
.setType(BatteryEventType.POWER_CONNECTED)
|
||||
.setBatteryLevel(66)
|
||||
.build();
|
||||
|
||||
final ContentValues contentValues =
|
||||
DatabaseUtils.sendBatteryEventData(mContext, batteryEvent);
|
||||
|
||||
assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_TIMESTAMP))
|
||||
.isEqualTo(10001L);
|
||||
assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE))
|
||||
.isEqualTo(BatteryEventType.POWER_CONNECTED.getNumber());
|
||||
assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_BATTERY_LEVEL))
|
||||
.isEqualTo(66);
|
||||
// Verifies the inserted ContentValues into content provider.
|
||||
verify(mMockContentResolver).insert(DatabaseUtils.BATTERY_EVENT_URI, contentValues);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sendBatteryEntryData_nullBatteryIntent_returnsNullValue() {
|
||||
doReturn(null).when(mContext).registerReceiver(any(), any());
|
||||
|
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright (C) 2022 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.settings.fuelgauge.batteryusage.db;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
|
||||
import com.android.settings.testutils.BatteryTestUtils;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
|
||||
/** Tests for {@link BatteryEventDao}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public final class BatteryEventDaoTest {
|
||||
private Context mContext;
|
||||
private BatteryStateDatabase mDatabase;
|
||||
private BatteryEventDao mBatteryEventDao;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mContext = ApplicationProvider.getApplicationContext();
|
||||
mDatabase = BatteryTestUtils.setUpBatteryStateDatabase(mContext);
|
||||
mBatteryEventDao = mDatabase.batteryEventDao();
|
||||
}
|
||||
|
||||
@After
|
||||
public void closeDb() {
|
||||
mDatabase.close();
|
||||
BatteryStateDatabase.setBatteryStateDatabase(/*database=*/ null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAllAfter_returnExpectedResult() {
|
||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
||||
.setTimestamp(100L)
|
||||
.setBatteryEventType(1)
|
||||
.setBatteryLevel(66)
|
||||
.build());
|
||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
||||
.setTimestamp(200L)
|
||||
.setBatteryEventType(2)
|
||||
.setBatteryLevel(88)
|
||||
.build());
|
||||
|
||||
final Cursor cursor = mBatteryEventDao.getAllAfter(160L);
|
||||
assertThat(cursor.getCount()).isEqualTo(1);
|
||||
cursor.moveToFirst();
|
||||
assertThat(cursor.getLong(cursor.getColumnIndex(BatteryEventEntity.KEY_TIMESTAMP)))
|
||||
.isEqualTo(200L);
|
||||
assertThat(cursor.getInt(cursor.getColumnIndex(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE)))
|
||||
.isEqualTo(2);
|
||||
assertThat(cursor.getInt(cursor.getColumnIndex(BatteryEventEntity.KEY_BATTERY_LEVEL)))
|
||||
.isEqualTo(88);
|
||||
|
||||
mBatteryEventDao.clearAll();
|
||||
assertThat(mBatteryEventDao.getAll()).isEmpty();
|
||||
}
|
||||
}
|
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.settings.fuelgauge.batteryusage.db;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
|
||||
/** Tests for {@link BatteryEventEntity}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public final class BatteryEventEntityTest {
|
||||
|
||||
@Test
|
||||
public void testBuilder_returnsExpectedResult() {
|
||||
final long timestamp = 10001L;
|
||||
final int batteryEventType = 1;
|
||||
final int batteryLevel = 66;
|
||||
|
||||
BatteryEventEntity entity = BatteryEventEntity
|
||||
.newBuilder()
|
||||
.setTimestamp(timestamp)
|
||||
.setBatteryEventType(batteryEventType)
|
||||
.setBatteryLevel(batteryLevel)
|
||||
.build();
|
||||
|
||||
// Verifies the app relative information.
|
||||
assertThat(entity.timestamp).isEqualTo(timestamp);
|
||||
assertThat(entity.batteryEventType).isEqualTo(batteryEventType);
|
||||
assertThat(entity.batteryLevel).isEqualTo(batteryLevel);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user