diff options
Diffstat (limited to 'main/src/cgeo/geocaching/CacheMenuHandler.java')
| -rw-r--r-- | main/src/cgeo/geocaching/CacheMenuHandler.java | 38 |
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); + } } |
