diff --git a/geolocator_android/CHANGELOG.md b/geolocator_android/CHANGELOG.md index b1a5b93a8..1c9b7567c 100644 --- a/geolocator_android/CHANGELOG.md +++ b/geolocator_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.5.5 + +* Fixes a bug where location stream is not automatically started when enabling the location services. + ## 4.5.4 * Fixes a bug where the `getPositionStream` was not informed of the location service resolution result. This resulted in a stream that was kept open indefinitely. diff --git a/geolocator_android/android/src/main/java/com/baseflow/geolocator/GeolocatorPlugin.java b/geolocator_android/android/src/main/java/com/baseflow/geolocator/GeolocatorPlugin.java index 1601f3b3d..32c170495 100644 --- a/geolocator_android/android/src/main/java/com/baseflow/geolocator/GeolocatorPlugin.java +++ b/geolocator_android/android/src/main/java/com/baseflow/geolocator/GeolocatorPlugin.java @@ -56,9 +56,9 @@ public void onServiceDisconnected(ComponentName name) { @Nullable private ActivityPluginBinding pluginBinding; public GeolocatorPlugin() { - permissionManager = new PermissionManager(); - geolocationManager = new GeolocationManager(); - locationAccuracyManager = new LocationAccuracyManager(); + permissionManager = PermissionManager.getInstance(); + geolocationManager = GeolocationManager.getInstance(); + locationAccuracyManager = LocationAccuracyManager.getInstance(); } @Override diff --git a/geolocator_android/android/src/main/java/com/baseflow/geolocator/location/GeolocationManager.java b/geolocator_android/android/src/main/java/com/baseflow/geolocator/location/GeolocationManager.java index 2c706ea26..76a4bb264 100644 --- a/geolocator_android/android/src/main/java/com/baseflow/geolocator/location/GeolocationManager.java +++ b/geolocator_android/android/src/main/java/com/baseflow/geolocator/location/GeolocationManager.java @@ -18,12 +18,22 @@ public class GeolocationManager implements io.flutter.plugin.common.PluginRegistry.ActivityResultListener { + private static GeolocationManager geolocationManagerInstance = null; + private final List locationClients; - public GeolocationManager() { + private GeolocationManager() { this.locationClients = new CopyOnWriteArrayList<>(); } + public static synchronized GeolocationManager getInstance() { + if (geolocationManagerInstance == null) { + geolocationManagerInstance = new GeolocationManager(); + } + + return geolocationManagerInstance; + } + public void getLastKnownPosition( Context context, boolean forceLocationManager, diff --git a/geolocator_android/android/src/main/java/com/baseflow/geolocator/location/LocationAccuracyManager.java b/geolocator_android/android/src/main/java/com/baseflow/geolocator/location/LocationAccuracyManager.java index 218b2312b..b5cec4ab7 100644 --- a/geolocator_android/android/src/main/java/com/baseflow/geolocator/location/LocationAccuracyManager.java +++ b/geolocator_android/android/src/main/java/com/baseflow/geolocator/location/LocationAccuracyManager.java @@ -11,6 +11,18 @@ public class LocationAccuracyManager { + private LocationAccuracyManager() {} + + private static LocationAccuracyManager locationAccuracyManagerInstance = null; + + public static synchronized LocationAccuracyManager getInstance() { + if (locationAccuracyManagerInstance == null) { + locationAccuracyManagerInstance = new LocationAccuracyManager(); + } + + return locationAccuracyManagerInstance; + } + public LocationAccuracyStatus getLocationAccuracy(Context context, ErrorCallback errorCallback) { if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { diff --git a/geolocator_android/android/src/main/java/com/baseflow/geolocator/permission/PermissionManager.java b/geolocator_android/android/src/main/java/com/baseflow/geolocator/permission/PermissionManager.java index 28a4bb200..8875b3579 100644 --- a/geolocator_android/android/src/main/java/com/baseflow/geolocator/permission/PermissionManager.java +++ b/geolocator_android/android/src/main/java/com/baseflow/geolocator/permission/PermissionManager.java @@ -16,18 +16,31 @@ import com.baseflow.geolocator.errors.ErrorCodes; import com.baseflow.geolocator.errors.PermissionUndefinedException; +import java.security.Permission; import java.util.*; @SuppressWarnings("deprecation") public class PermissionManager implements io.flutter.plugin.common.PluginRegistry.RequestPermissionsResultListener { + private PermissionManager() {} + private static final int PERMISSION_REQUEST_CODE = 109; + private static PermissionManager permissionManagerInstance = null; + @Nullable private Activity activity; @Nullable private ErrorCallback errorCallback; @Nullable private PermissionResultCallback resultCallback; + public static synchronized PermissionManager getInstance() { + if (permissionManagerInstance == null) { + permissionManagerInstance = new PermissionManager(); + } + + return permissionManagerInstance; + } + public LocationPermission checkPermissionStatus(Context context) throws PermissionUndefinedException { List permissions = getLocationPermissionsFromManifest(context); diff --git a/geolocator_android/pubspec.yaml b/geolocator_android/pubspec.yaml index cbaaa7513..297571271 100644 --- a/geolocator_android/pubspec.yaml +++ b/geolocator_android/pubspec.yaml @@ -2,7 +2,7 @@ name: geolocator_android description: Geolocation plugin for Flutter. This plugin provides the Android implementation for the geolocator. repository: https://github.com/baseflow/flutter-geolocator/tree/main/geolocator_android issue_tracker: https://github.com/baseflow/flutter-geolocator/issues?q=is%3Aissue+is%3Aopen -version: 4.5.4 +version: 4.5.5 environment: sdk: ">=2.15.0 <4.0.0"