4package org.qtproject.qt.android.multimedia;
6import android.app.Activity;
7import android.hardware.camera2.CameraManager;
8import android.os.Handler;
9import android.os.Looper;
10import android.util.Log;
12import org.qtproject.qt.android.UsedFromNativeCode;
14import java.util.concurrent.CountDownLatch;
20class QtCameraAvailabilityListener
extends CameraManager.AvailabilityCallback {
22 static final String LOG_TAG =
"QtCameraAvailabilityListener";
24 CameraManager mCameraManager =
null;
27 long mVideoDevicesNativePtr = 0;
29 Handler mAvailabilityCallbackHandler =
null;
33 QtCameraAvailabilityListener(Activity activity,
long videoDevicesNativePtr) {
34 mCameraManager = (CameraManager)
activity.getSystemService(Activity.CAMERA_SERVICE);
35 mVideoDevicesNativePtr = videoDevicesNativePtr;
49 mCameraManager.registerAvailabilityCallback(
this, mAvailabilityCallbackHandler);
58 assert(!mAvailabilityCallbackHandler.getLooper().isCurrentThread());
62 final CountDownLatch latch =
new CountDownLatch(1);
63 final boolean postSuccess = mAvailabilityCallbackHandler.post(() -> {
64 mCameraManager.unregisterAvailabilityCallback(
this);
65 assert(mVideoDevicesNativePtr != 0);
66 mVideoDevicesNativePtr = 0;
73 "Unable to post cleanup job to corresponding thread during " +
74 "QAndroidVideoDevices cleanup.");
80 }
catch (Exception e) {
83 "Unable to wait for cleanup job to finish on corresponding thread during" +
84 "QAndroidVideoDevices cleanup.");
90 native
void onCameraAvailableNative(
long videoDevicesNativePtr);
95 public void onCameraAvailable(
String cameraId) {
96 assert(mAvailabilityCallbackHandler.getLooper().isCurrentThread());
97 assert(mVideoDevicesNativePtr != 0);
98 onCameraAvailableNative(mVideoDevicesNativePtr);
101 native
void onCameraUnavailableNative(
long videoDevicesNativePtr);
104 public void onCameraUnavailable(
String cameraId) {
105 assert(mAvailabilityCallbackHandler.getLooper().isCurrentThread());
106 assert(mVideoDevicesNativePtr != 0);
107 onCameraUnavailableNative(mVideoDevicesNativePtr);
111 public void onCameraAccessPrioritiesChanged() {
Q_CORE_EXPORT QtJniTypes::Activity activity()