diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2017-07-09 17:03:57 -0700 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2017-07-09 17:40:29 -0700 |
commit | c59a74029b3acde8443db0abebcbc89d78504dee (patch) | |
tree | 7dfdfd5c554587d8ccb66c814e6e827de41d5524 | |
parent | e8b46039f6936d336c0f38dea64c051ec2ce022b (diff) | |
download | subsurface-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.cpp | 33 | ||||
-rw-r--r-- | mobile-widgets/qmlmanager.h | 8 | ||||
-rw-r--r-- | qt-models/messagehandlermodel.cpp | 8 |
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 |