aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/res/menu/waypoint_options.xml32
-rw-r--r--main/src/cgeo/geocaching/CacheDetailActivity.java126
2 files changed, 85 insertions, 73 deletions
diff --git a/main/res/menu/waypoint_options.xml b/main/res/menu/waypoint_options.xml
new file mode 100644
index 0000000..f03cca6
--- /dev/null
+++ b/main/res/menu/waypoint_options.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android" >
+
+ <item
+ android:id="@+id/menu_waypoint_reset_cache_coords"
+ android:title="@string/waypoint_reset_cache_coords">
+ </item>
+ <item
+ android:id="@+id/menu_waypoint_edit"
+ android:title="@string/waypoint_edit">
+ </item>
+ <item
+ android:id="@+id/menu_waypoint_duplicate"
+ android:title="@string/waypoint_duplicate">
+ </item>
+ <item
+ android:id="@+id/menu_waypoint_delete"
+ android:title="@string/waypoint_delete">
+ </item>
+ <item
+ android:id="@+id/menu_waypoint_navigate_default"
+ android:title="@null">
+ </item>
+ <item
+ android:id="@+id/menu_waypoint_navigate"
+ android:title="@string/cache_menu_navigate">
+ </item>
+ <item
+ android:id="@+id/menu_waypoint_caches_around"
+ android:title="@string/cache_menu_around">
+ </item>
+</menu>
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java
index ce20304..f9aae24 100644
--- a/main/src/cgeo/geocaching/CacheDetailActivity.java
+++ b/main/src/cgeo/geocaching/CacheDetailActivity.java
@@ -130,14 +130,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
private static final int MENU_BROWSER = 7;
private static final int MENU_DEFAULT_NAVIGATION = 13;
- private static final int CONTEXT_MENU_WAYPOINT_EDIT = 1234;
- private static final int CONTEXT_MENU_WAYPOINT_DUPLICATE = 1235;
- private static final int CONTEXT_MENU_WAYPOINT_DELETE = 1236;
- private static final int CONTEXT_MENU_WAYPOINT_NAVIGATE = 1238;
- private static final int CONTEXT_MENU_WAYPOINT_CACHES_AROUND = 1239;
- private static final int CONTEXT_MENU_WAYPOINT_DEFAULT_NAVIGATION = 1240;
- private static final int CONTEXT_MENU_WAYPOINT_RESET_ORIGINAL_CACHE_COORDINATES = 1241;
-
private static final int MESSAGE_FAILED = -1;
private static final int MESSAGE_SUCCEEDED = 1;
@@ -170,7 +162,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
};
private CharSequence clickedItemText = null;
- private int contextMenuWPIndex = -1;
/**
* If another activity is called and can modify the data of this activity, we refresh it on resume.
@@ -181,6 +172,10 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
private TextView cacheDistanceView;
protected ImagesList imagesList;
+ /**
+ * waypoint selected in context menu. This variable will be gone when the waypoint context menu is a fragment.
+ */
+ private Waypoint selectedWaypoint;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -357,7 +352,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo info) {
super.onCreateContextMenu(menu, view, info);
final int viewId = view.getId();
- contextMenuWPIndex = -1;
switch (viewId) {
case R.id.value: // coordinates, gc-code, name
clickedItemText = ((TextView) view).getText();
@@ -398,24 +392,23 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
if (parent.getChildAt(i) == view) {
final List<Waypoint> sortedWaypoints = new ArrayList<Waypoint>(cache.getWaypoints());
Collections.sort(sortedWaypoints);
- final Waypoint waypoint = sortedWaypoints.get(i);
- final int index = cache.getWaypoints().indexOf(waypoint);
+ selectedWaypoint = sortedWaypoints.get(i);
+
menu.setHeaderTitle(res.getString(R.string.waypoint));
- if (waypoint.getWaypointType().equals(WaypointType.ORIGINAL)) {
- menu.add(CONTEXT_MENU_WAYPOINT_RESET_ORIGINAL_CACHE_COORDINATES, index, 0, R.string.waypoint_reset_cache_coords);
- } else {
- menu.add(CONTEXT_MENU_WAYPOINT_EDIT, index, 0, R.string.waypoint_edit);
- menu.add(CONTEXT_MENU_WAYPOINT_DUPLICATE, index, 0, R.string.waypoint_duplicate);
- }
- contextMenuWPIndex = index;
- if (waypoint.isUserDefined() && !waypoint.getWaypointType().equals(WaypointType.ORIGINAL)) {
- menu.add(CONTEXT_MENU_WAYPOINT_DELETE, index, 0, R.string.waypoint_delete);
- }
- if (waypoint.getCoords() != null) {
- menu.add(CONTEXT_MENU_WAYPOINT_DEFAULT_NAVIGATION, index, 0, NavigationAppFactory.getDefaultNavigationApplication().getName());
- menu.add(CONTEXT_MENU_WAYPOINT_NAVIGATE, index, 0, R.string.cache_menu_navigate).setIcon(R.drawable.ic_menu_mapmode);
- menu.add(CONTEXT_MENU_WAYPOINT_CACHES_AROUND, index, 0, R.string.cache_menu_around);
- }
+ getMenuInflater().inflate(R.menu.waypoint_options, menu);
+ final boolean isOriginalWaypoint = selectedWaypoint.getWaypointType().equals(WaypointType.ORIGINAL);
+ menu.findItem(R.id.menu_waypoint_reset_cache_coords).setVisible(isOriginalWaypoint);
+ menu.findItem(R.id.menu_waypoint_edit).setVisible(!isOriginalWaypoint);
+ menu.findItem(R.id.menu_waypoint_duplicate).setVisible(!isOriginalWaypoint);
+ final boolean userDefined = selectedWaypoint.isUserDefined() && !selectedWaypoint.getWaypointType().equals(WaypointType.ORIGINAL);
+ menu.findItem(R.id.menu_waypoint_delete).setVisible(userDefined);
+ final boolean hasCoords = selectedWaypoint.getCoords() != null;
+ final MenuItem defaultNavigationMenu = menu.findItem(R.id.menu_waypoint_navigate_default);
+ defaultNavigationMenu.setVisible(hasCoords);
+ defaultNavigationMenu.setTitle(NavigationAppFactory.getDefaultNavigationApplication().getName());
+ menu.findItem(R.id.menu_waypoint_navigate).setVisible(hasCoords);
+ menu.findItem(R.id.menu_waypoint_caches_around).setVisible(hasCoords);
+
break;
}
}
@@ -448,6 +441,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
+ // detail fields
case R.id.menu_copy:
ClipboardUtils.copyToClipboard(clickedItemText);
showToast(res.getString(R.string.clipboard_copy_ok));
@@ -464,71 +458,57 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
intent.putExtra(Intent.EXTRA_TEXT, clickedItemText.toString());
startActivity(Intent.createChooser(intent, res.getText(R.string.cache_share_field)));
return true;
- default:
- break;
- }
- final int groupId = item.getGroupId();
- final int index = item.getItemId();
- switch (groupId) {
- case CONTEXT_MENU_WAYPOINT_EDIT:
- final Waypoint waypointEdit = cache.getWaypoint(index);
- if (waypointEdit != null) {
- EditWaypointActivity.startActivityEditWaypoint(this, waypointEdit.getId());
+ // waypoints
+ case R.id.menu_waypoint_edit:
+ if (selectedWaypoint != null) {
+ EditWaypointActivity.startActivityEditWaypoint(this, selectedWaypoint.getId());
refreshOnResume = true;
}
- break;
- case CONTEXT_MENU_WAYPOINT_DUPLICATE:
- final Waypoint waypointDuplicate = cache.getWaypoint(index);
- if (cache.duplicateWaypoint(waypointDuplicate)) {
+ return true;
+ case R.id.menu_waypoint_duplicate:
+ if (cache.duplicateWaypoint(selectedWaypoint)) {
DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
notifyDataSetChanged();
}
- break;
- case CONTEXT_MENU_WAYPOINT_DELETE:
- final Waypoint waypointDelete = cache.getWaypoint(index);
- if (cache.deleteWaypoint(waypointDelete)) {
+ return true;
+ case R.id.menu_waypoint_delete:
+ if (cache.deleteWaypoint(selectedWaypoint)) {
DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
notifyDataSetChanged();
}
- break;
- case CONTEXT_MENU_WAYPOINT_DEFAULT_NAVIGATION:
- final Waypoint waypointNavigation = cache.getWaypoint(index);
- if (waypointNavigation != null) {
- NavigationAppFactory.startDefaultNavigationApplication(1, this, waypointNavigation);
+ return true;
+ case R.id.menu_waypoint_navigate_default:
+ if (selectedWaypoint != null) {
+ NavigationAppFactory.startDefaultNavigationApplication(1, this, selectedWaypoint);
}
- break;
- case CONTEXT_MENU_WAYPOINT_NAVIGATE:
- final Waypoint waypointNav = cache.getWaypoint(contextMenuWPIndex);
- if (waypointNav != null) {
- NavigationAppFactory.showNavigationMenu(this, null, waypointNav, null);
+ return true;
+ case R.id.menu_waypoint_navigate:
+ if (selectedWaypoint != null) {
+ NavigationAppFactory.showNavigationMenu(this, null, selectedWaypoint, null);
}
- break;
- case CONTEXT_MENU_WAYPOINT_CACHES_AROUND:
- final Waypoint waypointAround = cache.getWaypoint(index);
- if (waypointAround != null) {
- CacheListActivity.startActivityCoordinates(this, waypointAround.getCoords());
+ return true;
+ case R.id.menu_waypoint_caches_around:
+ if (selectedWaypoint != null) {
+ CacheListActivity.startActivityCoordinates(this, selectedWaypoint.getCoords());
}
- break;
-
- case CONTEXT_MENU_WAYPOINT_RESET_ORIGINAL_CACHE_COORDINATES:
- final Waypoint waypointReset = cache.getWaypoint(index);
+ return true;
+ case R.id.menu_waypoint_reset_cache_coords:
if (ConnectorFactory.getConnector(cache).supportsOwnCoordinates()) {
- createResetCacheCoordinatesDialog(cache, waypointReset).show();
+ createResetCacheCoordinatesDialog(cache, selectedWaypoint).show();
}
else {
final ProgressDialog progressDialog = ProgressDialog.show(this, getString(R.string.cache), getString(R.string.waypoint_reset), true);
final HandlerResetCoordinates handler = new HandlerResetCoordinates(this, progressDialog, false);
- new ResetCoordsThread(cache, handler, waypointReset, true, false, progressDialog).start();
+ new ResetCoordsThread(cache, handler, selectedWaypoint, true, false, progressDialog).start();
}
- break;
-
+ return true;
default:
- if (imagesList != null && imagesList.onContextItemSelected(item)) {
- return true;
- }
- return onOptionsItemSelected(item);
+ break;
+ }
+ if (imagesList != null && imagesList.onContextItemSelected(item)) {
+ return true;
}
- return false;
+ return onOptionsItemSelected(item);
}
@Override