aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
Diffstat (limited to 'main')
-rw-r--r--main/proguard-project.txt3
-rw-r--r--main/res/layout/navigation_action.xml15
-rw-r--r--main/res/menu/cache_options.xml3
-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
6 files changed, 121 insertions, 4 deletions
diff --git a/main/proguard-project.txt b/main/proguard-project.txt
index 74b8aa2..9b0978c 100644
--- a/main/proguard-project.txt
+++ b/main/proguard-project.txt
@@ -61,3 +61,6 @@
# the sort action provider is only referenced from XML
-keep public class cgeo.geocaching.sorting.SortActionProvider { *; }
+
+# the navigation action provider is only referenced from XML
+-keep public class cgeo.geocaching.ui.NavigationActionProvider { *; }
diff --git a/main/res/layout/navigation_action.xml b/main/res/layout/navigation_action.xml
new file mode 100644
index 0000000..ea535d7
--- /dev/null
+++ b/main/res/layout/navigation_action.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical" >
+
+ <ImageButton
+ android:id="@+id/default_navigation_action"
+ android:layout_width="wrap_content"
+ android:layout_height="fill_parent"
+ android:scaleType="centerInside"
+ android:src="@drawable/ic_menu_compass"
+ android:background="@drawable/actionbar_button" />
+
+</LinearLayout>
diff --git a/main/res/menu/cache_options.xml b/main/res/menu/cache_options.xml
index cb32215..2e0e2bd 100644
--- a/main/res/menu/cache_options.xml
+++ b/main/res/menu/cache_options.xml
@@ -6,7 +6,8 @@
android:id="@+id/menu_default_navigation"
android:icon="@drawable/ic_menu_compass"
android:title="@string/cache_menu_navigate"
- app:showAsAction="ifRoom"> <!-- will be replaced -->
+ app:actionProviderClass="cgeo.geocaching.ui.NavigationActionProvider"
+ app:showAsAction="always"> <!-- will be replaced -->
</item>
<item
android:id="@+id/menu_navigate"
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;
+
+ }
+
+}