diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java index accb844dec8..1ae5f01a5d9 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java @@ -808,9 +808,8 @@ void unlockAutoFocus() { dartMessenger.error(flutterResult, errorCode, errorMessage, null)); } - public void startVideoRecording( - @NonNull Messages.VoidResult result, @Nullable EventChannel imageStreamChannel) { - prepareRecording(result); + public void startVideoRecording(@Nullable EventChannel imageStreamChannel) { + prepareRecording(); if (imageStreamChannel != null) { setStreamHandler(imageStreamChannel); @@ -819,11 +818,11 @@ public void startVideoRecording( recordingVideo = true; try { startCapture(true, imageStreamChannel != null); - result.success(); + return; } catch (CameraAccessException e) { recordingVideo = false; captureFile = null; - result.error(new Messages.FlutterError("videoRecordingFailed", e.getMessage(), null)); + throw new Messages.FlutterError("videoRecordingFailed", e.getMessage(), null); } } @@ -834,10 +833,9 @@ private void closeRenderer() { } } - public void stopVideoRecording(@NonNull final Messages.Result result) { + public String stopVideoRecording() { if (!recordingVideo) { - result.success(""); - return; + return ""; } // Re-create autofocus feature so it's using continuous capture focus mode now. cameraFeatures.setAutoFocus( @@ -854,16 +852,15 @@ public void stopVideoRecording(@NonNull final Messages.Result result) { try { startPreview(); } catch (CameraAccessException | IllegalStateException | InterruptedException e) { - result.error(new Messages.FlutterError("videoRecordingFailed", e.getMessage(), null)); - return; + throw new Messages.FlutterError("videoRecordingFailed", e.getMessage(), null); } - result.success(captureFile.getAbsolutePath()); + String path = captureFile.getAbsolutePath(); captureFile = null; + return path; } - public void pauseVideoRecording(@NonNull final Messages.VoidResult result) { + public void pauseVideoRecording() { if (!recordingVideo) { - result.success(); return; } @@ -871,22 +868,17 @@ public void pauseVideoRecording(@NonNull final Messages.VoidResult result) { if (SdkCapabilityChecker.supportsVideoPause()) { mediaRecorder.pause(); } else { - result.error( + throw new Messages.FlutterError( - "videoRecordingFailed", "pauseVideoRecording requires Android API +24.", null)); - return; + "videoRecordingFailed", "pauseVideoRecording requires Android API +24.", null); } } catch (IllegalStateException e) { - result.error(new Messages.FlutterError("videoRecordingFailed", e.getMessage(), null)); - return; + throw new Messages.FlutterError("videoRecordingFailed", e.getMessage(), null); } - - result.success(); } - public void resumeVideoRecording(@NonNull final Messages.VoidResult result) { + public void resumeVideoRecording() { if (!recordingVideo) { - result.success(); return; } @@ -894,17 +886,13 @@ public void resumeVideoRecording(@NonNull final Messages.VoidResult result) { if (SdkCapabilityChecker.supportsVideoPause()) { mediaRecorder.resume(); } else { - result.error( + throw new Messages.FlutterError( - "videoRecordingFailed", "resumeVideoRecording requires Android API +24.", null)); - return; + "videoRecordingFailed", "resumeVideoRecording requires Android API +24.", null); } } catch (IllegalStateException e) { - result.error(new Messages.FlutterError("videoRecordingFailed", e.getMessage(), null)); - return; + throw new Messages.FlutterError("videoRecordingFailed", e.getMessage(), null); } - - result.success(); } /** @@ -984,10 +972,9 @@ public double getExposureOffsetStepSize() { /** * Sets new focus mode from dart. * - * @param result Flutter result. * @param newMode New mode. */ - public void setFocusMode(final Messages.VoidResult result, @NonNull FocusMode newMode) { + public void setFocusMode(@NonNull FocusMode newMode) { final AutoFocusFeature autoFocusFeature = cameraFeatures.getAutoFocus(); autoFocusFeature.setValue(newMode); autoFocusFeature.updateBuilder(previewRequestBuilder); @@ -1014,12 +1001,9 @@ public void setFocusMode(final Messages.VoidResult result, @NonNull FocusMode ne captureSession.setRepeatingRequest( previewRequestBuilder.build(), null, backgroundHandler); } catch (CameraAccessException e) { - if (result != null) { - result.error( + throw new Messages.FlutterError( - "setFocusModeFailed", "Error setting focus mode: " + e.getMessage(), null)); - } - return; + "setFocusModeFailed", "Error setting focus mode: " + e.getMessage(), null); } break; case auto: @@ -1028,10 +1012,6 @@ public void setFocusMode(final Messages.VoidResult result, @NonNull FocusMode ne break; } } - - if (result != null) { - result.success(); - } } /** @@ -1052,7 +1032,7 @@ public void setFocusPoint(@NonNull final Messages.VoidResult result, @Nullable P new Messages.FlutterError( "setFocusPointFailed", "Could not set focus point.", null))); - this.setFocusMode(null, cameraFeatures.getAutoFocus().getValue()); + this.setFocusMode(cameraFeatures.getAutoFocus().getValue()); } /** @@ -1248,21 +1228,19 @@ public void onError(@NonNull String errorCode, @NonNull String errorMessage) { } @VisibleForTesting - void prepareRecording(@NonNull Messages.VoidResult result) { + void prepareRecording() { final File outputDir = applicationContext.getCacheDir(); try { captureFile = File.createTempFile("REC", ".mp4", outputDir); } catch (IOException | SecurityException e) { - result.error(new Messages.FlutterError("cannotCreateFile", e.getMessage(), null)); - return; + throw new Messages.FlutterError("cannotCreateFile", e.getMessage(), null); } try { prepareMediaRecorder(captureFile.getAbsolutePath()); } catch (IOException e) { recordingVideo = false; captureFile = null; - result.error(new Messages.FlutterError("videoRecordingFailed", e.getMessage(), null)); - return; + throw new Messages.FlutterError("videoRecordingFailed", e.getMessage(), null); } // Re-create autofocus feature so it's using video focus mode now. cameraFeatures.setAutoFocus( @@ -1363,24 +1341,21 @@ public void uncaughtException(Thread thread, Throwable ex) { videoRendererUncaughtExceptionHandler); } - public void setDescriptionWhileRecording( - @NonNull final Messages.VoidResult result, CameraProperties properties) { + public void setDescriptionWhileRecording(CameraProperties properties) { if (!recordingVideo) { - result.error( + throw new Messages.FlutterError( - "setDescriptionWhileRecordingFailed", "Device was not recording", null)); - return; + "setDescriptionWhileRecordingFailed", "Device was not recording", null); } // See VideoRenderer.java; support for this EGL extension is required to switch camera while recording. if (!SdkCapabilityChecker.supportsEglRecordableAndroid()) { - result.error( + throw new Messages.FlutterError( "setDescriptionWhileRecordingFailed", "Device does not support switching the camera while recording", - null)); - return; + null); } stopAndReleaseCamera(); @@ -1398,10 +1373,9 @@ public void setDescriptionWhileRecording( try { open(imageFormatGroup); } catch (CameraAccessException e) { - result.error( - new Messages.FlutterError("setDescriptionWhileRecordingFailed", e.getMessage(), null)); + throw + new Messages.FlutterError("setDescriptionWhileRecordingFailed", e.getMessage(), null); } - result.success(); } public void dispose() { diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraApiImpl.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraApiImpl.java index 27a79d8b098..f49a12bf00b 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraApiImpl.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraApiImpl.java @@ -155,21 +155,19 @@ public void create( @Override public void initialize( @NonNull Long cameraId, - @NonNull Messages.PlatformImageFormatGroup imageFormat, - @NonNull Messages.VoidResult result) { + @NonNull Messages.PlatformImageFormatGroup imageFormat) { if (camera != null) { try { camera.open(CameraUtils.imageFormatGroupFromPigeon(imageFormat)); - result.success(); - } catch (Exception e) { - handleException(e, result); + } catch (CameraAccessException e) { + throw new Messages.FlutterError("CameraAccessException", e.getMessage(), null); } } else { - result.error( + throw new Messages.FlutterError( "cameraNotFound", "Camera not found. Please call the 'create' method before calling 'initialize'.", - null)); + null); } } @@ -180,24 +178,23 @@ public void takePicture(@NonNull Long cameraId, @NonNull Messages.Result @Override public void startVideoRecording( - @NonNull Long cameraId, @NonNull Boolean enableStream, @NonNull Messages.VoidResult result) { - camera.startVideoRecording( - result, Objects.equals(enableStream, true) ? imageStreamChannel : null); + @NonNull Long cameraId, @NonNull Boolean enableStream) { + camera.startVideoRecording(Objects.equals(enableStream, true) ? imageStreamChannel : null); } @Override - public void stopVideoRecording(@NonNull Long cameraId, @NonNull Messages.Result result) { - camera.stopVideoRecording(result); + public String stopVideoRecording(@NonNull Long cameraId) { + return camera.stopVideoRecording(); } @Override - public void pauseVideoRecording(@NonNull Long cameraId, @NonNull Messages.VoidResult result) { - camera.pauseVideoRecording(result); + public void pauseVideoRecording(@NonNull Long cameraId) { + camera.pauseVideoRecording(); } @Override - public void resumeVideoRecording(@NonNull Long cameraId, @NonNull Messages.VoidResult result) { - camera.resumeVideoRecording(result); + public void resumeVideoRecording(@NonNull Long cameraId) { + camera.resumeVideoRecording(); } @Override @@ -209,7 +206,7 @@ public void setFlashMode( if (mode == null) { result.error( new Messages.FlutterError( - "setFlashModeFailed", "Unknown flash mode " + mode.name(), null)); + "setFlashModeFailed", "Unknown flash mode " + flashMode.name(), null)); return; } try { @@ -257,37 +254,25 @@ public void setExposurePoint( } } + @NonNull @Override - public void getMinExposureOffset( - @NonNull Long cameraId, @NonNull Messages.Result result) { - - try { - result.success(camera.getMinExposureOffset()); - } catch (Exception e) { - handleException(e, result); - } + public Double getMinExposureOffset( + @NonNull Long cameraId) { + return camera.getMinExposureOffset(); } + @NonNull @Override - public void getMaxExposureOffset( - @NonNull Long cameraId, @NonNull Messages.Result result) { - - try { - result.success(camera.getMaxExposureOffset()); - } catch (Exception e) { - handleException(e, result); - } + public Double getMaxExposureOffset( + @NonNull Long cameraId) { + return camera.getMaxExposureOffset(); } + @NonNull @Override - public void getExposureOffsetStepSize( - @NonNull Long cameraId, @NonNull Messages.Result result) { - - try { - result.success(camera.getExposureOffsetStepSize()); - } catch (Exception e) { - handleException(e, result); - } + public Double getExposureOffsetStepSize( + @NonNull Long cameraId) { + return camera.getExposureOffsetStepSize(); } @Override @@ -304,20 +289,14 @@ public void setExposureOffset( @Override public void setFocusMode( @NonNull Long cameraId, - @NonNull Messages.PlatformFocusMode focusMode, - @NonNull Messages.VoidResult result) { + @NonNull Messages.PlatformFocusMode focusMode) { FocusMode mode = CameraUtils.focusModeFromPigeon(focusMode); if (mode == null) { - result.error( + throw new Messages.FlutterError( - "setFocusModeFailed", "Unknown focus mode " + mode.name(), null)); - return; - } - try { - camera.setFocusMode(result, mode); - } catch (Exception e) { - handleException(e, result); + "setFocusModeFailed", "Unknown focus mode " + mode.name(), null); } + camera.setFocusMode(mode); } @Override @@ -339,51 +318,39 @@ public void setFocusPoint( } @Override - public void startImageStream(@NonNull Messages.VoidResult result) { + public void startImageStream() { try { camera.startPreviewWithImageStream(imageStreamChannel); - result.success(); - } catch (Exception e) { - handleException(e, result); + } catch (CameraAccessException e) { + throw new Messages.FlutterError("CameraAccessException", e.getMessage(), null); } } @Override - public void stopImageStream(@NonNull Messages.VoidResult result) { - + public void stopImageStream() { try { camera.startPreview(); - result.success(); } catch (Exception e) { - handleException(e, result); + throw new Messages.FlutterError(e.getClass().getName(), e.getMessage(), null); } } + @NonNull @Override - public void getMaxZoomLevel(@NonNull Long cameraId, @NonNull Messages.Result result) { + public Double getMaxZoomLevel(@NonNull Long cameraId) { assert camera != null; - try { - float maxZoomLevel = camera.getMaxZoomLevel(); - result.success((double) maxZoomLevel); - } catch (Exception e) { - handleException(e, result); - } + return (double) camera.getMaxZoomLevel(); } + @NonNull @Override - public void getMinZoomLevel(@NonNull Long cameraId, @NonNull Messages.Result result) { + public Double getMinZoomLevel(@NonNull Long cameraId) { assert camera != null; - - try { - float minZoomLevel = camera.getMinZoomLevel(); - result.success((double) minZoomLevel); - } catch (Exception e) { - handleException(e, result); - } + return (double) camera.getMinZoomLevel(); } @Override @@ -402,73 +369,59 @@ public void setZoomLevel( @Override public void lockCaptureOrientation( @NonNull Long cameraId, - @NonNull Messages.PlatformDeviceOrientation platformOrientation, - @NonNull Messages.VoidResult result) { + @NonNull Messages.PlatformDeviceOrientation platformOrientation) { PlatformChannel.DeviceOrientation orientation = CameraUtils.orientationFromPigeon(platformOrientation); - try { camera.lockCaptureOrientation(orientation); - result.success(); - } catch (Exception e) { - handleException(e, result); - } } @Override public void unlockCaptureOrientation( - @NonNull Long cameraId, @NonNull Messages.VoidResult result) { + @NonNull Long cameraId) { - try { camera.unlockCaptureOrientation(); - result.success(); - } catch (Exception e) { - handleException(e, result); - } } @Override - public void pausePreview(@NonNull Long cameraId, @NonNull Messages.VoidResult result) { + public void pausePreview(@NonNull Long cameraId) { try { camera.pausePreview(); - result.success(); - } catch (Exception e) { - handleException(e, result); + } catch (CameraAccessException e) { + throw new Messages.FlutterError("CameraAccessException", e.getMessage(), null); } } @Override - public void resumePreview(@NonNull Long cameraId, @NonNull Messages.VoidResult result) { + public void resumePreview(@NonNull Long cameraId) { try { camera.resumePreview(); - result.success(); } catch (Exception e) { - handleException(e, result); + throw new Messages.FlutterError("CameraAccessException", e.getMessage(), null); } } @Override public void setDescriptionWhileRecording( - @NonNull String cameraName, @NonNull Messages.VoidResult result) { + @NonNull String cameraName) { try { CameraProperties cameraProperties = new CameraPropertiesImpl(cameraName, CameraUtils.getCameraManager(activity)); - camera.setDescriptionWhileRecording(result, cameraProperties); + camera.setDescriptionWhileRecording(cameraProperties); } catch (Exception e) { - handleException(e, result); + throw new Messages.FlutterError("CameraAccessException", e.getMessage(), null); } } @Override - public void dispose(@NonNull Long cameraId, @NonNull Messages.VoidResult result) { + public void dispose(@NonNull Long cameraId) { if (camera != null) { camera.dispose(); } - result.success(); } }