From a01051fc7fe9fa688c4287d5bc7379a516ff4f4f Mon Sep 17 00:00:00 2001 From: tim Hoogstrate Date: Wed, 31 Jan 2024 13:56:40 +0100 Subject: [PATCH 01/11] Fixes 182 and removed deprecation warnings. Upgrades compileSDKVersion --- geocoding_android/CHANGELOG.md | 6 +++ geocoding_android/android/build.gradle | 2 +- geocoding_android/android/gradle.properties | 1 - .../gradle/wrapper/gradle-wrapper.properties | 3 +- .../com/baseflow/geocoding/Geocoding.java | 44 +++++++++++++++++-- geocoding_android/pubspec.yaml | 2 +- 6 files changed, 50 insertions(+), 8 deletions(-) diff --git a/geocoding_android/CHANGELOG.md b/geocoding_android/CHANGELOG.md index 0591170..5b17dd7 100644 --- a/geocoding_android/CHANGELOG.md +++ b/geocoding_android/CHANGELOG.md @@ -1,3 +1,9 @@ +## 4.0.0 + +* **BREAKING CHANGES**: + * Updates `compileSdk' (compileSdkVersion) from 33 to 34. + * Fixes deprecation build warnings. + ## 3.0.0 * **BREAKING CHANGES**: diff --git a/geocoding_android/android/build.gradle b/geocoding_android/android/build.gradle index 6ade127..6e590ce 100644 --- a/geocoding_android/android/build.gradle +++ b/geocoding_android/android/build.gradle @@ -26,7 +26,7 @@ android { namespace("com.baseflow.geocoding") } - compileSdkVersion 33 + compileSdk 34 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 diff --git a/geocoding_android/android/gradle.properties b/geocoding_android/android/gradle.properties index 38c8d45..94adc3a 100644 --- a/geocoding_android/android/gradle.properties +++ b/geocoding_android/android/gradle.properties @@ -1,4 +1,3 @@ org.gradle.jvmargs=-Xmx1536M -android.enableR8=true android.useAndroidX=true android.enableJetifier=true diff --git a/geocoding_android/android/gradle/wrapper/gradle-wrapper.properties b/geocoding_android/android/gradle/wrapper/gradle-wrapper.properties index 3c9d085..529d8df 100644 --- a/geocoding_android/android/gradle/wrapper/gradle-wrapper.properties +++ b/geocoding_android/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Tue Jan 30 14:47:38 CET 2024 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip diff --git a/geocoding_android/android/src/main/java/com/baseflow/geocoding/Geocoding.java b/geocoding_android/android/src/main/java/com/baseflow/geocoding/Geocoding.java index cf3d0a9..a3d6598 100644 --- a/geocoding_android/android/src/main/java/com/baseflow/geocoding/Geocoding.java +++ b/geocoding_android/android/src/main/java/com/baseflow/geocoding/Geocoding.java @@ -4,8 +4,10 @@ import android.content.Context; import android.location.Address; import android.location.Geocoder; - +import android.os.Build; +import androidx.annotation.RequiresApi; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -34,10 +36,27 @@ void setLocaleIdentifier(@Nullable Locale locale) { * @return a list of Address objects. Returns null or empty list if no matches were found or there is no backend service available. * @throws java.io.IOException if the network is unavailable or any other I/O problem occurs. */ + @SuppressWarnings("deprecation") List
placemarkFromAddress(String address) throws IOException { - final Geocoder geocoder = createGeocoder(androidContext, locale); - return geocoder.getFromLocationName(address, 5); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + return getAddressesWithGeocodeListener(geocoder, address, 5); + } else { + return geocoder.getFromLocationName(address, 5); + } + } + + @RequiresApi(api = Build.VERSION_CODES.TIRAMISU) + private List
getAddressesWithGeocodeListener(Geocoder geocoder, String address, int maxResults) { + List
addresses = new ArrayList<>(); + geocoder.getFromLocationName(address, maxResults, new Geocoder.GeocodeListener() { + @Override + public void onGeocode(List
geocodedAddresses) { + addresses.addAll(geocodedAddresses); + } + }); + return addresses; } /** @@ -48,12 +67,29 @@ List
placemarkFromAddress(String address) throws IOException { * @return a list of Address objects. Returns null or empty list if no matches were found or there is no backend service available. * @throws IOException if the network is unavailable or any other I/O problem occurs. */ + @SuppressWarnings("deprecation") List
placemarkFromCoordinates( double latitude, double longitude ) throws IOException { final Geocoder geocoder = createGeocoder(androidContext, locale); - return geocoder.getFromLocation(latitude, longitude, 5); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + return getLocationWithGeocodeListener(geocoder, latitude, longitude, 5); + } else { + return geocoder.getFromLocation(latitude, longitude, 5); + } + } + + @RequiresApi(api = Build.VERSION_CODES.TIRAMISU) + private List
getLocationWithGeocodeListener(Geocoder geocoder, double latitude, double longitude, int maxResults) { + List
addresses = new ArrayList<>(); + geocoder.getFromLocation(latitude, longitude, maxResults, new Geocoder.GeocodeListener() { + @Override + public void onGeocode(List
geocodedAddresses) { + addresses.addAll(geocodedAddresses); + } + }); + return addresses; } private static Geocoder createGeocoder(Context androidContext, @Nullable Locale locale) { diff --git a/geocoding_android/pubspec.yaml b/geocoding_android/pubspec.yaml index 98b7c67..108f455 100644 --- a/geocoding_android/pubspec.yaml +++ b/geocoding_android/pubspec.yaml @@ -1,6 +1,6 @@ name: geocoding_android description: A Flutter Geocoding plugin which provides easy geocoding and reverse-geocoding features. -version: 3.0.0 +version: 4.0.0 repository: https://github.com/baseflow/flutter-geocoding/tree/main/geocoding_android issue_tracker: https://github.com/Baseflow/flutter-geocoding/issues From 8791b532331864ccc034dcdc4eff6ac343f27473 Mon Sep 17 00:00:00 2001 From: tim Hoogstrate Date: Thu, 1 Feb 2024 13:14:38 +0100 Subject: [PATCH 02/11] Implemented error states --- geocoding_android/CHANGELOG.md | 4 +- geocoding_android/android/build.gradle | 2 +- .../geocoding/GeocodeListenerAdapter.java | 12 ++ .../com/baseflow/geocoding/Geocoding.java | 38 +++--- .../geocoding/MethodCallHandlerImpl.java | 124 +++++++++++------- geocoding_android/pubspec.yaml | 2 +- 6 files changed, 118 insertions(+), 64 deletions(-) create mode 100644 geocoding_android/android/src/main/java/com/baseflow/geocoding/GeocodeListenerAdapter.java diff --git a/geocoding_android/CHANGELOG.md b/geocoding_android/CHANGELOG.md index 5b17dd7..ff9de5b 100644 --- a/geocoding_android/CHANGELOG.md +++ b/geocoding_android/CHANGELOG.md @@ -1,7 +1,5 @@ -## 4.0.0 +## 3.1.0 -* **BREAKING CHANGES**: - * Updates `compileSdk' (compileSdkVersion) from 33 to 34. * Fixes deprecation build warnings. ## 3.0.0 diff --git a/geocoding_android/android/build.gradle b/geocoding_android/android/build.gradle index 6e590ce..f339dda 100644 --- a/geocoding_android/android/build.gradle +++ b/geocoding_android/android/build.gradle @@ -26,7 +26,7 @@ android { namespace("com.baseflow.geocoding") } - compileSdk 34 + compileSdk 33 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 diff --git a/geocoding_android/android/src/main/java/com/baseflow/geocoding/GeocodeListenerAdapter.java b/geocoding_android/android/src/main/java/com/baseflow/geocoding/GeocodeListenerAdapter.java new file mode 100644 index 0000000..7dafb9b --- /dev/null +++ b/geocoding_android/android/src/main/java/com/baseflow/geocoding/GeocodeListenerAdapter.java @@ -0,0 +1,12 @@ +package com.baseflow.geocoding; + +import android.location.Address; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import java.util.List; + +public interface GeocodeListenerAdapter { + void onGeocode(@Nullable List
addresses); + void onError(@Nullable String errorMessage); +} \ No newline at end of file diff --git a/geocoding_android/android/src/main/java/com/baseflow/geocoding/Geocoding.java b/geocoding_android/android/src/main/java/com/baseflow/geocoding/Geocoding.java index a3d6598..fd29393 100644 --- a/geocoding_android/android/src/main/java/com/baseflow/geocoding/Geocoding.java +++ b/geocoding_android/android/src/main/java/com/baseflow/geocoding/Geocoding.java @@ -11,6 +11,8 @@ import java.util.List; import java.util.Locale; + + /** Geocoding components to lookup address or coordinates. */ class Geocoding { private final Context androidContext; @@ -37,26 +39,29 @@ void setLocaleIdentifier(@Nullable Locale locale) { * @throws java.io.IOException if the network is unavailable or any other I/O problem occurs. */ @SuppressWarnings("deprecation") - List
placemarkFromAddress(String address) throws IOException { + void placemarkFromAddress(String address, GeocodeListenerAdapter callback) throws IOException { final Geocoder geocoder = createGeocoder(androidContext, locale); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - return getAddressesWithGeocodeListener(geocoder, address, 5); + getAddressesWithGeocodeListener(geocoder, address, 5, callback); } else { - return geocoder.getFromLocationName(address, 5); + List
addresses = geocoder.getFromLocationName(address, 5); + callback.onGeocode(addresses); } } @RequiresApi(api = Build.VERSION_CODES.TIRAMISU) - private List
getAddressesWithGeocodeListener(Geocoder geocoder, String address, int maxResults) { - List
addresses = new ArrayList<>(); + private void getAddressesWithGeocodeListener(Geocoder geocoder, String address, int maxResults, GeocodeListenerAdapter callback) { geocoder.getFromLocationName(address, maxResults, new Geocoder.GeocodeListener() { @Override public void onGeocode(List
geocodedAddresses) { - addresses.addAll(geocodedAddresses); + callback.onGeocode(geocodedAddresses); } + @Override + public void onError(@Nullable String errorMessage) { + callback.onError(errorMessage); + } }); - return addresses; } /** @@ -68,28 +73,31 @@ public void onGeocode(List
geocodedAddresses) { * @throws IOException if the network is unavailable or any other I/O problem occurs. */ @SuppressWarnings("deprecation") - List
placemarkFromCoordinates( + void placemarkFromCoordinates( double latitude, - double longitude + double longitude, + GeocodeListenerAdapter callback ) throws IOException { final Geocoder geocoder = createGeocoder(androidContext, locale); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - return getLocationWithGeocodeListener(geocoder, latitude, longitude, 5); + getLocationWithGeocodeListener(geocoder, latitude, longitude, 5, callback); } else { - return geocoder.getFromLocation(latitude, longitude, 5); + callback.onGeocode(geocoder.getFromLocation(latitude, longitude, 5)); } } @RequiresApi(api = Build.VERSION_CODES.TIRAMISU) - private List
getLocationWithGeocodeListener(Geocoder geocoder, double latitude, double longitude, int maxResults) { - List
addresses = new ArrayList<>(); + private void getLocationWithGeocodeListener(Geocoder geocoder, double latitude, double longitude, int maxResults, GeocodeListenerAdapter callback) { geocoder.getFromLocation(latitude, longitude, maxResults, new Geocoder.GeocodeListener() { @Override public void onGeocode(List
geocodedAddresses) { - addresses.addAll(geocodedAddresses); + callback.onGeocode(geocodedAddresses); } + @Override + public void onError(@Nullable String errorMessage) { + callback.onError(errorMessage); + } }); - return addresses; } private static Geocoder createGeocoder(Context androidContext, @Nullable Locale locale) { diff --git a/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java b/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java index 7a48ad9..f0c3b8d 100644 --- a/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java +++ b/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java @@ -85,7 +85,6 @@ void startListening(BinaryMessenger messenger) { */ void stopListening() { if (channel == null) { - Log.d(TAG, "Tried to stop listening when no MethodChannel had been initialized."); return; } @@ -112,17 +111,29 @@ private void onLocationFromAddress(MethodCall call, Result result) { } try { - final List
addresses = geocoding.placemarkFromAddress(address); + geocoding.placemarkFromAddress(address, new GeocodeListenerAdapter() { + + @Override + public void onGeocode(List
addresses) { + if(addresses != null && addresses.size() > 0) { + result.success(AddressMapper.toLocationHashMapList(addresses)); + } else { + result.error( + "NOT_FOUND", + String.format("No coordinates found for '%s'", address), + null); + } + } + + @Override + public void onError(String errorMessage) { + result.error( + "NOT_FOUND", + String.format(errorMessage), + null); + } + }); - if (addresses == null || addresses.isEmpty()) { - result.error( - "NOT_FOUND", - String.format("No coordinates found for '%s'", address), - null); - return; - } - - result.success(AddressMapper.toLocationHashMapList(addresses)); } catch (IOException ex) { result.error( "IO_ERROR", @@ -137,28 +148,40 @@ private void onPlacemarkFromAddress(final MethodCall call, final Result result) if (address == null || address.isEmpty()) { result.error( - "ARGUMENT_ERROR", - "Supply a valid value for the 'address' parameter.", - null); + "ARGUMENT_ERROR", + "Supply a valid value for the 'address' parameter.", + null); } try { - final List
addresses = geocoding.placemarkFromAddress(address); - - if (addresses == null || addresses.isEmpty()) { - result.error( - "NOT_FOUND", - String.format("No coordinates found for '%s'", address), - null); - return; - } + geocoding.placemarkFromAddress(address, new GeocodeListenerAdapter() { + + @Override + public void onGeocode(List
addresses) { + if(addresses != null && addresses.size() > 0) { + result.success(AddressMapper.toAddressHashMapList(addresses)); + } else { + result.error( + "NOT_FOUND", + String.format("No coordinates found for '%s'", address), + null); + } + } + + @Override + public void onError(String errorMessage) { + result.error( + "NOT_FOUND", + String.format(errorMessage), + null); + } + }); - result.success(AddressMapper.toAddressHashMapList(addresses)); - } catch (IOException e) { + } catch (IOException ex) { result.error( - "IO_ERROR", - String.format("A network error occurred trying to lookup the address '%s'.", address), - null + "IO_ERROR", + String.format("A network error occurred trying to lookup the address '%s'.", address), + null ); } } @@ -168,23 +191,36 @@ private void onPlacemarkFromCoordinates(final MethodCall call, final Result resu final double longitude = call.argument("longitude"); try { - final List
addresses = geocoding.placemarkFromCoordinates( + geocoding.placemarkFromCoordinates( latitude, - longitude); - - if (addresses == null || addresses.isEmpty()) { - result.error( - "NOT_FOUND", - String.format( - Locale.ENGLISH, - "No address information found for supplied coordinates (latitude: %f, longitude: %f).", - latitude, - longitude - ), - null); - return; - } - result.success(AddressMapper.toAddressHashMapList(addresses)); + longitude, new GeocodeListenerAdapter() { + + @Override + public void onGeocode(List
addresses) { + if (addresses != null && addresses.size() > 0) { + result.success(AddressMapper.toAddressHashMapList(addresses)); + } else { + result.error( + "NOT_FOUND", + String.format( + Locale.ENGLISH, + "No address information found for supplied coordinates (latitude: %f, longitude: %f).", + latitude, + longitude + ), + null); + } + } + + @Override + public void onError(String errorMessage) { + result.error( + "NOT_FOUND", + String.format(errorMessage), + null); + } + }); + } catch (IOException ex) { result.error( "IO_ERROR", diff --git a/geocoding_android/pubspec.yaml b/geocoding_android/pubspec.yaml index 108f455..4b7d5d0 100644 --- a/geocoding_android/pubspec.yaml +++ b/geocoding_android/pubspec.yaml @@ -1,6 +1,6 @@ name: geocoding_android description: A Flutter Geocoding plugin which provides easy geocoding and reverse-geocoding features. -version: 4.0.0 +version: 3.1.0 repository: https://github.com/baseflow/flutter-geocoding/tree/main/geocoding_android issue_tracker: https://github.com/Baseflow/flutter-geocoding/issues From 4a023d94c6a1d56efcb422ca91a548372d76eb29 Mon Sep 17 00:00:00 2001 From: tim Hoogstrate Date: Thu, 1 Feb 2024 13:16:27 +0100 Subject: [PATCH 03/11] Updated changelog --- geocoding_android/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/geocoding_android/CHANGELOG.md b/geocoding_android/CHANGELOG.md index ff9de5b..e7f4b0b 100644 --- a/geocoding_android/CHANGELOG.md +++ b/geocoding_android/CHANGELOG.md @@ -1,6 +1,7 @@ ## 3.1.0 * Fixes deprecation build warnings. + * Adds Android API 34 support. ## 3.0.0 From a59615af025a7fe5578a534c20311f798814e7a4 Mon Sep 17 00:00:00 2001 From: TimHoogstrate Date: Thu, 1 Feb 2024 13:18:42 +0100 Subject: [PATCH 04/11] Update MethodCallHandlerImpl.java --- .../main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java b/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java index f0c3b8d..9ca3e4f 100644 --- a/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java +++ b/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java @@ -85,6 +85,7 @@ void startListening(BinaryMessenger messenger) { */ void stopListening() { if (channel == null) { + Log.d(TAG, "Tried to stop listening when no MethodChannel had been initialized."); return; } From 2e193c4943468cf2fcbd8742cccaf0e96fc40ffd Mon Sep 17 00:00:00 2001 From: tim Hoogstrate Date: Thu, 1 Feb 2024 13:20:33 +0100 Subject: [PATCH 05/11] fix formatting --- .../geocoding/GeocodeListenerAdapter.java | 2 ++ .../com/baseflow/geocoding/Geocoding.java | 31 ++++++++++++------- .../geocoding/MethodCallHandlerImpl.java | 16 +++++----- 3 files changed, 29 insertions(+), 20 deletions(-) diff --git a/geocoding_android/android/src/main/java/com/baseflow/geocoding/GeocodeListenerAdapter.java b/geocoding_android/android/src/main/java/com/baseflow/geocoding/GeocodeListenerAdapter.java index 7dafb9b..2bc44a9 100644 --- a/geocoding_android/android/src/main/java/com/baseflow/geocoding/GeocodeListenerAdapter.java +++ b/geocoding_android/android/src/main/java/com/baseflow/geocoding/GeocodeListenerAdapter.java @@ -1,6 +1,7 @@ package com.baseflow.geocoding; import android.location.Address; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -8,5 +9,6 @@ public interface GeocodeListenerAdapter { void onGeocode(@Nullable List
addresses); + void onError(@Nullable String errorMessage); } \ No newline at end of file diff --git a/geocoding_android/android/src/main/java/com/baseflow/geocoding/Geocoding.java b/geocoding_android/android/src/main/java/com/baseflow/geocoding/Geocoding.java index fd29393..42182b7 100644 --- a/geocoding_android/android/src/main/java/com/baseflow/geocoding/Geocoding.java +++ b/geocoding_android/android/src/main/java/com/baseflow/geocoding/Geocoding.java @@ -1,22 +1,27 @@ package com.baseflow.geocoding; import androidx.annotation.Nullable; + import android.content.Context; import android.location.Address; import android.location.Geocoder; import android.os.Build; + import androidx.annotation.RequiresApi; + import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Locale; - -/** Geocoding components to lookup address or coordinates. */ +/** + * Geocoding components to lookup address or coordinates. + */ class Geocoding { private final Context androidContext; - @Nullable private Locale locale; + @Nullable + private Locale locale; /** * Uses the given {@code androidContext} to execute geocoding features @@ -57,17 +62,18 @@ private void getAddressesWithGeocodeListener(Geocoder geocoder, String address, public void onGeocode(List
geocodedAddresses) { callback.onGeocode(geocodedAddresses); } - @Override - public void onError(@Nullable String errorMessage) { - callback.onError(errorMessage); - } + + @Override + public void onError(@Nullable String errorMessage) { + callback.onError(errorMessage); + } }); } /** * Returns a list of Address objects matching the supplied coordinates. * - * @param latitude the latitude point for the search + * @param latitude the latitude point for the search * @param longitude the longitude point for the search * @return a list of Address objects. Returns null or empty list if no matches were found or there is no backend service available. * @throws IOException if the network is unavailable or any other I/O problem occurs. @@ -93,10 +99,11 @@ private void getLocationWithGeocodeListener(Geocoder geocoder, double latitude, public void onGeocode(List
geocodedAddresses) { callback.onGeocode(geocodedAddresses); } - @Override - public void onError(@Nullable String errorMessage) { - callback.onError(errorMessage); - } + + @Override + public void onError(@Nullable String errorMessage) { + callback.onError(errorMessage); + } }); } diff --git a/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java b/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java index 9ca3e4f..ac4c148 100644 --- a/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java +++ b/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java @@ -39,8 +39,8 @@ final class MethodCallHandlerImpl implements MethodCallHandler { @Override public void onMethodCall( - final MethodCall call, - @NonNull final Result result + final MethodCall call, + @NonNull final Result result ) { switch (call.method) { case "setLocaleIdentifier": @@ -116,7 +116,7 @@ private void onLocationFromAddress(MethodCall call, Result result) { @Override public void onGeocode(List
addresses) { - if(addresses != null && addresses.size() > 0) { + if (addresses != null && addresses.size() > 0) { result.success(AddressMapper.toLocationHashMapList(addresses)); } else { result.error( @@ -159,7 +159,7 @@ private void onPlacemarkFromAddress(final MethodCall call, final Result result) @Override public void onGeocode(List
addresses) { - if(addresses != null && addresses.size() > 0) { + if (addresses != null && addresses.size() > 0) { result.success(AddressMapper.toAddressHashMapList(addresses)); } else { result.error( @@ -226,10 +226,10 @@ public void onError(String errorMessage) { result.error( "IO_ERROR", String.format( - Locale.ENGLISH, - "A network error occurred trying to lookup the supplied coordinates (latitude: %f, longitude: %f).", - latitude, - longitude + Locale.ENGLISH, + "A network error occurred trying to lookup the supplied coordinates (latitude: %f, longitude: %f).", + latitude, + longitude ), null ); From b3892f3343bc5f791852e8664c1fcba901dd9832 Mon Sep 17 00:00:00 2001 From: TimHoogstrate Date: Thu, 1 Feb 2024 13:32:26 +0100 Subject: [PATCH 06/11] Update MethodCallHandlerImpl.java --- .../java/com/baseflow/geocoding/MethodCallHandlerImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java b/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java index ac4c148..34e1630 100644 --- a/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java +++ b/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java @@ -39,8 +39,8 @@ final class MethodCallHandlerImpl implements MethodCallHandler { @Override public void onMethodCall( - final MethodCall call, - @NonNull final Result result + final MethodCall call, + @NonNull final Result result ) { switch (call.method) { case "setLocaleIdentifier": From 1a5f837d81cd836d0e04e25d5bb1843ced6b3712 Mon Sep 17 00:00:00 2001 From: TimHoogstrate Date: Thu, 1 Feb 2024 15:14:40 +0100 Subject: [PATCH 07/11] Update geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java Co-authored-by: Maurits van Beusekom --- .../main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java b/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java index 34e1630..4cc0139 100644 --- a/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java +++ b/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java @@ -172,7 +172,7 @@ public void onGeocode(List
addresses) { @Override public void onError(String errorMessage) { result.error( - "NOT_FOUND", + "IO_ERROR", String.format(errorMessage), null); } From f34aa81c36bef0be1a51f4c6b1d2ce5d8d447380 Mon Sep 17 00:00:00 2001 From: TimHoogstrate Date: Thu, 1 Feb 2024 15:14:49 +0100 Subject: [PATCH 08/11] Update geocoding_android/android/src/main/java/com/baseflow/geocoding/GeocodeListenerAdapter.java Co-authored-by: Maurits van Beusekom --- .../java/com/baseflow/geocoding/GeocodeListenerAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geocoding_android/android/src/main/java/com/baseflow/geocoding/GeocodeListenerAdapter.java b/geocoding_android/android/src/main/java/com/baseflow/geocoding/GeocodeListenerAdapter.java index 2bc44a9..6d292d5 100644 --- a/geocoding_android/android/src/main/java/com/baseflow/geocoding/GeocodeListenerAdapter.java +++ b/geocoding_android/android/src/main/java/com/baseflow/geocoding/GeocodeListenerAdapter.java @@ -11,4 +11,4 @@ public interface GeocodeListenerAdapter { void onGeocode(@Nullable List
addresses); void onError(@Nullable String errorMessage); -} \ No newline at end of file +} From b8f5d3912038aa972a1380d75ad745bd864658fb Mon Sep 17 00:00:00 2001 From: TimHoogstrate Date: Thu, 1 Feb 2024 15:15:05 +0100 Subject: [PATCH 09/11] Update geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java Co-authored-by: Maurits van Beusekom --- .../main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java b/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java index 4cc0139..4f7bc5c 100644 --- a/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java +++ b/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java @@ -129,7 +129,7 @@ public void onGeocode(List
addresses) { @Override public void onError(String errorMessage) { result.error( - "NOT_FOUND", + "IO_ERROR", String.format(errorMessage), null); } From d5e7974ad201799f0b108bf45b861dfe5ef247af Mon Sep 17 00:00:00 2001 From: TimHoogstrate Date: Thu, 1 Feb 2024 15:15:15 +0100 Subject: [PATCH 10/11] Update geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java Co-authored-by: Maurits van Beusekom --- .../main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java b/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java index 4f7bc5c..7dfbb02 100644 --- a/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java +++ b/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java @@ -216,7 +216,7 @@ public void onGeocode(List
addresses) { @Override public void onError(String errorMessage) { result.error( - "NOT_FOUND", + "IO_ERROR", String.format(errorMessage), null); } From ee449f1d7698336ddbc834f50237a87cdc45cb0f Mon Sep 17 00:00:00 2001 From: tim Hoogstrate Date: Thu, 1 Feb 2024 15:46:31 +0100 Subject: [PATCH 11/11] Isolated deprecated code --- .../com/baseflow/geocoding/Geocoding.java | 39 +++-- .../geocoding/MethodCallHandlerImpl.java | 156 +++++++----------- 2 files changed, 91 insertions(+), 104 deletions(-) diff --git a/geocoding_android/android/src/main/java/com/baseflow/geocoding/Geocoding.java b/geocoding_android/android/src/main/java/com/baseflow/geocoding/Geocoding.java index 42182b7..79ab29e 100644 --- a/geocoding_android/android/src/main/java/com/baseflow/geocoding/Geocoding.java +++ b/geocoding_android/android/src/main/java/com/baseflow/geocoding/Geocoding.java @@ -40,21 +40,29 @@ void setLocaleIdentifier(@Nullable Locale locale) { * Returns a list of Address objects matching the supplied address string. * * @param address the address string for the search + * @param callback the GeocodeListenerAdapter that listens for success or error * @return a list of Address objects. Returns null or empty list if no matches were found or there is no backend service available. - * @throws java.io.IOException if the network is unavailable or any other I/O problem occurs. */ - @SuppressWarnings("deprecation") - void placemarkFromAddress(String address, GeocodeListenerAdapter callback) throws IOException { + void placemarkFromAddress(String address, GeocodeListenerAdapter callback) { final Geocoder geocoder = createGeocoder(androidContext, locale); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { getAddressesWithGeocodeListener(geocoder, address, 5, callback); } else { - List
addresses = geocoder.getFromLocationName(address, 5); - callback.onGeocode(addresses); + try { + List
addresses = deprecatedGetFromLocationName(geocoder, address); + callback.onGeocode(addresses); + } catch (IOException ex) { + callback.onError(ex.getMessage()); + } } } + @SuppressWarnings("deprecation") + private List
deprecatedGetFromLocationName(Geocoder geocoder, String address) throws IOException { + return geocoder.getFromLocationName(address, 5); + } + @RequiresApi(api = Build.VERSION_CODES.TIRAMISU) private void getAddressesWithGeocodeListener(Geocoder geocoder, String address, int maxResults, GeocodeListenerAdapter callback) { geocoder.getFromLocationName(address, maxResults, new Geocoder.GeocodeListener() { @@ -70,26 +78,37 @@ public void onError(@Nullable String errorMessage) { }); } + /** * Returns a list of Address objects matching the supplied coordinates. * * @param latitude the latitude point for the search * @param longitude the longitude point for the search + * @param callback the GeocodeListenerAdapter that listens for success or error * @return a list of Address objects. Returns null or empty list if no matches were found or there is no backend service available. - * @throws IOException if the network is unavailable or any other I/O problem occurs. */ - @SuppressWarnings("deprecation") void placemarkFromCoordinates( double latitude, double longitude, GeocodeListenerAdapter callback - ) throws IOException { + ) { final Geocoder geocoder = createGeocoder(androidContext, locale); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { getLocationWithGeocodeListener(geocoder, latitude, longitude, 5, callback); } else { - callback.onGeocode(geocoder.getFromLocation(latitude, longitude, 5)); - } + try { + List
addresses = deprecatedGetFromLocation(geocoder, latitude, longitude); + callback.onGeocode(addresses); + } catch (IOException ex) { + callback.onError(ex.getMessage()); + }} + } + + @SuppressWarnings("deprecation") + private List
deprecatedGetFromLocation(Geocoder geocoder, + double latitude, + double longitude) throws IOException { + return geocoder.getFromLocation(latitude, longitude, 5); } @RequiresApi(api = Build.VERSION_CODES.TIRAMISU) diff --git a/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java b/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java index 7dfbb02..b90d97d 100644 --- a/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java +++ b/geocoding_android/android/src/main/java/com/baseflow/geocoding/MethodCallHandlerImpl.java @@ -39,8 +39,8 @@ final class MethodCallHandlerImpl implements MethodCallHandler { @Override public void onMethodCall( - final MethodCall call, - @NonNull final Result result + final MethodCall call, + @NonNull final Result result ) { switch (call.method) { case "setLocaleIdentifier": @@ -111,37 +111,28 @@ private void onLocationFromAddress(MethodCall call, Result result) { null); } - try { - geocoding.placemarkFromAddress(address, new GeocodeListenerAdapter() { + geocoding.placemarkFromAddress(address, new GeocodeListenerAdapter() { - @Override - public void onGeocode(List
addresses) { - if (addresses != null && addresses.size() > 0) { - result.success(AddressMapper.toLocationHashMapList(addresses)); - } else { - result.error( - "NOT_FOUND", - String.format("No coordinates found for '%s'", address), - null); - } - } - - @Override - public void onError(String errorMessage) { + @Override + public void onGeocode(List
addresses) { + if (addresses != null && addresses.size() > 0) { + result.success(AddressMapper.toLocationHashMapList(addresses)); + } else { result.error( - "IO_ERROR", - String.format(errorMessage), + "NOT_FOUND", + String.format("No coordinates found for '%s'", address), null); } - }); - - } catch (IOException ex) { - result.error( - "IO_ERROR", - String.format("A network error occurred trying to lookup the address '%s'.", address), - null - ); - } + } + + @Override + public void onError(String errorMessage) { + result.error( + "IO_ERROR", + String.format(errorMessage), + null); + } + }); } private void onPlacemarkFromAddress(final MethodCall call, final Result result) { @@ -154,85 +145,62 @@ private void onPlacemarkFromAddress(final MethodCall call, final Result result) null); } - try { - geocoding.placemarkFromAddress(address, new GeocodeListenerAdapter() { + geocoding.placemarkFromAddress(address, new GeocodeListenerAdapter() { - @Override - public void onGeocode(List
addresses) { - if (addresses != null && addresses.size() > 0) { - result.success(AddressMapper.toAddressHashMapList(addresses)); - } else { - result.error( - "NOT_FOUND", - String.format("No coordinates found for '%s'", address), - null); - } - } - - @Override - public void onError(String errorMessage) { + @Override + public void onGeocode(List
addresses) { + if (addresses != null && addresses.size() > 0) { + result.success(AddressMapper.toAddressHashMapList(addresses)); + } else { result.error( - "IO_ERROR", - String.format(errorMessage), + "NOT_FOUND", + String.format("No coordinates found for '%s'", address), null); } - }); - - } catch (IOException ex) { - result.error( - "IO_ERROR", - String.format("A network error occurred trying to lookup the address '%s'.", address), - null - ); - } + } + + @Override + public void onError(String errorMessage) { + result.error( + "IO_ERROR", + String.format(errorMessage), + null); + } + }); } private void onPlacemarkFromCoordinates(final MethodCall call, final Result result) { final double latitude = call.argument("latitude"); final double longitude = call.argument("longitude"); - try { - geocoding.placemarkFromCoordinates( - latitude, - longitude, new GeocodeListenerAdapter() { - - @Override - public void onGeocode(List
addresses) { - if (addresses != null && addresses.size() > 0) { - result.success(AddressMapper.toAddressHashMapList(addresses)); - } else { - result.error( - "NOT_FOUND", - String.format( - Locale.ENGLISH, - "No address information found for supplied coordinates (latitude: %f, longitude: %f).", - latitude, - longitude - ), - null); - } - } + geocoding.placemarkFromCoordinates( + latitude, + longitude, new GeocodeListenerAdapter() { - @Override - public void onError(String errorMessage) { + @Override + public void onGeocode(List
addresses) { + if (addresses != null && addresses.size() > 0) { + result.success(AddressMapper.toAddressHashMapList(addresses)); + } else { result.error( - "IO_ERROR", - String.format(errorMessage), + "NOT_FOUND", + String.format( + Locale.ENGLISH, + "No address information found for supplied coordinates (latitude: %f, longitude: %f).", + latitude, + longitude + ), null); } - }); + } - } catch (IOException ex) { - result.error( - "IO_ERROR", - String.format( - Locale.ENGLISH, - "A network error occurred trying to lookup the supplied coordinates (latitude: %f, longitude: %f).", - latitude, - longitude - ), - null - ); - } + @Override + public void onError(String errorMessage) { + result.error( + "IO_ERROR", + String.format(errorMessage), + null); + } + }); } }