Skip to content
Snippets Groups Projects
Commit 1f4ade68 authored by Burak Hançerli's avatar Burak Hançerli :headphones:
Browse files

Disconnect immediately when the app is put to sleep (or sent to background)

parent 74c55fe6
No related branches found
No related tags found
1 merge request!72Disconnect immediately when the app is put to sleep (or sent to background)
Pipeline #78836 passed
......@@ -3,9 +3,9 @@
## About
Launch [Qt Design Studio](https://www.qt.io/ui-design-tools) projects in your Android device. The viewer that helps you do with [Qt for Android](https://doc.qt.io/qt-6/android.html).
Launch [Qt Design Studio](https://www.qt.io/ui-design-tools) projects in your Android device in seconds. Qt UI Viewer is a simple app that allows you to view your Qt Design Studio projects on your Android device. It's a great tool for designers and developers to preview their designs on a real device.
Qt UI Viewer works with minimum Android 11 (API level 30).
Qt UI Viewer is built with [Qt for Android](https://doc.qt.io/qt-6/android.html).
## Getting the App
......@@ -16,15 +16,14 @@ You can get the pre-built app from either [Google Play Store][google-play-link]
* CMake 3.16 or newer
* Qt 6.8.0 or newer
* OpenSSL (<https://github.com/KDAB/android_openssl>)
* Android SDK and NDK (<https://developer.android.com/studio>)
* Android (min API 34) SDK and NDK (<https://developer.android.com/studio>)
## Code Map
* cicd: GitLab pipeline files
* resources: UI related files
* android: Files needed for Android build system
* src: Backend source files
* ui: UI source files
* src: All source files
* 3rdparty: Required 3rd party libraries
* qtquickdesigner-components: QML components
* zxing-cpp: QR code decoding/encoding
......
......@@ -61,7 +61,6 @@ Rectangle {
Connections {
target: backend
function onConnectedChanged(isConnected) {
console.log("Connected changed to", isConnected)
root.connected = isConnected
}
}
......
......@@ -74,6 +74,18 @@ Backend::Backend(QObject *parent)
}
});
connect(qApp,
&QGuiApplication::applicationStateChanged,
this,
[this](Qt::ApplicationState state) {
qDebug() << "Application state changed to" << state;
if (state == Qt::ApplicationState::ApplicationSuspended) {
if (m_projectManager && !m_projectManager->sessionId().isEmpty())
QMetaObject::invokeMethod(m_projectManager.get(), "stopProject");
m_dsManager->disconnectAllDesignStudios();
}
});
const QRect screenGeometry = QGuiApplication::primaryScreen()->geometry();
qDebug() << "Qt Design Viewer";
......
......@@ -67,6 +67,12 @@ void DesignStudio::initPingPong()
&QWebSocket::pong,
this,
[this](quint64 elapsedTime, const QByteArray &) {
if (elapsedTime > 1000)
qWarning() << "Design Studio pong is too slow:" << elapsedTime
<< "ms. Newtork issue?";
else if (elapsedTime > 500)
qWarning() << "Design Studio pong is slow:" << elapsedTime << "ms";
m_pongTimer.stop();
m_pingTimer.start();
});
......@@ -111,6 +117,12 @@ void DesignStudio::initSocket()
&DesignStudio::processBinaryMessage);
}
void DesignStudio::disconnect()
{
m_socket->close();
m_socket->abort();
}
QString DesignStudio::ipv4Addr() const
{
return m_socket->peerAddress().toString();
......
......@@ -13,6 +13,9 @@ class DesignStudio : public QObject
public:
DesignStudio(QWebSocket *socket, const QString &deviceID, QObject *parent = nullptr);
// Connection
void disconnect();
// Getters
QString ipv4Addr() const;
QString id() const;
......
......@@ -136,3 +136,24 @@ QString DesignStudioManager::getDesignStudioIp(const QString &id) const
return {};
}
bool DesignStudioManager::disconnectDesignStudio(const QString &id)
{
for (const auto &designStudio : m_designStudios) {
if (designStudio->id() == id) {
qDebug() << "Disconnecting Design Studio" << id;
designStudio->disconnect();
return true;
}
}
qWarning() << "Design Studio" << id << "not found for disconnection";
return false;
}
void DesignStudioManager::disconnectAllDesignStudios()
{
qDebug() << "Disconnecting all Design Studios";
for (const auto &designStudio : m_designStudios)
designStudio->disconnect();
}
......@@ -21,6 +21,8 @@ public slots:
void sendProjectStopped(const QString &id);
void sendProjectLogs(const QString &id, const QString &logs);
QString getDesignStudioIp(const QString &id) const;
bool disconnectDesignStudio(const QString &id);
void disconnectAllDesignStudios();
private:
// Network
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment