on xenial help sign in
introduce ApplicationManager.suspended and make use of it when the Greeter is locked
commit9911d22062b3bcddcd2aec5b591591919620a33c authorMichael Zanetti <michael.zanetti@canonical.com> dateThu 6 Feb 2014, 18:25 (13 years ago) parentef23f09
7 files changed+48−10
cmake/modules/QmlTest.cmake+1 qml/Shell.qml+6−3 tests/mocks/Unity/Application/ApplicationInfo.cpp+3−2 tests/mocks/Unity/Application/ApplicationManager.cpp+20 tests/mocks/Unity/Application/ApplicationManager.h+3 tests/plugins/Unity/Launcher/launchermodeltest.cpp+2 tests/qmltests/tst_Shell.qml+13−5
cmake/modules/QmlTest.cmake+1
@@ -86,6 +86,7 @@ macro(add_qml_test SUBPATH COMPONENT_NAME)
8686 ${qmltestrunner_imports}
8787 -o ${CMAKE_BINARY_DIR}/${qmltest_TARGET}.xml,xunitxml
8888 -o -,txt
89+ $(TESTCASE)
8990 )
9091 add_custom_target(${qmltest_TARGET} ${qmltest_command})
9192
qml/Shell.qml+6−3
@@ -345,9 +345,6 @@ FocusScope {
345345
346346 dragHandleWidth: shell.edgeSize
347347
348− property var previousMainApp: null
349− property var previousSideApp: null
350−
351348 onShownChanged: {
352349 if (shown) {
353350 lockscreen.reset();
@@ -374,6 +371,12 @@ FocusScope {
374371 launcher.tease();
375372 }
376373 }
374+
375+ Binding {
376+ target: ApplicationManager
377+ property: "suspended"
378+ value: greeter.shown
379+ }
377380 }
378381
379382 InputFilterArea {
tests/mocks/Unity/Application/ApplicationInfo.cpp+3−2
@@ -20,12 +20,13 @@
2020#include <QQuickItem>
2121#include <QQuickView>
2222#include <QQmlComponent>
23+#include <QTimer>
2324
2425ApplicationInfo::ApplicationInfo(const QString &appId, QObject *parent)
2526 : ApplicationInfoInterface(appId, parent)
2627 ,m_appId(appId)
2728 ,m_stage(MainStage)
28− ,m_state(Starting)
29+ ,m_state(Running)
2930 ,m_focused(false)
3031 ,m_fullscreen(false)
3132 ,m_windowItem(0)
@@ -37,7 +38,7 @@ ApplicationInfo::ApplicationInfo(const QString &appId, QObject *parent)
3738ApplicationInfo::ApplicationInfo(QObject *parent)
3839 : ApplicationInfoInterface(QString(), parent)
3940 ,m_stage(MainStage)
40− ,m_state(Starting)
41+ ,m_state(Running)
4142 ,m_focused(false)
4243 ,m_fullscreen(false)
4344 ,m_windowItem(0)
tests/mocks/Unity/Application/ApplicationManager.cpp+20
@@ -30,6 +30,7 @@
3030
3131ApplicationManager::ApplicationManager(QObject *parent)
3232 : ApplicationManagerInterface(parent)
33+ , m_suspended(false)
3334 , m_mainStageComponent(0)
3435 , m_mainStage(0)
3536 , m_sideStageComponent(0)
@@ -231,6 +232,25 @@ QString ApplicationManager::focusedApplicationId() const {
231232 return QString();
232233}
233234
235+bool ApplicationManager::suspended() const
236+{
237+ return m_suspended;
238+}
239+
240+void ApplicationManager::setSuspended(bool suspended)
241+{
242+ ApplicationInfo *focusedApp = findApplication(focusedApplicationId());
243+ if (focusedApp) {
244+ if (suspended) {
245+ focusedApp->setState(ApplicationInfo::Suspended);
246+ } else {
247+ focusedApp->setState(ApplicationInfo::Running);
248+ }
249+ }
250+ m_suspended = suspended;
251+ Q_EMIT suspendedChanged();
252+}
253+
234254bool ApplicationManager::focusApplication(const QString &appId)
235255{
236256 ApplicationInfo *application = findApplication(appId);
tests/mocks/Unity/Application/ApplicationManager.h+3
@@ -96,6 +96,8 @@ class ApplicationManager : public ApplicationManagerInterface {
9696 Q_INVOKABLE void updateScreenshot(const QString &appId) override;
9797
9898 QString focusedApplicationId() const override;
99+ bool suspended() const;
100+ void setSuspended(bool suspended);
99101
100102 Q_SIGNALS:
101103 void keyboardHeightChanged();
@@ -115,6 +117,7 @@ class ApplicationManager : public ApplicationManagerInterface {
115117 void createSideStage();
116118 int m_keyboardHeight;
117119 bool m_keyboardVisible;
120+ bool m_suspended;
118121 QList<ApplicationInfo*> m_runningApplications;
119122 QList<ApplicationInfo*> m_availableApplications;
120123 QQmlComponent *m_mainStageComponent;
tests/plugins/Unity/Launcher/launchermodeltest.cpp+2
@@ -95,6 +95,8 @@ public:
9595 }
9696 void updateScreenshot(const QString &appId) { Q_UNUSED(appId); }
9797 void activateApplication(const QString &appId) { Q_UNUSED(appId); }
98+ bool suspended() const { return false; }
99+ void setSuspended(bool) {}
98100
99101private:
100102 QList<MockApp*> m_list;
tests/qmltests/tst_Shell.qml+13−5
@@ -188,26 +188,34 @@ Item {
188188 tapOnAppIconInLauncher();
189189 waitUntilApplicationWindowIsFullyVisible();
190190
191− var mainApp = ApplicationManager.focusedApplicationId;
192− verify(mainApp != "");
191+ var mainAppId = ApplicationManager.focusedApplicationId;
192+ verify(mainAppId != "");
193+ var mainApp = ApplicationManager.findApplication(mainAppId);
194+ verify(mainApp);
195+ tryCompare(mainApp.state, ApplicationInfo.Running);
193196
194197 // Try to suspend while proximity is engaged...
195198 Powerd.displayPowerStateChange(Powerd.Off, Powerd.UseProximity);
196199 tryCompare(greeter, "showProgress", 0);
197200
198201 // Now really suspend
202+ print("suspending")
199203 Powerd.displayPowerStateChange(Powerd.Off, 0);
204+ print("done suspending")
200205 tryCompare(greeter, "showProgress", 1);
201− tryCompare(ApplicationManager, "focusedApplicationId", "");
206+
207+ tryCompare(ApplicationManager, "suspended", true);
208+ compare(mainApp.state, ApplicationInfo.Suspended);
202209
203210 // And wake up
204211 Powerd.displayPowerStateChange(Powerd.On, 0);
205− tryCompare(ApplicationManager, "focusedApplicationId", "");
206212 tryCompare(greeter, "showProgress", 1);
207213
208214 // Swipe away greeter to focus app
209215 swipeAwayGreeter();
210− tryCompare(ApplicationManager, "focusedApplicationId", mainApp);
216+ tryCompare(ApplicationManager, "suspended", false);
217+ compare(mainApp.state, ApplicationInfo.Running);
218+ tryCompare(ApplicationManager, "focusedApplicationId", mainAppId);
211219 }
212220
213221 function swipeAwayGreeter() {