diff --git a/app/src/main/java/net/sourceforge/opencamera/MainActivity.java b/app/src/main/java/net/sourceforge/opencamera/MainActivity.java index 044d3d32cdd2dcad589e6485c5d2703581a1af9b..a7151a819a48f3c3894f6a722305ade66c9145e6 100644 --- a/app/src/main/java/net/sourceforge/opencamera/MainActivity.java +++ b/app/src/main/java/net/sourceforge/opencamera/MainActivity.java @@ -28,10 +28,12 @@ import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; +import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; @@ -477,7 +479,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(); @@ -486,11 +493,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: @@ -2530,8 +2532,8 @@ public class MainActivity extends AppCompatActivity implements PreferenceFragmen } } else { - int n_cameras = preview.getCameraControllerManager().getNumberOfCameras(); - cameraId = (cameraId+1) % n_cameras; + int n_cameras = getNumberOfValidCameraIds(); + cameraId = (cameraId + 1) % n_cameras; } } if( MyDebug.LOG ) @@ -2539,6 +2541,24 @@ public class MainActivity extends AppCompatActivity implements PreferenceFragmen return cameraId; } + private int getNumberOfValidCameraIds() { + Set ignoredIds = new HashSet<>(Arrays.asList( + getResources().getStringArray(R.array.config_ignoredCameraIds) + )); + if (ignoredIds.isEmpty()) { + return preview.getCameraControllerManager().getNumberOfCameras(); + } + List allCameraIds = camerafinder.getAllCameraIdList(); + List validCameraIds = new ArrayList<>(); + for (String id : allCameraIds) { + if (!ignoredIds.contains(id)) { + validCameraIds.add(id); + } + } + + return validCameraIds.size(); + } + /* Returns the cameraId that the "Switch multi camera" button will switch to. * Should only be called if isMultiCamEnabled() returns true. */