IdleMaint: run more frequently during 3AM to 4AM
This patch makes IdleMaint trigger multiple times between 3AM and 4AM, if device is idle and power is not low. This will not trigger until next 3AM. Bug: 128594671 Change-Id: Id6596be44ff96d39f77fb21dca52c35952f2cf7e Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
This commit is contained in:
@@ -27,6 +27,7 @@ import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.os.RemoteException;
|
||||
import android.util.Slog;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class MountServiceIdler extends JobService {
|
||||
private static final String TAG = "MountServiceIdler";
|
||||
@@ -48,7 +49,7 @@ public class MountServiceIdler extends JobService {
|
||||
mStarted = false;
|
||||
}
|
||||
}
|
||||
// ... and try again tomorrow
|
||||
// ... and try again right away or tomorrow
|
||||
scheduleIdlePass(MountServiceIdler.this);
|
||||
}
|
||||
};
|
||||
@@ -98,24 +99,32 @@ public class MountServiceIdler extends JobService {
|
||||
public static void scheduleIdlePass(Context context) {
|
||||
JobScheduler tm = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
|
||||
|
||||
Calendar calendar = tomorrowMidnight();
|
||||
final long timeToMidnight = calendar.getTimeInMillis() - System.currentTimeMillis();
|
||||
final long today3AM = offsetFromTodayMidnight(0, 3).getTimeInMillis();
|
||||
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);
|
||||
builder.setRequiresDeviceIdle(true);
|
||||
builder.setRequiresCharging(true);
|
||||
builder.setMinimumLatency(timeToMidnight);
|
||||
builder.setRequiresBatteryNotLow(true);
|
||||
builder.setMinimumLatency(nextScheduleTime);
|
||||
tm.schedule(builder.build());
|
||||
}
|
||||
|
||||
private static Calendar tomorrowMidnight() {
|
||||
private static Calendar offsetFromTodayMidnight(int nDays, int nHours) {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
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.SECOND, 0);
|
||||
calendar.set(Calendar.MILLISECOND, 0);
|
||||
calendar.add(Calendar.DAY_OF_MONTH, 1);
|
||||
calendar.add(Calendar.DAY_OF_MONTH, nDays);
|
||||
return calendar;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user