diff --git a/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java b/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java index d489252bb5c..8a1cd76f969 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java +++ b/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java @@ -458,55 +458,24 @@ public final class DatabaseUtils { /** Clears all data and jobs if current timestamp is out of the range of last recorded job. */ public static void clearDataAfterTimeChangedIfNeeded(Context context, Intent intent) { + if ((intent.getFlags() & FLAG_RECEIVER_REPLACE_PENDING) != 0) { + BatteryUsageLogUtils.writeLog( + context, + Action.TIME_UPDATED, + "Database is not cleared because the time change intent is only" + + " for the existing pending receiver."); + return; + } AsyncTask.execute( () -> { try { - if ((intent.getFlags() & FLAG_RECEIVER_REPLACE_PENDING) != 0) { - BatteryUsageLogUtils.writeLog( - context, - Action.TIME_UPDATED, - "Database is not cleared because the time change intent is only" - + " for the existing pending receiver."); - return; - } - final List batteryLevelRecordEvents = - DatabaseUtils.getBatteryEvents( - context, - Calendar.getInstance(), - getLastFullChargeTime(context), - BATTERY_LEVEL_RECORD_EVENTS); - final long lastRecordTimestamp = - batteryLevelRecordEvents.isEmpty() - ? INVALID_TIMESTAMP - : batteryLevelRecordEvents.get(0).getTimestamp(); - final long nextRecordTimestamp = - TimestampUtils.getNextEvenHourTimestamp(lastRecordTimestamp); - final long currentTime = System.currentTimeMillis(); - final boolean isOutOfTimeRange = - lastRecordTimestamp == INVALID_TIMESTAMP - || currentTime < lastRecordTimestamp - || currentTime > nextRecordTimestamp; - final String logInfo = - String.format( - Locale.ENGLISH, - "clear database = %b, current time = %d, " - + "last record time = %d", - isOutOfTimeRange, - currentTime, - lastRecordTimestamp); - Log.d(TAG, logInfo); - BatteryUsageLogUtils.writeLog(context, Action.TIME_UPDATED, logInfo); - if (isOutOfTimeRange) { - DatabaseUtils.clearAll(context); - PeriodicJobManager.getInstance(context) - .refreshJob(/* fromBoot= */ false); - } + clearDataAfterTimeChangedIfNeededInternal(context); } catch (RuntimeException e) { - Log.e(TAG, "refreshDataAndJobIfNeededAfterTimeChanged() failed", e); + Log.e(TAG, "clearDataAfterTimeChangedIfNeeded() failed", e); BatteryUsageLogUtils.writeLog( context, Action.TIME_UPDATED, - "refreshDataAndJobIfNeededAfterTimeChanged() failed" + e); + "clearDataAfterTimeChangedIfNeeded() failed" + e); } }); } @@ -890,6 +859,40 @@ public final class DatabaseUtils { } } + private static void clearDataAfterTimeChangedIfNeededInternal(Context context) { + final List batteryLevelRecordEvents = + DatabaseUtils.getBatteryEvents( + context, + Calendar.getInstance(), + getLastFullChargeTime(context), + BATTERY_LEVEL_RECORD_EVENTS); + final long lastRecordTimestamp = + batteryLevelRecordEvents.isEmpty() + ? INVALID_TIMESTAMP + : batteryLevelRecordEvents.get(0).getTimestamp(); + final long nextRecordTimestamp = + TimestampUtils.getNextEvenHourTimestamp(lastRecordTimestamp); + final long currentTime = System.currentTimeMillis(); + final boolean isOutOfTimeRange = + lastRecordTimestamp == INVALID_TIMESTAMP + || currentTime < lastRecordTimestamp + || currentTime > nextRecordTimestamp; + final String logInfo = + String.format( + Locale.ENGLISH, + "clear database = %b, current time = %d, last record time = %d", + isOutOfTimeRange, + currentTime, + lastRecordTimestamp); + Log.d(TAG, logInfo); + BatteryUsageLogUtils.writeLog(context, Action.TIME_UPDATED, logInfo); + if (isOutOfTimeRange) { + DatabaseUtils.clearAll(context); + PeriodicJobManager.getInstance(context) + .refreshJob(/* fromBoot= */ false); + } + } + private static long loadLongFromContentProvider( Context context, Uri uri, final long defaultValue) { return loadFromContentProvider(