diff options
Diffstat (limited to 'main/src')
3 files changed, 101 insertions, 3 deletions
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index dff8e09..61403b9 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -6,6 +6,7 @@ import butterknife.InjectView; import cgeo.calendar.CalendarAddon; import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.activity.AbstractViewPagerActivity; +import cgeo.geocaching.activity.INavigationSource; import cgeo.geocaching.activity.Progress; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; import cgeo.geocaching.apps.cachelist.MapsWithMeCacheListApp; @@ -35,6 +36,7 @@ import cgeo.geocaching.ui.EditNoteDialog.EditNoteDialogListener; import cgeo.geocaching.ui.ImagesList; import cgeo.geocaching.ui.IndexOutOfBoundsAvoidingTextView; import cgeo.geocaching.ui.LoggingUI; +import cgeo.geocaching.ui.NavigationActionProvider; import cgeo.geocaching.ui.OwnerActionsClickListener; import cgeo.geocaching.ui.WeakReferenceHandler; import cgeo.geocaching.ui.dialog.Dialogs; @@ -83,6 +85,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.app.FragmentManager; +import android.support.v4.view.MenuItemCompat; import android.support.v7.view.ActionMode; import android.text.Editable; import android.text.Html; @@ -126,7 +129,7 @@ import java.util.regex.Pattern; * * e.g. details, description, logs, waypoints, inventory... */ -public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailActivity.Page> implements CacheMenuHandler.ActivityInterface { +public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailActivity.Page> implements CacheMenuHandler.ActivityInterface, INavigationSource { private static final int MESSAGE_FAILED = -1; private static final int MESSAGE_SUCCEEDED = 1; @@ -427,6 +430,11 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc @Override public boolean onCreateOptionsMenu(final Menu menu) { CacheMenuHandler.addMenuItems(this, menu, cache); + final MenuItem menuItem = menu.findItem(R.id.menu_default_navigation); + final NavigationActionProvider navAction = (NavigationActionProvider) MenuItemCompat.getActionProvider(menuItem); + if (navAction != null) { + navAction.setNavigationSource(this); + } return true; } @@ -610,13 +618,22 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } /** - * Tries to navigate to the {@link Geocache} of this activity. + * Tries to navigate to the {@link Geocache} of this activity using the default navigation tool. */ - private void startDefaultNavigation() { + @Override + public void startDefaultNavigation() { NavigationAppFactory.startDefaultNavigationApplication(1, this, cache); } /** + * Tries to navigate to the {@link Geocache} of this activity using the second default navigation tool. + */ + @Override + public void startDefaultNavigation2() { + NavigationAppFactory.startDefaultNavigationApplication(2, this, cache); + } + + /** * Wrapper for the referenced method in the xml-layout. */ public void goDefaultNavigation(@SuppressWarnings("unused") final View view) { diff --git a/main/src/cgeo/geocaching/activity/INavigationSource.java b/main/src/cgeo/geocaching/activity/INavigationSource.java new file mode 100644 index 0000000..eb18d87 --- /dev/null +++ b/main/src/cgeo/geocaching/activity/INavigationSource.java @@ -0,0 +1,20 @@ +package cgeo.geocaching.activity; + +/** + * Interface to implement by activities that want to utilize the NavigationActionProvider + * + * @author rsudev + * + */ +public interface INavigationSource { + + /** + * Calls the default navigation in the current context + */ + void startDefaultNavigation(); + + /** + * Calls the second default navigation in the current context + */ + void startDefaultNavigation2(); +} diff --git a/main/src/cgeo/geocaching/ui/NavigationActionProvider.java b/main/src/cgeo/geocaching/ui/NavigationActionProvider.java new file mode 100644 index 0000000..5840e27 --- /dev/null +++ b/main/src/cgeo/geocaching/ui/NavigationActionProvider.java @@ -0,0 +1,61 @@ +package cgeo.geocaching.ui; + +import cgeo.geocaching.R; +import cgeo.geocaching.activity.INavigationSource; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.support.v4.view.ActionProvider; +import android.view.LayoutInflater; +import android.view.View; + +public class NavigationActionProvider extends ActionProvider { + + private final Context context; + private INavigationSource navigationSource; + + public NavigationActionProvider(final Context context) { + super(context); + this.context = context; + } + + public void setNavigationSource(final INavigationSource navigationSource) { + this.navigationSource = navigationSource; + } + + @SuppressLint("InflateParams") + @Override + public View onCreateActionView() { + + View view = null; + + if (navigationSource != null) { + + final LayoutInflater layoutInflater = LayoutInflater.from(context); + view = layoutInflater.inflate(R.layout.navigation_action, null); + + final View navItem = view.findViewById(R.id.default_navigation_action); + + navItem.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(final View v) { + navigationSource.startDefaultNavigation(); + } + }); + + navItem.setOnLongClickListener(new View.OnLongClickListener() { + + @Override + public boolean onLongClick(final View v) { + navigationSource.startDefaultNavigation2(); + return true; + } + }); + } + + return view; + + } + +} |
