mobile: add "Copy log to clipboard" button

on iOS it is practically impossible to copy the App log
to e.g. a mail! in iOS 11 the log file is stored within
the subsurface container and you first need to copy (actually
using the clipboard) out from there to the "normal" document
shared space, before it can be used.

At least iOS users (and I believe Android users) are not really
used to work with files, so the process is not easy to document
in an understandable way.

The alternative is to provide a button, which simply puts the
log on the general clipboard, allowing it to be pasted in a
multitud of applications.

Signed-off-by: Jan Iversen <jani@apache.org>
This commit is contained in:
jan Iversen 2018-05-16 16:50:17 +02:00 committed by Dirk Hohndel
parent 2a0ee09cb2
commit a181020b19
5 changed files with 32 additions and 0 deletions

View file

@ -56,5 +56,14 @@ Kirigami.ScrollablePage {
anchors.horizontalCenter: parent.Center
horizontalAlignment: Text.AlignHCenter
}
SsrfButton {
id: copyAppLogToClipboard
Layout.alignment: Qt.AlignHCenter
text: qsTr("Copy app log to clipboard")
onClicked: {
manager.copyAppLogToClipboard()
rootItem.returnTopPage()
}
}
}
}

View file

@ -12,12 +12,14 @@
#include <QElapsedTimer>
#include <QTimer>
#include <QDateTime>
#include <QClipboard>
#include <QBluetoothLocalDevice>
#include "qt-models/divelistmodel.h"
#include "qt-models/gpslistmodel.h"
#include "qt-models/completionmodels.h"
#include "qt-models/messagehandlermodel.h"
#include "core/divelist.h"
#include "core/device.h"
#include "core/pref.h"
@ -332,6 +334,16 @@ void QMLManager::cancelCredentialsPinSetup()
setShowPin(false);
}
void QMLManager::copyAppLogToClipboard()
{
/*
* The user clicked the button, so copy the log file
* to the clipboard for easy access
*/
QString copyString = MessageHandlerModel::self()->logAsString();
QApplication::clipboard()->setText(copyString, QClipboard::Clipboard);
}
void QMLManager::finishSetup()
{
// Initialize cloud credentials.

View file

@ -178,6 +178,7 @@ public slots:
void clearGpsData();
void clearCredentials();
void cancelCredentialsPinSetup();
void copyAppLogToClipboard();
void finishSetup();
void openLocalThenRemote(QString url);
void mergeLocalRepo();

View file

@ -51,6 +51,15 @@ void MessageHandlerModel::addLog(QtMsgType type, const QString& message)
#endif
}
const QString MessageHandlerModel::logAsString()
{
QString copyString;
// Loop through m_data and build big string to be put on the clipboard
for(const MessageData &data: m_data)
copyString += data.message + "\n";
return copyString;
}
QVariant MessageHandlerModel::data(const QModelIndex& idx, int role) const
{
switch(role) {

View file

@ -14,6 +14,7 @@ public:
QVariant data(const QModelIndex& idx, int role) const override;
QHash<int, QByteArray> roleNames() const override;
void addLog(QtMsgType type, const QString& message);
const QString logAsString();
/* call this to clear the debug data */
Q_INVOKABLE void reset();