Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 140aa162 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "IdleMaint: run more frequently during 3AM to 4AM"

parents 66669d07 e00ed069
Loading
Loading
Loading
Loading
+20 −7
Original line number Diff line number Diff line
@@ -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,36 @@ 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 = MidnightInTime(0, 0).getTimeInMillis();
        final long today4AM = MidnightInTime(0, 1).getTimeInMillis();

        long nextScheduleTime, maxScheduleTime;
        if (System.currentTimeMillis() > today3AM && System.currentTimeMillis() < today4AM) {
            nextScheduleTime = TimeUnit.SECONDS.toMillis(10);
            maxScheduleTime = today4AM - System.currentTimeMillis();
        } else {
            final long tomorrow3AM = MidnightInTime(1, 0).getTimeInMillis();
            final long twodays3AM = MidnightInTime(2, 0).getTimeInMillis();
            nextScheduleTime = tomorrow3AM - System.currentTimeMillis(); // 3AM tomorrow
            maxScheduleTime = twodays3AM - System.currentTimeMillis();   // 3AM in two days
        }

        JobInfo.Builder builder = new JobInfo.Builder(MOUNT_JOB_ID, sIdleService);
        builder.setRequiresDeviceIdle(true);
        builder.setRequiresCharging(true);
        builder.setMinimumLatency(timeToMidnight);
        builder.setMinimumLatency(nextScheduleTime);
        builder.setOverrideDeadline(maxScheduleTime);
        tm.schedule(builder.build());
    }

    private static Calendar tomorrowMidnight() {
    private static Calendar MidnightInTime(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, 3 + 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;
    }
}