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

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15020076

Change-Id: Ic963909be48657adc562bde80ab574ca041369cd
This commit is contained in:
TreeHugger Robot
2021-07-01 22:39:56 +00:00
committed by Automerger Merge Worker

View File

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