From 18de950fae7243e1a3be704ca355f01517f4ea68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=AD?= Date: Sat, 4 May 2013 13:14:30 +0200 Subject: [PATCH] Don't show LAUNCH if not available. Fix crashes. --- src/org/fdroid/fdroid/AppDetails.java | 39 ++++++++++++++++++--------- 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/src/org/fdroid/fdroid/AppDetails.java b/src/org/fdroid/fdroid/AppDetails.java index 5430bedb9..4bb251067 100644 --- a/src/org/fdroid/fdroid/AppDetails.java +++ b/src/org/fdroid/fdroid/AppDetails.java @@ -502,10 +502,13 @@ public class AppDetails extends ListActivity { toShow.add(menu.add(Menu.NONE, INSTALL, 1, R.string.menu_install).setIcon( android.R.drawable.ic_menu_add)); } else { - toShow.add(menu.add( Menu.NONE, LAUNCH, 1, R.string.menu_launch ).setIcon( - android.R.drawable.ic_media_play)); menu.add(Menu.NONE, UNINSTALL, 1, R.string.menu_uninstall).setIcon( android.R.drawable.ic_menu_delete); + + if (mPm.getLaunchIntentForPackage(app.id) != null) { + toShow.add(menu.add( Menu.NONE, LAUNCH, 1, R.string.menu_launch ).setIcon( + android.R.drawable.ic_media_play)); + } } if (app.detail_webURL.length() > 0) { menu.add(Menu.NONE, WEBSITE, 2, R.string.menu_website).setIcon( @@ -534,6 +537,16 @@ 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, + "You don't have any app installed that can handle " + s, 3); + toast.show(); + } + } + @Override public boolean onOptionsItemSelected(MenuItem item) { @@ -555,28 +568,30 @@ public class AppDetails extends ListActivity { return true; case WEBSITE: - startActivity(new Intent(Intent.ACTION_VIEW, - Uri.parse(app.detail_webURL))); + tryOpenUri(app.detail_webURL); return true; case ISSUES: - startActivity(new Intent(Intent.ACTION_VIEW, - Uri.parse(app.detail_trackerURL))); + tryOpenUri(app.detail_trackerURL); return true; case SOURCE: - startActivity(new Intent(Intent.ACTION_VIEW, - Uri.parse(app.detail_sourceURL))); + tryOpenUri(app.detail_sourceURL); return true; case MARKET: - startActivity(new Intent(Intent.ACTION_VIEW, - Uri.parse("http://market.android.com/details?id=" + app.id))); + try { + startActivity(new Intent(Intent.ACTION_VIEW, + Uri.parse("market://details?id=" + app.id))); + } catch (android.content.ActivityNotFoundException e) { + tryOpenUri("https://play.google.com/store/apps/details?id=" + app.id); + } return true; + // TODO: Separate donate links if there are many (e.g. paypal and + // bitcoin) and use their link schemas if possible. case DONATE: - startActivity(new Intent(Intent.ACTION_VIEW, - Uri.parse(app.detail_donateURL))); + tryOpenUri(app.detail_donateURL); return true; }