aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/res/layout/cacheview.xml4
-rw-r--r--main/res/layout/init.xml18
-rw-r--r--main/res/layout/popup.xml6
-rw-r--r--main/res/layout/waypoint.xml5
-rw-r--r--main/res/values-de/strings.xml1
-rw-r--r--main/res/values/strings.xml1
-rw-r--r--main/src/cgeo/geocaching/CacheDetailActivity.java23
-rw-r--r--main/src/cgeo/geocaching/Settings.java15
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java49
-rw-r--r--main/src/cgeo/geocaching/cgeoinit.java44
-rw-r--r--main/src/cgeo/geocaching/cgeopopup.java23
-rw-r--r--main/src/cgeo/geocaching/cgeowaypoint.java27
12 files changed, 205 insertions, 11 deletions
diff --git a/main/res/layout/cacheview.xml b/main/res/layout/cacheview.xml
index 2ff95e2..f81f1e9 100644
--- a/main/res/layout/cacheview.xml
+++ b/main/res/layout/cacheview.xml
@@ -19,9 +19,11 @@
<View style="@style/action_bar_separator" />
<ImageView
+ android:id="@+id/defaultNavigation"
style="@style/action_bar_action"
android:onClick="startDefaultNavigation"
- android:src="@drawable/actionbar_compass" />
+ android:src="@drawable/actionbar_compass"
+ android:longClickable="true" />
<View style="@style/action_bar_separator" />
diff --git a/main/res/layout/init.xml b/main/res/layout/init.xml
index 121c012..e9d28a6 100644
--- a/main/res/layout/init.xml
+++ b/main/res/layout/init.xml
@@ -758,6 +758,24 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:prompt="@string/init_default_navigation_tool_select" />
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="10dip"
+ android:layout_marginRight="10dip"
+ android:layout_marginBottom="5dip"
+ android:layout_alignParentLeft="true"
+ android:layout_gravity="left"
+ android:padding="3dip"
+ android:textSize="14dip"
+ android:textColor="?text_color"
+ android:textColorLink="?text_color_link"
+ android:linksClickable="true"
+ android:text="@string/init_default_navigation_tool_2_description" />
+ <Spinner android:id="@+id/default_navigation_tool_2"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:prompt="@string/init_default_navigation_tool_select" />
<!-- ** -->
<RelativeLayout style="@style/separator_horizontal_layout" >
<View style="@style/separator_horizontal" />
diff --git a/main/res/layout/popup.xml b/main/res/layout/popup.xml
index 04d22f6..b8b5569 100644
--- a/main/res/layout/popup.xml
+++ b/main/res/layout/popup.xml
@@ -7,9 +7,11 @@
<LinearLayout style="@style/action_bar">
<TextView style="@style/action_bar_title" />
<View style="@style/action_bar_separator" />
- <ImageView style="@style/action_bar_action"
+ <ImageView android:id="@+id/defaultNavigation"
+ style="@style/action_bar_action"
android:src="@drawable/actionbar_compass"
- android:onClick="goDefaultNavigation" />
+ android:onClick="goDefaultNavigation"
+ android:longClickable="true" />
<View style="@style/action_bar_separator"
android:id="@+id/separator"
/>
diff --git a/main/res/layout/waypoint.xml b/main/res/layout/waypoint.xml
index d6d2832..e48edff 100644
--- a/main/res/layout/waypoint.xml
+++ b/main/res/layout/waypoint.xml
@@ -11,9 +11,10 @@
<TextView style="@style/action_bar_title" />
<View style="@style/action_bar_separator" />
<ImageView style="@style/action_bar_action"
- android:id="@+id/compass"
+ android:id="@+id/defaultNavigation"
android:src="@drawable/actionbar_compass"
- android:onClick="goDefaultNavigation" />
+ android:onClick="goDefaultNavigation"
+ android:longClickable="true" />
<View style="@style/action_bar_separator"
android:id="@+id/separator"
/>
diff --git a/main/res/values-de/strings.xml b/main/res/values-de/strings.xml
index 9f40428..dcaafaa 100644
--- a/main/res/values-de/strings.xml
+++ b/main/res/values-de/strings.xml
@@ -433,6 +433,7 @@
<string name="init_default_navigation_tool">Standardnavigation</string>
<string name="init_default_navigation_tool_description">Hier kannst du dein bevorzugtes Navigationswerkzeug festlegen.</string>
<string name="init_default_navigation_tool_select">Wähle Werkzeug</string>
+ <string name="init_default_navigation_tool_2_description">Hier kannst du ein zweites bevorzugtes Navigationswerkzeug festlegen. Es ist in der Actionbar per langem Klick auf das Navigationssymbol erreichbar.</string>
<!-- map sources -->
<string name="map_source_google_map">Google: Karte</string>
diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml
index d5951de..a1fac6a 100644
--- a/main/res/values/strings.xml
+++ b/main/res/values/strings.xml
@@ -432,6 +432,7 @@
<string name="init_default_navigation_tool">Default Navigation</string>
<string name="init_default_navigation_tool_description">Here you can select your preferred navigation tool.</string>
<string name="init_default_navigation_tool_select">Select tool</string>
+ <string name="init_default_navigation_tool_2_description">Here you can select your 2nd preferred navigation tool. It\'s accessible in the action bar by long click at the navigation icon.</string>
<!-- map sources -->
<string-array name="map_sources">
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java
index 528b2e2..abb096b 100644
--- a/main/src/cgeo/geocaching/CacheDetailActivity.java
+++ b/main/src/cgeo/geocaching/CacheDetailActivity.java
@@ -65,6 +65,7 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
+import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewParent;
@@ -262,6 +263,15 @@ public class CacheDetailActivity extends AbstractActivity {
// nothing, we lost the window
}
+ ImageView defaultNavigationImageView = (ImageView) findViewById(R.id.defaultNavigation);
+ defaultNavigationImageView.setOnLongClickListener(new OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ startDefaultNavigation2();
+ return true;
+ }
+ });
+
// initialize ViewPager
viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPagerAdapter = new ViewPagerAdapter();
@@ -840,6 +850,19 @@ public class CacheDetailActivity extends AbstractActivity {
}
/**
+ * Tries to navigate to the {@link cgCache} of this activity.
+ */
+ private void startDefaultNavigation2() {
+ if (cache == null || cache.getCoords() == null) {
+ showToast(res.getString(R.string.err_location_unknown));
+ return;
+ }
+
+ //TODO: previously this used also the search argument "search". check if still needed
+ NavigationAppFactory.startDefaultNavigationApplication2(geolocation, this, cache, null, null);
+ }
+
+ /**
* Wrapper for the referenced method in the xml-layout.
*/
public void startDefaultNavigation(@SuppressWarnings("unused") View view) {
diff --git a/main/src/cgeo/geocaching/Settings.java b/main/src/cgeo/geocaching/Settings.java
index 4f9a240..af1ad0a 100644
--- a/main/src/cgeo/geocaching/Settings.java
+++ b/main/src/cgeo/geocaching/Settings.java
@@ -76,6 +76,7 @@ public final class Settings {
private static final String KEY_LAST_DETAILS_PAGE = "lastdetailspage";
private static final String KEY_DEBUG_INFORMATIONS = "debuginfos";
private static final String KEY_DEFAULT_NAVIGATION_TOOL = "defaultNavigationTool";
+ private static final String KEY_DEFAULT_NAVIGATION_TOOL_2 = "defaultNavigationTool2";
private final static int unitsMetric = 1;
private final static int unitsImperial = 2;
@@ -999,4 +1000,18 @@ public final class Settings {
}
});
}
+
+ public static int getDefaultNavigationTool2() {
+ return sharedPrefs.getInt(KEY_DEFAULT_NAVIGATION_TOOL_2, 0);
+ }
+
+ public static void setDefaultNavigationTool2(final int defaultNavigationTool) {
+ editSharedSettings(new PrefRunnable() {
+
+ @Override
+ public void edit(Editor edit) {
+ edit.putInt(KEY_DEFAULT_NAVIGATION_TOOL_2, defaultNavigationTool);
+ }
+ });
+ }
}
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java b/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java
index 53240bc..e2a1fc1 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java
@@ -90,7 +90,7 @@ public final class NavigationAppFactory extends AbstractAppFactory {
/**
* Specialized way to handle selection of navigation tool.<br />
* A dialog is created for tool selection and the selected tool is started afterwards.
- *
+ *
* @param geo
* @param activity
* @param cache
@@ -103,7 +103,7 @@ public final class NavigationAppFactory extends AbstractAppFactory {
* should be <code>false</code> only when called from within the internal map
* @param showDefaultNavigation
* should be <code>false</code> by default
- *
+ *
* @see #showNavigationMenu(cgGeo, Activity, cgCache, cgWaypoint, Geopoint)
*/
public static void showNavigationMenu(final cgGeo geo, final Activity activity,
@@ -297,8 +297,31 @@ public final class NavigationAppFactory extends AbstractAppFactory {
}
/**
+ * Starts the second default navigation tool if correctly set and installed or the compass app as default fallback.
+ *
+ * @param geo
+ * @param activity
+ * @param cache
+ * @param search
+ * @param waypoint
+ * @param destination
+ */
+ public static void startDefaultNavigationApplication2(final cgGeo geo, Activity activity, cgCache cache,
+ cgWaypoint waypoint, final Geopoint destination) {
+ final NavigationApp app = getDefaultNavigationApplication2(activity);
+
+ if (app != null) {
+ try {
+ app.invoke(geo, activity, cache, waypoint, destination);
+ } catch (Exception e) {
+ Log.e(Settings.tag, "NavigationAppFactory.startDefaultNavigationApplication2: " + e.toString());
+ }
+ }
+ }
+
+ /**
* Returns the default navigation tool if correctly set and installed or the compass app as default fallback
- *
+ *
* @param activity
* @return never <code>null</code>
*/
@@ -316,4 +339,24 @@ public final class NavigationAppFactory extends AbstractAppFactory {
return NavigationAppsEnum.COMPASS.app;
}
+ /**
+ * Returns the second default navigation tool if correctly set and installed or the compass app as default fallback
+ *
+ * @param activity
+ * @return never <code>null</code>
+ */
+ public static NavigationApp getDefaultNavigationApplication2(Activity activity) {
+ final int defaultNavigationTool = Settings.getDefaultNavigationTool2();
+
+ final List<NavigationAppsEnum> installedNavigationApps = getInstalledNavigationApps(activity);
+
+ for (NavigationAppsEnum navigationApp : installedNavigationApps) {
+ if (navigationApp.id == defaultNavigationTool) {
+ return navigationApp.app;
+ }
+ }
+ // second default navigation tool wasn't set already or couldn't be found (not installed any more for example)
+ return NavigationAppsEnum.COMPASS.app;
+ }
+
}
diff --git a/main/src/cgeo/geocaching/cgeoinit.java b/main/src/cgeo/geocaching/cgeoinit.java
index 5a601ac..0839f46 100644
--- a/main/src/cgeo/geocaching/cgeoinit.java
+++ b/main/src/cgeo/geocaching/cgeoinit.java
@@ -619,6 +619,50 @@ public class cgeoinit extends AbstractActivity {
}
});
+ // 2nd Default navigation tool settings
+ Spinner defaultNavigationTool2Selector = (Spinner) findViewById(R.id.default_navigation_tool_2);
+ // final List<NavigationAppsEnum> apps = NavigationAppFactory.getInstalledNavigationApps(this);
+ ArrayAdapter<NavigationAppsEnum> navi2Adapter = new ArrayAdapter<NavigationAppsEnum>(this, android.R.layout.simple_spinner_item, apps) {
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ TextView textView = (TextView) super.getView(position, convertView, parent);
+ textView.setText(getItem(position).app.getName());
+ return textView;
+ }
+
+ @Override
+ public View getDropDownView(int position, View convertView, ViewGroup parent) {
+ TextView textView = (TextView) super.getDropDownView(position, convertView, parent);
+ textView.setText(getItem(position).app.getName());
+ return textView;
+ }
+ };
+ navi2Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ defaultNavigationTool2Selector.setAdapter(navi2Adapter);
+ int defaultNavigationTool2 = Settings.getDefaultNavigationTool2();
+ int ordinal2 = 0;
+ for (int i = 0; i < apps.size(); i++) {
+ if (apps.get(i).id == defaultNavigationTool2) {
+ ordinal2 = i;
+ break;
+ }
+ }
+ defaultNavigationTool2Selector.setSelection(ordinal2);
+ defaultNavigationTool2Selector.setOnItemSelectedListener(new OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+ NavigationAppsEnum item = (NavigationAppsEnum) parent.getItemAtPosition(position);
+ if (item != null) {
+ Settings.setDefaultNavigationTool2(item.id);
+ }
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView<?> arg0) {
+ // noop
+ }
+ });
+
refreshBackupLabel();
}
diff --git a/main/src/cgeo/geocaching/cgeopopup.java b/main/src/cgeo/geocaching/cgeopopup.java
index e7bf143..1a2d26e 100644
--- a/main/src/cgeo/geocaching/cgeopopup.java
+++ b/main/src/cgeo/geocaching/cgeopopup.java
@@ -26,6 +26,7 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
+import android.view.View.OnLongClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
@@ -128,6 +129,16 @@ public class cgeopopup extends AbstractActivity {
finish();
return;
}
+
+ ImageView defaultNavigationImageView = (ImageView) findViewById(R.id.defaultNavigation);
+ defaultNavigationImageView.setOnLongClickListener(new OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ startDefaultNavigation2();
+ return true;
+ }
+ });
+
}
@Override
@@ -632,6 +643,18 @@ public class cgeopopup extends AbstractActivity {
finish();
}
+ /**
+ * Tries to navigate to the {@link cgCache} of this activity.
+ */
+ private void startDefaultNavigation2() {
+ if (cache == null || cache.getCoords() == null) {
+ showToast(res.getString(R.string.cache_coordinates_no));
+ return;
+ }
+ NavigationAppFactory.startDefaultNavigationApplication2(geo, this, cache, null, null);
+ finish();
+ }
+
@Override
public void goManual(View view) {
super.goManual(view);
diff --git a/main/src/cgeo/geocaching/cgeowaypoint.java b/main/src/cgeo/geocaching/cgeowaypoint.java
index 84eac46..7fbf14a 100644
--- a/main/src/cgeo/geocaching/cgeowaypoint.java
+++ b/main/src/cgeo/geocaching/cgeowaypoint.java
@@ -18,6 +18,7 @@ import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
+import android.view.View.OnLongClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
@@ -54,7 +55,7 @@ public class cgeowaypoint extends AbstractActivity {
} else {
final TextView identification = (TextView) findViewById(R.id.identification);
final TextView coords = (TextView) findViewById(R.id.coordinates);
- final ImageView compass = (ImageView) findViewById(R.id.compass);
+ final ImageView defaultNavigation = (ImageView) findViewById(R.id.defaultNavigation);
final View separator = findViewById(R.id.separator);
final View headline = findViewById(R.id.headline);
@@ -76,11 +77,11 @@ public class cgeowaypoint extends AbstractActivity {
if (waypoint.getCoords() != null) {
coords.setText(Html.fromHtml(waypoint.getCoords().toString()), TextView.BufferType.SPANNABLE);
- compass.setVisibility(View.VISIBLE);
+ defaultNavigation.setVisibility(View.VISIBLE);
separator.setVisibility(View.VISIBLE);
} else {
coords.setText(res.getString(R.string.waypoint_unknown_coordinates));
- compass.setVisibility(View.GONE);
+ defaultNavigation.setVisibility(View.GONE);
separator.setVisibility(View.GONE);
}
registerNavigationMenu(coords);
@@ -163,6 +164,15 @@ public class cgeowaypoint extends AbstractActivity {
waitDialog.setCancelable(true);
(new loadWaypoint()).start();
+
+ ImageView defaultNavigationImageView = (ImageView) findViewById(R.id.defaultNavigation);
+ defaultNavigationImageView.setOnLongClickListener(new OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ startDefaultNavigation2();
+ return true;
+ }
+ });
}
@Override
@@ -341,6 +351,17 @@ public class cgeowaypoint extends AbstractActivity {
NavigationAppFactory.startDefaultNavigationApplication(geo, this, null, waypoint, null);
}
+ /**
+ * Tries to navigate to the {@link cgCache} of this activity.
+ */
+ private void startDefaultNavigation2() {
+ if (!navigationPossible()) {
+ return;
+ }
+
+ NavigationAppFactory.startDefaultNavigationApplication2(geo, this, null, waypoint, null);
+ }
+
private boolean navigationPossible() {
if (waypoint == null || waypoint.getCoords() == null) {
showToast(res.getString(R.string.err_location_unknown));