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

Commit 180f04f9 authored by /e/ robot's avatar /e/ robot
Browse files

Merge remote-tracking branch 'origin/lineage-21.0' into v1-u

parents cf7f1625 0238fcf0
Loading
Loading
Loading
Loading
+31 −1
Original line number Diff line number Diff line
@@ -270,6 +270,7 @@ import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -819,6 +820,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    private LineageHardwareManager mLineageHardware;

    private boolean mLongSwipeDown;
    private CameraAvailbilityListener mCameraAvailabilityListener;

    private class PolicyHandler extends Handler {

@@ -2541,6 +2543,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        mAlarmManager = mContext.getSystemService(AlarmManager.class);
        mCameraManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE);
        mCameraManager.registerTorchCallback(new TorchModeCallback(), mHandler);
        mCameraAvailabilityListener = new CameraAvailbilityListener();
        mCameraManager.registerAvailabilityCallback(mCameraAvailabilityListener, mHandler);

        mModifierShortcutManager = new ModifierShortcutManager(mContext, mHandler);
        mUiMode = mContext.getResources().getInteger(
@@ -5479,7 +5483,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                } else {
                    mHandler.removeMessages(MSG_CAMERA_LONG_PRESS);
                    // Consume key up events of long presses only.
                    if (mIsLongPress && mCameraLaunch) {
                    if (mIsLongPress && mCameraLaunch
                            && !mCameraAvailabilityListener.isAnyCameraInUse()) {
                        Intent intent;
                        if (keyguardActive) {
                            intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE);
@@ -7792,4 +7797,29 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            return displayId;
        }
    }

    private class CameraAvailbilityListener extends CameraManager.AvailabilityCallback {
        private final Set<String> mCameraInUse = Collections.synchronizedSet(new HashSet<>());

        @Override
        public void onCameraAvailable(String cameraId) {
            mCameraInUse.remove(cameraId);
        }

        @Override
        public void onCameraUnavailable(String cameraId) {
            try {
                // check if the camera id is still valid
                mCameraManager.getCameraCharacteristics(cameraId);
            } catch (Exception e) {
                // camera id is no longer valid, ignore
                return;
            }
            mCameraInUse.add(cameraId);
        }

        public boolean isAnyCameraInUse() {
            return !mCameraInUse.isEmpty();
        }
    }
}