diff --git a/android/build.gradle b/android/build.gradle index 6acb6b4..628c9be 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -4,7 +4,7 @@ version '1.0' buildscript { repositories { google() - jcenter() + mavenCentral() } dependencies { @@ -15,7 +15,7 @@ buildscript { rootProject.allprojects { repositories { google() - jcenter() + mavenCentral() } } @@ -24,7 +24,16 @@ apply plugin: 'com.android.library' android { compileSdkVersion 30 + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + defaultConfig { minSdkVersion 16 } + + dependencies { + implementation 'androidx.annotation:annotation:1.3.0' + } } diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 4895e49..c587f1c 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -1,3 +1,3 @@ + package="com.aloisdeniel.geocoder"> diff --git a/android/src/main/java/com/aloisdeniel/geocoder/GeocoderPlugin.java b/android/src/main/java/com/aloisdeniel/geocoder/GeocoderPlugin.java index f7cf971..ddeb6ba 100644 --- a/android/src/main/java/com/aloisdeniel/geocoder/GeocoderPlugin.java +++ b/android/src/main/java/com/aloisdeniel/geocoder/GeocoderPlugin.java @@ -12,12 +12,14 @@ import android.os.AsyncTask; import android.os.Handler; import android.os.Looper; +import androidx.annotation.NonNull; +import android.content.Context; +import io.flutter.embedding.engine.plugins.FlutterPlugin; +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.MethodCall; -import io.flutter.plugin.common.PluginRegistry.Registrar; /** * NotAvailableException @@ -29,77 +31,26 @@ class NotAvailableException extends Exception { /** * GeocoderPlugin */ -public class GeocoderPlugin implements MethodCallHandler { +public class GeocoderPlugin implements FlutterPlugin, MethodCallHandler { + private MethodChannel channel; + private Context context; private Geocoder geocoder; - public GeocoderPlugin(Context context) { - + @Override + public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) { + channel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), "github.com/aloisdeniel/geocoder"); + channel.setMethodCallHandler(this); + context = flutterPluginBinding.getApplicationContext(); this.geocoder = new Geocoder(context); } - /** - * Plugin registration. - */ - public static void registerWith(Registrar registrar) { - final MethodChannel channel = new MethodChannel(registrar.messenger(), "github.com/aloisdeniel/geocoder"); - channel.setMethodCallHandler(new GeocoderPlugin(registrar.context())); - } - - // MethodChannel.Result wrapper that responds on the platform thread. - private static class MethodResultWrapper implements Result { - private Result methodResult; - private Handler handler; - - MethodResultWrapper(Result result) { - methodResult = result; - handler = new Handler(Looper.getMainLooper()); - } - - @Override - public void success(final Object result) { - handler.post( - new Runnable() { - @Override - public void run() { - methodResult.success(result); - } - }); - } - - @Override - public void error( - final String errorCode, final String errorMessage, final Object errorDetails) { - handler.post( - new Runnable() { - @Override - public void run() { - methodResult.error(errorCode, errorMessage, errorDetails); - } - }); - } - - @Override - public void notImplemented() { - handler.post( - new Runnable() { - @Override - public void run() { - methodResult.notImplemented(); - } - }); - } - } - @Override - public void onMethodCall(MethodCall call, Result rawResult) { - Result result = new MethodResultWrapper(rawResult); - + public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { if (call.method.equals("findAddressesFromQuery")) { String address = (String) call.argument("address"); findAddressesFromQuery(address, result); - } - else if (call.method.equals("findAddressesFromCoordinates")) { + } else if (call.method.equals("findAddressesFromCoordinates")) { float latitude = ((Number) call.argument("latitude")).floatValue(); float longitude = ((Number) call.argument("longitude")).floatValue(); findAddressesFromCoordinates(latitude,longitude, result); @@ -108,6 +59,11 @@ else if (call.method.equals("findAddressesFromCoordinates")) { } } + @Override + public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { + channel.setMethodCallHandler(null); + } + private void assertPresent() throws NotAvailableException { if (!geocoder.isPresent()) { throw new NotAvailableException(); @@ -135,10 +91,10 @@ protected void onPostExecute(List
addresses) { if (addresses != null) { if (addresses.isEmpty()) result.error("not_available", "Empty", null); - - else result.success(createAddressMapList(addresses)); - } - else result.error("failed", "Failed", null); + else + result.success(createAddressMapList(addresses)); + } else + result.error("failed", "Failed", null); } }.execute(); } @@ -163,10 +119,10 @@ protected void onPostExecute(List
addresses) { if (addresses != null) { if (addresses.isEmpty()) result.error("not_available", "Empty", null); - - else result.success(createAddressMapList(addresses)); - } - else result.error("failed", "Failed", null); + else + result.success(createAddressMapList(addresses)); + } else + result.error("failed", "Failed", null); } }.execute(); } diff --git a/pubspec.yaml b/pubspec.yaml index 98b6625..57fc3e5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,7 +4,8 @@ version: 0.3.0 homepage: https://github.com/aloisdeniel/flutter_geocoder environment: - sdk: ">=2.12.0 <3.0.0" + sdk: ">=2.12.0 <3.0.0" + flutter: ">=1.20.0" dependencies: flutter: @@ -12,5 +13,10 @@ dependencies: flutter: plugin: - androidPackage: com.aloisdeniel.geocoder - pluginClass: GeocoderPlugin + platforms: + android: + package: com.aloisdeniel.geocoder + pluginClass: GeocoderPlugin + ios: + pluginClass: GeocoderPlugin +