summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mobile-widgets/qml/CloudCredentials.qml12
-rw-r--r--mobile-widgets/qml/DiveList.qml17
-rw-r--r--mobile-widgets/qml/Settings.qml33
-rw-r--r--mobile-widgets/qml/main.qml30
-rw-r--r--mobile-widgets/qmlmanager.cpp233
-rw-r--r--mobile-widgets/qmlmanager.h69
-rw-r--r--mobile-widgets/qmlprefs.cpp179
-rw-r--r--mobile-widgets/qmlprefs.h99
8 files changed, 389 insertions, 283 deletions
diff --git a/mobile-widgets/qml/CloudCredentials.qml b/mobile-widgets/qml/CloudCredentials.qml
index 52a7162ce..b32323d05 100644
--- a/mobile-widgets/qml/CloudCredentials.qml
+++ b/mobile-widgets/qml/CloudCredentials.qml
@@ -15,9 +15,9 @@ Item {
property string password: password.text;
function saveCredentials() {
- manager.cloudUserName = login.text
- manager.cloudPassword = password.text
- manager.cloudPin = pin.text
+ prefs.cloudUserName = login.text
+ prefs.cloudPassword = password.text
+ prefs.cloudPin = pin.text
manager.saveCloudCredentials()
}
@@ -60,7 +60,7 @@ Item {
Controls.TextField {
id: login
- text: manager.cloudUserName
+ text: prefs.cloudUserName
visible: !rootItem.showPin
Layout.fillWidth: true
inputMethodHints: Qt.ImhEmailCharactersOnly |
@@ -76,7 +76,7 @@ Item {
Controls.TextField {
id: password
- text: manager.cloudPassword
+ text: prefs.cloudPassword
visible: !rootItem.showPin
echoMode: TextInput.PasswordEchoOnEdit
inputMethodHints: Qt.ImhSensitiveData |
@@ -146,7 +146,7 @@ Item {
text: qsTr("No cloud mode")
onClicked: {
manager.syncToCloud = false
- manager.credentialStatus = QMLManager.CS_NOCLOUD
+ manager.credentialStatus = QMLPrefs.CS_NOCLOUD
manager.saveCloudCredentials()
manager.openNoCloudRepo()
}
diff --git a/mobile-widgets/qml/DiveList.qml b/mobile-widgets/qml/DiveList.qml
index 31b2204fa..36929951a 100644
--- a/mobile-widgets/qml/DiveList.qml
+++ b/mobile-widgets/qml/DiveList.qml
@@ -13,7 +13,7 @@ Kirigami.ScrollablePage {
title: qsTr("Dive list")
verticalScrollBarPolicy: Qt.ScrollBarAlwaysOff
width: subsurfaceTheme.columnWidth
- property int credentialStatus: manager.credentialStatus
+ property int credentialStatus: prefs.credentialStatus
property int numDives: diveListView.count
property color textColor: subsurfaceTheme.textColor
property color secondaryTextColor: subsurfaceTheme.secondaryTextColor
@@ -23,14 +23,14 @@ Kirigami.ScrollablePage {
supportsRefreshing: true
onRefreshingChanged: {
if (refreshing) {
- if (manager.credentialStatus === QMLManager.CS_VERIFIED) {
+ if (prefs.credentialStatus === QMLPrefs.CS_VERIFIED) {
console.log("User pulled down dive list - syncing with cloud storage")
detailsWindow.endEditMode()
manager.saveChangesCloud(true)
console.log("done syncing, turn off spinner")
refreshing = false
} else {
- console.log("sync with cloud storage requested, but credentialStatus is " + manager.credentialStatus)
+ console.log("sync with cloud storage requested, but credentialStatus is " + prefs.credentialStatus)
console.log("no syncing, turn off spinner")
refreshing = false
}
@@ -339,7 +339,8 @@ Kirigami.ScrollablePage {
StartPage {
id: startPage
anchors.fill: parent
- opacity: credentialStatus === QMLManager.CS_NOCLOUD || (credentialStatus === QMLManager.CS_VERIFIED) ? 0 : 1
+ opacity: credentialStatus === QMLPrefs.CS_NOCLOUD ||
+ (credentialStatus === QMLPrefs.CS_VERIFIED) ? 0 : 1
visible: opacity > 0
Behavior on opacity { NumberAnimation { duration: Kirigami.Units.shortDuration } }
function setupActions() {
@@ -347,7 +348,8 @@ Kirigami.ScrollablePage {
page.actions.main = null
page.actions.right = null
page.title = qsTr("Cloud credentials")
- } else if (manager.credentialStatus === QMLManager.CS_VERIFIED || manager.credentialStatus === QMLManager.CS_NOCLOUD) {
+ } else if (prefs.credentialStatus === QMLPrefs.CS_VERIFIED ||
+ prefs.credentialStatus === QMLPrefs.CS_NOCLOUD) {
page.actions.main = page.downloadFromDCAction
page.actions.right = page.addDiveAction
page.title = qsTr("Dive list")
@@ -424,8 +426,9 @@ Kirigami.ScrollablePage {
}
onBackRequested: {
- if (startPage.visible && diveListView.count > 0 && manager.credentialStatus !== QMLManager.CS_INCORRECT_USER_PASSWD) {
- manager.credentialStatus = oldStatus
+ if (startPage.visible && diveListView.count > 0 &&
+ prefs.credentialStatus !== QMLPrefs.CS_INCORRECT_USER_PASSWD) {
+ prefs.credentialStatus = oldStatus
event.accepted = true;
}
if (!startPage.visible) {
diff --git a/mobile-widgets/qml/Settings.qml b/mobile-widgets/qml/Settings.qml
index 40ee2ea08..3c567f156 100644
--- a/mobile-widgets/qml/Settings.qml
+++ b/mobile-widgets/qml/Settings.qml
@@ -42,7 +42,8 @@ Kirigami.ScrollablePage {
Layout.preferredHeight: Kirigami.Units.gridUnit * 2
}
Controls.Label {
- text: manager.credentialStatus === QMLManager.CS_NOCLOUD ? qsTr("Not applicable") : manager.cloudUserName
+ text: prefs.credentialStatus === QMLPrefs.CS_NOCLOUD ? qsTr("Not applicable") :
+ prefs.cloudUserName
Layout.alignment: Qt.AlignRight
Layout.preferredWidth: gridWidth * 0.60
Layout.preferredHeight: Kirigami.Units.gridUnit * 2
@@ -63,7 +64,7 @@ Kirigami.ScrollablePage {
Layout.preferredHeight: Kirigami.Units.gridUnit * 2
}
Controls.Label {
- text: describe[manager.credentialStatus]
+ text: describe[prefs.credentialStatus]
Layout.alignment: Qt.AlignRight
Layout.preferredWidth: gridWidth * 0.60
Layout.preferredHeight: Kirigami.Units.gridUnit * 2
@@ -136,8 +137,8 @@ Kirigami.ScrollablePage {
enabled: subsurfaceTheme.currentTheme !== "Blue"
onClicked: {
blueTheme()
- manager.theme = subsurfaceTheme.currentTheme
- manager.savePreferences()
+ prefs.theme = subsurfaceTheme.currentTheme
+ prefs.savePreferences()
}
}
@@ -189,8 +190,8 @@ Kirigami.ScrollablePage {
enabled: subsurfaceTheme.currentTheme !== "Pink"
onClicked: {
pinkTheme()
- manager.theme = subsurfaceTheme.currentTheme
- manager.savePreferences()
+ prefs.theme = subsurfaceTheme.currentTheme
+ prefs.savePreferences()
}
}
@@ -241,8 +242,8 @@ Kirigami.ScrollablePage {
enabled: subsurfaceTheme.currentTheme !== "Dark"
onClicked: {
darkTheme()
- manager.theme = subsurfaceTheme.currentTheme
- manager.savePreferences()
+ prefs.theme = subsurfaceTheme.currentTheme
+ prefs.savePreferences()
}
}
}
@@ -275,11 +276,11 @@ Kirigami.ScrollablePage {
Controls.TextField {
id: distanceThreshold
- text: manager.distanceThreshold
+ text: prefs.distanceThreshold
Layout.preferredWidth: gridWidth * 0.25
onEditingFinished: {
- manager.distanceThreshold = distanceThreshold.text
- manager.savePreferences()
+ prefs.distanceThreshold = distanceThreshold.text
+ prefs.savePreferences()
}
}
@@ -291,11 +292,11 @@ Kirigami.ScrollablePage {
Controls.TextField {
id: timeThreshold
- text: manager.timeThreshold
+ text: prefs.timeThreshold
Layout.preferredWidth: gridWidth * 0.25
onEditingFinished: {
- manager.timeThreshold = timeThreshold.text
- manager.savePreferences()
+ prefs.timeThreshold = timeThreshold.text
+ prefs.savePreferences()
}
}
@@ -325,10 +326,10 @@ Kirigami.ScrollablePage {
}
SsrfSwitch {
id: developerButton
- checked: manager.developer
+ checked: prefs.developer
Layout.preferredWidth: gridWidth * 0.25
onClicked: {
- manager.developer = checked
+ prefs.developer = checked
}
}
}
diff --git a/mobile-widgets/qml/main.qml b/mobile-widgets/qml/main.qml
index 28f16a9b8..125d964ec 100644
--- a/mobile-widgets/qml/main.qml
+++ b/mobile-widgets/qml/main.qml
@@ -20,11 +20,11 @@ Kirigami.ApplicationWindow {
maximumHeight: Kirigami.Units.gridUnit * 2
background: Rectangle { color: subsurfaceTheme.primaryColor }
}
- property alias oldStatus: manager.oldStatus
+ property alias oldStatus: prefs.oldStatus
property alias notificationText: manager.notificationText
property alias syncToCloud: manager.syncToCloud
property alias locationServiceEnabled: manager.locationServiceEnabled
- property alias showPin: manager.showPin
+ property alias showPin: prefs.showPin
onNotificationTextChanged: {
if (notificationText != "") {
// there's a risk that we have a >5 second gap in update events;
@@ -119,12 +119,12 @@ Kirigami.ApplicationWindow {
}
text: qsTr("Dive list")
onTriggered: {
- manager.appendTextToLog("requested dive list with credential status " + manager.credentialStatus)
- if (manager.credentialStatus == QMLManager.CS_UNKNOWN) {
+ manager.appendTextToLog("requested dive list with credential status " + prefs.credentialStatus)
+ if (prefs.credentialStatus == QMLPrefs.CS_UNKNOWN) {
// the user has asked to change credentials - if the credentials before that
// were valid, go back to dive list
- if (oldStatus == QMLManager.CS_VERIFIED) {
- manager.credentialStatus = oldStatus
+ if (oldStatus == QMLPrefs.CS_VERIFIED) {
+ prefs.credentialStatus = oldStatus
}
}
returnTopPage()
@@ -150,7 +150,8 @@ Kirigami.ApplicationWindow {
name: ":/icons/ic_add.svg"
}
text: qsTr("Add dive manually")
- enabled: manager.credentialStatus === QMLManager.CS_VERIFIED || manager.credentialStatus === QMLManager.CS_NOCLOUD
+ enabled: prefs.credentialStatus === QMLPrefs.CS_VERIFIED ||
+ prefs.credentialStatus === QMLPrefs.CS_NOCLOUD
onTriggered: {
globalDrawer.close()
returnTopPage() // otherwise odd things happen with the page stack
@@ -184,13 +185,14 @@ Kirigami.ApplicationWindow {
name: ":/icons/cloud_sync.svg"
}
text: qsTr("Manual sync with cloud")
- enabled: manager.credentialStatus === QMLManager.CS_VERIFIED || manager.credentialStatus === QMLManager.CS_NOCLOUD
+ enabled: prefs.credentialStatus === QMLPrefs.CS_VERIFIED ||
+ prefs.credentialStatus === QMLPrefs.CS_NOCLOUD
onTriggered: {
- if (manager.credentialStatus === QMLManager.CS_NOCLOUD) {
+ if (prefs.credentialStatus === QMLPrefs.CS_NOCLOUD) {
returnTopPage()
- oldStatus = manager.credentialStatus
+ oldStatus = prefs.credentialStatus
manager.startPageText = "Enter valid cloud storage credentials"
- manager.credentialStatus = QMLManager.CS_UNKNOWN
+ prefs.credentialStatus = QMLPrefs.CS_UNKNOWN
globalDrawer.close()
} else {
globalDrawer.close()
@@ -205,7 +207,7 @@ Kirigami.ApplicationWindow {
name: syncToCloud ? ":/icons/ic_cloud_off.svg" : ":/icons/ic_cloud_done.svg"
}
text: syncToCloud ? qsTr("Disable auto cloud sync") : qsTr("Enable auto cloud sync")
- enabled: manager.credentialStatus !== QMLManager.CS_NOCLOUD
+ enabled: prefs.credentialStatus !== QMLPrefs.CS_NOCLOUD
onTriggered: {
syncToCloud = !syncToCloud
if (!syncToCloud) {
@@ -307,7 +309,7 @@ if you have network connectivity and want to sync your data to cloud storage."),
name: ":/icons/ic_adb.svg"
}
text: qsTr("Developer")
- visible: manager.developer
+ visible: prefs.developer
Kirigami.Action {
text: qsTr("App log")
onTriggered: {
@@ -452,7 +454,7 @@ if you have network connectivity and want to sync your data to cloud storage."),
property int columnWidth: Math.round(rootItem.width/(Kirigami.Units.gridUnit*28)) > 0 ? Math.round(rootItem.width / Math.round(rootItem.width/(Kirigami.Units.gridUnit*28))) : rootItem.width
Component.onCompleted: {
// this needs to pick the theme from persistent preference settings
- var theme = manager.theme
+ var theme = prefs.theme
if (theme == "Blue")
blueTheme()
else if (theme == "Pink")
diff --git a/mobile-widgets/qmlmanager.cpp b/mobile-widgets/qmlmanager.cpp
index 94e15ef66..e441428b9 100644
--- a/mobile-widgets/qmlmanager.cpp
+++ b/mobile-widgets/qmlmanager.cpp
@@ -1,5 +1,6 @@
// SPDX-License-Identifier: GPL-2.0
#include "qmlmanager.h"
+#include "qmlprefs.h"
#include <QUrl>
#include <QSettings>
#include <QDebug>
@@ -22,15 +23,16 @@
#include "qt-models/messagehandlermodel.h"
#include "core/divelist.h"
#include "core/device.h"
-#include "core/pref.h"
#include "core/qthelper.h"
#include "core/qt-gui.h"
#include "core/git-access.h"
#include "core/cloudstorage.h"
-#include "core/subsurface-qt/SettingsObjectWrapper.h"
#include "core/membuffer.h"
#include "qt-models/tankinfomodel.h"
#include "core/downloadfromdcthread.h"
+#include "core/subsurface-string.h"
+#include "core/pref.h"
+#include "core/subsurface-qt/SettingsObjectWrapper.h"
#include "core/ssrf.h"
@@ -134,7 +136,6 @@ QMLManager::QMLManager() : m_locationServiceEnabled(false),
deletedTrip(0),
m_updateSelectedDive(-1),
m_selectedDiveTimestamp(0),
- m_credentialStatus(CS_UNKNOWN),
alreadySaving(false),
m_device_data(new DCDeviceData)
{
@@ -183,7 +184,7 @@ QMLManager::QMLManager() : m_locationServiceEnabled(false),
LOG_STP("qmlmgr bt available");
connect(&btDiscovery->localBtDevice, &QBluetoothLocalDevice::hostModeStateChanged,
this, &QMLManager::btHostModeChange);
- setShowPin(false);
+ QMLPrefs::instance()->setShowPin(false);
// create location manager service
locationProvider = new GpsLocation(&appendTextToLogStandalone, this);
progress_callback = &progressCallback;
@@ -246,12 +247,12 @@ void QMLManager::openLocalThenRemote(QString url)
* no cloud repo solves this.
*/
- if (m_credentialStatus != CS_NOCLOUD)
- setCredentialStatus(CS_NEED_TO_VERIFY);
+ if (QMLPrefs::instance()->credentialStatus() != QMLPrefs::CS_NOCLOUD)
+ QMLPrefs::instance()->setCredentialStatus(QMLPrefs::CS_NEED_TO_VERIFY);
} else {
// if we can load from the cache, we know that we have a valid cloud account
- if (m_credentialStatus == CS_UNKNOWN)
- setCredentialStatus(CS_VERIFIED);
+ if (QMLPrefs::instance()->credentialStatus() == QMLPrefs::CS_UNKNOWN)
+ QMLPrefs::instance()->setCredentialStatus(QMLPrefs::CS_VERIFIED);
prefs.unit_system = git_prefs.unit_system;
if (git_prefs.unit_system == IMPERIAL)
git_prefs.units = IMPERIAL_units;
@@ -269,11 +270,11 @@ void QMLManager::openLocalThenRemote(QString url)
appendTextToLog(QStringLiteral("%1 dives loaded from cache").arg(dive_table.nr));
setNotificationText(tr("%1 dives loaded from local dive data file").arg(dive_table.nr));
}
- if (m_credentialStatus == CS_NEED_TO_VERIFY) {
+ if (QMLPrefs::instance()->credentialStatus() == QMLPrefs::CS_NEED_TO_VERIFY) {
appendTextToLog(QStringLiteral("have cloud credentials, but still needs PIN"));
- setShowPin(true);
+ QMLPrefs::instance()->setShowPin(true);
}
- if (m_oldStatus == CS_NOCLOUD) {
+ if (QMLPrefs::instance()->oldStatus() == QMLPrefs::CS_NOCLOUD) {
// if we switch to credentials from CS_NOCLOUD, we take things online temporarily
prefs.git_local_only = false;
appendTextToLog(QStringLiteral("taking things online to be able to switch to cloud account"));
@@ -304,42 +305,6 @@ void QMLManager::mergeLocalRepo()
process_dives(true, false);
}
-void QMLManager::clearCredentials()
-{
- setCloudUserName(NULL);
- setCloudPassword(NULL);
- setCloudPin(NULL);
-}
-
-void QMLManager::cancelCredentialsPinSetup()
-{
- /*
- * The user selected <cancel> on the final stage of the
- * cloud account generation (entering the emailed PIN).
- *
- * Resets the cloud credential status to CS_UNKNOWN, resulting
- * in a return to the first crededentials page, with the
- * email and passwd still filled in. In case of a cancel
- * of registration (from the PIN page), the email address
- * was probably misspelled, so the user never received a PIN to
- * complete the process.
- *
- * Notice that this function is also used to switch to a different
- * cloud account, so the name is not perfect.
- */
- QSettings s;
-
- setCredentialStatus(CS_UNKNOWN);
- s.beginGroup("CloudStorage");
- s.setValue("email", m_cloudUserName);
- s.setValue("password", m_cloudPassword);
- s.setValue("cloud_verification_status", m_credentialStatus);
- s.sync();
- setStartPageText(tr("Starting..."));
-
- setShowPin(false);
-}
-
void QMLManager::copyAppLogToClipboard()
{
/*
@@ -369,21 +334,22 @@ void QMLManager::copyAppLogToClipboard()
void QMLManager::finishSetup()
{
// Initialize cloud credentials.
- setCloudUserName(prefs.cloud_storage_email);
- setCloudPassword(prefs.cloud_storage_password);
+ QMLPrefs::instance()->setCloudUserName(prefs.cloud_storage_email);
+ QMLPrefs::instance()->setCloudPassword(prefs.cloud_storage_password);
setSyncToCloud(!prefs.git_local_only);
- setCredentialStatus((cloud_status_qml) prefs.cloud_verification_status);
+ QMLPrefs::instance()->setCredentialStatus((QMLPrefs::cloud_status_qml) prefs.cloud_verification_status);
// if the cloud credentials are valid, we should get the GPS Webservice ID as well
QString url;
- if (!m_cloudUserName.isEmpty() &&
- !m_cloudPassword.isEmpty() &&
+ if (!QMLPrefs::instance()->cloudUserName().isEmpty() &&
+ !QMLPrefs::instance()->cloudPassword().isEmpty() &&
getCloudURL(url) == 0) {
// we know that we are the first ones to access git storage, so we don't need to test,
// but we need to make sure we stay the only ones accessing git storage
alreadySaving = true;
openLocalThenRemote(url);
- } else if (!empty_string(existing_filename) && m_credentialStatus != CS_UNKNOWN) {
- setCredentialStatus(CS_NOCLOUD);
+ } else if (!empty_string(existing_filename) &&
+ QMLPrefs::instance()->credentialStatus() != QMLPrefs::CS_UNKNOWN) {
+ QMLPrefs::instance()->setCredentialStatus(QMLPrefs::CS_NOCLOUD);
saveCloudCredentials();
appendTextToLog(tr("working in no-cloud mode"));
int error = parse_file(existing_filename);
@@ -397,12 +363,12 @@ void QMLManager::finishSetup()
appendTextToLog(QString("working in no-cloud mode, finished loading %1 dives from %2").arg(dive_table.nr).arg(existing_filename));
}
} else {
- setCredentialStatus(CS_UNKNOWN);
+ QMLPrefs::instance()->setCredentialStatus(QMLPrefs::CS_UNKNOWN);
appendTextToLog(tr("no cloud credentials"));
setStartPageText(RED_FONT + tr("Please enter valid cloud credentials.") + END_FONT);
}
- setDistanceThreshold(prefs.distance_threshold);
- setTimeThreshold(prefs.time_threshold / 60);
+ QMLPrefs::instance()->setDistanceThreshold(prefs.distance_threshold);
+ QMLPrefs::instance()->setTimeThreshold(prefs.time_threshold / 60);
}
QMLManager::~QMLManager()
@@ -421,9 +387,9 @@ QMLManager *QMLManager::instance()
void QMLManager::savePreferences()
{
- auto location = SettingsObjectWrapper::instance()->location_settings;
- location->setTimeThreshold(m_timeThreshold * 60);
- location->setDistanceThreshold(m_distanceThreshold);
+ auto location = SettingsObjectWrapper::instance()->location_settings;
+ location->setTimeThreshold(QMLPrefs::instance()->timeThreshold() * 60);
+ location->setDistanceThreshold(QMLPrefs::instance()->distanceThreshold());
}
#define CLOUDURL QString(prefs.cloud_base_url)
@@ -435,42 +401,49 @@ void QMLManager::saveCloudCredentials()
bool cloudCredentialsChanged = false;
// make sure we only have letters, numbers, and +-_. in password and email address
QRegularExpression regExp("^[a-zA-Z0-9@.+_-]+$");
- if (m_credentialStatus != CS_NOCLOUD) {
+ if (QMLPrefs::instance()->credentialStatus() != QMLPrefs::CS_NOCLOUD) {
// in case of NO_CLOUD, the email address + passwd do not care, so do not check it.
- if (m_cloudPassword.isEmpty() || !regExp.match(m_cloudPassword).hasMatch() || !regExp.match(m_cloudUserName).hasMatch()) {
+ if (QMLPrefs::instance()->cloudPassword().isEmpty() ||
+ !regExp.match(QMLPrefs::instance()->cloudPassword()).hasMatch() ||
+ !regExp.match(QMLPrefs::instance()->cloudUserName()).hasMatch()) {
setStartPageText(RED_FONT + tr("Cloud storage email and password can only consist of letters, numbers, and '.', '-', '_', and '+'.") + END_FONT);
return;
}
// use the same simplistic regex as the backend to check email addresses
regExp = QRegularExpression("^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.+_-]+\\.[a-zA-Z0-9]+");
- if (!regExp.match(m_cloudUserName).hasMatch()) {
+ if (!regExp.match(QMLPrefs::instance()->cloudUserName()).hasMatch()) {
setStartPageText(RED_FONT + tr("Invalid format for email address") + END_FONT);
return;
}
}
s.beginGroup("CloudStorage");
- s.setValue("email", m_cloudUserName);
- s.setValue("password", m_cloudPassword);
- s.setValue("cloud_verification_status", m_credentialStatus);
+ s.setValue("email", QMLPrefs::instance()->cloudUserName());
+ s.setValue("password", QMLPrefs::instance()->cloudPassword());
+ s.setValue("cloud_verification_status", QMLPrefs::instance()->credentialStatus());
s.sync();
- if (!same_string(prefs.cloud_storage_email, qPrintable(m_cloudUserName))) {
+ if (!same_string(prefs.cloud_storage_email,
+ qPrintable(QMLPrefs::instance()->cloudUserName()))) {
free((void *)prefs.cloud_storage_email);
- prefs.cloud_storage_email = copy_qstring(m_cloudUserName);
+ prefs.cloud_storage_email = copy_qstring(QMLPrefs::instance()->cloudUserName());
cloudCredentialsChanged = true;
}
- cloudCredentialsChanged |= !same_string(prefs.cloud_storage_password, qPrintable(m_cloudPassword));
+ cloudCredentialsChanged |= !same_string(prefs.cloud_storage_password,
+ qPrintable(QMLPrefs::instance()->cloudPassword()));
- if (m_credentialStatus != CS_NOCLOUD && !cloudCredentialsChanged) {
+ if (QMLPrefs::instance()->credentialStatus() != QMLPrefs::CS_NOCLOUD &&
+ !cloudCredentialsChanged) {
// just go back to the dive list
- setCredentialStatus(m_oldStatus);
+ QMLPrefs::instance()->setCredentialStatus(QMLPrefs::instance()->oldStatus());
}
- if (!same_string(prefs.cloud_storage_password, qPrintable(m_cloudPassword))) {
+ if (!same_string(prefs.cloud_storage_password,
+ qPrintable(QMLPrefs::instance()->cloudPassword()))) {
free((void *)prefs.cloud_storage_password);
- prefs.cloud_storage_password = copy_qstring(m_cloudPassword);
+ prefs.cloud_storage_password = copy_qstring(QMLPrefs::instance()->cloudPassword());
}
- if (m_cloudUserName.isEmpty() || m_cloudPassword.isEmpty()) {
+ if (QMLPrefs::instance()->cloudUserName().isEmpty() ||
+ QMLPrefs::instance()->cloudPassword().isEmpty()) {
setStartPageText(RED_FONT + tr("Please enter valid cloud credentials.") + END_FONT);
} else if (cloudCredentialsChanged) {
// let's make sure there are no unsaved changes
@@ -493,7 +466,8 @@ void QMLManager::saveCloudCredentials()
currentGitLocalOnly = prefs.git_local_only;
prefs.git_local_only = false;
openLocalThenRemote(url);
- } else if (prefs.cloud_verification_status == CS_NEED_TO_VERIFY && !m_cloudPin.isEmpty()) {
+ } else if (prefs.cloud_verification_status == QMLPrefs::CS_NEED_TO_VERIFY &&
+ !QMLPrefs::instance()->cloudPin().isEmpty()) {
// the user entered a PIN?
tryRetrieveDataFromBackend();
}
@@ -508,7 +482,8 @@ void QMLManager::tryRetrieveDataFromBackend()
setStartPageText(tr("Testing cloud credentials"));
appendTextToLog("Have credentials, let's see if they are valid");
CloudStorageAuthenticate *csa = new CloudStorageAuthenticate(this);
- csa->backend(prefs.cloud_storage_email, prefs.cloud_storage_password, m_cloudPin);
+ csa->backend(prefs.cloud_storage_email, prefs.cloud_storage_password,
+ QMLPrefs::instance()->cloudPin());
// let's wait here for the signal to avoid too many more nested functions
QTimer myTimer;
myTimer.setSingleShot(true);
@@ -524,7 +499,7 @@ void QMLManager::tryRetrieveDataFromBackend()
return;
}
myTimer.stop();
- setCloudPin("");
+ QMLPrefs::instance()->setCloudPin("");
if (prefs.cloud_verification_status == CS_INCORRECT_USER_PASSWD) {
appendTextToLog(QStringLiteral("Incorrect cloud credentials"));
setStartPageText(RED_FONT + tr("Incorrect cloud credentials") + END_FONT);
@@ -535,11 +510,11 @@ void QMLManager::tryRetrieveDataFromBackend()
appendTextToLog(QStringLiteral("Need to verify the email address - enter PIN"));
setStartPageText(RED_FONT + tr("Cannot connect to cloud storage - cloud account not verified") + END_FONT);
revertToNoCloudIfNeeded();
- setShowPin(true);
+ QMLPrefs::instance()->setShowPin(true);
return;
}
- if (m_showPin)
- setShowPin(false);
+ if (QMLPrefs::instance()->showPin())
+ QMLPrefs::instance()->setShowPin(false);
// now check the redirect URL to make sure everything is set up on the cloud server
connect(manager(), &QNetworkAccessManager::authenticationRequired, this, &QMLManager::provideAuth, Qt::UniqueConnection);
@@ -561,7 +536,7 @@ void QMLManager::provideAuth(QNetworkReply *reply, QAuthenticator *auth)
// OK, credentials have been tried and didn't work, so they are invalid
appendTextToLog("Cloud credentials are invalid");
setStartPageText(RED_FONT + tr("Cloud credentials are invalid") + END_FONT);
- setCredentialStatus(CS_INCORRECT_USER_PASSWD);
+ QMLPrefs::instance()->setCredentialStatus(QMLPrefs::CS_INCORRECT_USER_PASSWD);
reply->disconnect();
reply->abort();
reply->deleteLater();
@@ -605,7 +580,7 @@ void QMLManager::retrieveUserid()
revertToNoCloudIfNeeded();
return;
}
- setCredentialStatus(CS_VERIFIED);
+ QMLPrefs::instance()->setCredentialStatus(QMLPrefs::CS_VERIFIED);
QString userid(prefs.userid);
if (userid.isEmpty()) {
if (empty_string(prefs.cloud_storage_email) || empty_string(prefs.cloud_storage_password)) {
@@ -624,7 +599,7 @@ void QMLManager::retrieveUserid()
s.setValue("subsurface_webservice_uid", prefs.userid);
s.sync();
}
- setCredentialStatus(CS_VERIFIED);
+ QMLPrefs::instance()->setCredentialStatus(QMLPrefs::CS_VERIFIED);
setStartPageText(tr("Cloud credentials valid, loading dives..."));
// this only gets called with "alreadySaving" already locked
loadDivesWithValidCredentials();
@@ -674,7 +649,7 @@ successful_exit:
setLoadFromCloud(true);
// if we came from local storage mode, let's merge the local data into the local cache
// for the remote data - which then later gets merged with the remote data if necessary
- if (m_oldStatus == CS_NOCLOUD) {
+ if (QMLPrefs::instance()->oldStatus() == QMLPrefs::CS_NOCLOUD) {
git_storage_update_progress(qPrintable(tr("Loading dives from local storage ('no cloud' mode)")));
dive_table.preexisting = dive_table.nr;
mergeLocalRepo();
@@ -702,7 +677,7 @@ void QMLManager::revertToNoCloudIfNeeded()
currentGitLocalOnly = false;
prefs.git_local_only = true;
}
- if (m_oldStatus == CS_NOCLOUD) {
+ if (QMLPrefs::instance()->oldStatus() == QMLPrefs::CS_NOCLOUD) {
// we tried to switch to a cloud account and had previously used local data,
// but connecting to the cloud account (and subsequently merging the local
// and cloud data) failed - so let's delete the cloud credentials and go
@@ -716,9 +691,9 @@ void QMLManager::revertToNoCloudIfNeeded()
prefs.cloud_storage_email = NULL;
free((void *)prefs.cloud_storage_password);
prefs.cloud_storage_password = NULL;
- setCloudUserName("");
- setCloudPassword("");
- setCredentialStatus(CS_NOCLOUD);
+ QMLPrefs::instance()->setCloudUserName("");
+ QMLPrefs::instance()->setCloudPassword("");
+ QMLPrefs::instance()->setCredentialStatus(QMLPrefs::CS_NOCLOUD);
set_filename(NOCLOUD_LOCALSTORAGE);
setStartPageText(RED_FONT + tr("Failed to connect to cloud server, reverting to no cloud status") + END_FONT);
}
@@ -1183,7 +1158,7 @@ void QMLManager::openNoCloudRepo()
void QMLManager::saveChangesLocal()
{
if (unsaved_changes()) {
- if (m_credentialStatus == CS_NOCLOUD) {
+ if (QMLPrefs::instance()->credentialStatus() == QMLPrefs::CS_NOCLOUD) {
if (empty_string(existing_filename)) {
char *filename = NOCLOUD_LOCALSTORAGE;
git_create_local_repo(filename);
@@ -1426,52 +1401,6 @@ void QMLManager::setVerboseEnabled(bool verboseMode)
emit verboseEnabledChanged();
}
-void QMLManager::setCloudPassword(const QString &cloudPassword)
-{
- m_cloudPassword = cloudPassword;
- emit cloudPasswordChanged();
-}
-
-void QMLManager::setCloudPin(const QString &cloudPin)
-{
- m_cloudPin = cloudPin;
- emit cloudPinChanged();
-}
-
-void QMLManager::setCloudUserName(const QString &cloudUserName)
-{
- m_cloudUserName = cloudUserName.toLower();
- emit cloudUserNameChanged();
-}
-
-void QMLManager::setDistanceThreshold(int distance)
-{
- m_distanceThreshold = distance;
- emit distanceThresholdChanged();
-}
-
-void QMLManager::setTimeThreshold(int time)
-{
- m_timeThreshold = time;
- locationProvider->setGpsTimeThreshold(m_timeThreshold * 60);
- emit timeThresholdChanged();
-}
-
-void QMLManager::setTheme(QString theme)
-{
- QSettings s;
- s.beginGroup("Theme");
- s.setValue("currentTheme", theme);
- emit themeChanged();
-}
-
-QString QMLManager::theme() const
-{
- QSettings s;
- s.beginGroup("Theme");
- return s.value("currentTheme", "Blue").toString();
-}
-
void QMLManager::syncLoadFromCloud()
{
QSettings s;
@@ -1494,28 +1423,6 @@ void QMLManager::setStartPageText(const QString& text)
emit startPageTextChanged();
}
-void QMLManager::setCredentialStatus(const cloud_status_qml value)
-{
- if (m_credentialStatus != value) {
- setOldStatus(m_credentialStatus);
- if (value == CS_NOCLOUD) {
- appendTextToLog("Switching to no cloud mode");
- set_filename(NOCLOUD_LOCALSTORAGE);
- clearCredentials();
- }
- m_credentialStatus = value;
- emit credentialStatusChanged();
- }
-}
-
-void QMLManager::setOldStatus(const cloud_status_qml value)
-{
- if (m_oldStatus != value) {
- m_oldStatus = value;
- emit oldStatusChanged();
- }
-}
-
QString QMLManager::getNumber(const QString& diveId)
{
int dive_id = diveId.toInt();
@@ -1647,24 +1554,12 @@ QStringList QMLManager::cylinderInit() const
return cylinders;
}
-void QMLManager::setShowPin(bool enable)
-{
- m_showPin = enable;
- emit showPinChanged();
-}
-
void QMLManager::setProgressMessage(QString text)
{
m_progressMessage = text;
emit progressMessageChanged();
}
-void QMLManager::setDeveloper(bool value)
-{
- m_developer = value;
- emit developerChanged();
-}
-
void QMLManager::setBtEnabled(bool value)
{
m_btEnabled = value;
diff --git a/mobile-widgets/qmlmanager.h b/mobile-widgets/qmlmanager.h
index 6de279b4b..abc497e0c 100644
--- a/mobile-widgets/qmlmanager.h
+++ b/mobile-widgets/qmlmanager.h
@@ -21,21 +21,12 @@
class QMLManager : public QObject {
Q_OBJECT
- Q_ENUMS(cloud_status_qml)
- Q_PROPERTY(QString cloudUserName MEMBER m_cloudUserName WRITE setCloudUserName NOTIFY cloudUserNameChanged)
- Q_PROPERTY(QString cloudPassword MEMBER m_cloudPassword WRITE setCloudPassword NOTIFY cloudPasswordChanged)
- Q_PROPERTY(QString cloudPin MEMBER m_cloudPin WRITE setCloudPin NOTIFY cloudPinChanged)
Q_PROPERTY(QString logText READ logText WRITE setLogText NOTIFY logTextChanged)
Q_PROPERTY(bool locationServiceEnabled MEMBER m_locationServiceEnabled WRITE setLocationServiceEnabled NOTIFY locationServiceEnabledChanged)
Q_PROPERTY(bool locationServiceAvailable MEMBER m_locationServiceAvailable WRITE setLocationServiceAvailable NOTIFY locationServiceAvailableChanged)
- Q_PROPERTY(int distanceThreshold MEMBER m_distanceThreshold WRITE setDistanceThreshold NOTIFY distanceThresholdChanged)
- Q_PROPERTY(int timeThreshold MEMBER m_timeThreshold WRITE setTimeThreshold NOTIFY timeThresholdChanged)
- Q_PROPERTY(QString theme READ theme WRITE setTheme NOTIFY themeChanged)
Q_PROPERTY(bool loadFromCloud MEMBER m_loadFromCloud WRITE setLoadFromCloud NOTIFY loadFromCloudChanged)
Q_PROPERTY(QString startPageText MEMBER m_startPageText WRITE setStartPageText NOTIFY startPageTextChanged)
Q_PROPERTY(bool verboseEnabled MEMBER m_verboseEnabled WRITE setVerboseEnabled NOTIFY verboseEnabledChanged)
- Q_PROPERTY(cloud_status_qml credentialStatus MEMBER m_credentialStatus WRITE setCredentialStatus NOTIFY credentialStatusChanged)
- Q_PROPERTY(cloud_status_qml oldStatus MEMBER m_oldStatus WRITE setOldStatus NOTIFY oldStatusChanged)
Q_PROPERTY(QString notificationText MEMBER m_notificationText WRITE setNotificationText NOTIFY notificationTextChanged)
Q_PROPERTY(bool syncToCloud MEMBER m_syncToCloud WRITE setSyncToCloud NOTIFY syncToCloudChanged)
Q_PROPERTY(int updateSelectedDive MEMBER m_updateSelectedDive WRITE setUpdateSelectedDive NOTIFY updateSelectedDiveChanged)
@@ -45,9 +36,7 @@ class QMLManager : public QObject {
Q_PROPERTY(QStringList divemasterList READ divemasterList NOTIFY divemasterListChanged)
Q_PROPERTY(QStringList locationList READ locationList NOTIFY locationListChanged)
Q_PROPERTY(QStringList cylinderInit READ cylinderInit CONSTANT)
- Q_PROPERTY(bool showPin MEMBER m_showPin WRITE setShowPin NOTIFY showPinChanged)
Q_PROPERTY(QString progressMessage MEMBER m_progressMessage WRITE setProgressMessage NOTIFY progressMessageChanged)
- Q_PROPERTY(bool developer MEMBER m_developer WRITE setDeveloper NOTIFY developerChanged)
Q_PROPERTY(bool btEnabled MEMBER m_btEnabled WRITE setBtEnabled NOTIFY btEnabledChanged)
Q_PROPERTY(QString DC_vendor READ DC_vendor WRITE DC_setVendor)
@@ -106,27 +95,10 @@ public:
Q_INVOKABLE int getDetectedVendorIndex();
Q_INVOKABLE int getDetectedProductIndex(const QString &currentVendorText);
public:
- enum cloud_status_qml {
- CS_UNKNOWN,
- CS_INCORRECT_USER_PASSWD,
- CS_NEED_TO_VERIFY,
- CS_VERIFIED,
- CS_NOCLOUD
- };
-
static QMLManager *instance();
Q_INVOKABLE void registerError(QString error);
QString consumeError();
- QString cloudUserName() const;
- void setCloudUserName(const QString &cloudUserName);
-
- QString cloudPassword() const;
- void setCloudPassword(const QString &cloudPassword);
-
- QString cloudPin() const;
- void setCloudPin(const QString &cloudPin);
-
bool locationServiceEnabled() const;
void setLocationServiceEnabled(bool locationServiceEnable);
@@ -136,15 +108,6 @@ public:
bool verboseEnabled() const;
void setVerboseEnabled(bool verboseMode);
- int distanceThreshold() const;
- void setDistanceThreshold(int distance);
-
- int timeThreshold() const;
- void setTimeThreshold(int time);
-
- QString theme() const;
- void setTheme(QString theme);
-
bool loadFromCloud() const;
void setLoadFromCloud(bool done);
void syncLoadFromCloud();
@@ -152,12 +115,6 @@ public:
QString startPageText() const;
void setStartPageText(const QString& text);
- cloud_status_qml credentialStatus() const;
- void setCredentialStatus(const cloud_status_qml value);
-
- cloud_status_qml oldStatus() const;
- void setOldStatus(const cloud_status_qml value);
-
QString logText() const;
void setLogText(const QString &logText);
@@ -176,9 +133,6 @@ public:
QString progressMessage() const;
void setProgressMessage(QString text);
- bool developer() const;
- void setDeveloper(bool value);
-
bool btEnabled() const;
void setBtEnabled(bool value);
@@ -189,8 +143,6 @@ public:
QStringList divemasterList() const;
QStringList locationList() const;
QStringList cylinderInit() const;
- bool showPin() const;
- void setShowPin(bool enable);
Q_INVOKABLE void setStatusbarColor(QColor color);
void btHostModeChange(QBluetoothLocalDevice::HostMode state);
@@ -227,8 +179,6 @@ public slots:
void populateGpsData();
void cancelDownloadDC();
void clearGpsData();
- void clearCredentials();
- void cancelCredentialsPinSetup();
void copyAppLogToClipboard();
void finishSetup();
void openLocalThenRemote(QString url);
@@ -256,9 +206,6 @@ private:
SuitCompletionModel suitModel;
DiveMasterCompletionModel divemasterModel;
LocationInformationModel locationModel;
- QString m_cloudUserName;
- QString m_cloudPassword;
- QString m_cloudPin;
QString m_ssrfGpsWebUserid;
QString m_startPageText;
QString m_logText;
@@ -266,8 +213,6 @@ private:
bool m_locationServiceEnabled;
bool m_locationServiceAvailable;
bool m_verboseEnabled;
- int m_distanceThreshold;
- int m_timeThreshold;
GpsLocation *locationProvider;
bool m_loadFromCloud;
static QMLManager *m_instance;
@@ -277,8 +222,6 @@ private:
bool m_syncToCloud;
int m_updateSelectedDive;
int m_selectedDiveTimestamp;
- cloud_status_qml m_credentialStatus;
- cloud_status_qml m_oldStatus;
qreal m_lastDevicePixelRatio;
QElapsedTimer timer;
bool alreadySaving;
@@ -287,10 +230,8 @@ private:
bool checkDuration(DiveObjectHelper *myDive, struct dive *d, QString duration);
bool checkDepth(DiveObjectHelper *myDive, struct dive *d, QString depth);
bool currentGitLocalOnly;
- bool m_showPin;
Q_INVOKABLE DCDeviceData *m_device_data;
QString m_progressMessage;
- bool m_developer;
bool m_btEnabled;
void updateAllGlobalLists();
@@ -301,28 +242,18 @@ private:
#endif
signals:
- void cloudUserNameChanged();
- void cloudPasswordChanged();
- void cloudPinChanged();
void locationServiceEnabledChanged();
void locationServiceAvailableChanged();
void verboseEnabledChanged();
void logTextChanged();
- void timeThresholdChanged();
- void themeChanged();
- void distanceThresholdChanged();
void loadFromCloudChanged();
void startPageTextChanged();
- void credentialStatusChanged();
- void oldStatusChanged();
void notificationTextChanged();
void syncToCloudChanged();
void updateSelectedDiveChanged();
void selectedDiveTimestampChanged();
- void showPinChanged();
void sendScreenChanged(QScreen *screen);
void progressMessageChanged();
- void developerChanged();
void btEnabledChanged();
void suitListChanged();
void buddyListChanged();
diff --git a/mobile-widgets/qmlprefs.cpp b/mobile-widgets/qmlprefs.cpp
index 49a788708..589234095 100644
--- a/mobile-widgets/qmlprefs.cpp
+++ b/mobile-widgets/qmlprefs.cpp
@@ -1,11 +1,25 @@
// SPDX-License-Identifier: GPL-2.0
#include "qmlprefs.h"
+#include "qmlmanager.h"
+
+#include "core/membuffer.h"
+#include "core/subsurface-qt/SettingsObjectWrapper.h"
+#include "core/gpslocation.h"
-QMLPrefs *QMLPrefs::m_instance = NULL;
+/*** Global and constructors ***/
+QMLPrefs *QMLPrefs::m_instance = NULL;
-QMLPrefs::QMLPrefs()
+QMLPrefs::QMLPrefs() :
+ m_credentialStatus(CS_UNKNOWN),
+ m_developer(false),
+ m_distanceThreshold(1000),
+ m_oldStatus(CS_UNKNOWN),
+ m_showPin(false),
+ m_timeThreshold(60)
{
+ // This strange construct is needed because QMLEngine calls new and that
+ // cannot be overwritten
if (!m_instance)
m_instance = this;
}
@@ -19,3 +33,164 @@ QMLPrefs *QMLPrefs::instance()
{
return m_instance;
}
+
+
+/*** public functions ***/
+const QString QMLPrefs::cloudPassword() const
+{
+ return m_cloudPassword;
+}
+
+void QMLPrefs::setCloudPassword(const QString &cloudPassword)
+{
+ m_cloudPassword = cloudPassword;
+ emit cloudPasswordChanged();
+}
+
+const QString QMLPrefs::cloudPin() const
+{
+ return m_cloudPin;
+}
+
+void QMLPrefs::setCloudPin(const QString &cloudPin)
+{
+ m_cloudPin = cloudPin;
+ emit cloudPinChanged();
+}
+
+const QString QMLPrefs::cloudUserName() const
+{
+ return m_cloudUserName;
+}
+
+void QMLPrefs::setCloudUserName(const QString &cloudUserName)
+{
+ m_cloudUserName = cloudUserName.toLower();
+ emit cloudUserNameChanged();
+}
+
+QMLPrefs::cloud_status_qml QMLPrefs::credentialStatus() const
+{
+ return m_credentialStatus;
+}
+
+void QMLPrefs::setCredentialStatus(const cloud_status_qml value)
+{
+ if (m_credentialStatus != value) {
+ setOldStatus(m_credentialStatus);
+ if (value == CS_NOCLOUD) {
+ QMLManager::instance()->appendTextToLog("Switching to no cloud mode");
+ set_filename(NOCLOUD_LOCALSTORAGE);
+ clearCredentials();
+ }
+ m_credentialStatus = value;
+ emit credentialStatusChanged();
+ }
+}
+
+void QMLPrefs::setDeveloper(bool value)
+{
+ m_developer = value;
+ emit developerChanged();
+}
+
+int QMLPrefs::distanceThreshold() const
+{
+ return m_distanceThreshold;
+}
+
+void QMLPrefs::setDistanceThreshold(int distance)
+{
+ m_distanceThreshold = distance;
+ emit distanceThresholdChanged();
+}
+
+QMLPrefs::cloud_status_qml QMLPrefs::oldStatus() const
+{
+ return m_oldStatus;
+}
+
+void QMLPrefs::setOldStatus(const cloud_status_qml value)
+{
+ if (m_oldStatus != value) {
+ m_oldStatus = value;
+ emit oldStatusChanged();
+ }
+}
+
+bool QMLPrefs::showPin() const
+{
+ return m_showPin;
+}
+
+void QMLPrefs::setShowPin(bool enable)
+{
+ m_showPin = enable;
+ emit showPinChanged();
+}
+
+int QMLPrefs::timeThreshold() const
+{
+ return m_timeThreshold;
+}
+
+void QMLPrefs::setTimeThreshold(int time)
+{
+ m_timeThreshold = time;
+ GpsLocation::instance()->setGpsTimeThreshold(m_timeThreshold * 60);
+ emit timeThresholdChanged();
+}
+
+const QString QMLPrefs::theme() const
+{
+ QSettings s;
+ s.beginGroup("Theme");
+ return s.value("currentTheme", "Blue").toString();
+}
+
+void QMLPrefs::setTheme(QString theme)
+{
+ QSettings s;
+ s.beginGroup("Theme");
+ s.setValue("currentTheme", theme);
+ emit themeChanged();
+}
+
+
+
+/*** public slot functions ***/
+void QMLPrefs::cancelCredentialsPinSetup()
+{
+ /*
+ * The user selected <cancel> on the final stage of the
+ * cloud account generation (entering the emailed PIN).
+ *
+ * Resets the cloud credential status to CS_UNKNOWN, resulting
+ * in a return to the first crededentials page, with the
+ * email and passwd still filled in. In case of a cancel
+ * of registration (from the PIN page), the email address
+ * was probably misspelled, so the user never received a PIN to
+ * complete the process.
+ *
+ * Notice that this function is also used to switch to a different
+ * cloud account, so the name is not perfect.
+ */
+ QSettings s;
+
+ setCredentialStatus(CS_UNKNOWN);
+ s.beginGroup("CloudStorage");
+ s.setValue("email", m_cloudUserName);
+ s.setValue("password", m_cloudPassword);
+ s.setValue("cloud_verification_status", m_credentialStatus);
+ s.sync();
+ QMLManager::instance()->setStartPageText(tr("Starting..."));
+
+ setShowPin(false);
+}
+
+void QMLPrefs::clearCredentials()
+{
+ setCloudUserName(NULL);
+ setCloudPassword(NULL);
+ setCloudPin(NULL);
+}
diff --git a/mobile-widgets/qmlprefs.h b/mobile-widgets/qmlprefs.h
index 2755014e8..6acba5438 100644
--- a/mobile-widgets/qmlprefs.h
+++ b/mobile-widgets/qmlprefs.h
@@ -7,6 +7,47 @@
class QMLPrefs : public QObject {
Q_OBJECT
+ Q_ENUMS(cloud_status_qml)
+ Q_PROPERTY(QString cloudPassword
+ MEMBER m_cloudPassword
+ WRITE setCloudPassword
+ NOTIFY cloudPasswordChanged)
+ Q_PROPERTY(QString cloudPin
+ MEMBER m_cloudPin
+ WRITE setCloudPin
+ NOTIFY cloudPinChanged)
+ Q_PROPERTY(QString cloudUserName
+ MEMBER m_cloudUserName
+ WRITE setCloudUserName
+ NOTIFY cloudUserNameChanged)
+ Q_PROPERTY(cloud_status_qml credentialStatus
+ MEMBER m_credentialStatus
+ WRITE setCredentialStatus
+ NOTIFY credentialStatusChanged)
+ Q_PROPERTY(bool developer
+ MEMBER m_developer
+ WRITE setDeveloper
+ NOTIFY developerChanged)
+ Q_PROPERTY(int distanceThreshold
+ MEMBER m_distanceThreshold
+ WRITE setDistanceThreshold
+ NOTIFY distanceThresholdChanged)
+ Q_PROPERTY(bool showPin
+ MEMBER m_showPin
+ WRITE setShowPin
+ NOTIFY showPinChanged)
+ Q_PROPERTY(cloud_status_qml oldStatus
+ MEMBER m_oldStatus
+ WRITE setOldStatus
+ NOTIFY oldStatusChanged)
+ Q_PROPERTY(QString theme
+ READ theme
+ WRITE setTheme
+ NOTIFY themeChanged)
+ Q_PROPERTY(int timeThreshold
+ MEMBER m_timeThreshold
+ WRITE setTimeThreshold
+ NOTIFY timeThresholdChanged)
public:
QMLPrefs();
@@ -14,12 +55,70 @@ public:
static QMLPrefs *instance();
+ enum cloud_status_qml {
+ CS_UNKNOWN,
+ CS_INCORRECT_USER_PASSWD,
+ CS_NEED_TO_VERIFY,
+ CS_VERIFIED,
+ CS_NOCLOUD
+ };
+
+ const QString cloudPassword() const;
+ void setCloudPassword(const QString &cloudPassword);
+
+ const QString cloudPin() const;
+ void setCloudPin(const QString &cloudPin);
+
+ const QString cloudUserName() const;
+ void setCloudUserName(const QString &cloudUserName);
+
+ cloud_status_qml credentialStatus() const;
+ void setCredentialStatus(const cloud_status_qml value);
+
+ void setDeveloper(bool value);
+
+ int distanceThreshold() const;
+ void setDistanceThreshold(int distance);
+
+ cloud_status_qml oldStatus() const;
+ void setOldStatus(const cloud_status_qml value);
+
+ bool showPin() const;
+ void setShowPin(bool enable);
+
+ int timeThreshold() const;
+ void setTimeThreshold(int time);
+
+ const QString theme() const;
+ void setTheme(QString theme);
+
public slots:
+ void cancelCredentialsPinSetup();
+ void clearCredentials();
private:
+ QString m_cloudPassword;
+ QString m_cloudPin;
+ QString m_cloudUserName;
+ cloud_status_qml m_credentialStatus;
+ bool m_developer;
+ int m_distanceThreshold;
static QMLPrefs *m_instance;
+ cloud_status_qml m_oldStatus;
+ bool m_showPin;
+ int m_timeThreshold;
signals:
+ void cloudPasswordChanged();
+ void cloudPinChanged();
+ void cloudUserNameChanged();
+ void credentialStatusChanged();
+ void distanceThresholdChanged();
+ void developerChanged();
+ void oldStatusChanged();
+ void showPinChanged();
+ void themeChanged();
+ void timeThresholdChanged();
};
#endif