From 96085791963ff0bfb1e50dc5769800648d887cdb Mon Sep 17 00:00:00 2001 From: Bananeweizen Date: Thu, 2 May 2013 18:37:09 +0200 Subject: refactoring: use menu resources instead of code --- main/AndroidManifest.xml | 2 +- main/res/menu/abstract_logging_activity.xml | 22 ++ main/res/menu/abstract_popup_activity.xml | 35 +++ main/res/menu/compass_activity_options.xml | 25 ++ main/res/menu/logging_ui.xml | 13 + main/res/menu/main_activity_options.xml | 30 ++ main/res/menu/main_options.xml | 30 -- main/res/menu/map_activity.xml | 85 ++++++ .../menu/navigate_any_point_activity_options.xml | 24 ++ main/res/menu/search_activity_options.xml | 10 + main/res/menu/settings_activity_options.xml | 8 + main/res/menu/static_maps_activity_options.xml | 8 + main/res/menu/trackable_activity.xml | 15 + .../cgeo/geocaching/AbstractLoggingActivity.java | 18 +- .../src/cgeo/geocaching/AbstractPopupActivity.java | 34 +-- main/src/cgeo/geocaching/CacheDetailActivity.java | 3 +- main/src/cgeo/geocaching/CompassActivity.java | 299 ++++++++++++++++++++ main/src/cgeo/geocaching/MainActivity.java | 4 +- .../cgeo/geocaching/NavigateAnyPointActivity.java | 30 +- main/src/cgeo/geocaching/SearchActivity.java | 5 +- main/src/cgeo/geocaching/SettingsActivity.java | 5 +- main/src/cgeo/geocaching/StaticMapsActivity.java | 5 +- main/src/cgeo/geocaching/TrackableActivity.java | 13 +- .../geocaching/apps/cache/navi/CompassApp.java | 8 +- main/src/cgeo/geocaching/cgeocaches.java | 2 +- main/src/cgeo/geocaching/cgeonavigate.java | 303 --------------------- main/src/cgeo/geocaching/maps/CGeoMap.java | 84 ++---- .../cgeo/geocaching/maps/MapProviderFactory.java | 8 +- .../geocaching/maps/google/GoogleMapActivity.java | 5 +- .../maps/mapsforge/MapsforgeMapActivity.java | 5 +- main/src/cgeo/geocaching/ui/LoggingUI.java | 40 +-- 31 files changed, 676 insertions(+), 502 deletions(-) create mode 100644 main/res/menu/abstract_logging_activity.xml create mode 100644 main/res/menu/abstract_popup_activity.xml create mode 100644 main/res/menu/compass_activity_options.xml create mode 100644 main/res/menu/logging_ui.xml create mode 100644 main/res/menu/main_activity_options.xml delete mode 100644 main/res/menu/main_options.xml create mode 100644 main/res/menu/map_activity.xml create mode 100644 main/res/menu/navigate_any_point_activity_options.xml create mode 100644 main/res/menu/search_activity_options.xml create mode 100644 main/res/menu/settings_activity_options.xml create mode 100644 main/res/menu/static_maps_activity_options.xml create mode 100644 main/res/menu/trackable_activity.xml create mode 100644 main/src/cgeo/geocaching/CompassActivity.java delete mode 100644 main/src/cgeo/geocaching/cgeonavigate.java diff --git a/main/AndroidManifest.xml b/main/AndroidManifest.xml index 0c6c4a0..0f1afcd 100644 --- a/main/AndroidManifest.xml +++ b/main/AndroidManifest.xml @@ -203,7 +203,7 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/main/res/menu/abstract_popup_activity.xml b/main/res/menu/abstract_popup_activity.xml new file mode 100644 index 0000000..855a756 --- /dev/null +++ b/main/res/menu/abstract_popup_activity.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/main/res/menu/compass_activity_options.xml b/main/res/menu/compass_activity_options.xml new file mode 100644 index 0000000..7a6d570 --- /dev/null +++ b/main/res/menu/compass_activity_options.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/main/res/menu/logging_ui.xml b/main/res/menu/logging_ui.xml new file mode 100644 index 0000000..f345d4a --- /dev/null +++ b/main/res/menu/logging_ui.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/main/res/menu/main_activity_options.xml b/main/res/menu/main_activity_options.xml new file mode 100644 index 0000000..e06e948 --- /dev/null +++ b/main/res/menu/main_activity_options.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/main/res/menu/main_options.xml b/main/res/menu/main_options.xml deleted file mode 100644 index e06e948..0000000 --- a/main/res/menu/main_options.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/main/res/menu/map_activity.xml b/main/res/menu/map_activity.xml new file mode 100644 index 0000000..d76f5ca --- /dev/null +++ b/main/res/menu/map_activity.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/main/res/menu/navigate_any_point_activity_options.xml b/main/res/menu/navigate_any_point_activity_options.xml new file mode 100644 index 0000000..9207e94 --- /dev/null +++ b/main/res/menu/navigate_any_point_activity_options.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/main/res/menu/search_activity_options.xml b/main/res/menu/search_activity_options.xml new file mode 100644 index 0000000..68eb569 --- /dev/null +++ b/main/res/menu/search_activity_options.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/main/res/menu/settings_activity_options.xml b/main/res/menu/settings_activity_options.xml new file mode 100644 index 0000000..ba75f91 --- /dev/null +++ b/main/res/menu/settings_activity_options.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/main/res/menu/static_maps_activity_options.xml b/main/res/menu/static_maps_activity_options.xml new file mode 100644 index 0000000..29410dd --- /dev/null +++ b/main/res/menu/static_maps_activity_options.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/main/res/menu/trackable_activity.xml b/main/res/menu/trackable_activity.xml new file mode 100644 index 0000000..ddf45f6 --- /dev/null +++ b/main/res/menu/trackable_activity.xml @@ -0,0 +1,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/main/src/cgeo/geocaching/AbstractLoggingActivity.java b/main/src/cgeo/geocaching/AbstractLoggingActivity.java index 3e66d5e..78da757 100644 --- a/main/src/cgeo/geocaching/AbstractLoggingActivity.java +++ b/main/src/cgeo/geocaching/AbstractLoggingActivity.java @@ -17,23 +17,17 @@ import android.view.SubMenu; import android.widget.EditText; public abstract class AbstractLoggingActivity extends AbstractActivity { - private static final int MENU_SIGNATURE = 1; - private static final int MENU_SMILEY = 2; @Override public boolean onCreateOptionsMenu(final Menu menu) { - // signature menu - menu.add(0, MENU_SIGNATURE, 0, res.getString(R.string.init_signature)).setIcon(R.drawable.ic_menu_edit); + getMenuInflater().inflate(R.menu.abstract_logging_activity, menu); - // templates menu - final SubMenu menuLog = menu.addSubMenu(0, 0, 0, res.getString(R.string.log_add)).setIcon(R.drawable.ic_menu_add); + final SubMenu menuLog = menu.findItem(R.id.menu_templates).getSubMenu(); for (LogTemplate template : LogTemplateProvider.getTemplates()) { menuLog.add(0, template.getItemId(), 0, template.getResourceId()); } - menuLog.add(0, MENU_SIGNATURE, 0, res.getString(R.string.init_signature)); - // smilies - final SubMenu menuSmilies = menu.addSubMenu(0, MENU_SMILEY, 0, res.getString(R.string.log_smilies)).setIcon(R.drawable.ic_menu_emoticons); + final SubMenu menuSmilies = menu.findItem(R.id.menu_smilies).getSubMenu(); for (Smiley smiley : GCSmiliesProvider.getSmilies()) { menuSmilies.add(0, smiley.getItemId(), 0, smiley.text); } @@ -44,7 +38,7 @@ public abstract class AbstractLoggingActivity extends AbstractActivity { @Override public boolean onPrepareOptionsMenu(Menu menu) { final boolean signatureAvailable = StringUtils.isNotBlank(Settings.getSignature()); - menu.findItem(MENU_SIGNATURE).setVisible(signatureAvailable); + menu.findItem(R.id.menu_signature).setVisible(signatureAvailable); boolean smileyVisible = false; final Geocache cache = getLogContext().getCache(); @@ -56,7 +50,7 @@ public abstract class AbstractLoggingActivity extends AbstractActivity { smileyVisible = true; } - menu.findItem(MENU_SMILEY).setVisible(smileyVisible); + menu.findItem(R.id.menu_smilies).setVisible(smileyVisible); return true; } @@ -65,7 +59,7 @@ public abstract class AbstractLoggingActivity extends AbstractActivity { public boolean onOptionsItemSelected(MenuItem item) { final int id = item.getItemId(); - if (id == MENU_SIGNATURE) { + if (id == R.id.menu_signature) { insertIntoLog(LogTemplateProvider.applyTemplates(Settings.getSignature(), getLogContext()), true); return true; } diff --git a/main/src/cgeo/geocaching/AbstractPopupActivity.java b/main/src/cgeo/geocaching/AbstractPopupActivity.java index 4dd9fd1..73dc86d 100644 --- a/main/src/cgeo/geocaching/AbstractPopupActivity.java +++ b/main/src/cgeo/geocaching/AbstractPopupActivity.java @@ -2,7 +2,6 @@ package cgeo.geocaching; import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.activity.ActivityMixin; -import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; import cgeo.geocaching.enumerations.CacheSize; import cgeo.geocaching.enumerations.LoadFlags; import cgeo.geocaching.gcvote.GCVote; @@ -34,11 +33,6 @@ import android.widget.TextView; public abstract class AbstractPopupActivity extends AbstractActivity { - private static final int MENU_CACHES_AROUND = 5; - private static final int MENU_NAVIGATION = 3; - private static final int MENU_DEFAULT_NAVIGATION = 2; - private static final int MENU_SHOW_IN_BROWSER = 7; - protected Geocache cache = null; protected String geocode = null; protected CacheDetailsCreator details; @@ -76,9 +70,10 @@ public abstract class AbstractPopupActivity extends AbstractActivity { /** * Callback to run when new location information is available. - * This may be overriden by deriving classes. The default implementation does nothing. + * This may be overridden by deriving classes. The default implementation does nothing. * - * @param geo the new data + * @param geo + * the new data */ public void onUpdateGeoData(final IGeoData geo) { } @@ -164,12 +159,7 @@ public abstract class AbstractPopupActivity extends AbstractActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { - menu.add(0, MENU_DEFAULT_NAVIGATION, 0, NavigationAppFactory.getDefaultNavigationApplication().getName()).setIcon(R.drawable.ic_menu_compass); // default navigation tool - menu.add(0, MENU_NAVIGATION, 0, res.getString(R.string.cache_menu_navigate)).setIcon(R.drawable.ic_menu_mapmode); - LoggingUI.addMenuItems(menu, cache); - menu.add(0, MENU_CACHES_AROUND, 0, res.getString(R.string.cache_menu_around)).setIcon(R.drawable.ic_menu_rotate); // caches around - menu.add(0, MENU_SHOW_IN_BROWSER, 0, res.getString(R.string.cache_menu_browser)).setIcon(R.drawable.ic_menu_info_details); // browser - + getMenuInflater().inflate(R.menu.abstract_popup_activity, menu); return true; } @@ -178,16 +168,16 @@ public abstract class AbstractPopupActivity extends AbstractActivity { final int menuItem = item.getItemId(); switch (menuItem) { - case MENU_DEFAULT_NAVIGATION: + case R.id.menu_default_navigation: navigateTo(); return true; - case MENU_NAVIGATION: + case R.id.menu_navigate: showNavigationMenu(); return true; - case MENU_CACHES_AROUND: + case R.id.menu_caches_around: cachesAround(); return true; - case MENU_SHOW_IN_BROWSER: + case R.id.menu_show_in_browser: showInBrowser(); return true; default: @@ -211,11 +201,11 @@ public abstract class AbstractPopupActivity extends AbstractActivity { try { final boolean visible = getCoordinates() != null; - menu.findItem(MENU_DEFAULT_NAVIGATION).setVisible(visible); - menu.findItem(MENU_NAVIGATION).setVisible(visible); - menu.findItem(MENU_CACHES_AROUND).setVisible(visible); + menu.findItem(R.id.menu_default_navigation).setVisible(visible); + menu.findItem(R.id.menu_navigate).setVisible(visible); + menu.findItem(R.id.menu_caches_around).setVisible(visible); - LoggingUI.onPrepareOptionsMenu(menu); + LoggingUI.onPrepareOptionsMenu(menu, cache); } catch (Exception e) { // nothing } diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index b0bee55..9a25998 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -536,7 +536,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity coordinates = new ArrayList(); + private PowerManager pm = null; + private Geopoint dstCoords = null; + private float cacheHeading = 0; + private String title = null; + private String info = null; + private TextView navType = null; + private TextView navAccuracy = null; + private TextView navSatellites = null; + private TextView navLocation = null; + private TextView distanceView = null; + private TextView headingView = null; + private CompassView compassView = null; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState, R.layout.navigate); + + // get parameters + Bundle extras = getIntent().getExtras(); + if (extras != null) { + title = extras.getString(EXTRAS_GEOCODE); + final String name = extras.getString(EXTRAS_NAME); + dstCoords = extras.getParcelable(EXTRAS_COORDS); + info = extras.getString(EXTRAS_CACHE_INFO); + + if (StringUtils.isNotBlank(name)) { + if (StringUtils.isNotBlank(title)) { + title += ": " + name; + } else { + title = name; + } + } + } else { + Intent pointIntent = new Intent(this, NavigateAnyPointActivity.class); + startActivity(pointIntent); + + finish(); + return; + } + + // set header + setTitle(); + setDestCoords(); + setCacheInfo(); + + // get textviews once + compassView = (CompassView) findViewById(R.id.rose); + } + + @Override + public void onResume() { + super.onResume(); + + // sensor & geolocation manager + geoDirHandler.startGeoAndDir(); + + // keep backlight on + if (pm == null) { + pm = (PowerManager) getSystemService(Context.POWER_SERVICE); + } + } + + @Override + public void onPause() { + geoDirHandler.stopGeoAndDir(); + super.onPause(); + } + + @Override + public void onDestroy() { + compassView.destroyDrawingCache(); + super.onDestroy(); + } + + @Override + public boolean onCreateOptionsMenu(final Menu menu) { + getMenuInflater().inflate(R.menu.compass_activity_options, menu); + final SubMenu subMenu = menu.findItem(R.id.menu_select_destination).getSubMenu(); + if (coordinates.size() > 1) { + int cnt = 4; + for (final IWaypoint coordinate : coordinates) { + subMenu.add(0, cnt, 0, coordinate.getName() + " (" + coordinate.getCoordType() + ")"); + cnt++; + } + } + else { + menu.findItem(R.id.menu_select_destination).setVisible(false); + } + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + super.onPrepareOptionsMenu(menu); + menu.findItem(R.id.menu_switch_compass_gps).setTitle(res.getString(Settings.isUseCompass() ? R.string.use_gps : R.string.use_compass)); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + int id = item.getItemId(); + switch (id) { + case R.id.menu_map: + CGeoMap.startActivityCoords(this, dstCoords, null, null); + return true; + case R.id.menu_switch_compass_gps: + boolean oldSetting = Settings.isUseCompass(); + Settings.setUseCompass(!oldSetting); + invalidateOptionsMenuCompatible(); + if (oldSetting) { + geoDirHandler.stopDir(); + } else { + geoDirHandler.startDir(); + } + return true; + case R.id.menu_edit_destination: + Intent pointIntent = new Intent(this, NavigateAnyPointActivity.class); + startActivity(pointIntent); + + finish(); + return true; + default: + if (id > 3 && coordinates.get(id - 4) != null) { + final IWaypoint coordinate = coordinates.get(id - 4); + + title = coordinate.getName(); + dstCoords = coordinate.getCoords(); + setTitle(); + setDestCoords(); + setCacheInfo(); + updateDistanceInfo(app.currentGeo()); + + Log.d("destination set: " + title + " (" + dstCoords + ")"); + return true; + } + } + return false; + } + + private void setTitle() { + if (StringUtils.isNotBlank(title)) { + setTitle(title); + } else { + setTitle(res.getString(R.string.navigation)); + } + } + + private void setDestCoords() { + if (dstCoords == null) { + return; + } + + ((TextView) findViewById(R.id.destination)).setText(dstCoords.toString()); + } + + private void setCacheInfo() { + final TextView cacheInfoView = (TextView) findViewById(R.id.cacheinfo); + if (info == null) { + cacheInfoView.setVisibility(View.GONE); + return; + } + cacheInfoView.setVisibility(View.VISIBLE); + cacheInfoView.setText(info); + } + + private void updateDistanceInfo(final IGeoData geo) { + if (geo.getCoords() == null || dstCoords == null) { + return; + } + + if (distanceView == null) { + distanceView = (TextView) findViewById(R.id.distance); + } + if (headingView == null) { + headingView = (TextView) findViewById(R.id.heading); + } + + cacheHeading = geo.getCoords().bearingTo(dstCoords); + distanceView.setText(Units.getDistanceFromKilometers(geo.getCoords().distanceTo(dstCoords))); + headingView.setText(Math.round(cacheHeading) + "°"); + } + + private GeoDirHandler geoDirHandler = new GeoDirHandler() { + @Override + public void updateGeoData(final IGeoData geo) { + try { + if (navType == null || navLocation == null || navAccuracy == null) { + navType = (TextView) findViewById(R.id.nav_type); + navAccuracy = (TextView) findViewById(R.id.nav_accuracy); + navSatellites = (TextView) findViewById(R.id.nav_satellites); + navLocation = (TextView) findViewById(R.id.nav_location); + } + + if (geo.getCoords() != null) { + if (geo.getSatellitesVisible() >= 0) { + navSatellites.setText(res.getString(R.string.loc_sat) + ": " + geo.getSatellitesFixed() + "/" + geo.getSatellitesVisible()); + } + else { + navSatellites.setText(""); + } + navType.setText(res.getString(geo.getLocationProvider().resourceId)); + + if (geo.getAccuracy() >= 0) { + navAccuracy.setText("±" + Units.getDistanceFromMeters(geo.getAccuracy())); + } else { + navAccuracy.setText(null); + } + + if (geo.getAltitude() != 0.0f) { + final String humanAlt = Units.getDistanceFromMeters((float) geo.getAltitude()); + navLocation.setText(geo.getCoords() + " | " + humanAlt); + } else { + navLocation.setText(geo.getCoords().toString()); + } + + updateDistanceInfo(geo); + } else { + navType.setText(null); + navAccuracy.setText(null); + navLocation.setText(res.getString(R.string.loc_trying)); + } + + if (!Settings.isUseCompass() || geo.getSpeed() > 5) { // use GPS when speed is higher than 18 km/h + updateNorthHeading(geo.getBearing()); + } + } catch (Exception e) { + Log.w("Failed to LocationUpdater location."); + } + } + + @Override + public void updateDirection(final float direction) { + if (app.currentGeo().getSpeed() <= 5) { // use compass when speed is lower than 18 km/h + updateNorthHeading(DirectionProvider.getDirectionNow(CompassActivity.this, direction)); + } + } + }; + + private void updateNorthHeading(final float northHeading) { + if (compassView != null) { + compassView.updateNorth(northHeading, cacheHeading); + } + } + + public static void startActivity(final Context context, final String geocode, final String displayedName, final Geopoint coords, final Collection coordinatesWithType, + final String info) { + coordinates.clear(); + if (coordinatesWithType != null) { // avoid possible NPE + coordinates.addAll(coordinatesWithType); + } + + final Intent navigateIntent = new Intent(context, CompassActivity.class); + navigateIntent.putExtra(EXTRAS_COORDS, coords); + navigateIntent.putExtra(EXTRAS_GEOCODE, geocode); + if (null != displayedName) { + navigateIntent.putExtra(EXTRAS_NAME, displayedName); + } + navigateIntent.putExtra(EXTRAS_CACHE_INFO, info); + context.startActivity(navigateIntent); + } + + public static void startActivity(final Context context, final String geocode, final String displayedName, final Geopoint coords, final Collection coordinatesWithType) { + CompassActivity.startActivity(context, geocode, displayedName, coords, coordinatesWithType, null); + } + +} diff --git a/main/src/cgeo/geocaching/MainActivity.java b/main/src/cgeo/geocaching/MainActivity.java index cd573ba..9a8083f 100644 --- a/main/src/cgeo/geocaching/MainActivity.java +++ b/main/src/cgeo/geocaching/MainActivity.java @@ -33,7 +33,6 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.Menu; -import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; @@ -239,8 +238,7 @@ public class MainActivity extends AbstractActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.main_options, menu); + getMenuInflater().inflate(R.menu.main_activity_options, menu); return true; } diff --git a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java index 0770269..4e17caa 100644 --- a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java +++ b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java @@ -40,10 +40,6 @@ import android.widget.TextView; import java.util.List; public class NavigateAnyPointActivity extends AbstractActivity { - private static final int MENU_DEFAULT_NAVIGATION = 2; - private static final int MENU_NAVIGATE = 0; - private static final int MENU_CACHES_AROUND = 5; - private static final int MENU_CLEAR_HISTORY = 6; protected static class ViewHolder { @InjectView(R.id.simple_way_point_longitude) protected TextView longitude; @@ -320,14 +316,8 @@ public class NavigateAnyPointActivity extends AbstractActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { - menu.add(0, MENU_DEFAULT_NAVIGATION, 0, NavigationAppFactory.getDefaultNavigationApplication().getName()).setIcon(R.drawable.ic_menu_compass); // default navigation tool - - menu.add(0, MENU_NAVIGATE, 0, res.getString(R.string.cache_menu_navigate)).setIcon(R.drawable.ic_menu_mapmode); - - menu.add(0, MENU_CACHES_AROUND, 0, res.getString(R.string.cache_menu_around)).setIcon(R.drawable.ic_menu_rotate); // caches around - - menu.add(0, MENU_CLEAR_HISTORY, 0, res.getString(R.string.search_clear_history)).setIcon(R.drawable.ic_menu_delete); // clear history - + getMenuInflater().inflate(R.menu.navigate_any_point_activity_options, menu); + menu.findItem(R.id.menu_default_navigation).setTitle(NavigationAppFactory.getDefaultNavigationApplication().getName()); return true; } @@ -337,11 +327,11 @@ public class NavigateAnyPointActivity extends AbstractActivity { try { boolean visible = getDestination() != null; - menu.findItem(MENU_NAVIGATE).setVisible(visible); - menu.findItem(MENU_DEFAULT_NAVIGATION).setVisible(visible); - menu.findItem(MENU_CACHES_AROUND).setVisible(visible); + menu.findItem(R.id.menu_navigate).setVisible(visible); + menu.findItem(R.id.menu_default_navigation).setVisible(visible); + menu.findItem(R.id.menu_caches_around).setVisible(visible); - menu.findItem(MENU_CLEAR_HISTORY).setEnabled(!getHistoryOfSearchedLocations().isEmpty()); + menu.findItem(R.id.menu_clear_history).setEnabled(!getHistoryOfSearchedLocations().isEmpty()); } catch (Exception e) { // nothing } @@ -360,19 +350,19 @@ public class NavigateAnyPointActivity extends AbstractActivity { } switch (menuItem) { - case MENU_DEFAULT_NAVIGATION: + case R.id.menu_default_navigation: navigateTo(); return true; - case MENU_CACHES_AROUND: + case R.id.menu_caches_around: cachesAround(); return true; - case MENU_CLEAR_HISTORY: + case R.id.menu_clear_history: clearHistory(); return true; - case MENU_NAVIGATE: + case R.id.menu_navigate: NavigationAppFactory.showNavigationMenu(this, null, null, coords); return true; default: diff --git a/main/src/cgeo/geocaching/SearchActivity.java b/main/src/cgeo/geocaching/SearchActivity.java index 9c7e54e..73459e5 100644 --- a/main/src/cgeo/geocaching/SearchActivity.java +++ b/main/src/cgeo/geocaching/SearchActivity.java @@ -33,7 +33,6 @@ import java.util.Locale; public class SearchActivity extends AbstractActivity { - private static final int MENU_SEARCH_OWN_CACHES = 1; private EditText latEdit = null; private EditText lonEdit = null; @@ -409,13 +408,13 @@ public class SearchActivity extends AbstractActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { - menu.add(0, MENU_SEARCH_OWN_CACHES, 0, res.getString(R.string.search_own_caches)).setIcon(R.drawable.ic_menu_myplaces); + getMenuInflater().inflate(R.menu.search_activity_options, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { - if (item.getItemId() == MENU_SEARCH_OWN_CACHES) { + if (item.getItemId() == R.id.menu_search_own_caches) { findByOwnerFn(Settings.getUsername()); return true; } diff --git a/main/src/cgeo/geocaching/SettingsActivity.java b/main/src/cgeo/geocaching/SettingsActivity.java index bd99552..002293b 100644 --- a/main/src/cgeo/geocaching/SettingsActivity.java +++ b/main/src/cgeo/geocaching/SettingsActivity.java @@ -159,14 +159,13 @@ public class SettingsActivity extends AbstractActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { - menu.add(0, 0, 0, res.getString(R.string.init_clear)).setIcon(R.drawable.ic_menu_delete); - + getMenuInflater().inflate(R.menu.settings_activity_options, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { - if (item.getItemId() == 0) { + if (item.getItemId() == R.id.menu_clear) { ((EditText) findViewById(R.id.username)).setText(""); ((EditText) findViewById(R.id.password)).setText(""); ((EditText) findViewById(R.id.passvote)).setText(""); diff --git a/main/src/cgeo/geocaching/StaticMapsActivity.java b/main/src/cgeo/geocaching/StaticMapsActivity.java index 3b32067..a6a81d5 100644 --- a/main/src/cgeo/geocaching/StaticMapsActivity.java +++ b/main/src/cgeo/geocaching/StaticMapsActivity.java @@ -27,7 +27,6 @@ public class StaticMapsActivity extends AbstractActivity { private static final String EXTRAS_WAYPOINT = "waypoint"; private static final String EXTRAS_DOWNLOAD = "download"; private static final String EXTRAS_GEOCODE = "geocode"; - private static final int MENU_REFRESH = 1; private final List maps = new ArrayList(); private boolean download = false; private Integer waypoint_id = null; @@ -159,13 +158,13 @@ public class StaticMapsActivity extends AbstractActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { - menu.add(0, MENU_REFRESH, 0, res.getString(R.string.cache_offline_refresh)); + getMenuInflater().inflate(R.menu.static_maps_activity_options, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { - if (item.getItemId() == MENU_REFRESH) { + if (item.getItemId() == R.id.menu_refresh) { downloadStaticMaps(); restartActivity(); return true; diff --git a/main/src/cgeo/geocaching/TrackableActivity.java b/main/src/cgeo/geocaching/TrackableActivity.java index 9b3dbfc..41b8b24 100644 --- a/main/src/cgeo/geocaching/TrackableActivity.java +++ b/main/src/cgeo/geocaching/TrackableActivity.java @@ -56,8 +56,6 @@ public class TrackableActivity extends AbstractViewPagerActivity coordinates = new ArrayList(); - private static final int MENU_MAP = 0; - private static final int MENU_SWITCH_COMPASS_GPS = 1; - private PowerManager pm = null; - private Geopoint dstCoords = null; - private float cacheHeading = 0; - private String title = null; - private String info = null; - private TextView navType = null; - private TextView navAccuracy = null; - private TextView navSatellites = null; - private TextView navLocation = null; - private TextView distanceView = null; - private TextView headingView = null; - private CompassView compassView = null; - - public cgeonavigate() { - super(true); - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState, R.layout.navigate); - - // get parameters - Bundle extras = getIntent().getExtras(); - if (extras != null) { - title = extras.getString(EXTRAS_GEOCODE); - final String name = extras.getString(EXTRAS_NAME); - dstCoords = extras.getParcelable(EXTRAS_COORDS); - info = extras.getString(EXTRAS_CACHE_INFO); - - if (StringUtils.isNotBlank(name)) { - if (StringUtils.isNotBlank(title)) { - title += ": " + name; - } else { - title = name; - } - } - } else { - Intent pointIntent = new Intent(this, NavigateAnyPointActivity.class); - startActivity(pointIntent); - - finish(); - return; - } - - // set header - setTitle(); - setDestCoords(); - setCacheInfo(); - - // get textviews once - compassView = (CompassView) findViewById(R.id.rose); - } - - @Override - public void onResume() { - super.onResume(); - - // sensor & geolocation manager - geoDirHandler.startGeoAndDir(); - - // keep backlight on - if (pm == null) { - pm = (PowerManager) getSystemService(Context.POWER_SERVICE); - } - } - - @Override - public void onPause() { - geoDirHandler.stopGeoAndDir(); - super.onPause(); - } - - @Override - public void onDestroy() { - compassView.destroyDrawingCache(); - super.onDestroy(); - } - - @Override - public boolean onCreateOptionsMenu(final Menu menu) { - menu.add(0, MENU_SWITCH_COMPASS_GPS, 0, res.getString(Settings.isUseCompass() ? R.string.use_gps : R.string.use_compass)).setIcon(R.drawable.ic_menu_compass); - menu.add(0, MENU_MAP, 0, res.getString(R.string.caches_on_map)).setIcon(R.drawable.ic_menu_mapmode); - menu.add(0, 2, 0, res.getString(R.string.destination_set)).setIcon(R.drawable.ic_menu_edit); - if (coordinates.size() > 1) { - final SubMenu subMenu = menu.addSubMenu(0, 3, 0, res.getString(R.string.destination_select)).setIcon(R.drawable.ic_menu_myplaces); - int cnt = 4; - for (final IWaypoint coordinate : coordinates) { - subMenu.add(0, cnt, 0, coordinate.getName() + " (" + coordinate.getCoordType() + ")"); - cnt++; - } - } else { - menu.add(0, 3, 0, res.getString(R.string.destination_select)).setIcon(R.drawable.ic_menu_myplaces).setEnabled(false); - } - return true; - } - - @Override - public boolean onPrepareOptionsMenu(Menu menu) { - super.onPrepareOptionsMenu(menu); - menu.findItem(MENU_SWITCH_COMPASS_GPS).setTitle(res.getString(Settings.isUseCompass() ? R.string.use_gps : R.string.use_compass)); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - int id = item.getItemId(); - - if (id == MENU_MAP) { - CGeoMap.startActivityCoords(this, dstCoords, null, null); - } else if (id == MENU_SWITCH_COMPASS_GPS) { - boolean oldSetting = Settings.isUseCompass(); - Settings.setUseCompass(!oldSetting); - invalidateOptionsMenuCompatible(); - if (oldSetting) { - geoDirHandler.stopDir(); - } else { - geoDirHandler.startDir(); - } - } else if (id == 2) { - Intent pointIntent = new Intent(this, NavigateAnyPointActivity.class); - startActivity(pointIntent); - - finish(); - return true; - } else if (id > 3 && coordinates.get(id - 4) != null) { - final IWaypoint coordinate = coordinates.get(id - 4); - - title = coordinate.getName(); - dstCoords = coordinate.getCoords(); - setTitle(); - setDestCoords(); - setCacheInfo(); - updateDistanceInfo(app.currentGeo()); - - Log.d("destination set: " + title + " (" + dstCoords + ")"); - return true; - } - - return false; - } - - private void setTitle() { - if (StringUtils.isNotBlank(title)) { - setTitle(title); - } else { - setTitle(res.getString(R.string.navigation)); - } - } - - private void setDestCoords() { - if (dstCoords == null) { - return; - } - - ((TextView) findViewById(R.id.destination)).setText(dstCoords.toString()); - } - - private void setCacheInfo() { - final TextView cacheInfoView = (TextView) findViewById(R.id.cacheinfo); - if (info == null) { - cacheInfoView.setVisibility(View.GONE); - return; - } - cacheInfoView.setVisibility(View.VISIBLE); - cacheInfoView.setText(info); - } - - private void updateDistanceInfo(final IGeoData geo) { - if (geo.getCoords() == null || dstCoords == null) { - return; - } - - if (distanceView == null) { - distanceView = (TextView) findViewById(R.id.distance); - } - if (headingView == null) { - headingView = (TextView) findViewById(R.id.heading); - } - - cacheHeading = geo.getCoords().bearingTo(dstCoords); - distanceView.setText(Units.getDistanceFromKilometers(geo.getCoords().distanceTo(dstCoords))); - headingView.setText(Math.round(cacheHeading) + "°"); - } - - private GeoDirHandler geoDirHandler = new GeoDirHandler() { - @Override - public void updateGeoData(final IGeoData geo) { - try { - if (navType == null || navLocation == null || navAccuracy == null) { - navType = (TextView) findViewById(R.id.nav_type); - navAccuracy = (TextView) findViewById(R.id.nav_accuracy); - navSatellites = (TextView) findViewById(R.id.nav_satellites); - navLocation = (TextView) findViewById(R.id.nav_location); - } - - if (geo.getCoords() != null) { - if (geo.getSatellitesVisible() >= 0) { - navSatellites.setText(res.getString(R.string.loc_sat) + ": " + geo.getSatellitesFixed() + "/" + geo.getSatellitesVisible()); - } - else { - navSatellites.setText(""); - } - navType.setText(res.getString(geo.getLocationProvider().resourceId)); - - if (geo.getAccuracy() >= 0) { - navAccuracy.setText("±" + Units.getDistanceFromMeters(geo.getAccuracy())); - } else { - navAccuracy.setText(null); - } - - if (geo.getAltitude() != 0.0f) { - final String humanAlt = Units.getDistanceFromMeters((float) geo.getAltitude()); - navLocation.setText(geo.getCoords() + " | " + humanAlt); - } else { - navLocation.setText(geo.getCoords().toString()); - } - - updateDistanceInfo(geo); - } else { - navType.setText(null); - navAccuracy.setText(null); - navLocation.setText(res.getString(R.string.loc_trying)); - } - - if (!Settings.isUseCompass() || geo.getSpeed() > 5) { // use GPS when speed is higher than 18 km/h - updateNorthHeading(geo.getBearing()); - } - } catch (Exception e) { - Log.w("Failed to LocationUpdater location."); - } - } - - @Override - public void updateDirection(final float direction) { - if (app.currentGeo().getSpeed() <= 5) { // use compass when speed is lower than 18 km/h - updateNorthHeading(DirectionProvider.getDirectionNow(cgeonavigate.this, direction)); - } - } - }; - - private void updateNorthHeading(final float northHeading) { - if (compassView != null) { - compassView.updateNorth(northHeading, cacheHeading); - } - } - - public static void startActivity(final Context context, final String geocode, final String displayedName, final Geopoint coords, final Collection coordinatesWithType, - final String info) { - coordinates.clear(); - if (coordinatesWithType != null) { // avoid possible NPE - coordinates.addAll(coordinatesWithType); - } - - final Intent navigateIntent = new Intent(context, cgeonavigate.class); - navigateIntent.putExtra(EXTRAS_COORDS, coords); - navigateIntent.putExtra(EXTRAS_GEOCODE, geocode); - if (null != displayedName) { - navigateIntent.putExtra(EXTRAS_NAME, displayedName); - } - navigateIntent.putExtra(EXTRAS_CACHE_INFO, info); - context.startActivity(navigateIntent); - } - - public static void startActivity(final Context context, final String geocode, final String displayedName, final Geopoint coords, final Collection coordinatesWithType) { - cgeonavigate.startActivity(context, geocode, displayedName, coords, coordinatesWithType, null); - } - -} diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java index 436fcce..33dcfd4 100644 --- a/main/src/cgeo/geocaching/maps/CGeoMap.java +++ b/main/src/cgeo/geocaching/maps/CGeoMap.java @@ -116,21 +116,6 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto private static final String EXTRAS_MAP_MODE = "mapMode"; private static final String EXTRAS_LIVE_ENABLED = "liveEnabled"; - private static final int MENU_SELECT_MAPVIEW = 1; - private static final int MENU_MAP_LIVE = 2; - private static final int MENU_STORE_CACHES = 3; - private static final int SUBMENU_MODES = 4; - private static final int MENU_TRAIL_MODE = 81; - private static final int MENU_THEME_MODE = 82; - private static final int MENU_CIRCLE_MODE = 83; - private static final int SUBMENU_STRATEGY = 5; - private static final int MENU_STRATEGY_FASTEST = 51; - private static final int MENU_STRATEGY_FAST = 52; - private static final int MENU_STRATEGY_AUTO = 53; - private static final int MENU_STRATEGY_DETAILED = 74; - - private static final int MENU_AS_LIST = 7; - private static final String BUNDLE_MAP_SOURCE = "mapSource"; private static final String BUNDLE_MAP_STATE = "mapState"; private static final String BUNDLE_LIVE_ENABLED = "liveEnabled"; @@ -173,8 +158,6 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto private static final int[][] INSET_FOUND = { { 0, 0, 21, 28 }, { 0, 0, 25, 35 } }; // top left, 12x12 / 16x16 private static final int[][] INSET_USERMODIFIEDCOORDS = { { 21, 28, 0, 0 }, { 19, 25, 0, 0 } }; // bottom right, 12x12 / 26x26 private static final int[][] INSET_PERSONALNOTE = { { 0, 28, 21, 0 }, { 0, 25, 19, 0 } }; // bottom left, 12x12 / 26x26 - private static final int MENU_GROUP_MAP_SOURCES = 1; - private static final int MENU_GROUP_MAP_STRATEGY = 2; private SparseArray overlaysCache = new SparseArray(); /** Count of caches currently visible */ @@ -541,36 +524,15 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto @Override public boolean onCreateOptionsMenu(Menu menu) { + // menu inflation happens in Google/Mapsforge specific classes - SubMenu submenu = menu.addSubMenu(0, MENU_SELECT_MAPVIEW, 0, res.getString(R.string.map_view_map)).setIcon(R.drawable.ic_menu_mapmode); - addMapViewMenuItems(submenu); - - menu.add(0, MENU_MAP_LIVE, 0, res.getString(R.string.map_live_disable)).setIcon(R.drawable.ic_menu_refresh); - menu.add(0, MENU_STORE_CACHES, 0, res.getString(R.string.caches_store_offline)).setIcon(R.drawable.ic_menu_set_as).setEnabled(false); - SubMenu subMenuModes = menu.addSubMenu(0, SUBMENU_MODES, 0, res.getString(R.string.map_modes)).setIcon(R.drawable.ic_menu_mark); - subMenuModes.add(0, MENU_TRAIL_MODE, 0, res.getString(R.string.map_trail_hide)).setIcon(R.drawable.ic_menu_trail); - subMenuModes.add(0, MENU_CIRCLE_MODE, 0, res.getString(R.string.map_circles_hide)).setIcon(R.drawable.ic_menu_circle); - subMenuModes.add(0, MENU_THEME_MODE, 0, res.getString(R.string.map_theme_select)).setIcon(R.drawable.ic_menu_preferences); + MapProviderFactory.addMapviewMenuItems(menu); - Strategy strategy = Settings.getLiveMapStrategy(); - SubMenu subMenuStrategy = menu.addSubMenu(0, SUBMENU_STRATEGY, 0, res.getString(R.string.map_strategy)).setIcon(R.drawable.ic_menu_preferences); + final SubMenu subMenuStrategy = menu.findItem(R.id.submenu_strategy).getSubMenu(); subMenuStrategy.setHeaderTitle(res.getString(R.string.map_strategy_title)); - subMenuStrategy.add(MENU_GROUP_MAP_STRATEGY, MENU_STRATEGY_FASTEST, 0, Strategy.FASTEST.getL10n()).setCheckable(true).setChecked(strategy == Strategy.FASTEST); - subMenuStrategy.add(MENU_GROUP_MAP_STRATEGY, MENU_STRATEGY_FAST, 0, Strategy.FAST.getL10n()).setCheckable(true).setChecked(strategy == Strategy.FAST); - subMenuStrategy.add(MENU_GROUP_MAP_STRATEGY, MENU_STRATEGY_AUTO, 0, Strategy.AUTO.getL10n()).setCheckable(true).setChecked(strategy == Strategy.AUTO); - subMenuStrategy.add(MENU_GROUP_MAP_STRATEGY, MENU_STRATEGY_DETAILED, 0, Strategy.DETAILED.getL10n()).setCheckable(true).setChecked(strategy == Strategy.DETAILED); - subMenuStrategy.setGroupCheckable(MENU_GROUP_MAP_STRATEGY, true, true); - - menu.add(0, MENU_AS_LIST, 0, res.getString(R.string.map_as_list)).setIcon(R.drawable.ic_menu_agenda); - return true; } - private static void addMapViewMenuItems(final Menu menu) { - MapProviderFactory.addMapviewMenuItems(menu, MENU_GROUP_MAP_SOURCES); - menu.setGroupCheckable(MENU_GROUP_MAP_SOURCES, true, true); - } - @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); @@ -582,14 +544,14 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto } try { - MenuItem item = menu.findItem(MENU_TRAIL_MODE); + MenuItem item = menu.findItem(R.id.menu_trail_mode); if (Settings.isMapTrail()) { item.setTitle(res.getString(R.string.map_trail_hide)); } else { item.setTitle(res.getString(R.string.map_trail_show)); } - item = menu.findItem(MENU_MAP_LIVE); // live map + item = menu.findItem(R.id.menu_map_live); // live map if (isLiveEnabled) { item.setTitle(res.getString(R.string.map_live_disable)); } else { @@ -597,21 +559,27 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto } final Set geocodesInViewport = getGeocodesForCachesInViewport(); - menu.findItem(MENU_STORE_CACHES).setEnabled(!isLoading() && CollectionUtils.isNotEmpty(geocodesInViewport) && new SearchResult(geocodesInViewport).hasUnsavedCaches()); + menu.findItem(R.id.menu_store_caches).setEnabled(!isLoading() && CollectionUtils.isNotEmpty(geocodesInViewport) && new SearchResult(geocodesInViewport).hasUnsavedCaches()); - item = menu.findItem(MENU_CIRCLE_MODE); // show circles + item = menu.findItem(R.id.menu_circle_mode); // show circles if (overlayCaches != null && overlayCaches.getCircles()) { item.setTitle(res.getString(R.string.map_circles_hide)); } else { item.setTitle(res.getString(R.string.map_circles_show)); } - item = menu.findItem(MENU_THEME_MODE); // show theme selection + item = menu.findItem(R.id.menu_theme_mode); // show theme selection item.setVisible(mapView.hasMapThemes()); - menu.findItem(MENU_AS_LIST).setEnabled(isLiveEnabled && !isLoading()); + menu.findItem(R.id.menu_as_list).setEnabled(isLiveEnabled && !isLoading()); + + menu.findItem(R.id.submenu_strategy).setEnabled(isLiveEnabled); - menu.findItem(SUBMENU_STRATEGY).setEnabled(isLiveEnabled); + Strategy strategy = Settings.getLiveMapStrategy(); + menu.findItem(R.id.menu_strategy_fastest).setChecked(strategy == Strategy.FASTEST); + menu.findItem(R.id.menu_strategy_fast).setChecked(strategy == Strategy.FAST); + menu.findItem(R.id.menu_strategy_auto).setChecked(strategy == Strategy.AUTO); + menu.findItem(R.id.menu_strategy_detailed).setChecked(strategy == Strategy.DETAILED); } catch (Exception e) { Log.e("cgeomap.onPrepareOptionsMenu", e); } @@ -623,12 +591,12 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto public boolean onOptionsItemSelected(MenuItem item) { final int id = item.getItemId(); switch (id) { - case MENU_TRAIL_MODE: + case R.id.menu_trail_mode: Settings.setMapTrail(!Settings.isMapTrail()); mapView.repaintRequired(overlayPosition); ActivityMixin.invalidateOptionsMenu(activity); return true; - case MENU_MAP_LIVE: + case R.id.menu_map_live: isLiveEnabled = !isLiveEnabled; if (mapMode == MapMode.LIVE) { Settings.setLiveMap(isLiveEnabled); @@ -638,7 +606,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto searchIntent = null; ActivityMixin.invalidateOptionsMenu(activity); return true; - case MENU_STORE_CACHES: + case R.id.menu_store_caches: if (!isLoading()) { final Set geocodesInViewport = getGeocodesForCachesInViewport(); final List geocodes = new ArrayList(); @@ -672,7 +640,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto } } return true; - case MENU_CIRCLE_MODE: + case R.id.menu_circle_mode: if (overlayCaches == null) { return false; } @@ -681,29 +649,29 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto mapView.repaintRequired(overlayCaches); ActivityMixin.invalidateOptionsMenu(activity); return true; - case MENU_THEME_MODE: + case R.id.menu_theme_mode: selectMapTheme(); return true; - case MENU_AS_LIST: { + case R.id.menu_as_list: { cgeocaches.startActivityMap(activity, new SearchResult(getGeocodesForCachesInViewport())); return true; } - case MENU_STRATEGY_FASTEST: { + case R.id.menu_strategy_fastest: { item.setChecked(true); Settings.setLiveMapStrategy(Strategy.FASTEST); return true; } - case MENU_STRATEGY_FAST: { + case R.id.menu_strategy_fast: { item.setChecked(true); Settings.setLiveMapStrategy(Strategy.FAST); return true; } - case MENU_STRATEGY_AUTO: { + case R.id.menu_strategy_auto: { item.setChecked(true); Settings.setLiveMapStrategy(Strategy.AUTO); return true; } - case MENU_STRATEGY_DETAILED: { + case R.id.menu_strategy_detailed: { item.setChecked(true); Settings.setLiveMapStrategy(Strategy.DETAILED); return true; diff --git a/main/src/cgeo/geocaching/maps/MapProviderFactory.java b/main/src/cgeo/geocaching/maps/MapProviderFactory.java index 483189f..d1b5c3b 100644 --- a/main/src/cgeo/geocaching/maps/MapProviderFactory.java +++ b/main/src/cgeo/geocaching/maps/MapProviderFactory.java @@ -1,5 +1,6 @@ package cgeo.geocaching.maps; +import cgeo.geocaching.R; import cgeo.geocaching.Settings; import cgeo.geocaching.maps.google.GoogleMapProvider; import cgeo.geocaching.maps.interfaces.MapProvider; @@ -7,6 +8,7 @@ import cgeo.geocaching.maps.interfaces.MapSource; import cgeo.geocaching.maps.mapsforge.MapsforgeMapProvider; import android.view.Menu; +import android.view.SubMenu; import java.util.ArrayList; import java.util.List; @@ -43,12 +45,14 @@ public class MapProviderFactory { return provider1 == provider2 && provider1.isSameActivity(source1, source2); } - public static void addMapviewMenuItems(final Menu parentMenu, final int groupId) { + public static void addMapviewMenuItems(Menu menu) { + final SubMenu parentMenu = menu.findItem(R.id.menu_select_mapview).getSubMenu(); + final int currentSource = Settings.getMapSource().getNumericalId(); for (int i = 0; i < mapSources.size(); i++) { final MapSource mapSource = mapSources.get(i); final int id = mapSource.getNumericalId(); - parentMenu.add(groupId, id, i, mapSource.getName()).setCheckable(true).setChecked(id == currentSource); + parentMenu.add(R.id.menu_group_map_sources, id, i, mapSource.getName()).setCheckable(true).setChecked(id == currentSource); } } diff --git a/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java b/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java index a98241f..dcff363 100644 --- a/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java +++ b/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java @@ -1,5 +1,6 @@ package cgeo.geocaching.maps.google; +import cgeo.geocaching.R; import cgeo.geocaching.activity.FilteredActivity; import cgeo.geocaching.maps.AbstractMap; import cgeo.geocaching.maps.CGeoMap; @@ -83,7 +84,9 @@ public class GoogleMapActivity extends MapActivity implements MapActivityImpl, F @Override public boolean superOnCreateOptionsMenu(Menu menu) { - return super.onCreateOptionsMenu(menu); + final boolean result = super.onCreateOptionsMenu(menu); + getMenuInflater().inflate(R.menu.map_activity, menu); + return result; } @Override diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapActivity.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapActivity.java index a0384b8..232fe3c 100644 --- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapActivity.java +++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapActivity.java @@ -1,5 +1,6 @@ package cgeo.geocaching.maps.mapsforge; +import cgeo.geocaching.R; import cgeo.geocaching.activity.FilteredActivity; import cgeo.geocaching.maps.AbstractMap; import cgeo.geocaching.maps.CGeoMap; @@ -78,7 +79,9 @@ public class MapsforgeMapActivity extends MapActivity implements MapActivityImpl @Override public boolean superOnCreateOptionsMenu(Menu menu) { - return super.onCreateOptionsMenu(menu); + final boolean result = super.onCreateOptionsMenu(menu); + getMenuInflater().inflate(R.menu.map_activity, menu); + return result; } @Override diff --git a/main/src/cgeo/geocaching/ui/LoggingUI.java b/main/src/cgeo/geocaching/ui/LoggingUI.java index 2615947..1ba15a2 100644 --- a/main/src/cgeo/geocaching/ui/LoggingUI.java +++ b/main/src/cgeo/geocaching/ui/LoggingUI.java @@ -61,31 +61,12 @@ public class LoggingUI extends AbstractUIFactory { } } - private static final int MENU_ICON_LOG_VISIT = R.drawable.ic_menu_edit; - private static final int MENU_LOG_VISIT = 100; - private static final int MENU_LOG_VISIT_OFFLINE = 101; - - public static void addMenuItems(final Menu menu, final Geocache cache) { - if (cache == null) { - return; - } - if (!cache.supportsLogging()) { - return; - } - if (Settings.getLogOffline()) { - menu.add(0, MENU_LOG_VISIT_OFFLINE, 0, res.getString(R.string.cache_menu_visit_offline)).setIcon(MENU_ICON_LOG_VISIT); - } - else { - menu.add(0, MENU_LOG_VISIT, 0, res.getString(R.string.cache_menu_visit)).setIcon(MENU_ICON_LOG_VISIT); - } - } - public static boolean onMenuItemSelected(final MenuItem item, IAbstractActivity activity, Geocache cache) { switch (item.getItemId()) { - case MENU_LOG_VISIT: + case R.id.menu_log_visit: cache.logVisit(activity); return true; - case MENU_LOG_VISIT_OFFLINE: + case R.id.menu_log_visit_offline: showOfflineMenu(cache, (Activity) activity); return true; default: @@ -136,10 +117,17 @@ public class LoggingUI extends AbstractUIFactory { } - public static void onPrepareOptionsMenu(Menu menu) { - final MenuItem item = menu.findItem(MENU_LOG_VISIT); - if (item != null) { - item.setEnabled(Settings.isLogin()); - } + public static void onPrepareOptionsMenu(Menu menu, Geocache cache) { + final MenuItem itemLog = menu.findItem(R.id.menu_log_visit); + itemLog.setVisible(cache.supportsLogging() && !Settings.getLogOffline()); + itemLog.setEnabled(Settings.isLogin()); + + final MenuItem itemOffline = menu.findItem(R.id.menu_log_visit_offline); + itemOffline.setVisible(cache.supportsLogging() && Settings.getLogOffline()); + } + + public static void addMenuItems(Activity activity, Menu menu, Geocache cache) { + activity.getMenuInflater().inflate(R.menu.logging_ui, menu); + onPrepareOptionsMenu(menu, cache); } } -- cgit v1.1