From c849843dc36b35a09e2ac2614a98aed4926fb105 Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Mon, 13 May 2019 17:15:19 -0700 Subject: [PATCH 1/3] Setup to compile with earlier android sdks --- packages/camera/CHANGELOG.md | 6 +++++ .../flutter/plugins/camera/CameraPlugin.java | 27 +++++++++++++------ packages/camera/pubspec.yaml | 2 +- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/packages/camera/CHANGELOG.md b/packages/camera/CHANGELOG.md index 3f6872d79ad4..ce55f07d4e50 100644 --- a/packages/camera/CHANGELOG.md +++ b/packages/camera/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.5.1 + +* Can now be compiled with earlier Android sdks when +`` has been added to the project +`AndroidManifest.xml`. + ## 0.5.0 * **Breaking Change** This plugin no longer handles closing and opening the camera on Android diff --git a/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java b/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java index 3258993e49f4..6685daa39b55 100644 --- a/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java +++ b/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java @@ -82,11 +82,13 @@ public void onOrientationChanged(int i) { } public static void registerWith(Registrar registrar) { - if (registrar.activity() == null) { + if (registrar.activity() == null || Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { // When a background flutter view tries to register the plugin, the registrar has no activity. - // We stop the registration process as this plugin is foreground only. + // We stop the registration process as this plugin is foreground only. Also, if the sdk is + // less than 21 (min sdk for Camera2) we don't register the plugin. return; } + final MethodChannel channel = new MethodChannel(registrar.messenger(), "plugins.flutter.io/camera"); @@ -126,8 +128,8 @@ public void onMethodCall(MethodCall call, final Result result) { cameras.add(details); } result.success(cameras); - } catch (CameraAccessException e) { - result.error("cameraAccess", e.getMessage(), null); + } catch (Exception e) { + handleException(e, result); } break; case "initialize": @@ -168,8 +170,8 @@ public void onMethodCall(MethodCall call, final Result result) { try { camera.startPreviewWithImageStream(); result.success(null); - } catch (CameraAccessException e) { - result.error("CameraAccess", e.getMessage(), null); + } catch (Exception e) { + handleException(e, result); } break; } @@ -178,8 +180,8 @@ public void onMethodCall(MethodCall call, final Result result) { try { camera.startPreview(); result.success(null); - } catch (CameraAccessException e) { - result.error("CameraAccess", e.getMessage(), null); + } catch (Exception e) { + handleException(e, result); } break; } @@ -198,6 +200,15 @@ public void onMethodCall(MethodCall call, final Result result) { } } + @SuppressWarnings("ConstantConditions") + private void handleException(Exception exception, Result result) { + if (exception instanceof CameraAccessException) { + result.error("CameraAccess", exception.getMessage(), null); + } + + throw (RuntimeException) exception; + } + private static class CompareSizesByArea implements Comparator { @Override public int compare(Size lhs, Size rhs) { diff --git a/packages/camera/pubspec.yaml b/packages/camera/pubspec.yaml index aee83b1e5fc6..f6b7ab5786d2 100644 --- a/packages/camera/pubspec.yaml +++ b/packages/camera/pubspec.yaml @@ -2,7 +2,7 @@ name: camera description: A Flutter plugin for getting information about and controlling the camera on Android and iOS. Supports previewing the camera feed, capturing images, capturing video, and streaming image buffers to dart. -version: 0.5.0 +version: 0.5.1 authors: - Flutter Team - Luigi Agosti From 98d55db59122bfd0cc8f02a5214bb6aa312fcd0e Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Wed, 15 May 2019 11:28:20 -0700 Subject: [PATCH 2/3] Changelog additional details --- packages/camera/CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/camera/CHANGELOG.md b/packages/camera/CHANGELOG.md index ce55f07d4e50..1c36dd824597 100644 --- a/packages/camera/CHANGELOG.md +++ b/packages/camera/CHANGELOG.md @@ -1,8 +1,9 @@ ## 0.5.1 -* Can now be compiled with earlier Android sdks when +* Can now be compiled with earlier Android sdks below 21 when `` has been added to the project -`AndroidManifest.xml`. +`AndroidManifest.xml`. For sdks below 21, the plugin won't be registered and calls to it will throw +a `MissingPluginException.` ## 0.5.0 From c4f6e56e868f1b78fb8d7cb4bfe4a49f707fe896 Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Thu, 16 May 2019 11:58:47 -0700 Subject: [PATCH 3/3] Add a comment explaining the method --- .../src/main/java/io/flutter/plugins/camera/CameraPlugin.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java b/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java index 6685daa39b55..54243ed28a66 100644 --- a/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java +++ b/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java @@ -200,6 +200,9 @@ public void onMethodCall(MethodCall call, final Result result) { } } + // We move catching CameraAccessException out of onMethodCall because it causes a crash + // on plugin registration for sdks incompatible with Camera2 (< 21). We want this plugin to + // to be able to compile with <21 sdks for apps that want the camera and support earlier version. @SuppressWarnings("ConstantConditions") private void handleException(Exception exception, Result result) { if (exception instanceof CameraAccessException) {