Merge "Camera: Use a single handler thread for device state callbacks" into udc-dev

This commit is contained in:
TreeHugger Robot
2023-02-24 18:50:41 +00:00
committed by Android (Google) Code Review

View File

@@ -142,24 +142,18 @@ public final class CameraManager {
PackageManager.PERMISSION_GRANTED;
}
mHandlerThread = new HandlerThread(TAG);
mHandlerThread.start();
mHandler = new Handler(mHandlerThread.getLooper());
mFoldStateListener = new FoldStateListener(context);
try {
context.getSystemService(DeviceStateManager.class)
.registerCallback(new HandlerExecutor(mHandler), mFoldStateListener);
context.getSystemService(DeviceStateManager.class).registerCallback(
new HandlerExecutor(CameraManagerGlobal.get().getDeviceStateHandler()),
mFoldStateListener);
} catch (IllegalStateException e) {
Log.v(TAG, "Failed to register device state listener!");
Log.v(TAG, "Device state dependent characteristics updates will not be functional!");
mHandlerThread.quitSafely();
mHandler = null;
mFoldStateListener = null;
}
}
private HandlerThread mHandlerThread;
private Handler mHandler;
private FoldStateListener mFoldStateListener;
/**
@@ -1645,6 +1639,9 @@ public final class CameraManager {
private ICameraService mCameraService;
private boolean mHasOpenCloseListenerPermission = false;
private HandlerThread mDeviceStateHandlerThread;
private Handler mDeviceStateHandler;
// Singleton, don't allow construction
private CameraManagerGlobal() { }
@@ -1658,6 +1655,18 @@ public final class CameraManager {
return gCameraManager;
}
public Handler getDeviceStateHandler() {
synchronized(mLock) {
if (mDeviceStateHandlerThread == null) {
mDeviceStateHandlerThread = new HandlerThread(TAG);
mDeviceStateHandlerThread.start();
mDeviceStateHandler = new Handler(mDeviceStateHandlerThread.getLooper());
}
return mDeviceStateHandler;
}
}
@Override
public IBinder asBinder() {
return this;