aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/res/layout/compass_activity.xml2
-rw-r--r--main/res/menu/compass_activity_options.xml3
-rw-r--r--main/src/cgeo/geocaching/CompassActivity.java74
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/CompassApp.java12
4 files changed, 44 insertions, 47 deletions
diff --git a/main/res/layout/compass_activity.xml b/main/res/layout/compass_activity.xml
index ab1fe6d..914a17a 100644
--- a/main/res/layout/compass_activity.xml
+++ b/main/res/layout/compass_activity.xml
@@ -18,6 +18,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
+ android:text="@null"
android:textColor="?text_color"
android:textSize="14sp" />
@@ -26,6 +27,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
+ android:text="@null"
android:textColor="?text_color"
android:textSize="14sp" />
diff --git a/main/res/menu/compass_activity_options.xml b/main/res/menu/compass_activity_options.xml
index 30861dd..59c0b36 100644
--- a/main/res/menu/compass_activity_options.xml
+++ b/main/res/menu/compass_activity_options.xml
@@ -25,6 +25,7 @@
android:id="@+id/menu_select_destination"
android:icon="@drawable/ic_menu_myplaces"
android:title="@string/destination_select"
+ android:visible="false"
app:showAsAction="ifRoom|withText">
<menu /> <!-- filled dynamically -->
</item>
@@ -43,7 +44,7 @@
android:id="@+id/menu_compass_sensor_magnetic"
android:title="@string/use_compass">
</item>
- </group>
+ </group>
</menu>
</item>
diff --git a/main/src/cgeo/geocaching/CompassActivity.java b/main/src/cgeo/geocaching/CompassActivity.java
index 6913b2a..00fa790 100644
--- a/main/src/cgeo/geocaching/CompassActivity.java
+++ b/main/src/cgeo/geocaching/CompassActivity.java
@@ -38,14 +38,10 @@ import android.view.SubMenu;
import android.view.View;
import android.widget.TextView;
-import java.util.ArrayList;
-import java.util.Collection;
import java.util.List;
public class CompassActivity extends AbstractActionBarActivity {
- private static final int COORDINATES_OFFSET = 10;
-
@InjectView(R.id.nav_type) protected TextView navType;
@InjectView(R.id.nav_accuracy) protected TextView navAccuracy;
@InjectView(R.id.nav_satellites) protected TextView navSatellites;
@@ -60,7 +56,6 @@ public class CompassActivity extends AbstractActionBarActivity {
private static final String EXTRAS_NAME = "name";
private static final String EXTRAS_GEOCODE = "geocode";
private static final String EXTRAS_CACHE_INFO = "cacheinfo";
- private static final List<IWaypoint> coordinates = new ArrayList<>();
/**
* Destination of the compass, or null (if the compass is used for a waypoint only).
@@ -158,21 +153,28 @@ public class CompassActivity extends AbstractActionBarActivity {
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.compass_activity_options, menu);
menu.findItem(R.id.menu_compass_sensor).setVisible(hasMagneticFieldSensor);
- final SubMenu subMenu = menu.findItem(R.id.menu_select_destination).getSubMenu();
- if (coordinates.size() > 1) {
- for (int i = 0; i < coordinates.size(); i++) {
- final IWaypoint coordinate = coordinates.get(i);
- subMenu.add(0, COORDINATES_OFFSET + i, 0, coordinate.getName() + " (" + coordinate.getCoordType() + ")");
- }
- } else {
- menu.findItem(R.id.menu_select_destination).setVisible(false);
- }
if (cache != null) {
LoggingUI.addMenuItems(this, menu, cache);
}
+ addWaypointItems(menu);
return true;
}
+ private void addWaypointItems(final Menu menu) {
+ if (cache != null) {
+ final List<Waypoint> waypoints = cache.getWaypoints();
+ boolean visible = false;
+ final SubMenu subMenu = menu.findItem(R.id.menu_select_destination).getSubMenu();
+ for (final Waypoint waypoint : waypoints) {
+ if (waypoint.getCoords() != null) {
+ subMenu.add(0, waypoint.getId(), 0, waypoint.getName());
+ visible = true;
+ }
+ }
+ menu.findItem(R.id.menu_select_destination).setVisible(visible);
+ }
+ }
+
@Override
public boolean onPrepareOptionsMenu(final Menu menu) {
super.onPrepareOptionsMenu(menu);
@@ -214,18 +216,19 @@ public class CompassActivity extends AbstractActionBarActivity {
if (LoggingUI.onMenuItemSelected(item, this, cache)) {
return true;
}
- final int coordinatesIndex = id - COORDINATES_OFFSET;
- if (coordinatesIndex >= 0 && coordinatesIndex < coordinates.size()) {
- final IWaypoint coordinate = coordinates.get(coordinatesIndex);
- title = coordinate.getName();
- dstCoords = coordinate.getCoords();
- setTitle();
- setDestCoords();
- setCacheInfo();
- updateDistanceInfo(app.currentGeo());
-
- Log.d("destination set: " + title + " (" + dstCoords + ")");
- return true;
+ if (cache != null) {
+ final Waypoint waypoint = cache.getWaypointById(id);
+ if (waypoint != null) {
+ title = waypoint.getName();
+ dstCoords = waypoint.getCoords();
+ setTitle();
+ setDestCoords();
+ setCacheInfo();
+ updateDistanceInfo(app.currentGeo());
+
+ Log.d("destination set: " + title + " (" + dstCoords + ")");
+ return true;
+ }
}
}
return super.onOptionsItemSelected(item);
@@ -312,17 +315,8 @@ public class CompassActivity extends AbstractActionBarActivity {
}
}
- public static void startActivity(final Context context, final String geocode, final String displayedName, final Geopoint coords, final Collection<IWaypoint> coordinatesWithType,
+ public static void startActivity(final Context context, final String geocode, final String displayedName, final Geopoint coords,
final String info) {
- coordinates.clear();
- if (coordinatesWithType != null) {
- for (final IWaypoint coordinate : coordinatesWithType) {
- if (coordinate != null) {
- coordinates.add(coordinate);
- }
- }
- }
-
final Intent navigateIntent = new Intent(context, CompassActivity.class);
navigateIntent.putExtra(EXTRAS_COORDS, coords);
navigateIntent.putExtra(EXTRAS_GEOCODE, geocode);
@@ -333,12 +327,12 @@ public class CompassActivity extends AbstractActionBarActivity {
context.startActivity(navigateIntent);
}
- public static void startActivity(final Context context, final String geocode, final String displayedName, final Geopoint coords, final Collection<IWaypoint> coordinatesWithType) {
- CompassActivity.startActivity(context, geocode, displayedName, coords, coordinatesWithType, null);
+ public static void startActivity(final Context context, final String geocode, final String displayedName, final Geopoint coords) {
+ startActivity(context, geocode, displayedName, coords, null);
}
- public static void startActivity(final Context context, final Geocache cache) {
- startActivity(context, cache.getGeocode(), cache.getName(), cache.getCoords(), null,
+ public static void startActivityCache(final Context context, final Geocache cache) {
+ startActivity(context, cache.getGeocode(), cache.getName(), cache.getCoords(),
Formatter.formatCacheInfoShort(cache));
}
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/CompassApp.java b/main/src/cgeo/geocaching/apps/cache/navi/CompassApp.java
index 03d2220..743ce1f 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/CompassApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/CompassApp.java
@@ -20,19 +20,19 @@ class CompassApp extends AbstractPointNavigationApp {
}
@Override
- public void navigate(Activity activity, Geopoint coords) {
- CompassActivity.startActivity(activity, getString(R.string.navigation_direct_navigation), getString(R.string.navigation_target), coords, null);
+ public void navigate(final Activity activity, final Geopoint coords) {
+ CompassActivity.startActivity(activity, getString(R.string.navigation_direct_navigation), getString(R.string.navigation_target), coords);
}
@Override
- public void navigate(Activity activity, Waypoint waypoint) {
- CompassActivity.startActivity(activity, waypoint.getPrefix() + "/" + waypoint.getLookup(), waypoint.getName(), waypoint.getCoords(), null,
+ public void navigate(final Activity activity, final Waypoint waypoint) {
+ CompassActivity.startActivity(activity, waypoint.getPrefix() + "/" + waypoint.getLookup(), waypoint.getName(), waypoint.getCoords(),
waypoint.getWaypointType().getL10n());
}
@Override
- public void navigate(Activity activity, Geocache cache) {
- CompassActivity.startActivity(activity, cache);
+ public void navigate(final Activity activity, final Geocache cache) {
+ CompassActivity.startActivityCache(activity, cache);
}
} \ No newline at end of file