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

Commit 8975f78f authored by Jaegeuk Kim's avatar Jaegeuk Kim
Browse files

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: default avatarJaegeuk Kim <jaegeuk@google.com>
parent 30e495d0
Loading
Loading
Loading
Loading
+17 −8
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,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;
    }
}