From c50da35b4f713c14b6b266466a0a1feaa1ad4c20 Mon Sep 17 00:00:00 2001 From: Alex Ning Date: Tue, 10 Sep 2019 09:02:59 +0800 Subject: Handle ActivityNotFoundException when opening Custom Tabs. --- .idea/caches/build_file_checksums.ser | Bin 533 -> 533 bytes .idea/caches/gradle_models.ser | Bin 309044 -> 489944 bytes .../infinityforreddit/LinkResolverActivity.java | 51 ++++++++++++--------- 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index cc776a95..a3d72774 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser index b68d70df..d535e37f 100644 Binary files a/.idea/caches/gradle_models.ser and b/.idea/caches/gradle_models.ser differ diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/LinkResolverActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/LinkResolverActivity.java index 76ef9ffd..8c5cde11 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/LinkResolverActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/LinkResolverActivity.java @@ -1,5 +1,6 @@ package ml.docilealligator.infinityforreddit; +import android.content.ActivityNotFoundException; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; @@ -152,28 +153,13 @@ public class LinkResolverActivity extends AppCompatActivity { if(uri.getScheme() == null) { uri = Uri.parse("http://" + uri.toString()); } - customTabsIntent.launchUrl(this, uri); - } else { - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(uri); - - List activities = pm.queryIntentActivities(intent, 0); - ArrayList packageNames = new ArrayList<>(); - - String currentPackageName = getApplicationContext().getPackageName(); - - for(ResolveInfo info : activities) { - if(!info.activityInfo.packageName.equals(currentPackageName)) { - packageNames.add(info.activityInfo.packageName); - } - } - - if(!packageNames.isEmpty()) { - intent.setPackage(packageNames.get(0)); - startActivity(intent); - } else { - Toast.makeText(this, R.string.no_browser_found, Toast.LENGTH_SHORT).show(); + try { + customTabsIntent.launchUrl(this, uri); + } catch (ActivityNotFoundException e) { + openInBrowser(uri, pm); } + } else { + openInBrowser(uri, pm); } } @@ -196,6 +182,29 @@ public class LinkResolverActivity extends AppCompatActivity { return packagesSupportingCustomTabs; } + private void openInBrowser(Uri uri, PackageManager pm) { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(uri); + + List activities = pm.queryIntentActivities(intent, 0); + ArrayList packageNames = new ArrayList<>(); + + String currentPackageName = getApplicationContext().getPackageName(); + + for(ResolveInfo info : activities) { + if(!info.activityInfo.packageName.equals(currentPackageName)) { + packageNames.add(info.activityInfo.packageName); + } + } + + if(!packageNames.isEmpty()) { + intent.setPackage(packageNames.get(0)); + startActivity(intent); + } else { + Toast.makeText(this, R.string.no_browser_found, Toast.LENGTH_SHORT).show(); + } + } + public static Uri getRedditUriByPath(String path) { return Uri.parse("https://www.reddit.com" + path); } -- cgit v1.2.3