Merge lp:~nik90/ubuntu-clock-app/sync-bottomedge-sep08 into lp:ubuntu-clock-app

Proposed by Nekhelesh Ramananthan
Status: Merged
Approved by: Nekhelesh Ramananthan
Approved revision: 104
Merged at revision: 131
Proposed branch: lp:~nik90/ubuntu-clock-app/sync-bottomedge-sep08
Merge into: lp:ubuntu-clock-app
Diff against target: 535 lines (+188/-158)
7 files modified
app/clock/ClockPage.qml (+8/-1)
app/components/Clock.qml (+1/-0)
app/ubuntu-clock-app.qml (+0/-1)
app/upstreamcomponents/PageWithBottomEdge.qml (+164/-155)
debian/changelog (+12/-0)
manifest.json.in (+1/-1)
tests/autopilot/ubuntu_clock_app/emulators.py (+2/-0)
To merge this branch: bzr merge lp:~nik90/ubuntu-clock-app/sync-bottomedge-sep08
Reviewer Review Type Date Requested Status
Nekhelesh Ramananthan testing Approve
Ubuntu Phone Apps Jenkins Bot continuous-integration Approve
Renato Araujo Oliveira Filho Pending
Review via email: mp+236604@code.launchpad.net

Commit message

Sync PageWithBottomEdge.qml with upstream addressbook changes with regards to bug 1357945.

Description of the change

Sync PageWithBottomEdge.qml with upstream addressbook changes with regards to bug 1357945.

To post a comment you must log in.
Revision history for this message
Nekhelesh Ramananthan (nik90) wrote :

I notice 2 issues with this MP,

1. The bottom edge hint does not show automatically after opening the clock app.

2. The bottom edge hint does not hide when interacting with the content (scrolling, pressing button). This is also noticed in the upstream addressbook app as well.

3. When user stops interacting, it does not reappear after 5 seconds (also noticeable in upstream implementation).

review: Needs Fixing
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
94. By Nekhelesh Ramananthan

Hide focus when flicking or interacting with clock page contents

95. By Nekhelesh Ramananthan

Synced with lp:~renatofilho/address-book-app/fix-1375513

Revision history for this message
Nekhelesh Ramananthan (nik90) wrote :

> I notice 2 issues with this MP,
>
> 1. The bottom edge hint does not show automatically after opening the clock
> app.
>

Still not fixed. Debugging atm.

> 2. The bottom edge hint does not hide when interacting with the content
> (scrolling, pressing button). This is also noticed in the upstream addressbook
> app as well.
>

Fixed in latest rev.

> 3. When user stops interacting, it does not reappear after 5 seconds (also
> noticeable in upstream implementation).

Renato mentioned that he agreed with the designers to not implement that, since it will be very complex to do and they are happy with the current implementation

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
96. By Nekhelesh Ramananthan

Fixed AP test and also solved bottom edge hint not getting active focus at clock app start using a hack

Revision history for this message
Nekhelesh Ramananthan (nik90) wrote :

All issues resolved (issue 1 solved with a hack). Let's see if we can resolve it properly.

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
97. By Nekhelesh Ramananthan

Removed ugly hack which was added before

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
98. By Nekhelesh Ramananthan

Fixed AP test by waiting for bottom edge hint to be shown

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Nekhelesh Ramananthan (nik90) wrote :

This has been design approved by Giorgio. Just need the AP tests to pass now before this can be merged!

Damn you Jenkins :P

99. By Nekhelesh Ramananthan

Added debug

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
100. By Nekhelesh Ramananthan

Disabled alarms tests

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
101. By Nekhelesh Ramananthan

Reverted disabling tests

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
102. By Nekhelesh Ramananthan

Removed unnecessary function in bottom edge file

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Nekhelesh Ramananthan (nik90) wrote :

#blocked on Jenkins. This requires a patch to the Jenkins environment since the xvfb package which is used to run the clock app tests takes input focus away from the clock app when it is launched. This is causing the AP tests to be pass. Francis and Nicholas have been informed. Once jenkins is fixed, we should be good to merge this branch.

review: Needs Fixing
103. By Nekhelesh Ramananthan

merged trunk lp:ubuntu-clock-app

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Nekhelesh Ramananthan (nik90) wrote :

#unblocked

104. By Nekhelesh Ramananthan

Updated changelog and bumped version to 3.2

Revision history for this message
Nekhelesh Ramananthan (nik90) wrote :

