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

Commit 919b3ad3 authored by Eric Jeong's avatar Eric Jeong
Browse files

Change the logic to check car idleness

- Following the change of device idleness checking, car idleness
tracker considers screen on to determine idleness.
- The condition to get idle in automotive is 1) garage mode is started,
or 2) screen is off and idle is triggered.
- If idleness is forced or garage mode is running, it is considered idle
by car idleness tracker, regardless of screen on/off.

Bug: 182492612
Test: atest android.jobscheduler.cts.IdleConstraintTest
Change-Id: I15e78157c6b1539086e9b39354e5da51186c6535
parent 50471a76
Loading
Loading
Loading
Loading
+25 −6
Original line number Diff line number Diff line
@@ -30,6 +30,12 @@ import com.android.server.job.StateControllerProto;

import java.io.PrintWriter;

/**
 * CarIdlenessTracker determines that a car is in idle state when 1) garage mode is started, or
 * 2) screen is off and idle maintenance is triggered.
 * If idleness is forced or garage mode is running, the car is considered idle regardless of screen
 * on/off.
 */
public final class CarIdlenessTracker extends BroadcastReceiver implements IdlenessTracker {
    private static final String TAG = "JobScheduler.CarIdlenessTracker";
    private static final boolean DEBUG = JobSchedulerService.DEBUG
@@ -48,6 +54,7 @@ public final class CarIdlenessTracker extends BroadcastReceiver implements Idlen
    private boolean mIdle;
    private boolean mGarageModeOn;
    private boolean mForced;
    private boolean mScreenOn;
    private IdlenessListener mIdleListener;

    public CarIdlenessTracker() {
@@ -56,6 +63,7 @@ public final class CarIdlenessTracker extends BroadcastReceiver implements Idlen
        mIdle = false;
        mGarageModeOn = false;
        mForced = false;
        mScreenOn = true;
    }

    @Override
@@ -71,6 +79,7 @@ public final class CarIdlenessTracker extends BroadcastReceiver implements Idlen

        // Screen state
        filter.addAction(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);

        // State of GarageMode
        filter.addAction(ACTION_GARAGE_MODE_ON);
@@ -88,6 +97,8 @@ public final class CarIdlenessTracker extends BroadcastReceiver implements Idlen
    public void dump(PrintWriter pw) {
        pw.print("  mIdle: "); pw.println(mIdle);
        pw.print("  mGarageModeOn: "); pw.println(mGarageModeOn);
        pw.print("  mForced: "); pw.println(mForced);
        pw.print("  mScreenOn: "); pw.println(mScreenOn);
    }

    @Override
@@ -121,6 +132,9 @@ public final class CarIdlenessTracker extends BroadcastReceiver implements Idlen
        } else if (action.equals(Intent.ACTION_SCREEN_ON)) {
            logIfDebug("Screen is on...");
            handleScreenOn();
        } else if (action.equals(intent.ACTION_SCREEN_OFF)) {
            logIfDebug("Screen is off...");
            mScreenOn = false;
        } else if (action.equals(ACTION_GARAGE_MODE_ON)) {
            logIfDebug("GarageMode is on...");
            mGarageModeOn = true;
@@ -132,10 +146,10 @@ public final class CarIdlenessTracker extends BroadcastReceiver implements Idlen
        } else if (action.equals(ActivityManagerService.ACTION_TRIGGER_IDLE)) {
            if (!mGarageModeOn) {
                logIfDebug("Idle trigger fired...");
                triggerIdlenessOnce();
                triggerIdleness();
            } else {
                logIfDebug("TRIGGER_IDLE received but not changing state; idle="
                        + mIdle + " screen=" + mGarageModeOn);
                logIfDebug("TRIGGER_IDLE received but not changing state; mIdle="
                        + mIdle + " mGarageModeOn=" + mGarageModeOn);
            }
        }
    }
@@ -158,20 +172,24 @@ public final class CarIdlenessTracker extends BroadcastReceiver implements Idlen
        }
    }

    private void triggerIdlenessOnce() {
    private void triggerIdleness() {
        // This is simply triggering idleness once until some constraint will switch it back off
        if (mIdle) {
            // Already in idle state. Nothing to do
            logIfDebug("Device is already idle");
        } else {
        } else if (!mScreenOn) {
            // Going idle once
            logIfDebug("Device is going idle once");
            logIfDebug("Device is going idle");
            mIdle = true;
            mIdleListener.reportNewIdleState(mIdle);
        } else {
            logIfDebug("TRIGGER_IDLE received but not changing state: mIdle = " + mIdle
                    + ", mScreenOn = " + mScreenOn);
        }
    }

    private void handleScreenOn() {
        mScreenOn = true;
        if (mForced || mGarageModeOn) {
            // Even though screen is on, the device remains idle
            logIfDebug("Screen is on, but device cannot exit idle");
@@ -179,6 +197,7 @@ public final class CarIdlenessTracker extends BroadcastReceiver implements Idlen
            // Exiting idle
            logIfDebug("Device is exiting idle");
            mIdle = false;
            mIdleListener.reportNewIdleState(mIdle);
        } else {
            // Already in non-idle state. Nothing to do
            logIfDebug("Device is already non-idle");