diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index 9a8ef3109ce58c48830406191282f468027aa99a..fa8a2154c6bb2efea0948737b79378de87364115 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -1,6 +1,6 @@ <?xml version="1.0"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="io.qt.qtdesignviewer" - android:installLocation="auto" android:versionCode="18" android:versionName="1.2"> + android:installLocation="auto" android:versionCode="19" android:versionName="1.2"> <!-- %%INSERT_PERMISSIONS --> <!-- %%INSERT_FEATURES --> <supports-screens android:anyDensity="true" android:largeScreens="true" diff --git a/src/backend.cpp b/src/backend.cpp index 7f598107a5db94d25ff8062bc13ddf9e0e193da2..5562cc9cf4594b3e1ffc502f2dd5711dbcb30fa1 100644 --- a/src/backend.cpp +++ b/src/backend.cpp @@ -74,11 +74,10 @@ void Backend::initialize() updateUserProjectList(); } - connect(&m_serviceConnector, &ServiceConnector::downloadProgress, this, &Backend::downloadProgress); - connect(&m_projectManager, - &ProjectManager::projectStateChanged, + connect(&m_serviceConnector, + &ServiceConnector::downloadProgress, this, - &Backend::popupTextChanged); + &Backend::downloadProgress); qDebug("Initialization complete"); } @@ -87,7 +86,23 @@ void Backend::updatePopup(const QString &text, bool indeterminate) { emit popupTextChanged(text); emit popupProgressIndeterminateChanged(indeterminate); - QEventLoop().processEvents(QEventLoop::AllEvents, 100); + QEventLoop().processEvents(QEventLoop::AllEvents, 1000); +} + +void Backend::initializeProjectManager() +{ + if (m_projectManager) + return; + + qDebug() << "Initializing Project Manager"; + m_projectManager.reset(new ProjectManager); + connect(m_projectManager.data(), &ProjectManager::closingProject, this, [&] { + emit popupClose(); + qDebug() << "Project Manager is closing"; + m_projectManager.reset(); + }); + + qDebug() << "Project Manager is initialized"; } bool Backend::connectDesignStudio() @@ -112,13 +127,14 @@ bool Backend::connectDesignStudio() connect(m_designStudioConnector.data(), &DesignStudioConnector::projectReceived, - &m_projectManager, + this, [this](const QByteArray &projectData) { qDebug() << "Project received from Design Studio"; + initializeProjectManager(); emit popupOpen(); updatePopup("Unpacking project..."); qDebug() << "Project data size: " << projectData.size(); - const QString projectPath = m_projectManager.unpackProject(projectData); + const QString projectPath = m_projectManager->unpackProject(projectData); if (projectPath.isEmpty()) { qCritical() @@ -131,11 +147,11 @@ bool Backend::connectDesignStudio() qDebug() << "Project unpacked to " << projectPath; updatePopup("Running project..."); - if (!m_projectManager.runProject(projectPath)) { + if (!m_projectManager->runProject(projectPath)) { qCritical() << "Could not run project. Please check the logs for more " "information."; } else { - m_projectManager.showAppWindow(); + m_projectManager->showAppWindow(); } emit popupClose(); }); @@ -178,10 +194,11 @@ void Backend::disconnectDesignStudio() void Backend::runDemoProject(const QString &projectName) { + initializeProjectManager(); qDebug() << "Checking if demo project is cached for " << projectName; emit popupOpen(); - const bool cached = m_projectManager.isDemoProjectCached(projectName); + const bool cached = m_projectManager->isDemoProjectCached(projectName); if (!cached) { updatePopup("Downloading demo project...", false); @@ -191,7 +208,7 @@ void Backend::runDemoProject(const QString &projectName) qDebug() << "Demo project is not cached. Trying to download from " << url << " ..."; updatePopup("Caching demo project..."); - if (!m_projectManager.cacheDemoProject(project, projectName)) { + if (!m_projectManager->cacheDemoProject(project, projectName)) { qCritical() << "Could not cache demo project. Please check the logs for more information."; emit popupClose(); @@ -202,10 +219,12 @@ void Backend::runDemoProject(const QString &projectName) } updatePopup("Running demo project..."); - if (!m_projectManager.runDemoProject(projectName)) + if (!m_projectManager->runDemoProject(projectName)) qCritical() << "Could not run demo project. Please check the logs for more information."; - else - m_projectManager.showAppWindow(); + else { + updatePopup("Showing the app window..."); + m_projectManager->showAppWindow(); + } emit popupClose(); } @@ -214,12 +233,15 @@ void Backend::clearDemoCaches() { emit popupOpen(); updatePopup("Clearing demo caches..."); - m_projectManager.clearDemoCaches(); + m_projectManager.reset(new ProjectManager); + m_projectManager->clearDemoCaches(); + m_projectManager.reset(); emit popupClose(); } void Backend::runUserProject(const QString &url) { + initializeProjectManager(); updatePopup("Running user project"); emit popupOpen(); @@ -236,7 +258,7 @@ void Backend::runUserProject(const QString &url) } } - const bool projectCached = m_projectManager.isProjectCached(projectInfo); + const bool projectCached = m_projectManager->isProjectCached(projectInfo); if (!projectCached) { qDebug("Project is not cached. Downloading..."); @@ -244,20 +266,21 @@ void Backend::runUserProject(const QString &url) QByteArray projectData = m_serviceConnector.fetchProject(url); updatePopup("Caching user project..."); - if (!m_projectManager.cacheProject(projectData, projectInfo)) { + if (!m_projectManager->cacheProject(projectData, projectInfo)) { qCritical() << "Could not cache project. Please check the logs for more information."; emit popupClose(); return; } - } else { - qDebug("Project is cached. Running cached project..."); } + qDebug("Project is cached. Running cached project..."); updatePopup("Running cached project..."); - if (!m_projectManager.runCachedProject(projectInfo)) + if (!m_projectManager->runCachedProject(projectInfo)) qCritical() << "Could not run project. Please check the logs for more information."; - else - m_projectManager.showAppWindow(); + else { + updatePopup("Showing the app window..."); + m_projectManager->showAppWindow(); + } emit popupClose(); } diff --git a/src/backend.h b/src/backend.h index 4d9dae1844d954e95f7be4ea88fc42ad2e2599b8..13aa6a5d71d7c126c680eb5643b9447a110652cf 100644 --- a/src/backend.h +++ b/src/backend.h @@ -58,7 +58,7 @@ private: // Other members QString m_userHash; ServiceConnector m_serviceConnector; - ProjectManager m_projectManager; + QScopedPointer<ProjectManager> m_projectManager; QScopedPointer<DesignStudioConnector> m_designStudioConnector; QThread m_dsConnectorThread; @@ -86,6 +86,9 @@ public slots: void registerUser(const QUrl &url); bool connectDesignStudio(); void disconnectDesignStudio(); + +private slots: + void initializeProjectManager(); }; #endif // DV_ANDROID_H diff --git a/src/projectManager.cpp b/src/projectManager.cpp index 83c4734bd3327e21d1dd30c9ed5131d3b3032187..090b8de4489d09e233cae2f01eddd95031f1803e 100644 --- a/src/projectManager.cpp +++ b/src/projectManager.cpp @@ -241,9 +241,6 @@ bool ProjectManager::runProject(const QString &projectPath) } }); - emit projectStateChanged("Loading project..."); - QEventLoop().processEvents(QEventLoop::AllEvents, 1000); - qDebug() << "Loading mainQmlUrl: " << mainQmlUrl.toString(); m_qmlComponent.reset(new QQmlComponent(m_qmlEngine.data())); @@ -265,9 +262,6 @@ bool ProjectManager::runProject(const QString &projectPath) return false; } - emit projectStateChanged("Setting up the quickWindow..."); - QEventLoop().processEvents(QEventLoop::AllEvents, 1000); - qDebug() << "Setting up the quickWindow"; m_quickWindow.reset(qobject_cast<QQuickWindow *>(topLevel)); if (m_quickWindow) { @@ -503,9 +497,10 @@ void ProjectManager::showAppWindow() connect(m_quickWindow.data(), &QQuickWindow::closing, this, [this, screen]() { qDebug() << "QML app window is closing"; - m_qmlEngine.reset(); - m_qmlComponent.reset(); disconnect(screen, &QScreen::orientationChanged, this, &ProjectManager::orientateWindow); + // this signal is connected to the lambda in the backend + // which will reset the project manager + emit closingProject(); }); m_quickWindow->setFlags(Qt::Window | Qt::WindowStaysOnTopHint); diff --git a/src/projectManager.h b/src/projectManager.h index 6fad257544a894c3fc000bae78c29803c597dbab..6bfbf141bfb047531abd498fb4d4be181ed678a6 100644 --- a/src/projectManager.h +++ b/src/projectManager.h @@ -80,7 +80,7 @@ private: void cacheProject(const QString &projectName, const QString &projectPath); signals: - void projectStateChanged(const QString &state); + void closingProject(); }; #endif // PROJECTMANAGER_H