forked from upstream-mirrors/OpenTracks
Refactoring: SharedPreferences are not provided via DataSource anymore.
This commit is contained in:
@@ -70,10 +70,7 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker
|
|||||||
|
|
||||||
private long recordingTrackId = PreferencesUtils.RECORDING_TRACK_ID_DEFAULT;
|
private long recordingTrackId = PreferencesUtils.RECORDING_TRACK_ID_DEFAULT;
|
||||||
private boolean recordingTrackPaused;
|
private boolean recordingTrackPaused;
|
||||||
/*
|
|
||||||
* Note that sharedPreferenceChangeListener cannot be an anonymous inner
|
|
||||||
* class. Anonymous inner class will get garbage collected.
|
|
||||||
*/
|
|
||||||
private final OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() {
|
private final OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
|
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import de.dennisguse.opentracks.util.PreferencesUtils;
|
|||||||
*/
|
*/
|
||||||
public class Startup extends Application {
|
public class Startup extends Application {
|
||||||
|
|
||||||
private final static String TAG = Startup.class.getSimpleName();
|
private static final String TAG = Startup.class.getSimpleName();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate() {
|
public void onCreate() {
|
||||||
|
|||||||
@@ -113,7 +113,6 @@ public class TrackDetailActivity extends AbstractListActivity implements ChooseA
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Note that sharedPreferenceChangeListener cannot be an anonymous inner class. Anonymous inner class will get garbage collected.
|
|
||||||
private final OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() {
|
private final OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
|
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
|
||||||
|
|||||||
@@ -127,10 +127,6 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe
|
|||||||
|
|
||||||
private boolean recordingTrackPaused;
|
private boolean recordingTrackPaused;
|
||||||
|
|
||||||
/*
|
|
||||||
* Note that sharedPreferenceChangeListener cannot be an anonymous inner class.
|
|
||||||
* Anonymous inner class will get garbage collected.
|
|
||||||
*/
|
|
||||||
private final OnSharedPreferenceChangeListener
|
private final OnSharedPreferenceChangeListener
|
||||||
sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() {
|
sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -18,13 +18,9 @@ package de.dennisguse.opentracks.content;
|
|||||||
|
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
|
||||||
import android.database.ContentObserver;
|
import android.database.ContentObserver;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.util.PreferencesUtils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Data source on the phone.
|
* Data source on the phone.
|
||||||
*
|
*
|
||||||
@@ -33,47 +29,16 @@ import de.dennisguse.opentracks.util.PreferencesUtils;
|
|||||||
class DataSource {
|
class DataSource {
|
||||||
|
|
||||||
private final ContentResolver contentResolver;
|
private final ContentResolver contentResolver;
|
||||||
private final SharedPreferences sharedPreferences;
|
|
||||||
|
|
||||||
DataSource(Context context) {
|
DataSource(Context context) {
|
||||||
contentResolver = context.getContentResolver();
|
contentResolver = context.getContentResolver();
|
||||||
sharedPreferences = PreferencesUtils.getSharedPreferences(context);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers a content observer.
|
|
||||||
*
|
|
||||||
* @param uri the uri
|
|
||||||
* @param observer the observer
|
|
||||||
*/
|
|
||||||
void registerContentObserver(Uri uri, ContentObserver observer) {
|
void registerContentObserver(Uri uri, ContentObserver observer) {
|
||||||
contentResolver.registerContentObserver(uri, false, observer);
|
contentResolver.registerContentObserver(uri, false, observer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Unregisters a content observer.
|
|
||||||
*
|
|
||||||
* @param observer the observer
|
|
||||||
*/
|
|
||||||
void unregisterContentObserver(ContentObserver observer) {
|
void unregisterContentObserver(ContentObserver observer) {
|
||||||
contentResolver.unregisterContentObserver(observer);
|
contentResolver.unregisterContentObserver(observer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers a shared preference change listener.
|
|
||||||
*
|
|
||||||
* @param listener the listener
|
|
||||||
*/
|
|
||||||
void registerOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) {
|
|
||||||
sharedPreferences.registerOnSharedPreferenceChangeListener(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unregisters a shared preference change listener.
|
|
||||||
*
|
|
||||||
* @param listener the listener
|
|
||||||
*/
|
|
||||||
void unregisterOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) {
|
|
||||||
sharedPreferences.unregisterOnSharedPreferenceChangeListener(listener);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -38,11 +38,4 @@ public interface DataSourceListener {
|
|||||||
* Notifies when the track points table is updated.
|
* Notifies when the track points table is updated.
|
||||||
*/
|
*/
|
||||||
void notifyTrackPointsTableUpdated();
|
void notifyTrackPointsTableUpdated();
|
||||||
|
|
||||||
/**
|
|
||||||
* Notifies when a preference changes.
|
|
||||||
*
|
|
||||||
* @param key the preference key
|
|
||||||
*/
|
|
||||||
void notifyPreferenceChanged(String key);
|
|
||||||
}
|
}
|
||||||
@@ -16,8 +16,6 @@
|
|||||||
|
|
||||||
package de.dennisguse.opentracks.content;
|
package de.dennisguse.opentracks.content;
|
||||||
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
|
||||||
import android.database.ContentObserver;
|
import android.database.ContentObserver;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -49,7 +47,6 @@ class DataSourceManager {
|
|||||||
private final TracksTableObserver tracksTableObserver;
|
private final TracksTableObserver tracksTableObserver;
|
||||||
private final WaypointsTableObserver waypointsTableObserver;
|
private final WaypointsTableObserver waypointsTableObserver;
|
||||||
private final TrackPointsTableObserver trackPointsTableObserver;
|
private final TrackPointsTableObserver trackPointsTableObserver;
|
||||||
private final PreferenceListener preferenceListener;
|
|
||||||
|
|
||||||
DataSourceManager(DataSource dataSource, DataSourceListener dataSourceListener) {
|
DataSourceManager(DataSource dataSource, DataSourceListener dataSourceListener) {
|
||||||
this.dataSource = dataSource;
|
this.dataSource = dataSource;
|
||||||
@@ -59,7 +56,6 @@ class DataSourceManager {
|
|||||||
tracksTableObserver = new TracksTableObserver();
|
tracksTableObserver = new TracksTableObserver();
|
||||||
waypointsTableObserver = new WaypointsTableObserver();
|
waypointsTableObserver = new WaypointsTableObserver();
|
||||||
trackPointsTableObserver = new TrackPointsTableObserver();
|
trackPointsTableObserver = new TrackPointsTableObserver();
|
||||||
preferenceListener = new PreferenceListener();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -70,10 +66,7 @@ class DataSourceManager {
|
|||||||
void updateListeners(EnumSet<TrackDataType> listeners) {
|
void updateListeners(EnumSet<TrackDataType> listeners) {
|
||||||
EnumSet<TrackDataType> neededListeners = EnumSet.copyOf(listeners);
|
EnumSet<TrackDataType> neededListeners = EnumSet.copyOf(listeners);
|
||||||
|
|
||||||
/*
|
// Map SAMPLED_OUT_POINT_UPDATES to POINT_UPDATES since they correspond to the same internal listener
|
||||||
* Map SAMPLED_OUT_POINT_UPDATES to POINT_UPDATES since they correspond to
|
|
||||||
* the same internal listener
|
|
||||||
*/
|
|
||||||
if (neededListeners.contains(TrackDataType.SAMPLED_OUT_TRACK_POINTS_TABLE)) {
|
if (neededListeners.contains(TrackDataType.SAMPLED_OUT_TRACK_POINTS_TABLE)) {
|
||||||
neededListeners.remove(TrackDataType.SAMPLED_OUT_TRACK_POINTS_TABLE);
|
neededListeners.remove(TrackDataType.SAMPLED_OUT_TRACK_POINTS_TABLE);
|
||||||
neededListeners.add(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE);
|
neededListeners.add(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE);
|
||||||
@@ -124,9 +117,6 @@ class DataSourceManager {
|
|||||||
case SAMPLED_OUT_TRACK_POINTS_TABLE:
|
case SAMPLED_OUT_TRACK_POINTS_TABLE:
|
||||||
// Do nothing. SAMPLED_OUT_POINT_UPDATES is mapped to POINT_UPDATES.
|
// Do nothing. SAMPLED_OUT_POINT_UPDATES is mapped to POINT_UPDATES.
|
||||||
break;
|
break;
|
||||||
case PREFERENCE:
|
|
||||||
dataSource.registerOnSharedPreferenceChangeListener(preferenceListener);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -151,9 +141,6 @@ class DataSourceManager {
|
|||||||
case SAMPLED_OUT_TRACK_POINTS_TABLE:
|
case SAMPLED_OUT_TRACK_POINTS_TABLE:
|
||||||
// Do nothing. SAMPLED_OUT_POINT_UPDATES is mapped to POINT_UPDATES.
|
// Do nothing. SAMPLED_OUT_POINT_UPDATES is mapped to POINT_UPDATES.
|
||||||
break;
|
break;
|
||||||
case PREFERENCE:
|
|
||||||
dataSource.unregisterOnSharedPreferenceChangeListener(preferenceListener);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -218,17 +205,4 @@ class DataSourceManager {
|
|||||||
dataSourceListener.notifyTrackPointsTableUpdated();
|
dataSourceListener.notifyTrackPointsTableUpdated();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Listener for preference changes.
|
|
||||||
*
|
|
||||||
* @author Jimmy Shih
|
|
||||||
*/
|
|
||||||
private class PreferenceListener implements OnSharedPreferenceChangeListener {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
|
||||||
dataSourceListener.notifyPreferenceChanged(key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package de.dennisguse.opentracks.content;
|
package de.dennisguse.opentracks.content;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.location.Location;
|
import android.location.Location;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
@@ -43,7 +44,7 @@ import de.dennisguse.opentracks.util.PreferencesUtils;
|
|||||||
*
|
*
|
||||||
* @author Rodrigo Damazio
|
* @author Rodrigo Damazio
|
||||||
*/
|
*/
|
||||||
public class TrackDataHub implements DataSourceListener {
|
public class TrackDataHub implements DataSourceListener, SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Target number of track points displayed by the map overlay.
|
* Target number of track points displayed by the map overlay.
|
||||||
@@ -76,10 +77,6 @@ public class TrackDataHub implements DataSourceListener {
|
|||||||
private long selectedTrackId;
|
private long selectedTrackId;
|
||||||
private long recordingTrackId;
|
private long recordingTrackId;
|
||||||
private boolean recordingTrackPaused;
|
private boolean recordingTrackPaused;
|
||||||
private boolean metricUnits;
|
|
||||||
private boolean reportSpeed;
|
|
||||||
private int recordingGpsAccuracy;
|
|
||||||
private int recordingDistanceInterval;
|
|
||||||
|
|
||||||
// Track points sampling state
|
// Track points sampling state
|
||||||
private int numLoadedPoints;
|
private int numLoadedPoints;
|
||||||
@@ -111,7 +108,8 @@ public class TrackDataHub implements DataSourceListener {
|
|||||||
dataSource = newDataSource();
|
dataSource = newDataSource();
|
||||||
dataSourceManager = new DataSourceManager(dataSource, this);
|
dataSourceManager = new DataSourceManager(dataSource, this);
|
||||||
|
|
||||||
notifyPreferenceChanged(null);
|
PreferencesUtils.register(context, this);
|
||||||
|
onSharedPreferenceChanged(null, null);
|
||||||
runInHandlerThread(new Runnable() {
|
runInHandlerThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -128,6 +126,9 @@ public class TrackDataHub implements DataSourceListener {
|
|||||||
Log.i(TAG, "TrackDataHub not started, ignoring stop.");
|
Log.i(TAG, "TrackDataHub not started, ignoring stop.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PreferencesUtils.unregister(context, this);
|
||||||
|
|
||||||
started = false;
|
started = false;
|
||||||
|
|
||||||
dataSourceManager.unregisterAllListeners();
|
dataSourceManager.unregisterAllListeners();
|
||||||
@@ -248,7 +249,7 @@ public class TrackDataHub implements DataSourceListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void notifyPreferenceChanged(final String key) {
|
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, final String key) {
|
||||||
runInHandlerThread(new Runnable() {
|
runInHandlerThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -258,46 +259,6 @@ public class TrackDataHub implements DataSourceListener {
|
|||||||
if (PreferencesUtils.isKey(context, R.string.recording_track_paused_key, key)) {
|
if (PreferencesUtils.isKey(context, R.string.recording_track_paused_key, key)) {
|
||||||
recordingTrackPaused = PreferencesUtils.isRecordingTrackPaused(context);
|
recordingTrackPaused = PreferencesUtils.isRecordingTrackPaused(context);
|
||||||
}
|
}
|
||||||
if (PreferencesUtils.isKey(context, R.string.stats_units_key, key)) {
|
|
||||||
metricUnits = PreferencesUtils.isMetricUnits(context);
|
|
||||||
if (key != null) {
|
|
||||||
for (TrackDataListener trackDataListener : trackDataManager.getListeners(TrackDataType.PREFERENCE)) {
|
|
||||||
if (trackDataListener.onMetricUnitsChanged(metricUnits)) {
|
|
||||||
loadDataForListener(trackDataListener);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (PreferencesUtils.isKey(context, R.string.stats_rate_key, key)) {
|
|
||||||
reportSpeed = PreferencesUtils.isReportSpeed(context);
|
|
||||||
if (key != null) {
|
|
||||||
for (TrackDataListener trackDataListener : trackDataManager.getListeners(TrackDataType.PREFERENCE)) {
|
|
||||||
if (trackDataListener.onReportSpeedChanged(reportSpeed)) {
|
|
||||||
loadDataForListener(trackDataListener);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (PreferencesUtils.isKey(context, R.string.recording_gps_accuracy_key, key)) {
|
|
||||||
recordingGpsAccuracy = PreferencesUtils.getRecordingGPSAccuracy(context);
|
|
||||||
if (key != null) {
|
|
||||||
for (TrackDataListener trackDataListener : trackDataManager.getListeners(TrackDataType.PREFERENCE)) {
|
|
||||||
if (trackDataListener.onRecordingGpsAccuracy(recordingGpsAccuracy)) {
|
|
||||||
loadDataForListener(trackDataListener);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (PreferencesUtils.isKey(context, R.string.recording_distance_interval_key, key)) {
|
|
||||||
recordingDistanceInterval = PreferencesUtils.getRecordingDistanceInterval(context);
|
|
||||||
if (key != null) {
|
|
||||||
for (TrackDataListener trackDataListener : trackDataManager.getListeners(TrackDataType.PREFERENCE)) {
|
|
||||||
if (trackDataListener.onRecordingDistanceIntervalChanged(recordingDistanceInterval)) {
|
|
||||||
loadDataForListener(trackDataListener);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -311,13 +272,6 @@ public class TrackDataHub implements DataSourceListener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (TrackDataListener trackDataListener : trackDataManager.getListeners(TrackDataType.PREFERENCE)) {
|
|
||||||
trackDataListener.onMetricUnitsChanged(metricUnits);
|
|
||||||
trackDataListener.onReportSpeedChanged(reportSpeed);
|
|
||||||
trackDataListener.onRecordingGpsAccuracy(recordingGpsAccuracy);
|
|
||||||
trackDataListener.onRecordingDistanceIntervalChanged(recordingDistanceInterval);
|
|
||||||
}
|
|
||||||
|
|
||||||
notifyTracksTableUpdate(trackDataManager.getListeners(TrackDataType.TRACKS_TABLE));
|
notifyTracksTableUpdate(trackDataManager.getListeners(TrackDataType.TRACKS_TABLE));
|
||||||
|
|
||||||
for (TrackDataListener listener : trackDataManager.getListeners(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE)) {
|
for (TrackDataListener listener : trackDataManager.getListeners(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE)) {
|
||||||
@@ -338,13 +292,6 @@ public class TrackDataHub implements DataSourceListener {
|
|||||||
Set<TrackDataListener> trackDataListeners = Collections.singleton(trackDataListener);
|
Set<TrackDataListener> trackDataListeners = Collections.singleton(trackDataListener);
|
||||||
EnumSet<TrackDataType> trackDataTypes = trackDataManager.getTrackDataTypes(trackDataListener);
|
EnumSet<TrackDataType> trackDataTypes = trackDataManager.getTrackDataTypes(trackDataListener);
|
||||||
|
|
||||||
if (trackDataTypes.contains(TrackDataType.PREFERENCE)) {
|
|
||||||
trackDataListener.onMetricUnitsChanged(metricUnits);
|
|
||||||
trackDataListener.onReportSpeedChanged(reportSpeed);
|
|
||||||
trackDataListener.onRecordingGpsAccuracy(recordingGpsAccuracy);
|
|
||||||
trackDataListener.onRecordingDistanceIntervalChanged(recordingDistanceInterval);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (trackDataTypes.contains(TrackDataType.TRACKS_TABLE)) {
|
if (trackDataTypes.contains(TrackDataType.TRACKS_TABLE)) {
|
||||||
notifyTracksTableUpdate(trackDataListeners);
|
notifyTracksTableUpdate(trackDataListeners);
|
||||||
}
|
}
|
||||||
@@ -537,32 +484,4 @@ public class TrackDataHub implements DataSourceListener {
|
|||||||
public long getSelectedTrackId() {
|
public long getSelectedTrackId() {
|
||||||
return selectedTrackId;
|
return selectedTrackId;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the recordingGpsAccuracy.
|
|
||||||
*/
|
|
||||||
@VisibleForTesting
|
|
||||||
int getRecordingGpsAccuracy() {
|
|
||||||
return recordingGpsAccuracy;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the metricUnits.
|
|
||||||
*
|
|
||||||
* @return the metricUnits
|
|
||||||
*/
|
|
||||||
@VisibleForTesting
|
|
||||||
boolean isMetricUnits() {
|
|
||||||
return metricUnits;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the reportSpeed.
|
|
||||||
*
|
|
||||||
* @return the reportSpeed
|
|
||||||
*/
|
|
||||||
@VisibleForTesting
|
|
||||||
boolean isReportSpeed() {
|
|
||||||
return reportSpeed;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -77,36 +77,4 @@ public interface TrackDataListener {
|
|||||||
* This gets called after every batch of calls to {@link #clearWaypoints()} and {@link #onNewWaypoint(Waypoint)}.
|
* This gets called after every batch of calls to {@link #clearWaypoints()} and {@link #onNewWaypoint(Waypoint)}.
|
||||||
*/
|
*/
|
||||||
void onNewWaypointsDone();
|
void onNewWaypointsDone();
|
||||||
|
|
||||||
/**
|
|
||||||
* Called when the metric units preference value is change.
|
|
||||||
*
|
|
||||||
* @param metricUnits true to use metric units, false to use imperial units
|
|
||||||
* @return true to reload all the data, false otherwise.
|
|
||||||
*/
|
|
||||||
boolean onMetricUnitsChanged(boolean metricUnits);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called when the report speed preference value is changed.
|
|
||||||
*
|
|
||||||
* @param reportSpeed true to report speed, false to report pace
|
|
||||||
* @return true to reload all the data, false otherwise.
|
|
||||||
*/
|
|
||||||
boolean onReportSpeedChanged(boolean reportSpeed);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called when the recording gps accuracy preference value is changed.
|
|
||||||
*
|
|
||||||
* @param recordingGpsAccuracy the new value
|
|
||||||
* @return true to reload all the data, false otherwise
|
|
||||||
*/
|
|
||||||
boolean onRecordingGpsAccuracy(int recordingGpsAccuracy);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called when the recording distance interval preference value is changed.
|
|
||||||
*
|
|
||||||
* @param recordingDistanceInterval the new value
|
|
||||||
* @return true to reload all the data, false otherwise.
|
|
||||||
*/
|
|
||||||
boolean onRecordingDistanceIntervalChanged(int recordingDistanceInterval);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,5 +26,4 @@ public enum TrackDataType {
|
|||||||
WAYPOINTS_TABLE, // waypoints table changes
|
WAYPOINTS_TABLE, // waypoints table changes
|
||||||
SAMPLED_IN_TRACK_POINTS_TABLE, // sampled-in track points table changes
|
SAMPLED_IN_TRACK_POINTS_TABLE, // sampled-in track points table changes
|
||||||
SAMPLED_OUT_TRACK_POINTS_TABLE, // sampled-out track points table changes
|
SAMPLED_OUT_TRACK_POINTS_TABLE, // sampled-out track points table changes
|
||||||
PREFERENCE // preference changes
|
|
||||||
}
|
}
|
||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package de.dennisguse.opentracks.fragments;
|
package de.dennisguse.opentracks.fragments;
|
||||||
|
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.location.Location;
|
import android.location.Location;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
@@ -78,6 +79,51 @@ public abstract class ChartFragment extends Fragment implements TrackDataListene
|
|||||||
// UI elements
|
// UI elements
|
||||||
private ChartView chartView;
|
private ChartView chartView;
|
||||||
|
|
||||||
|
private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
|
||||||
|
if (!isResumed()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key)) {
|
||||||
|
boolean metric = PreferencesUtils.isMetricUnits(getContext());
|
||||||
|
if (metricUnits != metric) {
|
||||||
|
metricUnits = metric;
|
||||||
|
chartView.setMetricUnits(metricUnits);
|
||||||
|
runOnUiThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (isResumed()) {
|
||||||
|
chartView.requestLayout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) {
|
||||||
|
boolean speed = PreferencesUtils.isReportSpeed(getContext());
|
||||||
|
if (reportSpeed != speed) {
|
||||||
|
reportSpeed = speed;
|
||||||
|
chartView.setReportSpeed(reportSpeed);
|
||||||
|
setSeriesEnabled(ChartView.SPEED_SERIES, reportSpeed);
|
||||||
|
setSeriesEnabled(ChartView.PACE_SERIES, !reportSpeed);
|
||||||
|
runOnUiThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (isResumed()) {
|
||||||
|
chartView.requestLayout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PreferencesUtils.isKey(getContext(), R.string.recording_distance_interval_key, key)) {
|
||||||
|
recordingDistanceInterval = PreferencesUtils.getRecordingDistanceInterval(getContext());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A runnable that will set the orange pointer as appropriate and redraw.
|
* A runnable that will set the orange pointer as appropriate and redraw.
|
||||||
*/
|
*/
|
||||||
@@ -124,6 +170,8 @@ public abstract class ChartFragment extends Fragment implements TrackDataListene
|
|||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
resumeTrackDataHub();
|
resumeTrackDataHub();
|
||||||
|
PreferencesUtils.register(getContext(), sharedPreferenceChangeListener);
|
||||||
|
|
||||||
checkChartSettings();
|
checkChartSettings();
|
||||||
getActivity().runOnUiThread(updateChart);
|
getActivity().runOnUiThread(updateChart);
|
||||||
}
|
}
|
||||||
@@ -132,6 +180,7 @@ public abstract class ChartFragment extends Fragment implements TrackDataListene
|
|||||||
public void onPause() {
|
public void onPause() {
|
||||||
super.onPause();
|
super.onPause();
|
||||||
pauseTrackDataHub();
|
pauseTrackDataHub();
|
||||||
|
PreferencesUtils.register(getContext(), sharedPreferenceChangeListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -229,68 +278,6 @@ public abstract class ChartFragment extends Fragment implements TrackDataListene
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onMetricUnitsChanged(boolean metric) {
|
|
||||||
if (isResumed()) {
|
|
||||||
if (metricUnits == metric) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
metricUnits = metric;
|
|
||||||
chartView.setMetricUnits(metricUnits);
|
|
||||||
runOnUiThread(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if (isResumed()) {
|
|
||||||
chartView.requestLayout();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onReportSpeedChanged(boolean speed) {
|
|
||||||
if (isResumed()) {
|
|
||||||
if (reportSpeed == speed) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
reportSpeed = speed;
|
|
||||||
chartView.setReportSpeed(reportSpeed);
|
|
||||||
setSeriesEnabled(ChartView.SPEED_SERIES, reportSpeed);
|
|
||||||
setSeriesEnabled(ChartView.PACE_SERIES, !reportSpeed);
|
|
||||||
runOnUiThread(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if (isResumed()) {
|
|
||||||
chartView.requestLayout();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onRecordingGpsAccuracy(int minRequiredAccuracy) {
|
|
||||||
// We don't care.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onRecordingDistanceIntervalChanged(int value) {
|
|
||||||
if (isResumed()) {
|
|
||||||
if (recordingDistanceInterval == value) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
recordingDistanceInterval = value;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks the chart settings.
|
* Checks the chart settings.
|
||||||
*/
|
*/
|
||||||
@@ -334,7 +321,7 @@ public abstract class ChartFragment extends Fragment implements TrackDataListene
|
|||||||
trackDataHub = ((TrackDetailActivity) getActivity()).getTrackDataHub();
|
trackDataHub = ((TrackDetailActivity) getActivity()).getTrackDataHub();
|
||||||
trackDataHub.registerTrackDataListener(this, EnumSet.of(TrackDataType.TRACKS_TABLE,
|
trackDataHub.registerTrackDataListener(this, EnumSet.of(TrackDataType.TRACKS_TABLE,
|
||||||
TrackDataType.WAYPOINTS_TABLE, TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE,
|
TrackDataType.WAYPOINTS_TABLE, TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE,
|
||||||
TrackDataType.SAMPLED_OUT_TRACK_POINTS_TABLE, TrackDataType.PREFERENCE));
|
TrackDataType.SAMPLED_OUT_TRACK_POINTS_TABLE));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package de.dennisguse.opentracks.fragments;
|
package de.dennisguse.opentracks.fragments;
|
||||||
|
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.location.Location;
|
import android.location.Location;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
@@ -61,7 +62,7 @@ import de.dennisguse.opentracks.util.UnitConversions;
|
|||||||
*/
|
*/
|
||||||
public class StatsFragment extends Fragment implements TrackDataListener {
|
public class StatsFragment extends Fragment implements TrackDataListener {
|
||||||
|
|
||||||
public static final String STATS_FRAGMENT_TAG = StatsFragment.class.getSimpleName();
|
private static final String STATS_FRAGMENT_TAG = StatsFragment.class.getSimpleName();
|
||||||
|
|
||||||
private static final long UI_UPDATE_INTERVAL = UnitConversions.ONE_SECOND;
|
private static final long UI_UPDATE_INTERVAL = UnitConversions.ONE_SECOND;
|
||||||
|
|
||||||
@@ -75,8 +76,30 @@ public class StatsFragment extends Fragment implements TrackDataListener {
|
|||||||
private TripStatistics lastTripStatistics = null;
|
private TripStatistics lastTripStatistics = null;
|
||||||
|
|
||||||
private String category = "";
|
private String category = "";
|
||||||
|
@Deprecated //TODO This should be handled somewhere else; not in the UI.
|
||||||
private int recordingGpsAccuracy;
|
private int recordingGpsAccuracy;
|
||||||
|
|
||||||
|
private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
|
||||||
|
if (PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key) || PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) {
|
||||||
|
if (isResumed()) {
|
||||||
|
getActivity().runOnUiThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (isResumed()) {
|
||||||
|
updateUI();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (PreferencesUtils.isKey(getContext(), R.string.recording_track_id_key, key)) {
|
||||||
|
recordingGpsAccuracy = PreferencesUtils.getRecordingGPSAccuracy(getContext());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
return inflater.inflate(R.layout.stats, container, false);
|
return inflater.inflate(R.layout.stats, container, false);
|
||||||
@@ -221,6 +244,7 @@ public class StatsFragment extends Fragment implements TrackDataListener {
|
|||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
resumeTrackDataHub();
|
resumeTrackDataHub();
|
||||||
|
PreferencesUtils.register(getContext(), sharedPreferenceChangeListener);
|
||||||
|
|
||||||
trackRecordingServiceConnection = new TrackRecordingServiceConnection(getContext(), null);
|
trackRecordingServiceConnection = new TrackRecordingServiceConnection(getContext(), null);
|
||||||
trackRecordingServiceConnection.startConnection(getContext());
|
trackRecordingServiceConnection.startConnection(getContext());
|
||||||
@@ -232,6 +256,8 @@ public class StatsFragment extends Fragment implements TrackDataListener {
|
|||||||
public void onPause() {
|
public void onPause() {
|
||||||
super.onPause();
|
super.onPause();
|
||||||
pauseTrackDataHub();
|
pauseTrackDataHub();
|
||||||
|
PreferencesUtils.unregister(getContext(), sharedPreferenceChangeListener);
|
||||||
|
|
||||||
handlerUpdateUI.removeCallbacks(updateUIeachSecond);
|
handlerUpdateUI.removeCallbacks(updateUIeachSecond);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -370,48 +396,6 @@ public class StatsFragment extends Fragment implements TrackDataListener {
|
|||||||
// We don't care.
|
// We don't care.
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onMetricUnitsChanged(final boolean metric) {
|
|
||||||
if (isResumed()) {
|
|
||||||
getActivity().runOnUiThread(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if (isResumed()) {
|
|
||||||
updateUI();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onReportSpeedChanged(final boolean speed) {
|
|
||||||
if (isResumed()) {
|
|
||||||
getActivity().runOnUiThread(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if (isResumed()) {
|
|
||||||
updateUI();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onRecordingGpsAccuracy(int newValue) {
|
|
||||||
recordingGpsAccuracy = newValue;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onRecordingDistanceIntervalChanged(int minRecordingDistance) {
|
|
||||||
// We don't care.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resumes the trackDataHub.
|
* Resumes the trackDataHub.
|
||||||
* Needs to be synchronized because trackDataHub can be accessed by multiple threads.
|
* Needs to be synchronized because trackDataHub can be accessed by multiple threads.
|
||||||
@@ -419,8 +403,7 @@ public class StatsFragment extends Fragment implements TrackDataListener {
|
|||||||
private synchronized void resumeTrackDataHub() {
|
private synchronized void resumeTrackDataHub() {
|
||||||
trackDataHub = ((TrackDetailActivity) getActivity()).getTrackDataHub();
|
trackDataHub = ((TrackDetailActivity) getActivity()).getTrackDataHub();
|
||||||
trackDataHub.registerTrackDataListener(this, EnumSet.of(TrackDataType.TRACKS_TABLE,
|
trackDataHub.registerTrackDataListener(this, EnumSet.of(TrackDataType.TRACKS_TABLE,
|
||||||
TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE, TrackDataType.SAMPLED_OUT_TRACK_POINTS_TABLE,
|
TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE, TrackDataType.SAMPLED_OUT_TRACK_POINTS_TABLE));
|
||||||
TrackDataType.PREFERENCE));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public enum TrackFileFormat {
|
|||||||
},
|
},
|
||||||
KMZ_ONLY_TRACK {
|
KMZ_ONLY_TRACK {
|
||||||
|
|
||||||
private final static boolean exportPhotos = false;
|
private static final boolean exportPhotos = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TrackWriter newTrackWriter(Context context, boolean multiple) {
|
public TrackWriter newTrackWriter(Context context, boolean multiple) {
|
||||||
@@ -94,7 +94,7 @@ public enum TrackFileFormat {
|
|||||||
},
|
},
|
||||||
KMZ_WITH_TRACKDETAIL {
|
KMZ_WITH_TRACKDETAIL {
|
||||||
|
|
||||||
private final static boolean exportPhotos = false;
|
private static final boolean exportPhotos = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TrackWriter newTrackWriter(Context context, boolean multiple) {
|
public TrackWriter newTrackWriter(Context context, boolean multiple) {
|
||||||
@@ -122,7 +122,7 @@ public enum TrackFileFormat {
|
|||||||
},
|
},
|
||||||
KMZ_WITH_TRACKDETAIL_AND_SENSORDATA {
|
KMZ_WITH_TRACKDETAIL_AND_SENSORDATA {
|
||||||
|
|
||||||
private final static boolean exportPhotos = false;
|
private static final boolean exportPhotos = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TrackWriter newTrackWriter(Context context, boolean multiple) {
|
public TrackWriter newTrackWriter(Context context, boolean multiple) {
|
||||||
@@ -151,7 +151,7 @@ public enum TrackFileFormat {
|
|||||||
},
|
},
|
||||||
KMZ_WITH_TRACKDETAIL_AND_SENSORDATA_AND_PICTURES {
|
KMZ_WITH_TRACKDETAIL_AND_SENSORDATA_AND_PICTURES {
|
||||||
|
|
||||||
private final static boolean exportPhotos = true;
|
private static final boolean exportPhotos = true;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TrackWriter newTrackWriter(Context context, boolean multiple) {
|
public TrackWriter newTrackWriter(Context context, boolean multiple) {
|
||||||
|
|||||||
+2
-1
@@ -160,7 +160,8 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track
|
|||||||
Waypoint waypoint = null;
|
Waypoint waypoint = null;
|
||||||
Location location = null;
|
Location location = null;
|
||||||
TripStatisticsUpdater trackTripStatisticstrackUpdater = new TripStatisticsUpdater(track.getTripStatistics().getStartTime());
|
TripStatisticsUpdater trackTripStatisticstrackUpdater = new TripStatisticsUpdater(track.getTripStatistics().getStartTime());
|
||||||
TripStatisticsUpdater markerTripStatisticsUpdater = new TripStatisticsUpdater(track.getTripStatistics().getStartTime());
|
@Deprecated // TODO Should not be necessary anymore?
|
||||||
|
TripStatisticsUpdater markerTripStatisticsUpdater = new TripStatisticsUpdater(track.getTripStatistics().getStartTime());
|
||||||
|
|
||||||
try (TrackPointIterator locationIterator = contentProviderUtils.getTrackPointLocationIterator(track.getId(), -1L, false, TrackPointFactory.DEFAULT_LOCATION_FACTORY)) {
|
try (TrackPointIterator locationIterator = contentProviderUtils.getTrackPointLocationIterator(track.getId(), -1L, false, TrackPointFactory.DEFAULT_LOCATION_FACTORY)) {
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -20,9 +20,9 @@ import de.dennisguse.opentracks.util.StringUtils;
|
|||||||
*/
|
*/
|
||||||
class TrackRecordingServiceNotificationManager {
|
class TrackRecordingServiceNotificationManager {
|
||||||
|
|
||||||
private final static int NOTIFICATION_ID = 123;
|
private static final int NOTIFICATION_ID = 123;
|
||||||
|
|
||||||
private final static String CHANNEL_ID = TrackRecordingServiceNotificationManager.class.getSimpleName();
|
private static final String CHANNEL_ID = TrackRecordingServiceNotificationManager.class.getSimpleName();
|
||||||
|
|
||||||
private final NotificationCompat.Builder notificationBuilder;
|
private final NotificationCompat.Builder notificationBuilder;
|
||||||
|
|
||||||
|
|||||||
@@ -32,9 +32,9 @@ import de.dennisguse.opentracks.util.PreferencesUtils;
|
|||||||
*/
|
*/
|
||||||
public class BluetoothLePreference extends DialogPreference {
|
public class BluetoothLePreference extends DialogPreference {
|
||||||
|
|
||||||
private final static String TAG = BluetoothLePreference.class.getSimpleName();
|
private static final String TAG = BluetoothLePreference.class.getSimpleName();
|
||||||
|
|
||||||
private final static int DEVICE_NONE_RESOURCEID = R.string.value_none;
|
private static final int DEVICE_NONE_RESOURCEID = R.string.value_none;
|
||||||
|
|
||||||
public BluetoothLePreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
public BluetoothLePreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||||
super(context, attrs, defStyleAttr, defStyleRes);
|
super(context, attrs, defStyleAttr, defStyleRes);
|
||||||
|
|||||||
@@ -50,10 +50,6 @@ public class SettingsActivity extends AppCompatActivity implements ChooseActivit
|
|||||||
|
|
||||||
public static class PrefsFragment extends PreferenceFragmentCompat {
|
public static class PrefsFragment extends PreferenceFragmentCompat {
|
||||||
|
|
||||||
/*
|
|
||||||
* Note that sharedPreferenceChangeListener cannot be an anonymous inner class.
|
|
||||||
* Anonymous inner class will get garbage collected.
|
|
||||||
*/
|
|
||||||
private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
|
private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
|
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ import de.dennisguse.opentracks.io.file.TrackFileFormat;
|
|||||||
*/
|
*/
|
||||||
public class IntentUtils {
|
public class IntentUtils {
|
||||||
|
|
||||||
private final static String TAG = IntentUtils.class.getSimpleName();
|
private static final String TAG = IntentUtils.class.getSimpleName();
|
||||||
|
|
||||||
private static final String JPEG_EXTENSION = "jpeg";
|
private static final String JPEG_EXTENSION = "jpeg";
|
||||||
|
|
||||||
|
|||||||
@@ -39,21 +39,30 @@ public class PreferencesUtils {
|
|||||||
return PreferenceManager.getDefaultSharedPreferences(context);
|
return PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void register(Context context, SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener) {
|
||||||
|
getSharedPreferences(context).registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void unregister(Context context, SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener) {
|
||||||
|
getSharedPreferences(context).unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
|
||||||
|
}
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
//NOTE: is at the moment still used to determine if a track is currently recorded; better ask the service directly.
|
//NOTE: is at the moment still used to determine if a track is currently recorded; better ask the service directly.
|
||||||
//NOTE: This was also used to recover from a reboot, but this data should not be exposed to the whole application.
|
//NOTE: This was also used to recover from a reboot, but this data should not be exposed to the whole application.
|
||||||
public static final long RECORDING_TRACK_ID_DEFAULT = -1L;
|
public static final long RECORDING_TRACK_ID_DEFAULT = -1L;
|
||||||
|
|
||||||
public static long getRecordingTrackId(Context context) {
|
public static long getRecordingTrackId(Context context) {
|
||||||
return PreferencesUtils.getLong(context);
|
SharedPreferences sharedPreferences = getSharedPreferences(context);
|
||||||
|
return sharedPreferences.getLong(getKey(context, R.string.recording_track_id_key), RECORDING_TRACK_ID_DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getDefaultActivity(Context context) {
|
public static String getDefaultActivity(Context context) {
|
||||||
return PreferencesUtils.getString(context, R.string.default_activity_key, context.getString(R.string.default_activity_default));
|
return getString(context, R.string.default_activity_key, context.getString(R.string.default_activity_default));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setDefaultActivity(Context context, String newDefaultActivity) {
|
public static void setDefaultActivity(Context context, String newDefaultActivity) {
|
||||||
PreferencesUtils.setString(context, R.string.default_activity_key, newDefaultActivity);
|
setString(context, R.string.default_activity_key, newDefaultActivity);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -74,7 +83,7 @@ public class PreferencesUtils {
|
|||||||
* @return true if key == null or key belongs to keyId
|
* @return true if key == null or key belongs to keyId
|
||||||
*/
|
*/
|
||||||
public static boolean isKey(Context context, int keyId, String key) {
|
public static boolean isKey(Context context, int keyId, String key) {
|
||||||
return key == null || key.equals(PreferencesUtils.getKey(context, keyId));
|
return key == null || key.equals(getKey(context, keyId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -143,16 +152,6 @@ public class PreferencesUtils {
|
|||||||
editor.apply();
|
editor.apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets a long preference value.
|
|
||||||
* @param context the context
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private static long getLong(Context context) {
|
|
||||||
SharedPreferences sharedPreferences = getSharedPreferences(context);
|
|
||||||
return sharedPreferences.getLong(getKey(context, R.string.recording_track_id_key), PreferencesUtils.RECORDING_TRACK_ID_DEFAULT);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets a long preference value.
|
* Sets a long preference value.
|
||||||
*
|
*
|
||||||
@@ -204,7 +203,7 @@ public class PreferencesUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isRecordingTrackPaused(Context context) {
|
public static boolean isRecordingTrackPaused(Context context) {
|
||||||
return PreferencesUtils.getBoolean(context, R.string.recording_track_paused_key, isRecordingTrackPausedDefault(context));
|
return getBoolean(context, R.string.recording_track_paused_key, isRecordingTrackPausedDefault(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isRecordingTrackPausedDefault(Context context) {
|
public static boolean isRecordingTrackPausedDefault(Context context) {
|
||||||
@@ -213,7 +212,7 @@ public class PreferencesUtils {
|
|||||||
|
|
||||||
public static void defaultRecordingTrackPaused(Context context) {
|
public static void defaultRecordingTrackPaused(Context context) {
|
||||||
final boolean RECORDING_TRACK_PAUSED = context.getResources().getBoolean(R.bool.recording_track_paused_default);
|
final boolean RECORDING_TRACK_PAUSED = context.getResources().getBoolean(R.bool.recording_track_paused_default);
|
||||||
PreferencesUtils.setBoolean(context, R.string.recording_track_paused_key, RECORDING_TRACK_PAUSED);
|
setBoolean(context, R.string.recording_track_paused_key, RECORDING_TRACK_PAUSED);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getBluetoothHeartRateSensorAddressNone(Context context) {
|
public static String getBluetoothHeartRateSensorAddressNone(Context context) {
|
||||||
@@ -229,7 +228,7 @@ public class PreferencesUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String getBluetoothHeartRateSensorAddress(Context context) {
|
public static String getBluetoothHeartRateSensorAddress(Context context) {
|
||||||
return PreferencesUtils.getString(context, R.string.settings_sensor_bluetooth_heart_rate_key, getBluetoothHeartRateSensorAddressNone(context));
|
return getString(context, R.string.settings_sensor_bluetooth_heart_rate_key, getBluetoothHeartRateSensorAddressNone(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean shouldShowStatsOnLockscreen(Context context) {
|
public static boolean shouldShowStatsOnLockscreen(Context context) {
|
||||||
@@ -244,21 +243,21 @@ public class PreferencesUtils {
|
|||||||
|
|
||||||
public static boolean isShowStatsGradeElevation(Context context) {
|
public static boolean isShowStatsGradeElevation(Context context) {
|
||||||
final boolean STATS_SHOW_GRADE_ELEVATION = context.getResources().getBoolean(R.bool.stats_show_grade_elevation_default);
|
final boolean STATS_SHOW_GRADE_ELEVATION = context.getResources().getBoolean(R.bool.stats_show_grade_elevation_default);
|
||||||
return PreferencesUtils.getBoolean(context, R.string.stats_show_grade_elevation_key, STATS_SHOW_GRADE_ELEVATION);
|
return getBoolean(context, R.string.stats_show_grade_elevation_key, STATS_SHOW_GRADE_ELEVATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isStatsShowCoordinate(Context context) {
|
public static boolean isStatsShowCoordinate(Context context) {
|
||||||
final boolean STATS_SHOW_COORDINATE = context.getResources().getBoolean(R.bool.stats_show_coordinate_default);
|
final boolean STATS_SHOW_COORDINATE = context.getResources().getBoolean(R.bool.stats_show_coordinate_default);
|
||||||
return PreferencesUtils.getBoolean(context, R.string.stats_show_coordinate_key, STATS_SHOW_COORDINATE);
|
return getBoolean(context, R.string.stats_show_coordinate_key, STATS_SHOW_COORDINATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getVoiceFrequency(Context context) {
|
public static int getVoiceFrequency(Context context) {
|
||||||
final int VOICE_FREQUENCY_DEFAULT = Integer.parseInt(context.getResources().getString(R.string.voice_frequency_default));
|
final int VOICE_FREQUENCY_DEFAULT = Integer.parseInt(context.getResources().getString(R.string.voice_frequency_default));
|
||||||
return PreferencesUtils.getInt(context, R.string.voice_frequency_key, VOICE_FREQUENCY_DEFAULT);
|
return getInt(context, R.string.voice_frequency_key, VOICE_FREQUENCY_DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getRecordingDistanceInterval(Context context) {
|
public static int getRecordingDistanceInterval(Context context) {
|
||||||
return PreferencesUtils.getInt(context, R.string.recording_distance_interval_key, getRecordingDistanceIntervalDefault(context));
|
return getInt(context, R.string.recording_distance_interval_key, getRecordingDistanceIntervalDefault(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getRecordingDistanceIntervalDefault(Context context) {
|
public static int getRecordingDistanceIntervalDefault(Context context) {
|
||||||
@@ -267,12 +266,12 @@ public class PreferencesUtils {
|
|||||||
|
|
||||||
public static int getMaxRecordingDistance(Context context) {
|
public static int getMaxRecordingDistance(Context context) {
|
||||||
final int MAX_RECORDING_DISTANCE = Integer.parseInt(context.getResources().getString(R.string.max_recording_distance_default));
|
final int MAX_RECORDING_DISTANCE = Integer.parseInt(context.getResources().getString(R.string.max_recording_distance_default));
|
||||||
return PreferencesUtils.getInt(context, R.string.max_recording_distance_key, MAX_RECORDING_DISTANCE);
|
return getInt(context, R.string.max_recording_distance_key, MAX_RECORDING_DISTANCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getMinRecordingInterval(Context context) {
|
public static int getMinRecordingInterval(Context context) {
|
||||||
final int MIN_RECORDING_INTERVAL = Integer.parseInt(context.getResources().getString(R.string.min_recording_interval_default));
|
final int MIN_RECORDING_INTERVAL = Integer.parseInt(context.getResources().getString(R.string.min_recording_interval_default));
|
||||||
return PreferencesUtils.getInt(context, R.string.min_recording_interval_key, MIN_RECORDING_INTERVAL);
|
return getInt(context, R.string.min_recording_interval_key, MIN_RECORDING_INTERVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getMinRecordingIntervalAdaptAccuracy(Context context) {
|
public static int getMinRecordingIntervalAdaptAccuracy(Context context) {
|
||||||
@@ -287,19 +286,20 @@ public class PreferencesUtils {
|
|||||||
return Integer.parseInt(context.getResources().getString(R.string.min_recording_interval_default));
|
return Integer.parseInt(context.getResources().getString(R.string.min_recording_interval_default));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static int getRecordingGPSAccuracy(Context context) {
|
public static int getRecordingGPSAccuracy(Context context) {
|
||||||
final int RECORDING_GPS_ACCURACY = Integer.parseInt(context.getResources().getString(R.string.recording_gps_accuracy_default));
|
final int RECORDING_GPS_ACCURACY = Integer.parseInt(context.getResources().getString(R.string.recording_gps_accuracy_default));
|
||||||
return PreferencesUtils.getInt(context, R.string.recording_gps_accuracy_key, RECORDING_GPS_ACCURACY);
|
return getInt(context, R.string.recording_gps_accuracy_key, RECORDING_GPS_ACCURACY);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isRecording(Context context) {
|
public static boolean isRecording(Context context) {
|
||||||
long recordingTrackId = PreferencesUtils.getRecordingTrackId(context);
|
long recordingTrackId = getRecordingTrackId(context);
|
||||||
return recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT;
|
return isRecording(recordingTrackId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
//TODO Method is very misleading: it only checks if the provided trackId not the default value (i.e., not recording).
|
||||||
public static boolean isRecording(long recordingTrackId) {
|
public static boolean isRecording(long recordingTrackId) {
|
||||||
return recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT;
|
return recordingTrackId != RECORDING_TRACK_ID_DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void resetPreferences(Context context, boolean readAgain) {
|
public static void resetPreferences(Context context, boolean readAgain) {
|
||||||
|
|||||||
Reference in New Issue
Block a user