From afe102e90ad8a95a793ee914ac67f0e5e0e5b0ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20Mart=C3=AD?= <mvdan@mvdan.cc>
Date: Thu, 22 Aug 2013 18:16:57 +0200
Subject: [PATCH] Better tryOpenUri implementation and toast string.

Got the if/else hint from
http://developer.android.com/about/versions/android-4.3.html#Behaviors

(much better than try/except anyway)
---
 res/values/strings.xml                |  2 +-
 src/org/fdroid/fdroid/AppDetails.java | 15 ++++++++-------
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/res/values/strings.xml b/res/values/strings.xml
index ea58ded89..c1c85531f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -183,7 +183,7 @@
     <string name="permissions_for_long">Permissions for version %s</string>
     <string name="showPermissions">Show permissions</string>
     <string name="showPermissions_long">Display a list of permissions an app needs</string>
-    <string name="no_handler_app">You don\'t have any app installed that can handle %s</string>
+    <string name="no_handler_app">You don\'t have any available app that can handle %s</string>
     <string name="compactlayout">Compact Layout</string>
     <string name="compactlayout_long">Only show app names and summaries in list</string>
 
diff --git a/src/org/fdroid/fdroid/AppDetails.java b/src/org/fdroid/fdroid/AppDetails.java
index 9a7a27d56..b8e4b780a 100644
--- a/src/org/fdroid/fdroid/AppDetails.java
+++ b/src/org/fdroid/fdroid/AppDetails.java
@@ -634,14 +634,15 @@ public class AppDetails extends ListActivity {
         return true;
     }
 
+
     public void tryOpenUri(String s) {
-        try {
-            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(s)));
-        } catch (android.content.ActivityNotFoundException e) {
-            Toast toast = Toast.makeText(this,
-                    getString(R.string.no_handler_app, s), Toast.LENGTH_LONG);
-            toast.show();
-        }
+        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(s));
+        if (intent.resolveActivity(getPackageManager()) != null)
+            startActivity(intent);
+        else
+            Toast.makeText(this,
+                    getString(R.string.no_handler_app, intent.getDataString()),
+                    Toast.LENGTH_LONG).show();
     }
 
     @Override