aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2017-07-09 17:03:57 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2017-07-09 17:40:29 -0700
commitc59a74029b3acde8443db0abebcbc89d78504dee (patch)
tree7dfdfd5c554587d8ccb66c814e6e827de41d5524
parente8b46039f6936d336c0f38dea64c051ec2ce022b (diff)
downloadsubsurface-c59a74029b3acde8443db0abebcbc89d78504dee.tar.gz
Android: write appLog to file
The trick is to pick a path that is accessible from other applications. In theory QStandardPaths::GenericDataLocation should provide that. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--mobile-widgets/qmlmanager.cpp33
-rw-r--r--mobile-widgets/qmlmanager.h8
-rw-r--r--qt-models/messagehandlermodel.cpp8
3 files changed, 47 insertions, 2 deletions
diff --git a/mobile-widgets/qmlmanager.cpp b/mobile-widgets/qmlmanager.cpp
index c46832fcd..855b4918f 100644
--- a/mobile-widgets/qmlmanager.cpp
+++ b/mobile-widgets/qmlmanager.cpp
@@ -90,6 +90,18 @@ QMLManager::QMLManager() : m_locationServiceEnabled(false),
m_instance = this;
m_lastDevicePixelRatio = qApp->devicePixelRatio();
connect(qobject_cast<QApplication *>(QApplication::instance()), &QApplication::applicationStateChanged, this, &QMLManager::applicationStateChanged);
+
+#if defined(Q_OS_ANDROID)
+ appLogFileName = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation).first() + "/subsurface.log";
+ appLogFile.setFileName(appLogFileName);
+ if (!appLogFile.open(QIODevice::ReadWrite)) {
+ appLogFileOpen = false;
+ appendTextToLog("Failed to open logfile" + appLogFileName);
+ } else {
+ appLogFileOpen = true;
+ appendTextToLog("Successfully opened logfile" + appLogFileName);
+ }
+#endif
appendTextToLog("Starting " + getUserAgent());
appendTextToLog(QStringLiteral("build with Qt Version %1, runtime from Qt Version %2").arg(QT_VERSION_STR).arg(qVersion()));
setStartPageText(tr("Starting..."));
@@ -234,6 +246,10 @@ void QMLManager::finishSetup()
QMLManager::~QMLManager()
{
+#if defined(Q_OS_ANDROID)
+ if (appLogFileOpen)
+ appLogFile.close();
+#endif
m_instance = NULL;
}
@@ -1530,6 +1546,23 @@ void QMLManager::setProgressMessage(QString text)
#if defined (Q_OS_ANDROID)
+void writeToAppLogFile(QString logText)
+{
+ // write to storage and flush so that the data doesn't get lost
+ logText.append("\n");
+ QMLManager *self = QMLManager::instance();
+ if (self) {
+ self->writeToAppLogFile(logText);
+ }
+}
+
+void QMLManager::writeToAppLogFile(QString logText)
+{
+ if (appLogFileOpen) {
+ appLogFile.write(logText.toUtf8().data());
+ appLogFile.flush();
+ }
+}
//HACK to color the system bar on Android, use qtandroidextras and call the appropriate Java methods
//this code is based on code in the Kirigami example app for Android (under LGPL-2) Copyright 2017 Marco Martin
diff --git a/mobile-widgets/qmlmanager.h b/mobile-widgets/qmlmanager.h
index 3c450158e..d80c5f58a 100644
--- a/mobile-widgets/qmlmanager.h
+++ b/mobile-widgets/qmlmanager.h
@@ -125,6 +125,9 @@ public:
bool showPin() const;
void setShowPin(bool enable);
Q_INVOKABLE void setStatusbarColor(QColor color);
+#if defined(Q_OS_ANDROID)
+ void writeToAppLogFile(QString logText);
+#endif
public slots:
void applicationStateChanged(Qt::ApplicationState state);
@@ -208,6 +211,11 @@ private:
bool m_showPin;
DCDeviceData *m_device_data;
QString m_progressMessage;
+#if defined(Q_OS_ANDROID)
+ QString appLogFileName;
+ QFile appLogFile;
+ bool appLogFileOpen;
+#endif
signals:
void cloudUserNameChanged();
diff --git a/qt-models/messagehandlermodel.cpp b/qt-models/messagehandlermodel.cpp
index ec6e818c9..d783a3da6 100644
--- a/qt-models/messagehandlermodel.cpp
+++ b/qt-models/messagehandlermodel.cpp
@@ -2,11 +2,12 @@
#include "messagehandlermodel.h"
/* based on logging bits from libdivecomputer */
-#ifndef __ANDROID__
+#if !defined(Q_OS_ANDROID)
#define INFO(fmt, ...) fprintf(stderr, "INFO: " fmt "\n", ##__VA_ARGS__)
#else
+extern void writeToAppLogFile(QString logText);
#include <android/log.h>
-#define INFO(fmt, ...) __android_log_print(ANDROID_LOG_DEBUG, __FILE__, "INFO: " fmt "\n", ##__VA_ARGS__)
+#define INFO(fmt, ...) __android_log_print(ANDROID_LOG_DEBUG, __FILE__, "INFO: " fmt "\n", ##__VA_ARGS__);
#endif
void logMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
@@ -42,6 +43,9 @@ void MessageHandlerModel::addLog(QtMsgType type, const QString& message)
m_data.append({message, type});
endInsertRows();
INFO("%s", message.toUtf8().constData());
+#if defined (Q_OS_ANDROID)
+ writeToAppLogFile(message);
+#endif
}
QVariant MessageHandlerModel::data(const QModelIndex& idx, int role) const