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

Commit fa344e04 authored by Hayden Gomes's avatar Hayden Gomes
Browse files

Check for disabled camera in MediaRecorderClient

To avoid encountering the getService timeout, we should first check if
the camera service has been disabled before fetching it.

Bug: 163322246
Test: ran on device with disabled camera to verify getService was
skipped

Change-Id: I47e8878182fe82c1473da59c8054ee7281efe23e
parent c3ffbec5
Loading
Loading
Loading
Loading
+29 −23
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
#include <binder/IServiceManager.h>
#include <binder/MemoryHeapBase.h>
#include <binder/MemoryBase.h>
#include <camera/CameraUtils.h>
#include <codec2/hidl/client.h>
#include <cutils/atomic.h>
#include <cutils/properties.h> // for property_get
@@ -423,10 +424,14 @@ status_t MediaRecorderClient::setListener(const sp<IMediaRecorderClient>& listen

    sp<IServiceManager> sm = defaultServiceManager();

    static const bool sCameraDisabled = CameraUtils::isCameraServiceDisabled();

    if (!sCameraDisabled) {
        // WORKAROUND: We don't know if camera exists here and getService might block for 5 seconds.
        // Use checkService for camera if we don't know it exists.
        static std::atomic<bool> sCameraChecked(false);  // once true never becomes false.
        static std::atomic<bool> sCameraVerified(false); // once true never becomes false.

        sp<IBinder> binder = (sCameraVerified || !sCameraChecked)
            ? sm->getService(String16("media.camera")) : sm->checkService(String16("media.camera"));
        // If the device does not have a camera, do not create a death listener for it.
@@ -447,6 +452,7 @@ status_t MediaRecorderClient::setListener(const sp<IMediaRecorderClient>& listen
            });
        }
        sCameraChecked = true;
    }

    {
        using ::android::hidl::base::V1_0::IBase;