Unify logging timestamp string.
Bug: 275278933 Fix: 275278933 Test: presubmit Change-Id: Ifc67b9bf841f018465ee4a7b38b3a8605f60212b
This commit is contained in:
@@ -204,8 +204,7 @@ public class BatteryHistEntry {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
final String recordAtDateTime =
|
||||
ConvertUtils.utcToLocalTime(/*context=*/ null, mTimestamp);
|
||||
final String recordAtDateTime = ConvertUtils.utcToLocalTimeForLogging(mTimestamp);
|
||||
final StringBuilder builder = new StringBuilder()
|
||||
.append("\nBatteryHistEntry{")
|
||||
.append(String.format("\n\tpackage=%s|label=%s|uid=%d|userId=%d|isHidden=%b",
|
||||
|
@@ -237,9 +237,10 @@ public final class ConvertUtils {
|
||||
return eventBuilder.build();
|
||||
}
|
||||
|
||||
/** Converts UTC timestamp to human readable local time string. */
|
||||
public static String utcToLocalTime(Context context, long timestamp) {
|
||||
final Locale locale = getLocale(context);
|
||||
/** Converts UTC timestamp to local time string for logging only, so use the US locale for
|
||||
* better readability in debugging. */
|
||||
public static String utcToLocalTimeForLogging(long timestamp) {
|
||||
final Locale locale = Locale.US;
|
||||
final String pattern =
|
||||
DateFormat.getBestDateTimePattern(locale, "MMM dd,yyyy HH:mm:ss");
|
||||
return DateFormat.format(pattern, timestamp).toString();
|
||||
|
@@ -17,7 +17,6 @@
|
||||
package com.android.settings.fuelgauge.batteryusage;
|
||||
|
||||
import static com.android.settings.fuelgauge.batteryusage.ConvertUtils.getEffectivePackageName;
|
||||
import static com.android.settings.fuelgauge.batteryusage.ConvertUtils.utcToLocalTime;
|
||||
|
||||
import android.app.usage.IUsageStatsManager;
|
||||
import android.app.usage.UsageEvents;
|
||||
@@ -1357,7 +1356,7 @@ public final class DataProcessor {
|
||||
final Map<String, BatteryHistEntry> entryMap = processedBatteryHistoryMap.get(timestamp);
|
||||
if (entryMap == null || entryMap.isEmpty()) {
|
||||
Log.e(TAG, "abnormal entry list in the timestamp:"
|
||||
+ utcToLocalTime(context, timestamp));
|
||||
+ ConvertUtils.utcToLocalTimeForLogging(timestamp));
|
||||
return null;
|
||||
}
|
||||
// The current time battery history hasn't been loaded yet, returns the current battery
|
||||
@@ -1934,7 +1933,7 @@ public final class DataProcessor {
|
||||
final BatteryHistEntry entry) {
|
||||
if (sDebug) {
|
||||
Log.d(TAG, String.format(entry != null ? "%s %s:\n%s" : "%s %s:%s",
|
||||
utcToLocalTime(context, timestamp), content, entry));
|
||||
ConvertUtils.utcToLocalTimeForLogging(timestamp), content, entry));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -39,15 +39,12 @@ import com.android.settings.fuelgauge.batteryusage.db.BatteryStateDatabase;
|
||||
import com.android.settingslib.fuelgauge.BatteryStatus;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.Clock;
|
||||
import java.time.Duration;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -134,9 +131,10 @@ public final class DatabaseUtils {
|
||||
.build();
|
||||
final long latestTimestamp =
|
||||
loadAppUsageLatestTimestampFromContentProvider(context, appUsageLatestTimestampUri);
|
||||
final String latestTimestampString = ConvertUtils.utcToLocalTimeForLogging(latestTimestamp);
|
||||
Log.d(TAG, String.format(
|
||||
"getAppUsageStartTimestampOfUser() userId=%d latestTimestamp=%d in %d/ms",
|
||||
userId, latestTimestamp, (System.currentTimeMillis() - startTime)));
|
||||
"getAppUsageStartTimestampOfUser() userId=%d latestTimestamp=%s in %d/ms",
|
||||
userId, latestTimestampString, (System.currentTimeMillis() - startTime)));
|
||||
// Use (latestTimestamp + 1) here to avoid loading the events of the latestTimestamp
|
||||
// repeatedly.
|
||||
return Math.max(latestTimestamp + 1, earliestTimestamp);
|
||||
@@ -154,7 +152,8 @@ public final class DatabaseUtils {
|
||||
// sure the app usage calculation near the boundaries is correct.
|
||||
final long queryTimestamp =
|
||||
Math.max(rawStartTimestamp, sixDaysAgoTimestamp) - USAGE_QUERY_BUFFER_HOURS;
|
||||
Log.d(TAG, "sixDayAgoTimestamp: " + sixDaysAgoTimestamp);
|
||||
Log.d(TAG, "sixDayAgoTimestamp: " + ConvertUtils.utcToLocalTimeForLogging(
|
||||
sixDaysAgoTimestamp));
|
||||
final String queryUserIdString = userIds.stream()
|
||||
.map(userId -> String.valueOf(userId))
|
||||
.collect(Collectors.joining(","));
|
||||
@@ -182,7 +181,8 @@ public final class DatabaseUtils {
|
||||
Context context, Calendar calendar) {
|
||||
final long startTime = System.currentTimeMillis();
|
||||
final long sixDaysAgoTimestamp = getTimestampSixDaysAgo(calendar);
|
||||
Log.d(TAG, "sixDayAgoTimestamp: " + sixDaysAgoTimestamp);
|
||||
Log.d(TAG, "sixDayAgoTimestamp: " + ConvertUtils.utcToLocalTimeForLogging(
|
||||
sixDaysAgoTimestamp));
|
||||
// Builds the content uri everytime to avoid cache.
|
||||
final Uri batteryStateUri =
|
||||
new Uri.Builder()
|
||||
@@ -410,7 +410,9 @@ public final class DatabaseUtils {
|
||||
static void recordDateTime(Context context, String preferenceKey) {
|
||||
final SharedPreferences sharedPreferences = getSharedPreferences(context);
|
||||
if (sharedPreferences != null) {
|
||||
sharedPreferences.edit().putString(preferenceKey, getCurrentDateTime()).apply();
|
||||
final String currentTime = ConvertUtils.utcToLocalTimeForLogging(
|
||||
System.currentTimeMillis());
|
||||
sharedPreferences.edit().putString(preferenceKey, currentTime).apply();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -519,9 +521,4 @@ public final class DatabaseUtils {
|
||||
Log.w(TAG, "invoke clearMemory()");
|
||||
}, CLEAR_MEMORY_DELAYED_MS);
|
||||
}
|
||||
|
||||
private static String getCurrentDateTime() {
|
||||
return new SimpleDateFormat("MMM dd,yyyy HH:mm:ss", Locale.getDefault())
|
||||
.format(new Date(System.currentTimeMillis()));
|
||||
}
|
||||
}
|
||||
|
@@ -26,11 +26,8 @@ import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.Clock;
|
||||
import java.time.Duration;
|
||||
import java.util.Date;
|
||||
import java.util.Locale;
|
||||
|
||||
/** Manages the periodic job to schedule or cancel the next job. */
|
||||
public final class PeriodicJobManager {
|
||||
@@ -41,8 +38,6 @@ public final class PeriodicJobManager {
|
||||
|
||||
private final Context mContext;
|
||||
private final AlarmManager mAlarmManager;
|
||||
private final SimpleDateFormat mSimpleDateFormat =
|
||||
new SimpleDateFormat("MMM dd,yyyy HH:mm:ss", Locale.ENGLISH);
|
||||
|
||||
@VisibleForTesting
|
||||
static final int DATA_FETCH_INTERVAL_MINUTE = 60;
|
||||
@@ -69,7 +64,6 @@ public final class PeriodicJobManager {
|
||||
}
|
||||
|
||||
/** Schedules the next alarm job if it is available. */
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public void refreshJob(final boolean fromBoot) {
|
||||
if (mAlarmManager == null) {
|
||||
Log.e(TAG, "cannot schedule next alarm job");
|
||||
@@ -83,7 +77,7 @@ public final class PeriodicJobManager {
|
||||
mAlarmManager.setExactAndAllowWhileIdle(
|
||||
AlarmManager.RTC_WAKEUP, triggerAtMillis, pendingIntent);
|
||||
Log.d(TAG, "schedule next alarm job at "
|
||||
+ mSimpleDateFormat.format(new Date(triggerAtMillis)));
|
||||
+ ConvertUtils.utcToLocalTimeForLogging(triggerAtMillis));
|
||||
}
|
||||
|
||||
void cancelJob(PendingIntent pendingIntent) {
|
||||
|
@@ -19,6 +19,7 @@ package com.android.settings.fuelgauge.batteryusage.bugreport;
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.settings.fuelgauge.batteryusage.ConvertUtils;
|
||||
import com.android.settings.fuelgauge.batteryusage.DatabaseUtils;
|
||||
import com.android.settings.fuelgauge.batteryusage.db.AppUsageEventDao;
|
||||
import com.android.settings.fuelgauge.batteryusage.db.AppUsageEventEntity;
|
||||
@@ -27,12 +28,9 @@ import com.android.settings.fuelgauge.batteryusage.db.BatteryStateDao;
|
||||
import com.android.settings.fuelgauge.batteryusage.db.BatteryStateDatabase;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.Clock;
|
||||
import java.time.Duration;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
/** A utility class to aggregate and provide required log data. */
|
||||
public final class LogUtils {
|
||||
@@ -40,7 +38,6 @@ public final class LogUtils {
|
||||
private static final Duration DUMP_TIME_OFFSET = Duration.ofHours(24);
|
||||
private static final Duration DUMP_TIME_OFFSET_FOR_ENTRY = Duration.ofHours(4);
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
static void dumpBatteryUsageDatabaseHist(Context context, PrintWriter writer) {
|
||||
DatabaseUtils.dump(context, writer);
|
||||
writer.flush();
|
||||
@@ -60,10 +57,8 @@ public final class LogUtils {
|
||||
return;
|
||||
}
|
||||
// Dumps all distinct timestamps.
|
||||
final SimpleDateFormat formatter =
|
||||
new SimpleDateFormat("MMM dd, HH:mm:ss", Locale.US);
|
||||
timestamps.forEach(timestamp -> {
|
||||
final String formattedTimestamp = formatter.format(new Date(timestamp));
|
||||
final String formattedTimestamp = ConvertUtils.utcToLocalTimeForLogging(timestamp);
|
||||
writer.println("\t" + formattedTimestamp);
|
||||
Log.w(TAG, "\t" + formattedTimestamp);
|
||||
});
|
||||
@@ -74,7 +69,6 @@ public final class LogUtils {
|
||||
stateList.stream().forEach(state -> writer.println(state));
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
static void dumpAppUsageDatabaseHist(Context context, PrintWriter writer) {
|
||||
final AppUsageEventDao dao =
|
||||
BatteryStateDatabase
|
||||
|
@@ -21,19 +21,15 @@ import android.content.ContentValues;
|
||||
import androidx.room.Entity;
|
||||
import androidx.room.PrimaryKey;
|
||||
|
||||
import com.android.settings.fuelgauge.batteryusage.ConvertUtils;
|
||||
|
||||
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Locale;
|
||||
import java.util.TimeZone;
|
||||
|
||||
/** A {@link Entity} class to save app usage events into database. */
|
||||
@Entity
|
||||
public class AppUsageEventEntity {
|
||||
private static String sCacheZoneId;
|
||||
private static SimpleDateFormat sCacheSimpleDateFormat;
|
||||
|
||||
/** Keys for accessing {@link ContentValues}. */
|
||||
public static final String KEY_UID = "uid";
|
||||
public static final String KEY_USER_ID = "userId";
|
||||
@@ -83,14 +79,8 @@ public class AppUsageEventEntity {
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public String toString() {
|
||||
final String currentZoneId = TimeZone.getDefault().getID();
|
||||
if (!currentZoneId.equals(sCacheZoneId) || sCacheSimpleDateFormat == null) {
|
||||
sCacheZoneId = currentZoneId;
|
||||
sCacheSimpleDateFormat = new SimpleDateFormat("MMM dd,yyyy HH:mm:ss", Locale.US);
|
||||
}
|
||||
final String recordAtDateTime = sCacheSimpleDateFormat.format(new Date(timestamp));
|
||||
final String recordAtDateTime = ConvertUtils.utcToLocalTimeForLogging(timestamp);
|
||||
final StringBuilder builder = new StringBuilder()
|
||||
.append("\nAppUsageEvent{")
|
||||
.append(String.format(Locale.US,
|
||||
|
@@ -23,20 +23,15 @@ import androidx.room.PrimaryKey;
|
||||
|
||||
import com.android.settings.fuelgauge.BatteryUtils;
|
||||
import com.android.settings.fuelgauge.batteryusage.BatteryInformation;
|
||||
import com.android.settings.fuelgauge.batteryusage.ConvertUtils;
|
||||
|
||||
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Locale;
|
||||
import java.util.TimeZone;
|
||||
|
||||
/** A {@link Entity} class to save battery states snapshot into database. */
|
||||
@Entity
|
||||
public class BatteryState {
|
||||
private static String sCacheZoneId;
|
||||
private static SimpleDateFormat sCacheSimpleDateFormat;
|
||||
|
||||
@PrimaryKey(autoGenerate = true)
|
||||
private long mId;
|
||||
|
||||
@@ -91,14 +86,8 @@ public class BatteryState {
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public String toString() {
|
||||
final String currentZoneId = TimeZone.getDefault().getID();
|
||||
if (!currentZoneId.equals(sCacheZoneId) || sCacheSimpleDateFormat == null) {
|
||||
sCacheZoneId = currentZoneId;
|
||||
sCacheSimpleDateFormat = new SimpleDateFormat("MMM dd,yyyy HH:mm:ss", Locale.US);
|
||||
}
|
||||
final String recordAtDateTime = sCacheSimpleDateFormat.format(new Date(timestamp));
|
||||
final String recordAtDateTime = ConvertUtils.utcToLocalTimeForLogging(timestamp);
|
||||
final BatteryInformation batteryInformationInstance =
|
||||
BatteryUtils.parseProtoFromString(
|
||||
batteryInformation, BatteryInformation.getDefaultInstance());
|
||||
|
Reference in New Issue
Block a user