Use a system chooser when opening links in browser in the case there is no browser available

This change makes the app using the behavior when there is no default browser
on Android 11 and lower, by opening a system chooser when there is no browser
available (on all Android versions).

Also catch any exception when the system chooser cannot be opened and show the
"No app on your device can open this" toast in this case, as an
`ActivityNotFoundException` could be thrown if no app is available to open a
given web link.
This commit is contained in:
AudricV 2023-03-24 23:05:15 +01:00
parent d33229a3b8
commit 1a8aa8b17e
No known key found for this signature in database
GPG key ID: DA92EC7905614198

View file

@ -86,15 +86,19 @@ public final class ShareUtils {
PackageManager.MATCH_DEFAULT_ONLY); PackageManager.MATCH_DEFAULT_ONLY);
} }
final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url))
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (defaultBrowserInfo == null) { if (defaultBrowserInfo == null) {
// No app installed to open a web url // No app installed to open a web URL, but it may be handled by other apps so try
Toast.makeText(context, R.string.no_app_to_open_intent, Toast.LENGTH_LONG).show(); // opening a system chooser for the link in this case (it could be bypassed by the
// system if there is only one app which can open the link or a default app associated
// with the link domain on Android 12 and higher)
openAppChooser(context, intent, true);
return; return;
} }
final String defaultBrowserPackage = defaultBrowserInfo.activityInfo.packageName; final String defaultBrowserPackage = defaultBrowserInfo.activityInfo.packageName;
final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url))
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (defaultBrowserPackage.equals("android")) { if (defaultBrowserPackage.equals("android")) {
// No browser set as default (doesn't work on some devices) // No browser set as default (doesn't work on some devices)
@ -205,7 +209,12 @@ public final class ShareUtils {
chooserIntent.addFlags(permFlags); chooserIntent.addFlags(permFlags);
} }
} }
try {
context.startActivity(chooserIntent); context.startActivity(chooserIntent);
} catch (final ActivityNotFoundException e) {
Toast.makeText(context, R.string.no_app_to_open_intent, Toast.LENGTH_LONG).show();
}
} }
/** /**