aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/CompassActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/CompassActivity.java')
-rw-r--r--main/src/cgeo/geocaching/CompassActivity.java42
1 files changed, 33 insertions, 9 deletions
diff --git a/main/src/cgeo/geocaching/CompassActivity.java b/main/src/cgeo/geocaching/CompassActivity.java
index 002f00e..8955afd 100644
--- a/main/src/cgeo/geocaching/CompassActivity.java
+++ b/main/src/cgeo/geocaching/CompassActivity.java
@@ -1,19 +1,23 @@
package cgeo.geocaching;
+import butterknife.ButterKnife;
import butterknife.InjectView;
-import butterknife.Views;
import cgeo.geocaching.activity.AbstractActivity;
+import cgeo.geocaching.enumerations.LoadFlags;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Units;
import cgeo.geocaching.maps.CGeoMap;
import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.speech.SpeechService;
import cgeo.geocaching.ui.CompassView;
+import cgeo.geocaching.ui.Formatter;
+import cgeo.geocaching.ui.LoggingUI;
import cgeo.geocaching.utils.GeoDirHandler;
import cgeo.geocaching.utils.Log;
import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jdt.annotation.Nullable;
import android.content.Context;
import android.content.Intent;
@@ -34,6 +38,8 @@ import java.util.List;
public class CompassActivity extends AbstractActivity {
+ 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;
@@ -49,8 +55,11 @@ public class CompassActivity extends AbstractActivity {
private static final String EXTRAS_GEOCODE = "geocode";
private static final String EXTRAS_CACHE_INFO = "cacheinfo";
private static final List<IWaypoint> coordinates = new ArrayList<IWaypoint>();
- private static final int COORDINATES_OFFSET = 10;
- private static final int REQUEST_TTS_DATA_CHECK = 1;
+
+ /**
+ * Destination of the compass, or null (if the compass is used for a waypoint only).
+ */
+ private @Nullable Geocache cache = null;
private Geopoint dstCoords = null;
private float cacheHeading = 0;
private String title = null;
@@ -70,7 +79,11 @@ public class CompassActivity extends AbstractActivity {
// get parameters
Bundle extras = getIntent().getExtras();
if (extras != null) {
- title = extras.getString(EXTRAS_GEOCODE);
+ final String geocode = extras.getString(EXTRAS_GEOCODE);
+ if (StringUtils.isNotEmpty(geocode)) {
+ cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
+ }
+ title = geocode;
final String name = extras.getString(EXTRAS_NAME);
dstCoords = extras.getParcelable(EXTRAS_COORDS);
info = extras.getString(EXTRAS_CACHE_INFO);
@@ -95,7 +108,7 @@ public class CompassActivity extends AbstractActivity {
setDestCoords();
setCacheInfo();
- Views.inject(this);
+ ButterKnife.inject(this);
// make sure we can control the TTS volume
setVolumeControlStream(AudioManager.STREAM_MUSIC);
@@ -105,7 +118,7 @@ public class CompassActivity extends AbstractActivity {
public void onResume() {
super.onResume();
- // sensor & geolocation manager
+ // sensor and geolocation manager
geoDirHandler.startGeoAndDir();
}
@@ -127,14 +140,14 @@ public class CompassActivity extends AbstractActivity {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.compass_activity);
- Views.inject(this);
+ ButterKnife.inject(this);
setTitle();
setDestCoords();
setCacheInfo();
// Force a refresh of location and direction when data is available.
- final cgeoapplication app = cgeoapplication.getInstance();
+ final CgeoApplication app = CgeoApplication.getInstance();
final IGeoData geo = app.currentGeo();
if (geo != null) {
geoDirHandler.update(geo);
@@ -158,6 +171,9 @@ public class CompassActivity extends AbstractActivity {
} else {
menu.findItem(R.id.menu_select_destination).setVisible(false);
}
+ if (cache != null) {
+ LoggingUI.addMenuItems(this, menu, cache);
+ }
return true;
}
@@ -200,6 +216,9 @@ public class CompassActivity extends AbstractActivity {
SpeechService.stopService(this);
return true;
default:
+ if (LoggingUI.onMenuItemSelected(item, this, cache)) {
+ return true;
+ }
int coordinatesIndex = id - COORDINATES_OFFSET;
if (coordinatesIndex >= 0 && coordinatesIndex < coordinates.size()) {
final IWaypoint coordinate = coordinates.get(coordinatesIndex);
@@ -282,7 +301,7 @@ public class CompassActivity extends AbstractActivity {
if (!Settings.isUseCompass() || geo.getSpeed() > 5) { // use GPS when speed is higher than 18 km/h
updateNorthHeading(geo.getBearing());
}
- } catch (Exception e) {
+ } catch (RuntimeException e) {
Log.w("Failed to LocationUpdater location.");
}
}
@@ -326,4 +345,9 @@ public class CompassActivity extends AbstractActivity {
CompassActivity.startActivity(context, geocode, displayedName, coords, coordinatesWithType, null);
}
+ public static void startActivity(final Context context, final Geocache cache) {
+ startActivity(context, cache.getGeocode(), cache.getName(), cache.getCoords(), null,
+ Formatter.formatCacheInfoShort(cache));
+ }
+
}