From 3ce4a861816abb3d0481ddbb4d2d440e019cb8df Mon Sep 17 00:00:00 2001 From: Li Xiangyang Date: Fri, 25 Sep 2020 03:13:55 +0800 Subject: [PATCH] migrate to the new Android APIs based on FlutterPlugin (#53) --- .gitignore | 3 + CHANGELOG.md | 4 ++ .../lykhonis/imagecrop/ImageCropPlugin.java | 62 +++++++++++++++++-- example/.flutter-plugins-dependencies | 1 - .../ios/Flutter/flutter_export_environment.sh | 11 ---- pubspec.yaml | 6 +- 6 files changed, 68 insertions(+), 19 deletions(-) delete mode 100644 example/.flutter-plugins-dependencies delete mode 100755 example/ios/Flutter/flutter_export_environment.sh diff --git a/.gitignore b/.gitignore index 5445b4b..ef31f34 100755 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,6 @@ pubspec.lock *.iml build/ + +example/.flutter-plugins-dependencies +example/ios/Flutter/flutter_export_environment.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b0143b..7040295 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.3 + +* migrate to the new Android APIs based on FlutterPlugin + ## 0.3.2 * Fixes #33. Image rotation bug after cropping on iOS diff --git a/android/src/main/java/com/lykhonis/imagecrop/ImageCropPlugin.java b/android/src/main/java/com/lykhonis/imagecrop/ImageCropPlugin.java index de5be54..e2f86d6 100755 --- a/android/src/main/java/com/lykhonis/imagecrop/ImageCropPlugin.java +++ b/android/src/main/java/com/lykhonis/imagecrop/ImageCropPlugin.java @@ -26,20 +26,28 @@ import androidx.annotation.NonNull; import androidx.exifinterface.media.ExifInterface; + +import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.MethodChannel.Result; import io.flutter.plugin.common.PluginRegistry; import io.flutter.plugin.common.PluginRegistry.Registrar; +import io.flutter.embedding.engine.plugins.FlutterPlugin; +import io.flutter.embedding.engine.plugins.activity.ActivityAware; +import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; import static android.Manifest.permission.READ_EXTERNAL_STORAGE; import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; -public final class ImageCropPlugin implements MethodCallHandler, PluginRegistry.RequestPermissionsResultListener { +public final class ImageCropPlugin implements FlutterPlugin , ActivityAware, MethodCallHandler, PluginRegistry.RequestPermissionsResultListener { private static final int PERMISSION_REQUEST_CODE = 13094; - private final Activity activity; + private MethodChannel channel; + + private ActivityPluginBinding binding; + private Activity activity; private Result permissionRequestResult; private ExecutorService executor; @@ -47,13 +55,59 @@ private ImageCropPlugin(Activity activity) { this.activity = activity; } + public ImageCropPlugin(){ } + + /** + * legacy APIs + */ public static void registerWith(Registrar registrar) { - MethodChannel channel = new MethodChannel(registrar.messenger(), "plugins.lykhonis.com/image_crop"); ImageCropPlugin instance = new ImageCropPlugin(registrar.activity()); - channel.setMethodCallHandler(instance); + instance.setup(registrar.messenger()); registrar.addRequestPermissionsResultListener(instance); } + @Override + public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { + this.setup(binding.getBinaryMessenger()); + } + + @Override + public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { + channel.setMethodCallHandler(null); + channel = null; + } + + @Override + public void onAttachedToActivity(ActivityPluginBinding activityPluginBinding) { + binding = activityPluginBinding; + activity = activityPluginBinding.getActivity(); + activityPluginBinding.addRequestPermissionsResultListener(this); + } + + @Override + public void onDetachedFromActivity() { + activity = null; + if(binding != null){ + binding.removeRequestPermissionsResultListener(this); + } + } + + @Override + public void onReattachedToActivityForConfigChanges(ActivityPluginBinding activityPluginBinding) { + this.onAttachedToActivity(activityPluginBinding); + } + + @Override + public void onDetachedFromActivityForConfigChanges() { + this.onDetachedFromActivity(); + } + + private void setup(BinaryMessenger messenger) { + channel = new MethodChannel(messenger, "plugins.lykhonis.com/image_crop"); + channel.setMethodCallHandler(this); + } + + @SuppressWarnings("ConstantConditions") @Override public void onMethodCall(MethodCall call, Result result) { diff --git a/example/.flutter-plugins-dependencies b/example/.flutter-plugins-dependencies deleted file mode 100644 index 4292874..0000000 --- a/example/.flutter-plugins-dependencies +++ /dev/null @@ -1 +0,0 @@ -{"_info":"// This is a generated file; do not edit or check into version control.","dependencyGraph":[{"name":"image_crop","dependencies":[]},{"name":"image_picker","dependencies":[]}]} \ No newline at end of file diff --git a/example/ios/Flutter/flutter_export_environment.sh b/example/ios/Flutter/flutter_export_environment.sh deleted file mode 100755 index 565f565..0000000 --- a/example/ios/Flutter/flutter_export_environment.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -# This is a generated file; do not edit or check into version control. -export "FLUTTER_ROOT=/Users/Vladimir/Projects/github.com/flutter" -export "FLUTTER_APPLICATION_PATH=/Users/Vladimir/Projects/github.com/image_crop/example" -export "FLUTTER_TARGET=/Users/Vladimir/Projects/github.com/image_crop/example/lib/main.dart" -export "FLUTTER_BUILD_DIR=build" -export "SYMROOT=${SOURCE_ROOT}/../build/ios" -export "FLUTTER_FRAMEWORK_DIR=/Users/Vladimir/Projects/github.com/flutter/bin/cache/artifacts/engine/ios" -export "FLUTTER_BUILD_NAME=1.0.0" -export "FLUTTER_BUILD_NUMBER=1" -export "TRACK_WIDGET_CREATION=true" diff --git a/pubspec.yaml b/pubspec.yaml index 1e6864f..169129a 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,11 +1,11 @@ name: image_crop description: A flutter plugin to crop image on iOS and Android. It processes image files off main thread natively. The plugin provides a Crop widget to display image cropping to a user. -version: 0.3.2 +version: 0.3.3 homepage: https://github.com/VolodymyrLykhonis/image_crop environment: - sdk: ">=2.0.0-dev.68.0 <3.0.0" - flutter: ">=1.10.0 <2.0.0" + sdk: ">=2.1.0 <3.0.0" + flutter: ">=1.12.13+hotfix.6 <2.0.0" dependencies: flutter: