Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Conversation

@stuartmorgan-g
Copy link
Contributor

[url_launcher] Add canLaunch fallback for web on Android

If canLaunch returns false for a web URL on Android, re-queries with a
generic URL, since this can happen if there is a custom handler for the
queried URL (e.g,. YouTube or Google Maps urls), but the plugin client
application doesn't have permission to see that application.

Fixes flutter/flutter#93765

Pre-launch Checklist

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • I read the Tree Hygiene wiki page, which explains my responsibilities.
  • I read and followed the relevant style guides and ran the auto-formatter. (Unlike the flutter/flutter repo, the flutter/plugins repo does use dart format.)
  • I signed the CLA.
  • The title of the PR starts with the name of the plugin surrounded by square brackets, e.g. [shared_preferences]
  • I listed at least one issue that this PR fixes in the description above.
  • I updated pubspec.yaml with an appropriate new version according to the pub versioning philosophy, or this PR is exempt from version changes.
  • I updated CHANGELOG.md to add a description of the change, following repository CHANGELOG style.
  • I updated/added relevant documentation (doc comments with ///).
  • I added new tests to check the change I am making, or this PR is test-exempt.
  • All existing and new tests are passing.

If `canLaunch` returns false for a web URL on Android, re-queries with a
generic URL, since this can happen if there is a custom handler for the
queried URL (e.g,. YouTube or Google Maps urls), but the plugin client
application doesn't have permission to see that application.

Fixes flutter/flutter#93765
Copy link

@blasten blasten left a comment

Choose a reason for hiding this comment

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

Any thoughts about removing the calls to canLaunch from android example app unless it's strictly necessary?

Also wrap the calls to launch in a try/catch block, since errors can be issued:

result.error("NO_ACTIVITY", "Launching a URL requires a foreground activity.", null);

@stuartmorgan-g
Copy link
Contributor Author

Any thoughts about removing the calls to canLaunch from android example app unless it's strictly necessary?

Also wrap the calls to launch in a try/catch block, since errors can be issued

Since the example directories in implementation packages are not really intended for clients (who should never be calling platform interface implementations directly), but for local development and integration testing, I didn't worry about updating them when I updated the app-facing package's example.

I'll go ahead and re-sync the Android example with the main example's structural changes as part of this PR though.

@stuartmorgan-g
Copy link
Contributor Author

Also wrap the calls to launch in a try/catch block, since errors can be issued:

I didn't change that here since the example already throws any time launch returns false anyway, and that's still what the app-facing package does. We could revisit there, and then sync the implementations, if we want to demonstrate something more production-y (like a snackbar), but that's out of scope here.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

p: url_launcher platform-android waiting for tree to go green (Use "autosubmit") This PR is approved and tested, but waiting for the tree to be green to land.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[url_launcher] canLaunch can return false for http(s) links with a specific application handler

3 participants