diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index d4712a196760..17e120259871 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.27 + +* Changes `availableCameras` to get the camera name from `Camera2CameraInfo.getCameraId`. + ## 0.6.26+3 * Bumps kotlin_version to 2.3.0. diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart index 136f62084e06..43c96f272692 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax.dart @@ -303,7 +303,6 @@ class AndroidCameraCameraX extends CameraPlatform { (await processCameraProvider!.getAvailableCameraInfos()).cast(); CameraLensDirection? cameraLensDirection; - var cameraCount = 0; int? cameraSensorOrientation; String? cameraName; @@ -324,13 +323,12 @@ class AndroidCameraCameraX extends CameraPlatform { } cameraSensorOrientation = cameraInfo.sensorRotationDegrees; - cameraName = 'Camera $cameraCount'; - cameraCount++; + cameraName = await Camera2CameraInfo.from( + cameraInfo: cameraInfo, + ).getCameraId(); _savedCameras[cameraName] = cameraInfo; - // TODO(camsim99): Use camera ID retrieved from Camera2CameraInfo as - // camera name: https://github.com/flutter/flutter/issues/147545. cameraDescriptions.add( CameraDescription( name: cameraName, diff --git a/packages/camera/camera_android_camerax/pubspec.yaml b/packages/camera/camera_android_camerax/pubspec.yaml index 830322fdc33a..6ab1c8390c95 100644 --- a/packages/camera/camera_android_camerax/pubspec.yaml +++ b/packages/camera/camera_android_camerax/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_android_camerax description: Android implementation of the camera plugin using the CameraX library. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android_camerax issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.6.26+3 +version: 0.6.27 environment: sdk: ^3.9.0 diff --git a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart index 16ffabfd0e89..9e09c568ff97 100644 --- a/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart +++ b/packages/camera/camera_android_camerax/test/android_camera_camerax_test.dart @@ -503,12 +503,12 @@ void main() { final camera = AndroidCameraCameraX(); final returnData = [ { - 'name': 'Camera 0', + 'name': '0', 'lensFacing': 'back', 'sensorOrientation': 0, }, { - 'name': 'Camera 1', + 'name': '1', 'lensFacing': 'front', 'sensorOrientation': 90, }, @@ -537,6 +537,17 @@ void main() { return mockBackCameraSelector; }; + PigeonOverrides.camera2CameraInfo_from = ({required dynamic cameraInfo}) { + final camera2cameraInfo = MockCamera2CameraInfo(); + var cameraId = ''; + if (cameraInfo == mockBackCameraInfo) { + cameraId = '0'; + } else if (cameraInfo == mockFrontCameraInfo) { + cameraId = '1'; + } + when(camera2cameraInfo.getCameraId()).thenAnswer((_) async => cameraId); + return camera2cameraInfo; + }; PigeonOverrides.systemServicesManager_new = ({ required void Function(SystemServicesManager, String) onCameraError, @@ -1696,17 +1707,17 @@ void main() { final camera = AndroidCameraCameraX(); final returnData = [ { - 'name': 'Camera 0', + 'name': '0', 'lensFacing': 'back', 'sensorOrientation': 0, }, { - 'name': 'Camera 1', + 'name': '1', 'lensFacing': 'back', 'sensorOrientation': 0, }, { - 'name': 'Camera 2', + 'name': '2', 'lensFacing': 'front', 'sensorOrientation': 0, }, @@ -1872,6 +1883,17 @@ void main() { return MockResolutionFilter(); }; PigeonOverrides.camera2CameraInfo_from = ({required dynamic cameraInfo}) { + var cameraId = ''; + if (cameraInfo == mockBackCameraInfoOne) { + cameraId = '0'; + } else if (cameraInfo == mockBackCameraInfoTwo) { + cameraId = '1'; + } else if (cameraInfo == mockFrontCameraInfo) { + cameraId = '2'; + } + when( + mockCamera2CameraInfo.getCameraId(), + ).thenAnswer((_) async => cameraId); when( mockCamera2CameraInfo.getCameraCharacteristic( mockCameraCharacteristicsKey, @@ -3323,12 +3345,12 @@ void main() { const testSensorOrientation = 90; const testBackCameraDescription = CameraDescription( - name: 'Camera 0', + name: '0', lensDirection: CameraLensDirection.back, sensorOrientation: testSensorOrientation, ); const testFrontCameraDescription = CameraDescription( - name: 'Camera 1', + name: '1', lensDirection: CameraLensDirection.front, sensorOrientation: testSensorOrientation, ); @@ -3430,6 +3452,13 @@ void main() { }; PigeonOverrides.camera2CameraInfo_from = ({required dynamic cameraInfo}) { final camera2cameraInfo = MockCamera2CameraInfo(); + var cameraId = ''; + if (cameraInfo == mockBackCameraInfo) { + cameraId = '0'; + } else if (cameraInfo == mockFrontCameraInfo) { + cameraId = '1'; + } + when(camera2cameraInfo.getCameraId()).thenAnswer((_) async => cameraId); when( camera2cameraInfo.getCameraCharacteristic(any), ).thenAnswer((_) async => InfoSupportedHardwareLevel.limited); @@ -3594,12 +3623,12 @@ void main() { const testSensorOrientation = 90; const testBackCameraDescription = CameraDescription( - name: 'Camera 0', + name: '0', lensDirection: CameraLensDirection.back, sensorOrientation: testSensorOrientation, ); const testFrontCameraDescription = CameraDescription( - name: 'Camera 1', + name: '1', lensDirection: CameraLensDirection.front, sensorOrientation: testSensorOrientation, ); @@ -3698,6 +3727,13 @@ void main() { }; PigeonOverrides.camera2CameraInfo_from = ({required dynamic cameraInfo}) { final camera2cameraInfo = MockCamera2CameraInfo(); + var cameraId = ''; + if (cameraInfo == mockBackCameraInfo) { + cameraId = '0'; + } else if (cameraInfo == mockFrontCameraInfo) { + cameraId = '1'; + } + when(camera2cameraInfo.getCameraId()).thenAnswer((_) async => cameraId); when( camera2cameraInfo.getCameraCharacteristic(any), ).thenAnswer((_) async => InfoSupportedHardwareLevel.limited);