aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/CacheMenuHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/CacheMenuHandler.java')
-rw-r--r--main/src/cgeo/geocaching/CacheMenuHandler.java46
1 files changed, 37 insertions, 9 deletions
diff --git a/main/src/cgeo/geocaching/CacheMenuHandler.java b/main/src/cgeo/geocaching/CacheMenuHandler.java
index cfe9eeb..6937bac 100644
--- a/main/src/cgeo/geocaching/CacheMenuHandler.java
+++ b/main/src/cgeo/geocaching/CacheMenuHandler.java
@@ -5,7 +5,11 @@ import cgeo.geocaching.apps.cache.navi.NavigationAppFactory;
import cgeo.geocaching.ui.AbstractUIFactory;
import android.app.Activity;
+import android.support.v4.app.Fragment;
+import android.support.v4.view.MenuItemCompat;
+import android.support.v7.widget.ShareActionProvider;
import android.view.Menu;
+import android.view.MenuInflater;
import android.view.MenuItem;
/**
@@ -19,7 +23,7 @@ public class CacheMenuHandler extends AbstractUIFactory {
* Methods to be implemented by the activity to react to the cache menu selections.
*
*/
- protected interface ActivityInterface {
+ interface ActivityInterface {
public void navigateTo();
public void showNavigationMenu();
@@ -28,9 +32,15 @@ public class CacheMenuHandler extends AbstractUIFactory {
}
- public static boolean onMenuItemSelected(MenuItem item, CacheMenuHandler.ActivityInterface activityInterface, Geocache cache) {
- assert activityInterface instanceof Activity;
- final Activity activity = (Activity) activityInterface;
+ public static boolean onMenuItemSelected(final MenuItem item, final CacheMenuHandler.ActivityInterface activityInterface, final Geocache cache) {
+ assert activityInterface instanceof Activity || activityInterface instanceof Fragment;
+ final Activity activity;
+ if (activityInterface instanceof Activity) {
+ activity = (Activity) activityInterface;
+ } else {
+ activity = ((Fragment)activityInterface).getActivity();
+ }
+
switch (item.getItemId()) {
case R.id.menu_default_navigation:
activityInterface.navigateTo();
@@ -45,8 +55,15 @@ public class CacheMenuHandler extends AbstractUIFactory {
cache.openInBrowser(activity);
return true;
case R.id.menu_share:
- cache.shareCache(activity, res);
- return true;
+ /* If the share menu is a shareActionProvider do nothing and let the share ActionProvider do the work */
+ final ShareActionProvider shareActionProvider = (ShareActionProvider)
+ MenuItemCompat.getActionProvider(item);
+ if (shareActionProvider == null) {
+ cache.shareCache(activity, res);
+ return true;
+ } else {
+ return false;
+ }
case R.id.menu_calendar:
CalendarAddon.addToCalendarWithIntent(activity, cache);
return true;
@@ -56,7 +73,6 @@ public class CacheMenuHandler extends AbstractUIFactory {
}
public static void onPrepareOptionsMenu(final Menu menu, final Geocache cache) {
- //
if (cache == null) {
return;
}
@@ -68,10 +84,22 @@ public class CacheMenuHandler extends AbstractUIFactory {
menu.findItem(R.id.menu_show_in_browser).setVisible(cache.canOpenInBrowser());
menu.findItem(R.id.menu_default_navigation).setTitle(NavigationAppFactory.getDefaultNavigationApplication().getName());
+
+ final MenuItem shareItem = menu.findItem(R.id.menu_share);
+ final ShareActionProvider shareActionProvider = (ShareActionProvider)
+ MenuItemCompat.getActionProvider(shareItem);
+ if(shareActionProvider != null) {
+ shareActionProvider.setShareIntent(cache.getShareIntent());
+ }
+
}
- public static void addMenuItems(Activity activity, Menu menu, Geocache cache) {
- activity.getMenuInflater().inflate(R.menu.cache_options, menu);
+ public static void addMenuItems(final MenuInflater inflater, final Menu menu, final Geocache cache) {
+ inflater.inflate(R.menu.cache_options, menu);
onPrepareOptionsMenu(menu, cache);
}
+
+ public static void addMenuItems(final Activity activity, final Menu menu, final Geocache cache) {
+ addMenuItems(activity.getMenuInflater(), menu, cache);
+ }
}