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
This commit is contained in:
Eric Jeong
2021-05-20 09:14:55 -07:00
parent 50471a76f9
commit 919b3ad3d8

View File

@@ -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");