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.java38
1 files changed, 28 insertions, 10 deletions
diff --git a/main/src/cgeo/geocaching/CacheMenuHandler.java b/main/src/cgeo/geocaching/CacheMenuHandler.java
index cfe9eeb..542f8ef 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();
@@ -44,9 +54,6 @@ public class CacheMenuHandler extends AbstractUIFactory {
case R.id.menu_show_in_browser:
cache.openInBrowser(activity);
return true;
- case R.id.menu_share:
- cache.shareCache(activity, res);
- return true;
case R.id.menu_calendar:
CalendarAddon.addToCalendarWithIntent(activity, cache);
return true;
@@ -56,7 +63,6 @@ public class CacheMenuHandler extends AbstractUIFactory {
}
public static void onPrepareOptionsMenu(final Menu menu, final Geocache cache) {
- //
if (cache == null) {
return;
}
@@ -68,10 +74,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);
+ }
}