TRACKING APP: remove magnetic heading, only keep course over ground, with declination mode

This commit is contained in:
Lukas Zielinski committed 2015-01-14 18:09:52 +01:00
1 parent ac45797106
commit bea4544381
10 files changed
+35 -154

No files matched your search

@@ -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"
@@ -7,9 +7,9 @@
<string name="preference_energy_saving_is_disabled">Aus</string>
<string name="prefrence_energy_saving_summary_is_enabled">GPS Updates werden alle 30 Sekunden verschickt.</string>
<string name="prefrence_energy_saving_summary_is_disabled">GPS Updates werden alle 3 Sekunden verschickt.</string>
<string name="preference_heading_from_magnetic_key_is_enabled">magn.</string>
<string name="preference_heading_from_magnetic_key_is_disabled">GPS</string>
<string name="preference_heading_from_magnetic_key_summary_is_enabled">Richtung stammt vom Magnetkompass</string>
<string name="preference_heading_from_magnetic_key_summary_is_disabled">Richtung stammt vom GPS</string>
<string name="preference_heading_from_magnetic_enabled">Richtung</string>
<string name="preference_heading_with_declination_key_is_enabled">Ein</string>
<string name="preference_heading_with_declination_key_is_disabled">Aus</string>
<string name="preference_heading_with_declination_key_summary_is_enabled">Anzeige: Magnetkompasskurs + Ablenkung</string>
<string name="preference_heading_with_declination_key_summary_is_disabled">Anzeige: Magnetkompasskurs</string>
<string name="preference_heading_with_declination_enabled">Richtung</string>
</resources>
@@ -80,6 +80,7 @@
<string name="hud_heading_prefix">HDG: </string>
<string name="hud_speed_over_ground_prefix">SPD: </string>
<string name="heading">Kurs</string>
<string name="course_over_ground">Course over Ground</string>
<string name="sog">SOG</string>
<string name="none">Keine</string>
<string name="show_leaderboard">Leaderboard</string>
@@ -10,7 +10,7 @@
<string name="preference_server_url_default">http://95.85.58.11:8000</string>
<string name="preference_energy_saving_enabled_key">preferenceEnergySavingEnabled</string>
<string name="preference_heading_from_magnetic_key">preferenceHeadingFromMagneticKey</string>
<string name="preference_heading_with_declination">preferenceHeadingWithDeclination</string>
<string name="settings_category_energy_saving">Battery Saving</string>
<string name="energy_saving_enabled">Save Energy</string>
@@ -29,9 +29,9 @@
<string name="preference_tracker_is_tracking_checkin_digest">trackerIsTrackingCheckinDigest</string>
<string name="preference_last_scanned_qr_code">lastScannedQRCode</string>
<string name="preference_heading_from_magnetic_key_is_enabled">magn.</string>
<string name="preference_heading_from_magnetic_key_is_disabled">GPS</string>
<string name="preference_heading_from_magnetic_key_summary_is_enabled">Heading from magnetic compass</string>
<string name="preference_heading_from_magnetic_key_summary_is_disabled">Heading from GPS</string>
<string name="preference_heading_from_magnetic_enabled">Heading</string>
<string name="preference_heading_with_declination_key_is_enabled">On</string>
<string name="preference_heading_with_declination_key_is_disabled">Off</string>
<string name="preference_heading_with_declination_key_summary_is_enabled">Display: Magnetic + Declination</string>
<string name="preference_heading_with_declination_key_summary_is_disabled">Display: Magnetic</string>
<string name="preference_heading_with_declination_enabled">Heading</string>
</resources>
@@ -68,6 +68,7 @@
<string name="tracking_colon">Tracking:</string>
<string name="regatta_in_progress">The regatta is in progress.</string>
<string name="heading">Heading</string>
<string name="course_over_ground">Course over Ground</string>
<string name="sog">Speed over Ground</string>
<string name="none">None</string>
<string name="show_leaderboard">Leader board</string>
@@ -23,12 +23,12 @@
<SwitchPreference
android:defaultValue="true"
android:key="@string/preference_heading_from_magnetic_key"
android:switchTextOn="@string/preference_heading_from_magnetic_key_is_enabled"
android:switchTextOff="@string/preference_heading_from_magnetic_key_is_disabled"
android:summaryOn="@string/preference_heading_from_magnetic_key_summary_is_enabled"
android:summaryOff="@string/preference_heading_from_magnetic_key_summary_is_disabled"
android:title="@string/preference_heading_from_magnetic_enabled" />
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" />
</PreferenceCategory>
@@ -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);
}
}
@@ -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 {
@@ -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();
@@ -318,28 +311,6 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
}
};
@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();
}
@@ -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)