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)