Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[geolocator_android] Introduce option to force a specific location provider Issue/1171 #1613

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

jbxbergdev
Copy link

@jbxbergdev jbxbergdev commented Nov 28, 2024

Added an option AndroidSettings.forceProvider that forces the plugin to use a specific provider out of the currently four available Android location providers. As discussed with @mvanbeusekom, this option is to be used in conjunction with forceLocationManager = true.

Example use case: An app needs to ensure locations are derived exclusively from GNSS and hence has to make sure no other sources like mobile networks are used.

#1171

Pre-launch Checklist

  • I made sure the project builds.
  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • I updated pubspec.yaml with an appropriate new version according to the pub versioning philosophy, or this PR is does not need version changes.
  • I updated CHANGELOG.md to add a description of the change.
  • I updated/added relevant documentation (doc comments with ///).
  • I rebased onto main.
  • I added new tests to check the change I am making, or this PR does not need tests.
  • I made sure all existing and new tests are passing.
  • I ran dart format . and committed any changes.
  • I ran flutter analyze and fixed any errors.

@jbxbergdev
Copy link
Author

@mvanbeusekom not really sure how to get rid of the analyzer errors the proper way. Please advise, thanks.

@TimHoogstrate
Copy link
Contributor

@jbxbergdev,

Thanks for the contribution. I cannot see the build log anymore... Is it possible to rebase onto main and then we can have a look at the build logs. Maybe the analyser warnings are resolved recently.

Kind regards,

Copy link
Contributor

@TimHoogstrate TimHoogstrate left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work! I added some comments. Can we also add the feature to the android package example app so that we can easily test the feature?


private LocationOptions(
LocationAccuracy accuracy, long distanceFilter, long timeInterval, boolean useMSLAltitude) {
LocationAccuracy accuracy, long distanceFilter, long timeInterval, boolean useMSLAltitude, String provider) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we keep the same name for the provider -> forceProvider?

distanceFilter != null ? distanceFilter : 0,
timeInterval != null ? timeInterval : 5000,
useMSLAltitude != null && useMSLAltitude,
provider);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here. Perhaps forceProvider would be easier to understand for other developers.

/// Set this to use a specific [AndroidLocationProvider].
/// Set this value only in conjunction with [forceLocationManager] set to true. Be sure the provider is available on your targeted devices.
/// Defaults to null.
final AndroidLocationProvider? forceProvider;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this only works in combination with the forceLocationManager, should desired provider perhaps be a more convenient name?

@@ -34,7 +34,7 @@ public String toDescription() {
case errorWhileAcquiringPosition:
return "An unexpected error occurred while trying to acquire the device's position.";
case locationServicesDisabled:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see this as a very helpful addition. However, I also see a lot of questions appearing when we "force" a provider, but if the provider is not available on the device we give an bit of misleading error back that the location services are disabled (or location provider is unavailable), although we actually mean that the "forcedProvider" is not available (we currently don't know if locationServicesDisabled or the forcedProvider is not available)... Can't we do this smarter by returning a more useful error? Then, we give the developer the option to decide how to "proceed". With the best "default" provider (or perhaps an other "forced" provider), or not al all...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants