aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2013-09-29 08:12:10 +0200
committerBananeweizen <bananeweizen@gmx.de>2013-09-29 08:12:10 +0200
commit2820d1c432bd2f8ce0ea287b28f56af6b275cf79 (patch)
tree97e9d6eb531d8b19ef069e1dbac79dde58ddab01
parent30033efa4938dd5cba2a2db91b611adeade0b182 (diff)
downloadcgeo-2820d1c432bd2f8ce0ea287b28f56af6b275cf79.zip
cgeo-2820d1c432bd2f8ce0ea287b28f56af6b275cf79.tar.gz
cgeo-2820d1c432bd2f8ce0ea287b28f56af6b275cf79.tar.bz2
#2210: convert cache menu to resource
-rw-r--r--main/res/menu/cache_options.xml (renamed from main/res/menu/abstract_popup_activity.xml)12
-rw-r--r--main/src/cgeo/geocaching/AbstractPopupActivity.java51
-rw-r--r--main/src/cgeo/geocaching/CacheDetailActivity.java147
-rw-r--r--main/src/cgeo/geocaching/CacheMenuHandler.java122
-rw-r--r--main/src/cgeo/geocaching/CachePopup.java4
-rw-r--r--main/src/cgeo/geocaching/WaypointPopup.java4
-rw-r--r--main/src/cgeo/geocaching/utils/ProcessUtils.java31
7 files changed, 202 insertions, 169 deletions
diff --git a/main/res/menu/abstract_popup_activity.xml b/main/res/menu/cache_options.xml
index 855a756..d2951f4 100644
--- a/main/res/menu/abstract_popup_activity.xml
+++ b/main/res/menu/cache_options.xml
@@ -12,6 +12,11 @@
android:title="@string/cache_menu_navigate">
</item>
<item
+ android:id="@+id/menu_calendar"
+ android:icon="@drawable/ic_menu_agenda"
+ android:title="@string/cache_menu_event">
+ </item>
+ <item
android:id="@+id/menu_log_visit_offline"
android:icon="@drawable/ic_menu_edit"
android:title="@string/cache_menu_visit_offline">
@@ -31,5 +36,10 @@
android:icon="@drawable/ic_menu_info_details"
android:title="@string/cache_menu_browser">
</item>
-
+ <item
+ android:id="@+id/menu_share"
+ android:icon="@drawable/ic_menu_share"
+ android:title="@string/cache_menu_share">
+ </item>
+
</menu> \ No newline at end of file
diff --git a/main/src/cgeo/geocaching/AbstractPopupActivity.java b/main/src/cgeo/geocaching/AbstractPopupActivity.java
index 02f89a6..5b9b509 100644
--- a/main/src/cgeo/geocaching/AbstractPopupActivity.java
+++ b/main/src/cgeo/geocaching/AbstractPopupActivity.java
@@ -2,7 +2,6 @@ package cgeo.geocaching;
import cgeo.geocaching.activity.AbstractActivity;
import cgeo.geocaching.activity.ActivityMixin;
-import cgeo.geocaching.apps.cache.navi.NavigationAppFactory;
import cgeo.geocaching.enumerations.CacheSize;
import cgeo.geocaching.enumerations.LoadFlags;
import cgeo.geocaching.gcvote.GCVote;
@@ -17,9 +16,7 @@ import cgeo.geocaching.utils.Log;
import org.apache.commons.lang3.StringUtils;
-import android.content.Intent;
import android.graphics.Rect;
-import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
@@ -31,7 +28,7 @@ import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
-public abstract class AbstractPopupActivity extends AbstractActivity {
+public abstract class AbstractPopupActivity extends AbstractActivity implements CacheMenuHandler.ActivityInterface {
protected Geocache cache = null;
protected String geocode = null;
@@ -110,11 +107,8 @@ public abstract class AbstractPopupActivity extends AbstractActivity {
geocode = cache.getGeocode();
}
- private void showInBrowser() {
- startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(cache.getUrl())));
- }
-
- protected abstract void navigateTo();
+ @Override
+ public abstract void navigateTo();
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -150,31 +144,17 @@ public abstract class AbstractPopupActivity extends AbstractActivity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.abstract_popup_activity, menu);
+ CacheMenuHandler.addMenuItems(this, menu, cache);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- final int menuItem = item.getItemId();
-
- switch (menuItem) {
- case R.id.menu_default_navigation:
- navigateTo();
- return true;
- case R.id.menu_navigate:
- showNavigationMenu();
- return true;
- case R.id.menu_caches_around:
- cachesAround();
- return true;
- case R.id.menu_show_in_browser:
- showInBrowser();
- return true;
- default:
- if (LoggingUI.onMenuItemSelected(item, this, cache)) {
- return true;
- }
+ if (CacheMenuHandler.onMenuItemSelected(item, this, cache)) {
+ return true;
+ }
+ if (LoggingUI.onMenuItemSelected(item, this, cache)) {
+ return true;
}
return true;
@@ -191,12 +171,7 @@ public abstract class AbstractPopupActivity extends AbstractActivity {
super.onPrepareOptionsMenu(menu);
try {
- final boolean visible = getCoordinates() != null;
- menu.findItem(R.id.menu_default_navigation).setVisible(visible);
- menu.findItem(R.id.menu_navigate).setVisible(visible);
- menu.findItem(R.id.menu_caches_around).setVisible(visible);
-
- menu.findItem(R.id.menu_default_navigation).setTitle(NavigationAppFactory.getDefaultNavigationApplication().getName());
+ CacheMenuHandler.onPrepareOptionsMenu(menu, cache);
LoggingUI.onPrepareOptionsMenu(menu, cache);
} catch (final RuntimeException e) {
// nothing
@@ -227,7 +202,8 @@ public abstract class AbstractPopupActivity extends AbstractActivity {
return super.onTouchEvent(event);
}
- protected abstract void showNavigationMenu();
+ @Override
+ public abstract void showNavigationMenu();
protected abstract void startDefaultNavigation2();
@@ -270,7 +246,8 @@ public abstract class AbstractPopupActivity extends AbstractActivity {
});
}
- private void cachesAround() {
+ @Override
+ public void cachesAround() {
final Geopoint coords = getCoordinates();
if (coords == null) {
showToast(res.getString(R.string.err_location_unknown));
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java
index f9aae24..c58b45f 100644
--- a/main/src/cgeo/geocaching/CacheDetailActivity.java
+++ b/main/src/cgeo/geocaching/CacheDetailActivity.java
@@ -3,7 +3,6 @@ package cgeo.geocaching;
import butterknife.InjectView;
import butterknife.Views;
-import cgeo.calendar.ICalendar;
import cgeo.geocaching.activity.AbstractActivity;
import cgeo.geocaching.activity.AbstractViewPagerActivity;
import cgeo.geocaching.activity.Progress;
@@ -16,12 +15,10 @@ import cgeo.geocaching.enumerations.CacheAttribute;
import cgeo.geocaching.enumerations.LoadFlags;
import cgeo.geocaching.enumerations.LoadFlags.SaveFlag;
import cgeo.geocaching.enumerations.WaypointType;
-import cgeo.geocaching.geopoint.GeopointFormatter;
import cgeo.geocaching.geopoint.Units;
import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.network.HtmlImage;
import cgeo.geocaching.network.Network;
-import cgeo.geocaching.network.Parameters;
import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.ui.AbstractCachingPageViewCreator;
import cgeo.geocaching.ui.AnchorAwareLinkMovementMethod;
@@ -65,8 +62,6 @@ import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Typeface;
@@ -90,7 +85,6 @@ import android.util.TypedValue;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
-import android.view.SubMenu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
@@ -122,13 +116,7 @@ import java.util.regex.Pattern;
*
* e.g. details, description, logs, waypoints, inventory...
*/
-public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailActivity.Page> {
-
- private static final int MENU_SHARE = 12;
- private static final int MENU_CALENDAR = 11;
- private static final int MENU_CACHES_AROUND = 10;
- private static final int MENU_BROWSER = 7;
- private static final int MENU_DEFAULT_NAVIGATION = 13;
+public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailActivity.Page> implements CacheMenuHandler.ActivityInterface {
private static final int MESSAGE_FAILED = -1;
private static final int MESSAGE_SUCCEEDED = 1;
@@ -513,59 +501,29 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
@Override
public boolean onCreateOptionsMenu(Menu menu) {
- if (null != cache) {
- menu.add(0, MENU_DEFAULT_NAVIGATION, 0, NavigationAppFactory.getDefaultNavigationApplication().getName()).setIcon(R.drawable.ic_menu_compass); // default navigation tool
-
- final SubMenu subMenu = menu.addSubMenu(0, 0, 0, res.getString(R.string.cache_menu_navigate)).setIcon(R.drawable.ic_menu_mapmode);
- NavigationAppFactory.addMenuItems(subMenu, cache);
-
- menu.add(0, MENU_CALENDAR, 0, res.getString(R.string.cache_menu_event)).setIcon(R.drawable.ic_menu_agenda); // add event to calendar
- LoggingUI.addMenuItems(this, menu, cache);
- menu.add(0, MENU_CACHES_AROUND, 0, res.getString(R.string.cache_menu_around)).setIcon(R.drawable.ic_menu_rotate); // caches around
- menu.add(0, MENU_BROWSER, 0, res.getString(R.string.cache_menu_browser)).setIcon(R.drawable.ic_menu_globe); // browser
- menu.add(0, MENU_SHARE, 0, res.getString(R.string.cache_menu_share)).setIcon(R.drawable.ic_menu_share); // share cache
- }
+ CacheMenuHandler.addMenuItems(this, menu, cache);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
- if (cache != null) {
- menu.findItem(MENU_DEFAULT_NAVIGATION).setVisible(null != cache.getCoords());
- menu.findItem(MENU_CALENDAR).setVisible(cache.canBeAddedToCalendar());
- menu.findItem(MENU_CACHES_AROUND).setVisible(null != cache.getCoords() && cache.supportsCachesAround());
- menu.findItem(MENU_BROWSER).setVisible(cache.canOpenInBrowser());
- LoggingUI.onPrepareOptionsMenu(menu, cache);
- }
+ CacheMenuHandler.onPrepareOptionsMenu(menu, cache);
+ LoggingUI.onPrepareOptionsMenu(menu, cache);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
+ if (CacheMenuHandler.onMenuItemSelected(item, this, cache)) {
+ return true;
+ }
+
final int menuItem = item.getItemId();
switch (menuItem) {
case 0:
// no menu selected, but a new sub menu shown
return false;
- case MENU_DEFAULT_NAVIGATION:
- startDefaultNavigation();
- return true;
- case MENU_BROWSER:
- cache.openInBrowser(this);
- return true;
- case MENU_CACHES_AROUND:
- CacheListActivity.startActivityCoordinates(this, cache.getCoords());
- return true;
- case MENU_CALENDAR:
- addToCalendarWithIntent();
- return true;
- case MENU_SHARE:
- if (cache != null) {
- cache.shareCache(this, res);
- return true;
- }
- return false;
default:
if (NavigationAppFactory.onMenuItemSelected(item, this, cache)) {
return true;
@@ -699,80 +657,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
/**
- * Indicates whether the specified action can be used as an intent. This
- * method queries the package manager for installed packages that can
- * respond to an intent with the specified action. If no suitable package is
- * found, this method returns false.
- *
- * @param context
- * The application's environment.
- * @param action
- * The Intent action to check for availability.
- * @param uri
- * The Intent URI to check for availability.
- *
- * @return True if an Intent with the specified action can be sent and
- * responded to, false otherwise.
- */
- private static boolean isIntentAvailable(Context context, String action, Uri uri) {
- final PackageManager packageManager = context.getPackageManager();
- final Intent intent;
- if (uri == null) {
- intent = new Intent(action);
- } else {
- intent = new Intent(action, uri);
- }
- final List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
- PackageManager.MATCH_DEFAULT_ONLY);
- return !list.isEmpty();
- }
-
- private void addToCalendarWithIntent() {
-
- final boolean calendarAddOnAvailable = isIntentAvailable(this, ICalendar.INTENT, Uri.parse(ICalendar.URI_SCHEME + "://" + ICalendar.URI_HOST));
-
- if (calendarAddOnAvailable) {
- final Parameters params = new Parameters(
- ICalendar.PARAM_NAME, cache.getName(),
- ICalendar.PARAM_NOTE, StringUtils.defaultString(cache.getPersonalNote()),
- ICalendar.PARAM_HIDDEN_DATE, String.valueOf(cache.getHiddenDate().getTime()),
- ICalendar.PARAM_URL, StringUtils.defaultString(cache.getUrl()),
- ICalendar.PARAM_COORDS, cache.getCoords() == null ? "" : cache.getCoords().format(GeopointFormatter.Format.LAT_LON_DECMINUTE_RAW),
- ICalendar.PARAM_LOCATION, StringUtils.defaultString(cache.getLocation()),
- ICalendar.PARAM_SHORT_DESC, StringUtils.defaultString(cache.getShortDescription()),
- ICalendar.PARAM_START_TIME_MINUTES, StringUtils.defaultString(cache.guessEventTimeMinutes())
- );
-
- startActivity(new Intent(ICalendar.INTENT,
- Uri.parse(ICalendar.URI_SCHEME + "://" + ICalendar.URI_HOST + "?" + params.toString())));
- } else {
- // Inform user the calendar add-on is not installed and let them get it from Google Play
- new AlertDialog.Builder(this)
- .setTitle(res.getString(R.string.addon_missing_title))
- .setMessage(new StringBuilder(res.getString(R.string.helper_calendar_missing))
- .append(' ')
- .append(res.getString(R.string.addon_download_prompt))
- .toString())
- .setPositiveButton(getString(android.R.string.yes), new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int id) {
- final Intent intent = new Intent(Intent.ACTION_VIEW);
- intent.setData(Uri.parse(ICalendar.CALENDAR_ADDON_URI));
- startActivity(intent);
- }
- })
- .setNegativeButton(getString(android.R.string.no), new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int id) {
- dialog.cancel();
- }
- })
- .create()
- .show();
- }
- }
-
- /**
* Tries to navigate to the {@link Geocache} of this activity.
*/
private void startDefaultNavigation() {
@@ -2480,4 +2364,19 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
personalNoteView.setVisibility(View.GONE);
}
}
+
+ @Override
+ public void navigateTo() {
+ startDefaultNavigation();
+ }
+
+ @Override
+ public void showNavigationMenu() {
+ NavigationAppFactory.showNavigationMenu(this, cache, null, null);
+ }
+
+ @Override
+ public void cachesAround() {
+ CacheListActivity.startActivityCoordinates(this, cache.getCoords());
+ }
}
diff --git a/main/src/cgeo/geocaching/CacheMenuHandler.java b/main/src/cgeo/geocaching/CacheMenuHandler.java
new file mode 100644
index 0000000..42ea8e6
--- /dev/null
+++ b/main/src/cgeo/geocaching/CacheMenuHandler.java
@@ -0,0 +1,122 @@
+package cgeo.geocaching;
+
+import cgeo.calendar.ICalendar;
+import cgeo.geocaching.apps.cache.navi.NavigationAppFactory;
+import cgeo.geocaching.geopoint.GeopointFormatter;
+import cgeo.geocaching.network.Parameters;
+import cgeo.geocaching.ui.AbstractUIFactory;
+import cgeo.geocaching.utils.ProcessUtils;
+
+import org.apache.commons.lang3.StringUtils;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.net.Uri;
+import android.view.Menu;
+import android.view.MenuItem;
+
+/**
+ * Shared menu handling for all activities having menu items related to a cache.
+ *
+ */
+public class CacheMenuHandler extends AbstractUIFactory {
+
+ /**
+ * Methods to be implemented by the activity to react to the cache menu selections.
+ *
+ */
+ protected interface ActivityInterface {
+ public void navigateTo();
+
+ public void showNavigationMenu();
+
+ public void cachesAround();
+
+ }
+
+ public static boolean onMenuItemSelected(MenuItem item, CacheMenuHandler.ActivityInterface activity, Geocache cache) {
+ switch (item.getItemId()) {
+ case R.id.menu_default_navigation:
+ activity.navigateTo();
+ return true;
+ case R.id.menu_navigate:
+ activity.showNavigationMenu();
+ return true;
+ case R.id.menu_caches_around:
+ activity.cachesAround();
+ return true;
+ case R.id.menu_show_in_browser:
+ cache.openInBrowser((Activity) activity);
+ return true;
+ case R.id.menu_share:
+ cache.shareCache((Activity) activity, res);
+ return true;
+ case R.id.menu_calendar:
+ addToCalendarWithIntent((Activity) activity, cache);
+ }
+ return false;
+ }
+
+ public static void onPrepareOptionsMenu(final Menu menu, final Geocache cache) {
+ final boolean hasCoords = cache.getCoords() != null;
+ menu.findItem(R.id.menu_default_navigation).setVisible(hasCoords);
+ menu.findItem(R.id.menu_navigate).setVisible(hasCoords);
+ menu.findItem(R.id.menu_caches_around).setVisible(hasCoords && cache.supportsCachesAround());
+ menu.findItem(R.id.menu_calendar).setVisible(cache.canBeAddedToCalendar());
+ menu.findItem(R.id.menu_show_in_browser).setVisible(cache.canOpenInBrowser());
+
+ menu.findItem(R.id.menu_default_navigation).setTitle(NavigationAppFactory.getDefaultNavigationApplication().getName());
+ }
+
+ public static void addMenuItems(Activity activity, Menu menu, Geocache cache) {
+ activity.getMenuInflater().inflate(R.menu.cache_options, menu);
+ onPrepareOptionsMenu(menu, cache);
+ }
+
+ private static void addToCalendarWithIntent(final Activity activity, final Geocache cache) {
+ final boolean calendarAddOnAvailable = ProcessUtils.isIntentAvailable(ICalendar.INTENT, Uri.parse(ICalendar.URI_SCHEME + "://" + ICalendar.URI_HOST));
+
+ if (calendarAddOnAvailable) {
+ final Parameters params = new Parameters(
+ ICalendar.PARAM_NAME, cache.getName(),
+ ICalendar.PARAM_NOTE, StringUtils.defaultString(cache.getPersonalNote()),
+ ICalendar.PARAM_HIDDEN_DATE, String.valueOf(cache.getHiddenDate().getTime()),
+ ICalendar.PARAM_URL, StringUtils.defaultString(cache.getUrl()),
+ ICalendar.PARAM_COORDS, cache.getCoords() == null ? "" : cache.getCoords().format(GeopointFormatter.Format.LAT_LON_DECMINUTE_RAW),
+ ICalendar.PARAM_LOCATION, StringUtils.defaultString(cache.getLocation()),
+ ICalendar.PARAM_SHORT_DESC, StringUtils.defaultString(cache.getShortDescription()),
+ ICalendar.PARAM_START_TIME_MINUTES, StringUtils.defaultString(cache.guessEventTimeMinutes())
+ );
+
+ activity.startActivity(new Intent(ICalendar.INTENT,
+ Uri.parse(ICalendar.URI_SCHEME + "://" + ICalendar.URI_HOST + "?" + params.toString())));
+ } else {
+ // Inform user the calendar add-on is not installed and let them get it from Google Play
+ new AlertDialog.Builder(activity)
+ .setTitle(res.getString(R.string.addon_missing_title))
+ .setMessage(new StringBuilder(res.getString(R.string.helper_calendar_missing))
+ .append(' ')
+ .append(res.getString(R.string.addon_download_prompt))
+ .toString())
+ .setPositiveButton(activity.getString(android.R.string.yes), new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ final Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(ICalendar.CALENDAR_ADDON_URI));
+ activity.startActivity(intent);
+ }
+ })
+ .setNegativeButton(activity.getString(android.R.string.no), new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ dialog.cancel();
+ }
+ })
+ .create()
+ .show();
+ }
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/CachePopup.java b/main/src/cgeo/geocaching/CachePopup.java
index 683ebe7..020c604 100644
--- a/main/src/cgeo/geocaching/CachePopup.java
+++ b/main/src/cgeo/geocaching/CachePopup.java
@@ -71,7 +71,7 @@ public class CachePopup extends AbstractPopupActivity {
}
@Override
- protected void showNavigationMenu() {
+ public void showNavigationMenu() {
NavigationAppFactory.showNavigationMenu(this, cache, null, null);
}
@@ -216,7 +216,7 @@ public class CachePopup extends AbstractPopupActivity {
}
@Override
- protected void navigateTo() {
+ public void navigateTo() {
NavigationAppFactory.startDefaultNavigationApplication(1, this, cache);
}
diff --git a/main/src/cgeo/geocaching/WaypointPopup.java b/main/src/cgeo/geocaching/WaypointPopup.java
index c33bbb5..acd3d9b 100644
--- a/main/src/cgeo/geocaching/WaypointPopup.java
+++ b/main/src/cgeo/geocaching/WaypointPopup.java
@@ -94,7 +94,7 @@ public class WaypointPopup extends AbstractPopupActivity {
}
@Override
- protected void navigateTo() {
+ public void navigateTo() {
NavigationAppFactory.startDefaultNavigationApplication(1, this, waypoint);
}
@@ -119,7 +119,7 @@ public class WaypointPopup extends AbstractPopupActivity {
}
@Override
- protected void showNavigationMenu() {
+ public void showNavigationMenu() {
NavigationAppFactory.showNavigationMenu(this, null, waypoint, null);
}
diff --git a/main/src/cgeo/geocaching/utils/ProcessUtils.java b/main/src/cgeo/geocaching/utils/ProcessUtils.java
index 737fb35..d80674b 100644
--- a/main/src/cgeo/geocaching/utils/ProcessUtils.java
+++ b/main/src/cgeo/geocaching/utils/ProcessUtils.java
@@ -8,6 +8,7 @@ import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
+import android.net.Uri;
import java.util.List;
@@ -70,10 +71,34 @@ public final class ProcessUtils {
}
public static boolean isIntentAvailable(final String intent) {
- final PackageManager packageManager = CgeoApplication.getInstance().getPackageManager();
- final List<ResolveInfo> list = packageManager.queryIntentActivities(
- new Intent(intent), PackageManager.MATCH_DEFAULT_ONLY);
+ return isIntentAvailable(intent, null);
+ }
+ /**
+ * Indicates whether the specified action can be used as an intent. This
+ * method queries the package manager for installed packages that can
+ * respond to an intent with the specified action. If no suitable package is
+ * found, this method returns false.
+ *
+ * @param action
+ * The Intent action to check for availability.
+ * @param uri
+ * The Intent URI to check for availability.
+ *
+ * @return True if an Intent with the specified action can be sent and
+ * responded to, false otherwise.
+ */
+ public static boolean isIntentAvailable(final String action, final Uri uri) {
+ final PackageManager packageManager = CgeoApplication.getInstance().getPackageManager();
+ final Intent intent;
+ if (uri == null) {
+ intent = new Intent(action);
+ } else {
+ intent = new Intent(action, uri);
+ }
+ final List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
+ PackageManager.MATCH_DEFAULT_ONLY);
return CollectionUtils.isNotEmpty(list);
}
+
}