Send fake data if there is no battey consumption entry list

Sends fake data into SettingsIntelligence if there is no data in the
battery consumption list, otherwise we don't have battery level data to
draw into the chart graph. We should draw the battery levels if it is
full-charged without any BatteryEntry data.

Bug: 184807417
Test: make SettingsRoboTests
Test: make SettingsGoogleRoboTests
Change-Id: I759e769256f4aa0ec152afff5c265ee3d04c03da
This commit is contained in:
ykhung
2021-04-11 11:03:35 +08:00
parent c024ec7cc9
commit bdaee1431f
3 changed files with 63 additions and 25 deletions

View File

@@ -33,10 +33,11 @@ import java.util.TimeZone;
/** A utility class to convert data into another types. */
public final class ConvertUtils {
private static final String TAG = "ConvertUtils";
private static final SimpleDateFormat SIMPLE_DATE_FORMAT =
new SimpleDateFormat("MMM dd,yyyy HH:mm:ss", Locale.ENGLISH);
/** Invalid system battery consumer drain type. */
public static final int INVALID_DRAIN_TYPE = -1;
/** A fake package name to represent no BatteryEntry data. */
public static final String FAKE_PACKAGE_NAME = "fake_package";
@IntDef(prefix = {"CONSUMER_TYPE"}, value = {
CONSUMER_TYPE_UNKNOWN,
@@ -52,6 +53,11 @@ public final class ConvertUtils {
public static final int CONSUMER_TYPE_USER_BATTERY = 2;
public static final int CONSUMER_TYPE_SYSTEM_BATTERY = 3;
private static String sZoneId;
private static SimpleDateFormat sSimpleDateFormat;
private ConvertUtils() {}
/** Gets consumer type from {@link BatteryConsumer}. */
@ConsumerType
public static int getConsumerType(BatteryConsumer consumer) {
@@ -82,24 +88,28 @@ public final class ConvertUtils {
int batteryHealth,
long timestamp) {
final ContentValues values = new ContentValues();
values.put("uid", Long.valueOf(entry.getUid()));
values.put("userId",
Long.valueOf(UserHandle.getUserId(entry.getUid())));
values.put("appLabel", entry.getLabel());
values.put("packageName", entry.getDefaultPackageName());
values.put("isHidden", Boolean.valueOf(entry.isHidden()));
if (entry != null && batteryUsageStats != null) {
values.put("uid", Long.valueOf(entry.getUid()));
values.put("userId",
Long.valueOf(UserHandle.getUserId(entry.getUid())));
values.put("appLabel", entry.getLabel());
values.put("packageName", entry.getDefaultPackageName());
values.put("isHidden", Boolean.valueOf(entry.isHidden()));
values.put("totalPower",
Double.valueOf(batteryUsageStats.getConsumedPower()));
values.put("consumePower", Double.valueOf(entry.getConsumedPower()));
values.put("percentOfTotal", Double.valueOf(entry.percent));
values.put("foregroundUsageTimeInMs",
Long.valueOf(entry.getTimeInForegroundMs()));
values.put("backgroundUsageTimeInMs",
Long.valueOf(entry.getTimeInBackgroundMs()));
values.put("drainType", getDrainType(entry.getBatteryConsumer()));
values.put("consumerType", getConsumerType(entry.getBatteryConsumer()));
} else {
values.put("packageName", FAKE_PACKAGE_NAME);
}
values.put("timestamp", Long.valueOf(timestamp));
values.put("zoneId", TimeZone.getDefault().getID());
values.put("totalPower",
Double.valueOf(batteryUsageStats.getConsumedPower()));
values.put("consumePower", Double.valueOf(entry.getConsumedPower()));
values.put("percentOfTotal", Double.valueOf(entry.percent));
values.put("foregroundUsageTimeInMs",
Long.valueOf(entry.getTimeInForegroundMs()));
values.put("backgroundUsageTimeInMs",
Long.valueOf(entry.getTimeInBackgroundMs()));
values.put("drainType", getDrainType(entry.getBatteryConsumer()));
values.put("consumerType", getConsumerType(entry.getBatteryConsumer()));
values.put("batteryLevel", Integer.valueOf(batteryLevel));
values.put("batteryStatus", Integer.valueOf(batteryStatus));
values.put("batteryHealth", Integer.valueOf(batteryHealth));
@@ -108,8 +118,12 @@ public final class ConvertUtils {
/** Converts UTC timestamp to human readable local time string. */
public static String utcToLocalTime(long timestamp) {
return SIMPLE_DATE_FORMAT.format(new Date(timestamp));
final String currentZoneId = TimeZone.getDefault().getID();
if (!currentZoneId.equals(sZoneId) || sSimpleDateFormat == null) {
sZoneId = currentZoneId;
sSimpleDateFormat =
new SimpleDateFormat("MMM dd,yyyy HH:mm:ss", Locale.ENGLISH);
}
return sSimpleDateFormat.format(new Date(timestamp));
}
private ConvertUtils() {}
}