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

Commit fb721362 authored by Sahil Sonar's avatar Sahil Sonar 💬 Committed by Nishith Khanna
Browse files

camera: Skip ignored camera IDs when switching

   - On tetris, camera IDs 2 & 3 (logical lenses shown as physical) are ignored.
   - This hides extra "Lens" options in the camera app UI.
   - However, camera switching still cycles through these ignored IDs because isMultiCamEnabled() returns false.
   - This happens because multi_same_facing is false when only
     one front_camera_ids & back_camera_ids remain after ignoring, so multi-cam mode is disabled.
parent 51159f2d
Loading
Loading
Loading
Loading
+27 −8
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -498,7 +499,12 @@ public class MainActivity extends AppCompatActivity implements PreferenceFragmen
            getWindow().setAttributes(layout);
        }

        if (getResources().getBoolean(R.bool.zoom_level_switch_supported)) {
        String[] ignoredCameraIDs = getResources().getStringArray(R.array.config_ignoredCameraIds);
        if( MyDebug.LOG ) {
            Log.d(TAG, "ignoredCameraIDs: " + Arrays.toString(ignoredCameraIDs));
        }

        if (getResources().getBoolean(R.bool.zoom_level_switch_supported) || ignoredCameraIDs.length > 0) {
            cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
            camerafinder = new CameraFinder(cameraManager);
            cameraModel = camerafinder.getCameraModels();
@@ -507,11 +513,6 @@ public class MainActivity extends AppCompatActivity implements PreferenceFragmen
            cameraIdentifier.init();
        }

        String[] ignoredCameraIDs = getResources().getStringArray(R.array.config_ignoredCameraIds);
        if( MyDebug.LOG ) {
            Log.d(TAG, "ignoredCameraIDs: " + Arrays.toString(ignoredCameraIDs));
        }

        // Setup multi-camera buttons (must be done after creating preview so we know which Camera API is being used,
        // and before initialising on-screen visibility).
        // We only allow the separate icon for switching cameras if:
@@ -2548,7 +2549,7 @@ public class MainActivity extends AppCompatActivity implements PreferenceFragmen
                }
            }
            else {
                int n_cameras = preview.getCameraControllerManager().getNumberOfCameras();
                int n_cameras = getNumberOfValidCameraIds();
                cameraId = (cameraId + 1) % n_cameras;
            }
        }
@@ -2557,6 +2558,24 @@ public class MainActivity extends AppCompatActivity implements PreferenceFragmen
        return cameraId;
    }

    private int getNumberOfValidCameraIds() {
        Set<String> ignoredIds = new HashSet<>(Arrays.asList(
                getResources().getStringArray(R.array.config_ignoredCameraIds)
        ));
        if (ignoredIds.isEmpty()) {
            return preview.getCameraControllerManager().getNumberOfCameras();
        }
        List<String> allCameraIds = camerafinder.getAllCameraIdList();
        List<String> validCameraIds = new ArrayList<>();
        for (String id : allCameraIds) {
            if (!ignoredIds.contains(id)) {
                validCameraIds.add(id);
            }
        }

        return validCameraIds.size();
    }

    /* Returns the next cameraId with the same-facing as current camera.
     * Should only be called if isMultiCamEnabled() returns true.
     * Only used for testing, now that we bring up a menu instead of cycling.