Merge "update OWNERS file to include members of the apps team" into sc-v2-dev
diff --git a/service/src/com/android/car/evs/CarEvsService.java b/service/src/com/android/car/evs/CarEvsService.java
index 7af1adb..961707f 100644
--- a/service/src/com/android/car/evs/CarEvsService.java
+++ b/service/src/com/android/car/evs/CarEvsService.java
@@ -24,6 +24,7 @@
import static android.car.evs.CarEvsManager.SERVICE_STATE_REQUESTED;
import static android.car.evs.CarEvsManager.SERVICE_STATE_UNAVAILABLE;
import static android.car.evs.CarEvsManager.STREAM_EVENT_STREAM_STOPPED;
+import static android.hardware.display.DisplayManager.DisplayListener;
import static com.android.car.CarLog.TAG_EVS;
import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage;
@@ -51,6 +52,7 @@
import android.hardware.automotive.vehicle.V2_0.VehicleArea;
import android.hardware.automotive.vehicle.V2_0.VehicleGear;
import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
+import android.hardware.display.DisplayManager;
import android.os.Binder;
import android.os.Build;
import android.os.Handler;
@@ -64,6 +66,7 @@
import android.util.IndentingPrintWriter;
import android.util.Log;
import android.util.Slog;
+import android.view.Display;
import com.android.car.CarPropertyService;
import com.android.car.CarServiceBase;
@@ -159,6 +162,7 @@
private final Context mContext;
private final EvsHalService mEvsHalService;
private final CarPropertyService mPropertyService;
+ private final DisplayManager mDisplayManager; // To monitor the default display's state
private final Object mLock = new Object();
private final ComponentName mEvsCameraActivity;
@@ -224,6 +228,48 @@
}
};
+ private final DisplayManager.DisplayListener mDisplayListener =
+ new DisplayManager.DisplayListener() {
+ @Override
+ public void onDisplayAdded(int displayId) {
+ // Nothing to do
+ }
+
+ @Override
+ public void onDisplayRemoved(int displayId) {
+ // Nothing to do
+ }
+
+ @Override
+ public void onDisplayChanged(int displayId) {
+ if (displayId != Display.DEFAULT_DISPLAY) {
+ // We are interested only in the default display.
+ return;
+ }
+
+ Display display = mDisplayManager.getDisplay(Display.DEFAULT_DISPLAY);
+ switch (display.getState()) {
+ case Display.STATE_ON:
+ // We may want to request the system viewer.
+ if (!requestActivityIfNecessaryLocked()) {
+ Slog.e(TAG_EVS, "Failed to request the system viewer");
+ }
+ break;
+
+ case Display.STATE_OFF:
+ // Stop an active client
+ if (mStreamCallback != null) {
+ stopVideoStream(mStreamCallback);
+ }
+ break;
+
+ default:
+ // Nothing to do for all other state changes
+ break;
+ }
+ }
+ };
+
// CarEvsService state machine implementation to handle all state transitions.
private final class StateMachine {
// Current state
@@ -444,10 +490,13 @@
throw new IllegalStateException("CarEvsService is in the unknown state.");
}
- // Arms the timer
- mHandler.sendMessageDelayed(obtainMessage(CarEvsService::handleActivityRequestTimeout,
- CarEvsService.this).setWhat(MSG_CHECK_ACTIVITY_REQUEST_TIMEOUT),
- STREAM_START_REQUEST_TIMEOUT_MS);
+ // Arms the timer for the high-priority request
+ if (priority == REQUEST_PRIORITY_HIGH) {
+ mHandler.sendMessageDelayed(obtainMessage(
+ CarEvsService::handleActivityRequestTimeout,
+ CarEvsService.this).setWhat(MSG_CHECK_ACTIVITY_REQUEST_TIMEOUT),
+ STREAM_START_REQUEST_TIMEOUT_MS);
+ }
mState = SERVICE_STATE_REQUESTED;
mServiceType = service;
@@ -626,8 +675,9 @@
@GuardedBy("mLock")
private boolean requestActivityIfNecessaryLocked() {
- if (!mStateEngine.checkCurrentStateRequiresActivityLocked() || mLastEvsHalEvent == null ||
- !mLastEvsHalEvent.isRequestingToStartActivity()) {
+ // TODO(b/202398413): add a test case to verify below logic
+ if (!mStateEngine.checkCurrentStateRequiresActivityLocked() &&
+ (mLastEvsHalEvent == null || !mLastEvsHalEvent.isRequestingToStartActivity())) {
return false;
}
@@ -704,6 +754,9 @@
mEvsCameraActivity = null;
}
if (DBG) Slog.d(TAG_EVS, "evsCameraActivity=" + mEvsCameraActivity);
+
+ mDisplayManager = context.getSystemService(DisplayManager.class);
+ mDisplayManager.registerDisplayListener(mDisplayListener, mHandler);
}
/** Implements EvsHalService.EvsHalEventListener to monitor VHAL properties. */