diff --git a/mobile/com.sap.sailing.android.tracking.app/res/layout/fragment_compass.xml b/mobile/com.sap.sailing.android.tracking.app/res/layout/fragment_compass.xml
index ba1eef0cbc5..64f477fd27a 100644
--- a/mobile/com.sap.sailing.android.tracking.app/res/layout/fragment_compass.xml
+++ b/mobile/com.sap.sailing.android.tracking.app/res/layout/fragment_compass.xml
@@ -13,7 +13,7 @@
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:layout_alignParentTop="true"
- android:text="@string/heading"
+ android:text="@string/course_over_ground"
android:textColor="@android:color/darker_gray"
android:textSize="15sp"
android:paddingTop="15dp"
diff --git a/mobile/com.sap.sailing.android.tracking.app/res/values-de/preferences.xml b/mobile/com.sap.sailing.android.tracking.app/res/values-de/preferences.xml
index a47fc39a1ba..2c0456964b2 100644
--- a/mobile/com.sap.sailing.android.tracking.app/res/values-de/preferences.xml
+++ b/mobile/com.sap.sailing.android.tracking.app/res/values-de/preferences.xml
@@ -7,9 +7,9 @@
Aus
GPS Updates werden alle 30 Sekunden verschickt.
GPS Updates werden alle 3 Sekunden verschickt.
- magn.
- GPS
- Richtung stammt vom Magnetkompass
- Richtung stammt vom GPS
- Richtung
-
+ Ein
+ Aus
+ Anzeige: Magnetkompasskurs + Ablenkung
+ Anzeige: Magnetkompasskurs
+ Richtung
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.android.tracking.app/res/values-de/strings.xml b/mobile/com.sap.sailing.android.tracking.app/res/values-de/strings.xml
index bcfdd3817ef..8af30378dce 100644
--- a/mobile/com.sap.sailing.android.tracking.app/res/values-de/strings.xml
+++ b/mobile/com.sap.sailing.android.tracking.app/res/values-de/strings.xml
@@ -80,6 +80,7 @@
HDG:
SPD:
Kurs
+ Course over Ground
SOG
Keine
Leaderboard
diff --git a/mobile/com.sap.sailing.android.tracking.app/res/values/preferences.xml b/mobile/com.sap.sailing.android.tracking.app/res/values/preferences.xml
index 3b678c1115e..f5b29f51398 100644
--- a/mobile/com.sap.sailing.android.tracking.app/res/values/preferences.xml
+++ b/mobile/com.sap.sailing.android.tracking.app/res/values/preferences.xml
@@ -10,7 +10,7 @@
http://95.85.58.11:8000
preferenceEnergySavingEnabled
- preferenceHeadingFromMagneticKey
+ preferenceHeadingWithDeclination
Battery Saving
Save Energy
@@ -29,9 +29,9 @@
trackerIsTrackingCheckinDigest
lastScannedQRCode
- magn.
- GPS
- Heading from magnetic compass
- Heading from GPS
- Heading
+ On
+ Off
+ Display: Magnetic + Declination
+ Display: Magnetic
+ Heading
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.android.tracking.app/res/values/strings.xml b/mobile/com.sap.sailing.android.tracking.app/res/values/strings.xml
index 0aa9fdea38a..3ebe1807c6a 100644
--- a/mobile/com.sap.sailing.android.tracking.app/res/values/strings.xml
+++ b/mobile/com.sap.sailing.android.tracking.app/res/values/strings.xml
@@ -68,6 +68,7 @@
Tracking:
The regatta is in progress.
Heading
+ Course over Ground
Speed over Ground
None
Leader board
diff --git a/mobile/com.sap.sailing.android.tracking.app/res/xml/preference_general.xml b/mobile/com.sap.sailing.android.tracking.app/res/xml/preference_general.xml
index ea1010d870d..ae0035b8b42 100644
--- a/mobile/com.sap.sailing.android.tracking.app/res/xml/preference_general.xml
+++ b/mobile/com.sap.sailing.android.tracking.app/res/xml/preference_general.xml
@@ -23,12 +23,12 @@
+ android:key="@string/preference_heading_with_declination"
+ android:switchTextOn="@string/preference_heading_with_declination_key_is_enabled"
+ android:switchTextOff="@string/preference_heading_with_declination_key_is_disabled"
+ android:summaryOn="@string/preference_heading_with_declination_key_summary_is_enabled"
+ android:summaryOff="@string/preference_heading_with_declination_key_summary_is_disabled"
+ android:title="@string/preference_heading_with_declination_enabled" />
diff --git a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/sensors/CompassManager.java b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/sensors/CompassManager.java
deleted file mode 100644
index 2186a7140fc..00000000000
--- a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/sensors/CompassManager.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.sap.sailing.android.tracking.app.sensors;
-
-import android.content.Context;
-import android.hardware.Sensor;
-import android.hardware.SensorEvent;
-import android.hardware.SensorEventListener;
-import android.hardware.SensorManager;
-
-public class CompassManager implements SensorEventListener {
- //private final static String TAG = CompassManager.class.getName();
-
- private static CompassManager mInstance;
- private Context mContext;
-
- private SensorManager sensorManager;
- private Sensor gsensor;
- private Sensor msensor;
- private float[] mGravity = new float[3];
- private float[] mGeomagnetic = new float[3];
- private float azimuth = 0f;
-
- private MagneticHeadingListener listener;
-
- public static synchronized CompassManager getInstance(Context context) {
- if (mInstance == null) {
- mInstance = new CompassManager(context);
- }
- return mInstance;
- }
-
- private CompassManager(Context context) {
- mContext = context;
- sensorManager = (SensorManager) mContext
- .getSystemService(Context.SENSOR_SERVICE);
- gsensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
- msensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
- }
-
- public void registerListener(MagneticHeadingListener listener)
- {
- this.listener = listener;
- start();
- }
-
- public void unregisterListener()
- {
- stop();
- this.listener = null;
- }
-
- public void start() {
- sensorManager.registerListener(this, gsensor, SensorManager.SENSOR_DELAY_GAME);
- sensorManager.registerListener(this, msensor, SensorManager.SENSOR_DELAY_GAME);
- }
-
- public void stop() {
- sensorManager.unregisterListener(this);
- }
-
- @Override
- public void onSensorChanged(SensorEvent event) {
- final float alpha = 0.97f;
-
- if (listener == null) {
- return;
- }
- synchronized (this) {
- if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
- mGravity[0] = alpha * mGravity[0] + (1 - alpha) * event.values[0];
- mGravity[1] = alpha * mGravity[1] + (1 - alpha) * event.values[1];
- mGravity[2] = alpha * mGravity[2] + (1 - alpha) * event.values[2];
- }
-
- if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
- mGeomagnetic[0] = alpha * mGeomagnetic[0] + (1 - alpha) * event.values[0];
- mGeomagnetic[1] = alpha * mGeomagnetic[1] + (1 - alpha) * event.values[1];
- mGeomagnetic[2] = alpha * mGeomagnetic[2] + (1 - alpha) * event.values[2];
- }
-
- float R[] = new float[9];
- float I[] = new float[9];
-
- boolean success = SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic);
- if (success) {
- float orientation[] = new float[3];
- SensorManager.getOrientation(R, orientation);
- azimuth = (float) Math.toDegrees(orientation[0]); // orientation
- azimuth = (azimuth + 360) % 360;
- listener.magneticHeadingUpdated(azimuth);
- }
- }
- }
-
- @Override
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- // TODO Auto-generated method stub
- }
-
- public interface MagneticHeadingListener {
- public void magneticHeadingUpdated(float heading);
- }
-}
diff --git a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TrackingService.java b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TrackingService.java
index 1edab0da3d6..30c5809db52 100644
--- a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TrackingService.java
+++ b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TrackingService.java
@@ -12,6 +12,7 @@ import android.app.NotificationManager;
import android.app.Service;
import android.content.Intent;
import android.content.IntentFilter;
+import android.hardware.GeomagneticField;
import android.location.Location;
import android.os.BatteryManager;
import android.os.Binder;
@@ -157,7 +158,14 @@ public class TrackingService extends Service implements ConnectionCallbacks,
ExLog.i(this, TAG, "LocationClient was disconnected");
}
- public void reportGPSQualityBearingAndSpeed(float gpsAccurracy, float bearing, float speed) {
+ public void reportGPSQualityBearingAndSpeed(float gpsAccurracy, float bearing, float speed, double latitude, double longitude, double altitude) {
+
+ if (prefs.getDisplayHeadingWithDeclination())
+ {
+ GeomagneticField geomagneticField = new GeomagneticField((float)latitude, (float)longitude, (float)altitude, System.currentTimeMillis());
+ bearing = bearing + geomagneticField.getDeclination();
+ }
+
GPSQuality quality = GPSQuality.noSignal;
if (gpsQualityListener != null) {
if (gpsAccurracy > 48) {
@@ -176,7 +184,9 @@ public class TrackingService extends Service implements ConnectionCallbacks,
@Override
public void onLocationChanged(Location location) {
updateResendIntervalSetting();
- reportGPSQualityBearingAndSpeed(location.getAccuracy(), location.getBearing(), location.getSpeed());
+ reportGPSQualityBearingAndSpeed(location.getAccuracy(), location.getBearing(),
+ location.getSpeed(), location.getLatitude(), location.getLongitude(),
+ location.getAltitude());
JSONObject json = new JSONObject();
try {
diff --git a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/activities/TrackingActivity.java b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/activities/TrackingActivity.java
index 835e9989281..3d4daa64d09 100644
--- a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/activities/TrackingActivity.java
+++ b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/activities/TrackingActivity.java
@@ -24,8 +24,6 @@ import com.sap.sailing.android.shared.services.sending.MessageSendingService.API
import com.sap.sailing.android.shared.services.sending.MessageSendingService.MessageSendingBinder;
import com.sap.sailing.android.tracking.app.BuildConfig;
import com.sap.sailing.android.tracking.app.R;
-import com.sap.sailing.android.tracking.app.sensors.CompassManager;
-import com.sap.sailing.android.tracking.app.sensors.CompassManager.MagneticHeadingListener;
import com.sap.sailing.android.tracking.app.services.TrackingService;
import com.sap.sailing.android.tracking.app.services.TrackingService.GPSQuality;
import com.sap.sailing.android.tracking.app.services.TrackingService.GPSQualityListener;
@@ -41,7 +39,7 @@ import com.sap.sailing.android.tracking.app.valueobjects.EventInfo;
import com.viewpagerindicator.CirclePageIndicator;
public class TrackingActivity extends BaseActivity implements GPSQualityListener,
- APIConnectivityListener, MagneticHeadingListener {
+ APIConnectivityListener {
TrackingService trackingService;
boolean trackingServiceBound;
@@ -202,7 +200,6 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
@Override
protected void onPause() {
super.onPause();
- CompassManager.getInstance(this).unregisterListener();
timer.stop();
mPager = (ViewPager) findViewById(R.id.pager);
@@ -213,10 +210,6 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
protected void onResume() {
super.onResume();
- if (prefs.getHeadingFromMagneticSensorPreferred()) {
- CompassManager.getInstance(this).registerListener(this);
- }
-
timer = new TimerRunnable();
timer.start();
@@ -317,28 +310,6 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
trackingServiceBound = false;
}
};
-
- @Override
- public void magneticHeadingUpdated(float heading) {
- if (prefs.getHeadingFromMagneticSensorPreferred()) {
- if (mPager.getCurrentItem() == ScreenSlidePagerAdapter.VIEW_PAGER_FRAGMENT_COMPASS) {
-
- ScreenSlidePagerAdapter viewPagerAdapter = getViewPagerAdapter();
- if (viewPagerAdapter != null) {
- CompassFragment compassFragment = viewPagerAdapter.getCompassFragment();
- if (compassFragment != null && compassFragment.isAdded()) {
- compassFragment.setBearing(heading);
- }
- }
- }
- } else {
- if (BuildConfig.DEBUG) {
- ExLog.i(this, TAG,
- "Received magnet compass update, even though prefs say get from GPS. Unregistering listener.");
- }
- CompassManager.getInstance(this).unregisterListener();
- }
- }
private ScreenSlidePagerAdapter getViewPagerAdapter() {
return (ScreenSlidePagerAdapter) mPager.getAdapter();
diff --git a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/utils/AppPreferences.java b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/utils/AppPreferences.java
index ade6f5b7bcc..728c2a69324 100644
--- a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/utils/AppPreferences.java
+++ b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/utils/AppPreferences.java
@@ -96,8 +96,8 @@ public class AppPreferences {
return preferences.getBoolean(context.getString(R.string.preference_energy_saving_enabled_key), false);
}
- public boolean getHeadingFromMagneticSensorPreferred() {
- return preferences.getBoolean(context.getString(R.string.preference_heading_from_magnetic_key), true);
+ public boolean getDisplayHeadingWithDeclination() {
+ return preferences.getBoolean(context.getString(R.string.preference_heading_with_declination_enabled), true);
}
public void setTrackingTimerStarted(long milliseconds)