aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/CacheDetailActivity.java23
-rw-r--r--main/src/cgeo/geocaching/activity/INavigationSource.java20
-rw-r--r--main/src/cgeo/geocaching/ui/NavigationActionProvider.java61
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;
+
+ }
+
+}