Camera: Improve error handling of device state listeners
Do not register characteristic fold state listeners in case the DeviceStateManager fails to register the main device state callback. This is possible in case we are running in instant mode and can impact the correctness of the characteristics override logic. Bug: 281930689 Test: atest --instant cts/tests/camera/src/android/hardware/camera2/cts/ExtendedCameraCharacteristicsTest.java#testLegacyCameraDeviceParity atest cts/tests/camera/src/android/hardware/camera2/cts/ExtendedCameraCharacteristicsTest.java#testLegacyCameraDeviceParity Change-Id: I53908508c5dd7375663cf37fc18522b1cea12e5e
This commit is contained in:
@@ -212,14 +212,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
|
||||
@GuardedBy("mLock")
|
||||
private boolean mFoldedDeviceState;
|
||||
|
||||
private final CameraManager.DeviceStateListener mFoldStateListener =
|
||||
new CameraManager.DeviceStateListener() {
|
||||
@Override
|
||||
public final void onDeviceStateChanged(boolean folded) {
|
||||
synchronized (mLock) {
|
||||
mFoldedDeviceState = folded;
|
||||
}
|
||||
}};
|
||||
private CameraManager.DeviceStateListener mFoldStateListener;
|
||||
|
||||
private static final String TAG = "CameraCharacteristics";
|
||||
|
||||
@@ -245,7 +238,18 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
|
||||
/**
|
||||
* Return the device state listener for this Camera characteristics instance
|
||||
*/
|
||||
CameraManager.DeviceStateListener getDeviceStateListener() { return mFoldStateListener; }
|
||||
CameraManager.DeviceStateListener getDeviceStateListener() {
|
||||
if (mFoldStateListener == null) {
|
||||
mFoldStateListener = new CameraManager.DeviceStateListener() {
|
||||
@Override
|
||||
public final void onDeviceStateChanged(boolean folded) {
|
||||
synchronized (mLock) {
|
||||
mFoldedDeviceState = folded;
|
||||
}
|
||||
}};
|
||||
}
|
||||
return mFoldStateListener;
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides the property value
|
||||
|
||||
@@ -1811,6 +1811,7 @@ public final class CameraManager {
|
||||
ctx.getSystemService(DeviceStateManager.class).registerCallback(
|
||||
new HandlerExecutor(mDeviceStateHandler), mFoldStateListener);
|
||||
} catch (IllegalStateException e) {
|
||||
mFoldStateListener = null;
|
||||
Log.v(TAG, "Failed to register device state listener!");
|
||||
Log.v(TAG, "Device state dependent characteristics updates will not be" +
|
||||
"functional!");
|
||||
|
||||
Reference in New Issue
Block a user