This MP only syncs the bottom edge component with upstream code. So no code review necessary. It was tested by myself and Giorgio (designer) on N4 and Krillin and confirmed to be working as expected.

Approving.

review: Approve (testing)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'app/clock/ClockPage.qml'
2--- app/clock/ClockPage.qml 2014-09-26 11:36:12 +0000
3+++ app/clock/ClockPage.qml 2014-10-09 16:31:17 +0000
4@@ -33,13 +33,20 @@
5
6 flickable: null
7
8- Component.onCompleted: Utils.log(debugMode, "Clock Page loaded")
9+ Component.onCompleted: {
10+ Utils.log(debugMode, "Clock Page loaded")
11+ _clockPage.setBottomEdgePage(Qt.resolvedUrl("../alarm/AlarmPage.qml"), {})
12+ }
13
14 Flickable {
15 id: _flickable
16
17 Component.onCompleted: otherElementsStartUpAnimation.start()
18
19+ onFlickStarted: {
20+ forceActiveFocus()
21+ }
22+
23 anchors.fill: parent
24 contentWidth: parent.width
25 contentHeight: clock.height + date.height + locationRow.height
26
27=== modified file 'app/components/Clock.qml'
28--- app/components/Clock.qml 2014-09-06 15:16:43 +0000
29+++ app/components/Clock.qml 2014-10-09 16:31:17 +0000
30@@ -148,6 +148,7 @@
31 enabled: isMainClock
32 anchors.fill: parent
33 onClicked: {
34+ forceActiveFocus()
35 clockFlipAnimation.start()
36 }
37 }
38
39=== modified file 'app/ubuntu-clock-app.qml'
40--- app/ubuntu-clock-app.qml 2014-08-26 20:20:37 +0000
41+++ app/ubuntu-clock-app.qml 2014-10-09 16:31:17 +0000
42@@ -101,7 +101,6 @@
43 alarm. For instance it should read "Next alarm in 9h23m".
44 */
45 bottomEdgeTitle: i18n.tr("Alarms")
46- bottomEdgePageComponent: AlarmPage {}
47 }
48 }
49 }
50
51=== modified file 'app/upstreamcomponents/PageWithBottomEdge.qml'
52--- app/upstreamcomponents/PageWithBottomEdge.qml 2014-09-20 10:47:21 +0000
53+++ app/upstreamcomponents/PageWithBottomEdge.qml 2014-10-09 16:31:17 +0000
54@@ -62,7 +62,7 @@
55
56 */
57
58-import QtQuick 2.3
59+import QtQuick 2.2
60 import Ubuntu.Components 1.1
61
62 Page {
63@@ -71,7 +71,7 @@
64 property alias bottomEdgePageComponent: edgeLoader.sourceComponent
65 property alias bottomEdgePageSource: edgeLoader.source
66 property alias bottomEdgeTitle: tipLabel.text
67- property alias bottomEdgeEnabled: bottomEdge.visible
68+ property bool bottomEdgeEnabled: true
69 property int bottomEdgeExpandThreshold: page.height * 0.2
70 property int bottomEdgeExposedArea: bottomEdge.state !== "expanded" ? (page.height - bottomEdge.y - bottomEdge.tipHeight) : _areaWhenExpanded
71 property bool reloadBottomEdgePage: true
72@@ -87,7 +87,6 @@
73 signal bottomEdgeReleased()
74 signal bottomEdgeDismissed()
75
76-
77 function showBottomEdgePage(source, properties)
78 {
79 edgeLoader.setSource(source, properties)
80@@ -142,13 +141,123 @@
81 z: 1
82 }
83
84- Timer {
85- id: hideIndicator
86-
87- interval: 3000
88- running: true
89- repeat: false
90- onTriggered: tip.hiden = true
91+ UbuntuShape {
92+ id: tip
93+ objectName: "bottomEdgeTip"
94+
95+ property bool hiden: (activeFocus === false) ||
96+ ((bottomEdge.y - units.gu(1)) < tip.y)
97+
98+ enabled: mouseArea.enabled
99+ visible: page.bottomEdgeEnabled
100+ anchors {
101+ bottom: parent.bottom
102+ horizontalCenter: bottomEdge.horizontalCenter
103+ bottomMargin: hiden ? - height + units.gu(1) : -units.gu(1)
104+ Behavior on bottomMargin {
105+ SequentialAnimation {
106+ // wait some msecs in case of the focus change again, to avoid flickering
107+ PauseAnimation {
108+ duration: 300
109+ }
110+ UbuntuNumberAnimation {
111+ duration: UbuntuAnimation.SnapDuration
112+ }
113+ }
114+ }
115+ }
116+
117+ z: 1
118+ width: tipLabel.paintedWidth + units.gu(6)
119+ height: bottomEdge.tipHeight + units.gu(1)
120+ color: Theme.palette.normal.overlay
121+ Label {
122+ id: tipLabel
123+
124+ anchors {
125+ top: parent.top
126+ left: parent.left
127+ right: parent.right
128+ }
129+ height: bottomEdge.tipHeight
130+ verticalAlignment: Text.AlignVCenter
131+ horizontalAlignment: Text.AlignHCenter
132+ opacity: tip.hiden ? 0.0 : 1.0
133+ Behavior on opacity {
134+ UbuntuNumberAnimation {
135+ duration: UbuntuAnimation.SnapDuration
136+ }
137+ }
138+ }
139+ }
140+
141+ Rectangle {
142+ id: shadow
143+
144+ anchors {
145+ left: parent.left
146+ right: parent.right
147+ bottom: parent.bottom
148+ }
149+ height: units.gu(1)
150+ z: 1
151+ opacity: 0.0
152+ gradient: Gradient {
153+ GradientStop { position: 0.0; color: "transparent" }
154+ GradientStop { position: 1.0; color: Qt.rgba(0, 0, 0, 0.2) }
155+ }
156+ }
157+
158+ MouseArea {
159+ id: mouseArea
160+
161+ property real previousY: -1
162+ property string dragDirection: "None"
163+
164+ preventStealing: true
165+ drag {
166+ axis: Drag.YAxis
167+ target: bottomEdge
168+ minimumY: bottomEdge.pageStartY
169+ maximumY: page.height
170+ }
171+ enabled: edgeLoader.status == Loader.Ready
172+ visible: page.bottomEdgeEnabled
173+
174+ anchors {
175+ left: parent.left
176+ right: parent.right
177+ bottom: parent.bottom
178+ }
179+ height: bottomEdge.tipHeight
180+ z: 1
181+
182+ onReleased: {
183+ page.bottomEdgeReleased()
184+ if ((dragDirection === "BottomToTop") &&
185+ bottomEdge.y < (page.height - bottomEdgeExpandThreshold - bottomEdge.tipHeight)) {
186+ bottomEdge.state = "expanded"
187+ } else {
188+ bottomEdge.state = "collapsed"
189+ }
190+ previousY = -1
191+ dragDirection = "None"
192+ }
193+
194+ onPressed: {
195+ previousY = mouse.y
196+ tip.forceActiveFocus()
197+ }
198+
199+ onMouseYChanged: {
200+ var yOffset = previousY - mouseY
201+ // skip if was a small move
202+ if (Math.abs(yOffset) <= units.gu(2)) {
203+ return
204+ }
205+ previousY = mouseY
206+ dragDirection = yOffset > 0 ? "BottomToTop" : "TopToBottom"
207+ }
208 }
209
210 FakeHeader {
211@@ -177,7 +286,7 @@
212
213 z: 1
214 color: Theme.palette.normal.background
215- parent: page
216+ clip: true
217 anchors {
218 left: parent.left
219 right: parent.right
220@@ -185,99 +294,7 @@
221 height: page.height
222 y: height
223
224- UbuntuShape {
225- id: tip
226- objectName: "bottomEdgeTip"
227-
228- property bool hiden: false
229-
230- readonly property double visiblePosition: (page.height - bottomEdge.y) < units.gu(1) ? -bottomEdge.tipHeight + (page.height - bottomEdge.y) : 0
231- readonly property double invisiblePosition: (page.height - bottomEdge.y) < units.gu(1) ? -units.gu(1) : 0
232-
233- z: -1
234- anchors.horizontalCenter: parent.horizontalCenter
235- y: hiden ? invisiblePosition : visiblePosition
236-
237- width: tipLabel.paintedWidth + units.gu(6)
238- height: bottomEdge.tipHeight + units.gu(1)
239- color: Theme.palette.normal.overlay
240- Label {
241- id: tipLabel
242-
243- anchors {
244- top: parent.top
245- left: parent.left
246- right: parent.right
247- }
248- height: bottomEdge.tipHeight
249- verticalAlignment: Text.AlignVCenter
250- horizontalAlignment: Text.AlignHCenter
251- opacity: tip.hiden ? 0.0 : 1.0
252- Behavior on opacity {
253- UbuntuNumberAnimation {
254- duration: UbuntuAnimation.SnapDuration
255- }
256- }
257- }
258- Behavior on y {
259- UbuntuNumberAnimation {
260- duration: UbuntuAnimation.SnapDuration
261- }
262- }
263- }
264-
265- Rectangle {
266- id: shadow
267-
268- anchors {
269- left: parent.left
270- right: parent.right
271- }
272- height: units.gu(1)
273- y: -height
274- z: -2
275- opacity: 0.0
276- gradient: Gradient {
277- GradientStop { position: 0.0; color: "transparent" }
278- GradientStop { position: 1.0; color: Qt.rgba(0, 0, 0, 0.2) }
279- }
280- }
281-
282- MouseArea {
283- id: mouseArea
284-
285- preventStealing: true
286- drag {
287- axis: Drag.YAxis
288- target: bottomEdge
289- minimumY: bottomEdge.pageStartY
290- maximumY: page.height
291- threshold: 100
292- }
293-
294- anchors {
295- left: parent.left
296- right: parent.right
297- }
298- height: bottomEdge.tipHeight
299- y: -height
300-
301- onReleased: {
302- page.bottomEdgeReleased()
303- if (bottomEdge.y < (page.height - bottomEdgeExpandThreshold - bottomEdge.tipHeight)) {
304- bottomEdge.state = "expanded"
305- } else {
306- bottomEdge.state = "collapsed"
307- bottomEdge.y = bottomEdge.height
308- }
309- }
310-
311- onClicked: {
312- tip.hiden = false
313- hideIndicator.restart()
314- }
315- }
316-
317+ visible: !page.isCollapsed
318 state: "collapsed"
319 states: [
320 State {
321@@ -290,14 +307,6 @@
322 target: fakeHeader
323 y: -fakeHeader.height
324 }
325- PropertyChanges {
326- target: tip
327- opacity: 1.0
328- }
329- PropertyChanges {
330- target: hideIndicator
331- running: true
332- }
333 },
334 State {
335 name: "expanded"
336@@ -309,10 +318,6 @@
337 target: fakeHeader
338 y: 0
339 }
340- PropertyChanges {
341- target: hideIndicator
342- running: false
343- }
344 },
345 State {
346 name: "floating"
347@@ -321,14 +326,6 @@
348 target: shadow
349 opacity: 1.0
350 }
351- PropertyChanges {
352- target: hideIndicator
353- running: false
354- }
355- PropertyChanges {
356- target: tip
357- hiden: false
358- }
359 }
360 ]
361
362@@ -336,18 +333,35 @@
363 Transition {
364 to: "expanded"
365 SequentialAnimation {
366+ alwaysRunToEnd: true
367 ParallelAnimation {
368- UbuntuNumberAnimation {
369+ SmoothedAnimation {
370 target: bottomEdge
371 property: "y"
372- duration: UbuntuAnimation.SlowDuration
373+ duration: UbuntuAnimation.FastDuration
374+ easing.type: Easing.Linear
375 }
376- UbuntuNumberAnimation {
377+ SmoothedAnimation {
378 target: fakeHeader
379 property: "y"
380- duration: UbuntuAnimation.SlowDuration
381+ duration: UbuntuAnimation.FastDuration
382+ easing.type: Easing.Linear
383 }
384 }
385+ SmoothedAnimation {
386+ target: edgeLoader
387+ property: "anchors.topMargin"
388+ to: - units.gu(4)
389+ duration: UbuntuAnimation.FastDuration
390+ easing.type: Easing.Linear
391+ }
392+ SmoothedAnimation {
393+ target: edgeLoader
394+ property: "anchors.topMargin"
395+ to: 0
396+ duration: UbuntuAnimation.FastDuration
397+ easing: UbuntuAnimation.StandardEasing
398+ }
399 ScriptAction {
400 script: page._pushPage()
401 }
402@@ -357,6 +371,8 @@
403 from: "expanded"
404 to: "collapsed"
405 SequentialAnimation {
406+ alwaysRunToEnd: true
407+
408 ScriptAction {
409 script: {
410 Qt.inputMethod.hide()
411@@ -366,12 +382,12 @@
412 }
413 }
414 ParallelAnimation {
415- UbuntuNumberAnimation {
416+ SmoothedAnimation {
417 target: bottomEdge
418 property: "y"
419 duration: UbuntuAnimation.SlowDuration
420 }
421- UbuntuNumberAnimation {
422+ SmoothedAnimation {
423 target: fakeHeader
424 property: "y"
425 duration: UbuntuAnimation.SlowDuration
426@@ -382,14 +398,14 @@
427 // destroy current bottom page
428 if (page.reloadBottomEdgePage) {
429 edgeLoader.active = false
430+ } else {
431+ tip.forceActiveFocus()
432 }
433
434 // notify
435 page.bottomEdgeDismissed()
436
437 edgeLoader.active = true
438- tip.hiden = false
439- hideIndicator.restart()
440 }
441 }
442 }
443@@ -404,30 +420,23 @@
444 }
445 ]
446
447- Item {
448+ Loader {
449+ id: edgeLoader
450+
451+ asynchronous: true
452 anchors.fill: parent
453- clip: true
454-
455- Loader {
456- id: edgeLoader
457-
458- z: 1
459- active: true
460- asynchronous: true
461- anchors.fill: parent
462-
463- //WORKAROUND: The SDK move the page contents down to allocate space for the header we need to avoid that during the page dragging
464- Binding {
465- target: edgeLoader.status === Loader.Ready ? edgeLoader : null
466- property: "anchors.topMargin"
467- value: edgeLoader.item && edgeLoader.item.flickable ? edgeLoader.item.flickable.contentY : 0
468- when: !page.isReady
469- }
470-
471- onLoaded: {
472- if (page.isReady && edgeLoader.item.active !== true) {
473- page._pushPage()
474- }
475+ //WORKAROUND: The SDK move the page contents down to allocate space for the header we need to avoid that during the page dragging
476+ Binding {
477+ target: edgeLoader.status === Loader.Ready ? edgeLoader : null
478+ property: "anchors.topMargin"
479+ value: edgeLoader.item && edgeLoader.item.flickable ? edgeLoader.item.flickable.contentY : 0
480+ when: !page.isReady
481+ }
482+
483+ onLoaded: {
484+ tip.forceActiveFocus()
485+ if (page.isReady && edgeLoader.item.active !== true) {
486+ page._pushPage()
487 }
488 }
489 }
490
491=== modified file 'debian/changelog'
492--- debian/changelog 2014-09-25 11:29:41 +0000
493+++ debian/changelog 2014-10-09 16:31:17 +0000
494@@ -1,3 +1,15 @@
495+ubuntu-clock-app (3.2) utopic; urgency=medium
496+
497+ [Nekhelesh Ramananthan]
498+ * Fixed bottom edge hint timeout which made it possible for new users to not notice
499+ the bottom edge action. (LP: #1357945)
500+
501+ [Akiva Shammai Avraham]
502+ * Improved the analog clock performance by updating the clock hands every second
503+ rather than every 10 milliseconds. (LP: #1363968)
504+
505+ -- Nekhelesh Ramananthan <krnekhelesh@gmail.com> Thu, 09 Oct 2014 18:22:31 +0200
506+
507 ubuntu-clock-app (3.1) utopic; urgency=medium
508
509 [Nekhelesh Ramananthan]
510
511=== modified file 'manifest.json.in'
512--- manifest.json.in 2014-09-18 15:20:25 +0000
513+++ manifest.json.in 2014-10-09 16:31:17 +0000
514@@ -12,7 +12,7 @@
515 "urls": "share/url-dispatcher/urls/com.ubuntu.clock_clock.url-dispatcher"
516 }
517 },
518- "version": "3.1.@BZR_REVNO@",
519+ "version": "3.2.@BZR_REVNO@",
520 "maintainer": "Ubuntu App Cats <ubuntu-touch-coreapps@lists.launchpad.net>",
521 "x-test": {
522 "autopilot": "ubuntu_clock_app"
523
524=== modified file 'tests/autopilot/ubuntu_clock_app/emulators.py'
525--- tests/autopilot/ubuntu_clock_app/emulators.py 2014-09-12 19:44:18 +0000
526+++ tests/autopilot/ubuntu_clock_app/emulators.py 2014-10-09 16:31:17 +0000
527@@ -91,6 +91,8 @@
528 self.bottomEdgePageLoaded.wait_for(True)
529 try:
530 action_item = self.wait_select_single(objectName='bottomEdgeTip')
531+ action_item.hiden.wait_for(False)
532+ action_item.enabled.wait_for(True)
533 start_x = (action_item.globalRect.x +
534 (action_item.globalRect.width * 0.5))
535 start_y = (action_item.globalRect.y +

Subscribers

People subscribed via source and target branches