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

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

Merge "Change the logic to check car idleness" into sc-dev

parents f45161ef 919b3ad3
Loading
Loading
Loading
Loading
+25 −6
Original line number Original line Diff line number Diff line
@@ -30,6 +30,12 @@ import com.android.server.job.StateControllerProto;


import java.io.PrintWriter;
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 {
public final class CarIdlenessTracker extends BroadcastReceiver implements IdlenessTracker {
    private static final String TAG = "JobScheduler.CarIdlenessTracker";
    private static final String TAG = "JobScheduler.CarIdlenessTracker";
    private static final boolean DEBUG = JobSchedulerService.DEBUG
    private static final boolean DEBUG = JobSchedulerService.DEBUG
@@ -48,6 +54,7 @@ public final class CarIdlenessTracker extends BroadcastReceiver implements Idlen
    private boolean mIdle;
    private boolean mIdle;
    private boolean mGarageModeOn;
    private boolean mGarageModeOn;
    private boolean mForced;
    private boolean mForced;
    private boolean mScreenOn;
    private IdlenessListener mIdleListener;
    private IdlenessListener mIdleListener;


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


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


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


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


    @Override
    @Override
@@ -121,6 +132,9 @@ public final class CarIdlenessTracker extends BroadcastReceiver implements Idlen
        } else if (action.equals(Intent.ACTION_SCREEN_ON)) {
        } else if (action.equals(Intent.ACTION_SCREEN_ON)) {
            logIfDebug("Screen is on...");
            logIfDebug("Screen is on...");
            handleScreenOn();
            handleScreenOn();
        } else if (action.equals(intent.ACTION_SCREEN_OFF)) {
            logIfDebug("Screen is off...");
            mScreenOn = false;
        } else if (action.equals(ACTION_GARAGE_MODE_ON)) {
        } else if (action.equals(ACTION_GARAGE_MODE_ON)) {
            logIfDebug("GarageMode is on...");
            logIfDebug("GarageMode is on...");
            mGarageModeOn = true;
            mGarageModeOn = true;
@@ -132,10 +146,10 @@ public final class CarIdlenessTracker extends BroadcastReceiver implements Idlen
        } else if (action.equals(ActivityManagerService.ACTION_TRIGGER_IDLE)) {
        } else if (action.equals(ActivityManagerService.ACTION_TRIGGER_IDLE)) {
            if (!mGarageModeOn) {
            if (!mGarageModeOn) {
                logIfDebug("Idle trigger fired...");
                logIfDebug("Idle trigger fired...");
                triggerIdlenessOnce();
                triggerIdleness();
            } else {
            } else {
                logIfDebug("TRIGGER_IDLE received but not changing state; idle="
                logIfDebug("TRIGGER_IDLE received but not changing state; mIdle="
                        + mIdle + " screen=" + mGarageModeOn);
                        + 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
        // This is simply triggering idleness once until some constraint will switch it back off
        if (mIdle) {
        if (mIdle) {
            // Already in idle state. Nothing to do
            // Already in idle state. Nothing to do
            logIfDebug("Device is already idle");
            logIfDebug("Device is already idle");
        } else {
        } else if (!mScreenOn) {
            // Going idle once
            // Going idle once
            logIfDebug("Device is going idle once");
            logIfDebug("Device is going idle");
            mIdle = true;
            mIdle = true;
            mIdleListener.reportNewIdleState(mIdle);
            mIdleListener.reportNewIdleState(mIdle);
        } else {
            logIfDebug("TRIGGER_IDLE received but not changing state: mIdle = " + mIdle
                    + ", mScreenOn = " + mScreenOn);
        }
        }
    }
    }


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