Merge "IdleMaint: run more frequently during 3AM to 4AM" into qt-qpr1-dev

This commit is contained in:
Jaegeuk Kim
2019-09-18 02:28:03 +00:00
committed by Android (Google) Code Review

View File

@@ -27,6 +27,7 @@ import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.os.RemoteException; import android.os.RemoteException;
import android.util.Slog; import android.util.Slog;
import java.util.concurrent.TimeUnit;
public class MountServiceIdler extends JobService { public class MountServiceIdler extends JobService {
private static final String TAG = "MountServiceIdler"; private static final String TAG = "MountServiceIdler";
@@ -48,7 +49,7 @@ public class MountServiceIdler extends JobService {
mStarted = false; mStarted = false;
} }
} }
// ... and try again tomorrow // ... and try again right away or tomorrow
scheduleIdlePass(MountServiceIdler.this); scheduleIdlePass(MountServiceIdler.this);
} }
}; };
@@ -98,24 +99,32 @@ public class MountServiceIdler extends JobService {
public static void scheduleIdlePass(Context context) { public static void scheduleIdlePass(Context context) {
JobScheduler tm = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); JobScheduler tm = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
Calendar calendar = tomorrowMidnight(); final long today3AM = offsetFromTodayMidnight(0, 3).getTimeInMillis();
final long timeToMidnight = calendar.getTimeInMillis() - System.currentTimeMillis(); final long today4AM = offsetFromTodayMidnight(0, 4).getTimeInMillis();
final long tomorrow3AM = offsetFromTodayMidnight(1, 3).getTimeInMillis();
long nextScheduleTime;
if (System.currentTimeMillis() > today3AM && System.currentTimeMillis() < today4AM) {
nextScheduleTime = TimeUnit.SECONDS.toMillis(10);
} else {
nextScheduleTime = tomorrow3AM - System.currentTimeMillis(); // 3AM tomorrow
}
JobInfo.Builder builder = new JobInfo.Builder(MOUNT_JOB_ID, sIdleService); JobInfo.Builder builder = new JobInfo.Builder(MOUNT_JOB_ID, sIdleService);
builder.setRequiresDeviceIdle(true); builder.setRequiresDeviceIdle(true);
builder.setRequiresCharging(true); builder.setRequiresBatteryNotLow(true);
builder.setMinimumLatency(timeToMidnight); builder.setMinimumLatency(nextScheduleTime);
tm.schedule(builder.build()); tm.schedule(builder.build());
} }
private static Calendar tomorrowMidnight() { private static Calendar offsetFromTodayMidnight(int nDays, int nHours) {
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis()); calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 3); calendar.set(Calendar.HOUR_OF_DAY, nHours);
calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.MILLISECOND, 0);
calendar.add(Calendar.DAY_OF_MONTH, 1); calendar.add(Calendar.DAY_OF_MONTH, nDays);
return calendar; return calendar;
} }
} }