on xenial help sign in
Revert the reversion of r304 since it doesn't seem to crash anymore

Original commit was Reset apps scope when returning from app to dash (LP #1193419) If an app is on foreground and you perform a long left-edge swipe to minimize it, and therefore return to the dash, the dash should be in the Applications scope and showing the running/recents applications. Fixes: https://bugs.launchpad.net/bugs/1193419. Fixes: https://bugs.launchpad.net/bugs/1193419. Approved by PS Jenkins bot, Daniel d'Andrada.

commit42f7317511326c170e4bfcebb1f04c7339b1ea31 authorDaniel d'Andrada <daniel.dandrada@canonical.com> dateWed 2 Oct 2013, 07:22 (13 years ago) parent301e6adb2a4984
6 files changed+81−1
Dash/DashApps.qml+1 Dash/DashContent.qml+1 Dash/GenericScopeView.qml+3 Shell.qml+1−1 tests/mocks/Unity/fake_applications_scope.cpp+7 tests/qmltests/tst_Shell.qml+68
Dash/DashApps.qml+1
@@ -24,6 +24,7 @@ import "Apps"
2424
2525GenericScopeView {
2626 id: scopeView
27+ objectName: "DashApps"
2728
2829 // FIXME: a way to aggregate these models would be ideal
2930 property var mainStageApplicationsModel: shell.applicationManager.mainStageApplications
Dash/DashContent.qml+1
@@ -114,6 +114,7 @@ Item {
114114 height: ListView.view.height
115115 asynchronous: true
116116 source: scopeMapper.map(scope.id)
117+ objectName: scope.id + " loader"
117118
118119 // these are needed for autopilot tests
119120 readonly property string scopeId: scope.id
Dash/GenericScopeView.qml+3
@@ -30,6 +30,8 @@ ScopeView {
3030
3131 onMovementStarted: categoryView.showHeader()
3232
33+ onPositionedAtBeginning: categoryView.positionAtBeginning()
34+
3335 Binding {
3436 target: scopeView.scope
3537 property: "searchQuery"
@@ -58,6 +60,7 @@ ScopeView {
5860
5961 ScopeListView {
6062 id: categoryView
63+ objectName: "categoryListView"
6164 anchors.fill: parent
6265 model: scopeView.categories
6366 forceNoClip: previewLoader.onScreen
Shell.qml+1−1
@@ -650,7 +650,7 @@ FocusScope {
650650 onDashItemSelected: showHome()
651651 onDash: {
652652 if (stages.shown) {
653− dash.setCurrentScope("applications.scope", true, false)
653+ dash.setCurrentScope("applications.scope", true /* animate */, true /* reset */)
654654 stages.hide();
655655 launcher.hide();
656656 }
tests/mocks/Unity/fake_applications_scope.cpp+7
@@ -64,5 +64,12 @@ DeeModel* ApplicationsScope::createCategoriesModel()
6464 "grid",
6565 hints);
6666
67+ dee_model_append(category_model,
68+ "outdated",
69+ "Outdaded",
70+ "gtk-apply",
71+ "grid",
72+ hints);
73+
6774 return category_model;
6875}
tests/qmltests/tst_Shell.qml+68
@@ -56,6 +56,18 @@ Item {
5656
5757 function initTestCase() {
5858 swipeAwayGreeter();
59+
60+ // Ensure DashHome is loaded before continuing
61+ var dashContentList = findChild(shell, "dashContentList");
62+ waitForRendering(dashContentList);
63+ var homeLoader = findChild(dashContentList, "home.scope loader");
64+ verify(homeLoader);
65+ tryCompareFunction(function() {return homeLoader.item !== undefined;}, true);
66+
67+ // FIXME: Desperate measure to ensure Jenkins has the scene graph fully loaded
68+ // before it calls the test functions (otherwise findChild calls will fail).
69+ // The code above just didn't solve it.
70+ wait(2000);
5971 }
6072
6173 function cleanup() {
@@ -233,6 +245,62 @@ Item {
233245 tryCompare(dash, "visible", false);
234246 }
235247
248+ /*
249+ Regression test for bug https://bugs.launchpad.net/touch-preview-images/+bug/1193419
250+
251+ When the user minimizes an application (left-edge swipe) he should always end up in the "Running Apps"
252+ category of the "Applications" scope view.
253+
254+ Steps:
255+ - go to apps lens
256+ - scroll to the bottom
257+ - reveal launcher and launch an app
258+ - perform long left edge swipe to go minimize the app and go back to the dash.
259+
260+ Expected Results
261+ - apps lens shown and Running Apps visible on screen
262+ */
263+ function test_minimizingAppTakesToRunningApps() {
264+ var dashApps = findChild(shell, "DashApps");
265+
266+ swipeUntilScopeViewIsReached(dashApps);
267+
268+ // swipe finger up until the running/recent apps section (which we assume
269+ // it's the first one) is as far from view as possible.
270+ // We also assume that DashApps is tall enough that it's scrollable
271+ var appsCategoryListView = findChild(dashApps, "categoryListView");
272+ while (!appsCategoryListView.atYEnd) {
273+ swipeUpFromCenter();
274+ tryCompare(appsCategoryListView, "moving", false);
275+ }
276+
277+ // Switch away from the Applications scope.
278+ swipeRightFromCenter();
279+ waitUntilItemStopsMoving(dashApps);
280+ verify(!itemIsOnScreen(dashApps));
281+
282+ dragLauncherIntoView();
283+
284+ // Launch an app from the launcher
285+ tapOnAppIconInLauncher();
286+
287+ waitUntilApplicationWindowIsFullyVisible();
288+
289+ // Minimize the application we just launched
290+ swipeFromLeftEdge();
291+
292+ // Wait for the whole UI to settle down
293+ waitUntilApplicationWindowIsFullyHidden();
294+ waitUntilItemStopsMoving(dashApps);
295+ tryCompare(appsCategoryListView, "moving", false);
296+
297+ verify(itemIsOnScreen(dashApps));
298+
299+ var runningApplicationsGrid = findChild(appsCategoryListView, "recent");
300+ verify(runningApplicationsGrid);
301+ verify(itemIsOnScreen(runningApplicationsGrid));
302+ }
303+
236304 // Wait for the whole UI to settle down
237305 function waitForUIToSettle() {
238306 waitUntilApplicationWindowIsFullyHidden();