diff options
-rw-r--r-- | qt-mobile/gpslocation.cpp | 8 | ||||
-rw-r--r-- | qt-mobile/qml/Preferences.qml | 24 | ||||
-rw-r--r-- | qt-mobile/qmlmanager.cpp | 30 | ||||
-rw-r--r-- | qt-mobile/qmlmanager.h | 18 | ||||
-rw-r--r-- | subsurface-core/pref.h | 2 | ||||
-rw-r--r-- | subsurface-core/qthelper.cpp | 7 | ||||
-rw-r--r-- | subsurface-core/subsurfacestartup.c | 4 |
7 files changed, 84 insertions, 9 deletions
diff --git a/qt-mobile/gpslocation.cpp b/qt-mobile/gpslocation.cpp index fc9767c65..02b211631 100644 --- a/qt-mobile/gpslocation.cpp +++ b/qt-mobile/gpslocation.cpp @@ -43,10 +43,6 @@ void GpsLocation::serviceEnable(bool toggle) } } -// these two need to become configurable -#define MINTIME 600 -#define MINDIST 200 - void GpsLocation::newPosition(QGeoPositionInfo pos) { time_t lastTime; @@ -61,7 +57,9 @@ void GpsLocation::newPosition(QGeoPositionInfo pos) } // if we have no record stored or if at least the configured minimum // time has passed or we moved at least the configured minimum distance - if (!nr || pos.timestamp().toTime_t() > lastTime + MINTIME || lastCoord.distanceTo(pos.coordinate()) > MINDIST) { + if (!nr || + pos.timestamp().toTime_t() > lastTime + prefs.time_threshold || + lastCoord.distanceTo(pos.coordinate()) > prefs.distance_threshold) { geoSettings->setValue("count", nr + 1); geoSettings->setValue(QString("gpsFix%1_time").arg(nr), pos.timestamp().toTime_t()); geoSettings->setValue(QString("gpsFix%1_lat").arg(nr), rint(pos.coordinate().latitude() * 1000000)); diff --git a/qt-mobile/qml/Preferences.qml b/qt-mobile/qml/Preferences.qml index 49ea7b057..f67f99ff7 100644 --- a/qt-mobile/qml/Preferences.qml +++ b/qt-mobile/qml/Preferences.qml @@ -90,6 +90,28 @@ Item { Layout.fillWidth: true } + Label { + text: "Distance threshold (meters)" + Layout.alignment: Qt.AlignRight + } + + TextField { + id: distanceThreshold + text: manager.distanceThreshold + Layout.fillWidth: true + } + + Label { + text: "Time threshold (minutes)" + Layout.alignment: Qt.AlignRight + } + + TextField { + id: timeThreshold + text: manager.timeThreshold + Layout.fillWidth: true + } + Item { width: units.gridUnit; height: width } Item { height: saveButton.height @@ -103,6 +125,8 @@ Item { manager.cloudPassword = password.text manager.saveCloudPassword = savePassword.checked manager.ssrfGpsWebUserid = userid.text + manager.distanceThreshold = distanceThreshold.text + manager.timeThreshold = timeThreshold.text manager.savePreferences() stackView.pop() } diff --git a/qt-mobile/qmlmanager.cpp b/qt-mobile/qmlmanager.cpp index 8dcc24395..fe8c5ed0a 100644 --- a/qt-mobile/qmlmanager.cpp +++ b/qt-mobile/qmlmanager.cpp @@ -26,6 +26,8 @@ QMLManager::QMLManager() : setCloudPassword(prefs.cloud_storage_password); setSaveCloudPassword(prefs.save_password_local); setSsrfGpsWebUserid(prefs.userid); + setDistanceThreshold(prefs.distance_threshold); + setTimeThreshold(prefs.time_threshold / 60); if (!same_string(prefs.cloud_storage_email, "") && !same_string(prefs.cloud_storage_password, "")) loadDives(); } @@ -38,6 +40,12 @@ void QMLManager::savePreferences() { QSettings s; s.setValue("subsurface_webservice_uid", ssrfGpsWebUserid()); + s.beginGroup("LocationService"); + s.setValue("time_threshold", timeThreshold() * 60); + prefs.time_threshold = timeThreshold() * 60; + s.setValue("distance_threshold", distanceThreshold()); + prefs.distance_threshold = distanceThreshold(); + s.endGroup(); s.beginGroup("CloudStorage"); s.setValue("email", cloudUserName()); s.setValue("save_password_local", saveCloudPassword()); @@ -240,3 +248,25 @@ void QMLManager::setSsrfGpsWebUserid(const QString &userid) m_ssrfGpsWebUserid = userid; emit ssrfGpsWebUseridChanged(); } + +int QMLManager::distanceThreshold() const +{ + return m_distanceThreshold; +} + +void QMLManager::setDistanceThreshold(int distance) +{ + m_distanceThreshold = distance; + emit distanceThresholdChanged(); +} + +int QMLManager::timeThreshold() const +{ + return m_timeThreshold; +} + +void QMLManager::setTimeThreshold(int time) +{ + m_timeThreshold = time; + emit timeThresholdChanged(); +} diff --git a/qt-mobile/qmlmanager.h b/qt-mobile/qmlmanager.h index b71dcfec5..1d5f8e412 100644 --- a/qt-mobile/qmlmanager.h +++ b/qt-mobile/qmlmanager.h @@ -17,6 +17,8 @@ class QMLManager : public QObject Q_PROPERTY(QString logText READ logText WRITE setLogText NOTIFY logTextChanged) Q_PROPERTY(bool locationServiceEnabled READ locationServiceEnabled WRITE setLocationServiceEnabled NOTIFY locationServiceEnabledChanged) Q_PROPERTY(QString ssrfGpsWebUserid READ ssrfGpsWebUserid WRITE setSsrfGpsWebUserid NOTIFY ssrfGpsWebUseridChanged) + Q_PROPERTY(int distanceThreshold READ distanceThreshold WRITE setDistanceThreshold NOTIFY distanceThresholdChanged) + Q_PROPERTY(int timeThreshold READ timeThreshold WRITE setTimeThreshold NOTIFY timeThresholdChanged) public: QMLManager(); ~QMLManager(); @@ -27,15 +29,21 @@ public: QString cloudPassword() const; void setCloudPassword(const QString &cloudPassword); - QString ssrfGpsWebUserid() const; - void setSsrfGpsWebUserid(const QString &userid); - bool saveCloudPassword() const; void setSaveCloudPassword(bool saveCloudPassword); + QString ssrfGpsWebUserid() const; + void setSsrfGpsWebUserid(const QString &userid); + bool locationServiceEnabled() const; void setLocationServiceEnabled(bool locationServiceEnable); + int distanceThreshold() const; + void setDistanceThreshold(int distance); + + int timeThreshold() const; + void setTimeThreshold(int time); + QString logText() const; void setLogText(const QString &logText); void appendTextToLog(const QString &newText); @@ -57,6 +65,8 @@ private: bool m_saveCloudPassword; QString m_logText; bool m_locationServiceEnabled; + int m_distanceThreshold; + int m_timeThreshold; GpsLocation *locationProvider; signals: @@ -66,6 +76,8 @@ signals: void saveCloudPasswordChanged(); void locationServiceEnabledChanged(); void logTextChanged(); + void timeThresholdChanged(); + void distanceThresholdChanged(); }; #endif diff --git a/subsurface-core/pref.h b/subsurface-core/pref.h index 9f5f587e2..348dcfbf2 100644 --- a/subsurface-core/pref.h +++ b/subsurface-core/pref.h @@ -123,6 +123,8 @@ struct preferences { geocoding_prefs_t geocoding; enum deco_mode deco_mode; short conservatism_level; + int time_threshold; + int distance_threshold; }; enum unit_system_values { METRIC, diff --git a/subsurface-core/qthelper.cpp b/subsurface-core/qthelper.cpp index 63248f6c4..c1205ce6f 100644 --- a/subsurface-core/qthelper.cpp +++ b/subsurface-core/qthelper.cpp @@ -1601,6 +1601,13 @@ void loadPreferences() // Subsurface webservice id is stored outside of the groups GET_TXT("subsurface_webservice_uid", userid); + // but the related time / distance threshold (only used in the mobile app) + // are in their own group + s.beginGroup("locationService"); + GET_INT("distance_threshold", distance_threshold); + GET_INT("time_threshold", time_threshold); + s.endGroup(); + // GeoManagement s.beginGroup("geocoding"); #ifdef DISABLED diff --git a/subsurface-core/subsurfacestartup.c b/subsurface-core/subsurfacestartup.c index 13cbbfa3f..5b3dfa8c1 100644 --- a/subsurface-core/subsurfacestartup.c +++ b/subsurface-core/subsurfacestartup.c @@ -79,7 +79,9 @@ struct preferences default_prefs = { .category = { 0 } }, .deco_mode = BUEHLMANN, - .conservatism_level = 3 + .conservatism_level = 3, + .distance_threshold = 1000, + .time_threshold = 600 }; int run_survey; |