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

Commit 52c79d4b authored by Austin Borger's avatar Austin Borger
Browse files

CameraDeviceImpl: Follow through reporting device errors even if the remote...

CameraDeviceImpl: Follow through reporting device errors even if the remote device was never initialized.

It's possible for setRemoteDevice to be called *after* libcameraservice
calls onDeviceError. It would be risky to implement changes to ensure
setRemoteDevice gets called first , so use a simple boolean flag to track
whether the remote device was initialized. If it wasn't, then we can't
assume the user isn't interested in device errors - that is only true if
the device was closed.

Bug: 263429133
Test: Ran CtsCameraTestCases on cuttlefish
Test: StreamedAppBehaviorTest#appsInVirtualDevice_shouldNotHaveAccessToCamera
Change-Id: Id1990dcb17e5ec2afc562bf76e410b58a49dcf77
Merged-In: Id1990dcb17e5ec2afc562bf76e410b58a49dcf77
(cherry picked from commit 2a95ec27)
parent e84b9a03
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -87,6 +87,7 @@ public class CameraDeviceImpl extends CameraDevice

    // TODO: guard every function with if (!mRemoteDevice) check (if it was closed)
    private ICameraDeviceUserWrapper mRemoteDevice;
    private boolean mRemoteDeviceInit = false;

    // Lock to synchronize cross-thread access to device public interface
    final Object mInterfaceLock = new Object(); // access from this class and Session only!
@@ -338,6 +339,8 @@ public class CameraDeviceImpl extends CameraDevice

            mDeviceExecutor.execute(mCallOnOpened);
            mDeviceExecutor.execute(mCallOnUnconfigured);

            mRemoteDeviceInit = true;
        }
    }

@@ -1754,8 +1757,8 @@ public class CameraDeviceImpl extends CameraDevice
        }

        synchronized(mInterfaceLock) {
            if (mRemoteDevice == null) {
                return; // Camera already closed
            if (mRemoteDevice == null && mRemoteDeviceInit) {
                return; // Camera already closed, user is not interested in errors anymore.
            }

            // Redirect device callback to the offline session in case we are in the middle