Merge lp:~boiko/dialer-app/rtm-greeter_refactor into lp:dialer-app/rtm-14.09

Proposed by Gustavo Pichorim Boiko
Status: Merged
Approved by: Bill Filler
Approved revision: 251
Merged at revision: 252
Proposed branch: lp:~boiko/dialer-app/rtm-greeter_refactor
Merge into: lp:dialer-app/rtm-14.09
Prerequisite: lp:~boiko/dialer-app/rtm-remove_multiple_entries
Diff against target: 437 lines (+134/-61)
6 files modified
src/qml/ContactsPage/ContactsPage.qml (+1/-1)
src/qml/DialerPage/DialerPage.qml (+14/-14)
src/qml/HistoryPage/HistoryDetailsPage.qml (+1/-1)
src/qml/HistoryPage/HistoryPage.qml (+2/-2)
src/qml/LiveCallPage/LiveCall.qml (+10/-7)
src/qml/dialer-app.qml (+106/-36)
To merge this branch: bzr merge lp:~boiko/dialer-app/rtm-greeter_refactor
Reviewer Review Type Date Requested Status
Bill Filler (community) Approve
Review via email: mp+246289@code.launchpad.net

Commit message

Emergency mode refactor.
Use two page stacks: one for normal mode and another for emergency mode.

Description of the change

Emergency mode refactor.
Use two page stacks: one for normal mode and another for emergency mode.

To post a comment you must log in.
251. By Gustavo Pichorim Boiko

Always show LiveCall view on greeter when hasCalls() is true.

Revision history for this message
Bill Filler (bfiller) wrote :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/qml/ContactsPage/ContactsPage.qml'
2--- src/qml/ContactsPage/ContactsPage.qml 2014-09-03 17:07:44 +0000
3+++ src/qml/ContactsPage/ContactsPage.qml 2015-01-20 15:08:54 +0000
4@@ -208,7 +208,7 @@
5 Qt.openUrlExternally("message:///" + encodeURIComponent(detail.number))
6 return
7 }
8- pageStack.pop()
9+ pageStackNormalMode.pop()
10 if (callManager.hasCalls) {
11 mainView.call(detail.number, mainView.account.accountId);
12 } else {
13
14=== modified file 'src/qml/DialerPage/DialerPage.qml'
15--- src/qml/DialerPage/DialerPage.qml 2014-12-04 12:52:57 +0000
16+++ src/qml/DialerPage/DialerPage.qml 2015-01-20 15:08:54 +0000
17@@ -32,32 +32,37 @@
18 property alias dialNumber: keypadEntry.value
19 property alias input: keypadEntry.input
20 property alias callAnimationRunning: callAnimation.running
21+ property bool greeterMode: false
22 property var mmiPlugins: []
23 property list<Action> actionsGreeter
24 property list<Action> actionsNormal: [
25 Action {
26 iconName: "contact"
27 text: i18n.tr("Contacts")
28- onTriggered: pageStack.push(Qt.resolvedUrl("../ContactsPage/ContactsPage.qml"))
29+ onTriggered: pageStackNormalMode.push(Qt.resolvedUrl("../ContactsPage/ContactsPage.qml"))
30 },
31 Action {
32 iconName: "settings"
33 text: i18n.tr("Settings")
34 onTriggered: Qt.openUrlExternally("settings:///system/phone")
35 }
36+
37 ]
38- head.actions: greeter.greeterActive ? actionsGreeter : actionsNormal
39+ head.actions: mainView.greeterMode ? actionsGreeter : actionsNormal
40 head.backAction: Action {
41 iconName: "back"
42 text: i18n.tr("Close")
43- visible: greeter.greeterActive
44- onTriggered: greeter.showGreeter()
45+ visible: mainView.greeterMode
46+ onTriggered: {
47+ greeter.showGreeter()
48+ dialNumber = "";
49+ }
50 }
51
52 objectName: "dialerPage"
53
54 title: {
55- if (greeter.greeterActive) {
56+ if (mainView.greeterMode) {
57 return i18n.tr("Emergency Calls")
58 } else if (telepathyHelper.flightMode) {
59 return i18n.tr("Flight mode")
60@@ -73,7 +78,7 @@
61 return i18n.tr("No network")
62 }
63
64- state: greeter.greeterActive ? "greeterMode" : "normalMode"
65+ state: mainView.state
66 // -------- Greeter mode ----------
67 states: [
68 State {
69@@ -86,10 +91,6 @@
70 target: addContact
71 visible: false
72 }
73- PropertyChanges {
74- target: keypadEntry
75- value: ""
76- }
77 },
78 State {
79 name: "normalMode"
80@@ -101,12 +102,11 @@
81 target: addContact
82 visible: true
83 }
84-
85 }
86 ]
87
88 // -------- Bottom Edge Setup -----
89- bottomEdgeEnabled: !greeter.greeterActive
90+ bottomEdgeEnabled: !mainView.greeterMode
91 bottomEdgePageSource: Qt.resolvedUrl("../HistoryPage/HistoryPage.qml")
92 // NOTE: uncomment the next line to re-enable progressive bottom edge swiping.
93 //bottomEdgeExpandThreshold: bottomEdgePage ? bottomEdgePage.delegateHeight * 3 : 0
94@@ -181,7 +181,7 @@
95
96 head.sections.model: {
97 // does not show dual sim switch if there is only one sim
98- if (!multipleAccounts || greeter.greeterActive) {
99+ if (!multipleAccounts || mainView.greeterMode) {
100 return undefined
101 }
102
103@@ -388,7 +388,7 @@
104 return false;
105 }
106
107- if (greeter.greeterActive) {
108+ if (mainView.greeterMode) {
109 return mainView.isEmergencyNumber(dialNumber);
110 }
111
112
113=== modified file 'src/qml/HistoryPage/HistoryDetailsPage.qml'
114--- src/qml/HistoryPage/HistoryDetailsPage.qml 2015-01-09 11:54:33 +0000
115+++ src/qml/HistoryPage/HistoryDetailsPage.qml 2015-01-20 15:08:54 +0000
116@@ -74,7 +74,7 @@
117 text: i18n.tr("Delete")
118 onTriggered: {
119 eventModel.removeEvents(events);
120- pageStack.pop();
121+ pageStackNormalMode.pop();
122 }
123 }
124
125
126=== modified file 'src/qml/HistoryPage/HistoryPage.qml'
127--- src/qml/HistoryPage/HistoryPage.qml 2015-01-09 11:54:33 +0000
128+++ src/qml/HistoryPage/HistoryPage.qml 2015-01-20 15:08:54 +0000
129@@ -112,7 +112,7 @@
130 onSelectedIndexChanged: {
131 // NOTE: be careful on changing the way filters are assigned, if we create a
132 // binding on head.sections, we might get weird results when the page moves to the bottom
133- if (pageStack.depth > 1) {
134+ if (pageStackNormalMode.depth > 1) {
135 if (head.sections.selectedIndex == 0) {
136 historyEventModel.filter = emptyFilter;
137 } else {
138@@ -323,7 +323,7 @@
139 iconName: "info"
140 text: i18n.tr("Details")
141 onTriggered: {
142- pageStack.push(Qt.resolvedUrl("HistoryDetailsPage.qml"),
143+ pageStackNormalMode.push(Qt.resolvedUrl("HistoryDetailsPage.qml"),
144 { phoneNumber: participants[0].phoneNumber,
145 events: model.events,
146 eventModel: historyEventModel})
147
148=== modified file 'src/qml/LiveCallPage/LiveCall.qml'
149--- src/qml/LiveCallPage/LiveCall.qml 2014-12-16 01:11:54 +0000
150+++ src/qml/LiveCallPage/LiveCall.qml 2015-01-20 15:08:54 +0000
151@@ -60,10 +60,10 @@
152 objectName: "backButton"
153 iconName: "back"
154 onTriggered: {
155- if (greeter.greeterActive) {
156+ if (mainView.greeterMode) {
157 greeter.showGreeter();
158 } else {
159- pageStack.pop();
160+ pageStackNormalMode.pop();
161 }
162 }
163 }
164@@ -261,9 +261,12 @@
165 running: false
166 onTriggered: {
167 if (!callManager.hasCalls) {
168- mainView.switchToKeypadView();
169- pageStack.currentPage.dialNumber = pendingNumberToDial;
170- if (greeter.greeterActive) {
171+ mainView.removeLiveCallView();
172+ // TODO: we can't be sure that the currentPage is a DialerPage instance
173+ if (pageStackNormalMode.currentPage.dialNumber) {
174+ pageStackNormalMode.currentPage.dialNumber = pendingNumberToDial;
175+ }
176+ if (mainView.greeterMode) {
177 greeter.showGreeter();
178 }
179 }
180@@ -568,8 +571,8 @@
181 iconSource: "add"
182 iconWidth: units.gu(3)
183 iconHeight: units.gu(3)
184- enabled: !greeter.greeterActive
185- onClicked: pageStack.push(Qt.resolvedUrl("../ContactsPage/ContactsPage.qml"))
186+ enabled: !mainView.greeterMode
187+ onClicked: pageStackNormalMode.push(Qt.resolvedUrl("../ContactsPage/ContactsPage.qml"))
188 }
189
190 LiveCallKeypadButton {
191
192=== modified file 'src/qml/dialer-app.qml'
193--- src/qml/dialer-app.qml 2014-12-04 13:24:23 +0000
194+++ src/qml/dialer-app.qml 2015-01-20 15:08:54 +0000
195@@ -32,6 +32,8 @@
196 property string ussdResponseText: ""
197 property bool multipleAccounts: telepathyHelper.activeAccounts.length > 1
198 property QtObject account: defaultAccount()
199+ property bool greeterMode: (state == "greeterMode")
200+ property bool lastHasCalls: callManager.hasCalls
201
202 function defaultAccount() {
203 // we only use the default account property if we have more
204@@ -58,8 +60,20 @@
205 onApplicationActiveChanged: {
206 if (applicationActive) {
207 telepathyHelper.registerChannelObserver()
208- if (pageStack.currentPage.objectName == "pageLiveCall" && !callManager.hasCalls) {
209- pageStack.pop();
210+
211+ if (!callManager.hasCalls) {
212+ // if on contacts page in a live call and no calls are found, pop it out
213+ if (pageStackNormalMode.depth > 2 && pageStackNormalMode.currentPage.objectName == "contactsPage") {
214+ pageStackNormalMode.pop();
215+ }
216+
217+ // pop live call views from both stacks if we have no calls.
218+ if (pageStackNormalMode.depth > 1 && pageStackNormalMode.currentPage.objectName == "pageLiveCall") {
219+ pageStackNormalMode.pop();
220+ }
221+ if (pageStackGreeterMode.depth > 1 && pageStackGreeterMode.currentPage.objectName == "pageLiveCall") {
222+ pageStackGreeterMode.pop();
223+ }
224 }
225 } else {
226 telepathyHelper.unregisterChannelObserver()
227@@ -70,7 +84,7 @@
228 target: telepathyHelper
229 onSetupReady: {
230 if (multipleAccounts && !telepathyHelper.defaultCallAccount &&
231- settings.mainViewDontAskCount < 3 && pageStack.depth === 1) {
232+ settings.mainViewDontAskCount < 3 && pageStackNormalMode.depth === 1 && !mainView.greeterMode) {
233 PopupUtils.open(Qt.createComponent("Dialogs/NoDefaultSIMCardDialog.qml").createObject(mainView))
234 }
235 }
236@@ -104,21 +118,39 @@
237 Binding {
238 target: application
239 property: "fullScreen"
240- value: greeter.greeterActive
241+ value: mainView.greeterMode
242 }
243
244+ state: greeter.greeterActive ? "greeterMode" : "normalMode"
245 states: [
246 State {
247 name: "greeterMode"
248- when: greeter.greeterActive
249-
250- StateChangeScript {
251- script: {
252- // make sure to reset the view so that the contacts page is not loaded
253- if (callManager.hasCalls) {
254- switchToLiveCall();
255- } else {
256- switchToKeypadView();
257+
258+ StateChangeScript {
259+ script: {
260+ // preload greeter stack if not done yet
261+ if (pageStackGreeterMode.depth == 0) {
262+ pageStackGreeterMode.push(Qt.resolvedUrl("DialerPage/DialerPage.qml"))
263+ }
264+ // make sure to reset the view so that the contacts page is not loaded
265+ if (callManager.hasCalls) {
266+ switchToLiveCall();
267+ } else {
268+ removeLiveCallView();
269+ }
270+ }
271+ }
272+ },
273+ State {
274+ name: "normalMode"
275+
276+ StateChangeScript {
277+ script: {
278+ // make sure to reset the view so that the contacts page is not loaded
279+ if (callManager.hasCalls) {
280+ switchToLiveCall();
281+ } else {
282+ removeLiveCallView();
283 }
284 }
285 }
286@@ -160,7 +192,7 @@
287 }
288
289 function callVoicemail() {
290- if (greeter.greeterActive) {
291+ if (mainView.greeterMode) {
292 return;
293 }
294 call(mainView.account.voicemailNumber);
295@@ -265,7 +297,7 @@
296 return
297 }
298
299- if (mainView.account && !greeter.greeterActive && mainView.account.simLocked) {
300+ if (mainView.account && !mainView.greeterMode && mainView.account.simLocked) {
301 var properties = {}
302 properties["accountId"] = mainView.account.accountId
303 PopupUtils.open(Qt.createComponent("Dialogs/SimLockedDialog.qml").createObject(mainView), mainView, properties)
304@@ -301,49 +333,72 @@
305 // FIXME: check what to do when not in the dialpad view
306
307 // if not on the livecall view, go back to the dialpad
308- while (pageStack.depth > 1 && pageStack.currentPage.objectName != "pageLiveCall") {
309- pageStack.pop();
310- }
311-
312- if (pageStack.currentPage && typeof(pageStack.currentPage.dialNumber) != 'undefined') {
313- pageStack.currentPage.dialNumber = number;
314+ while (pageStackNormalMode.depth > 1) {
315+ pageStackNormalMode.pop();
316+ }
317+
318+ if (pageStackNormalMode.currentPage && typeof(pageStackNormalMode.currentPage.dialNumber) != 'undefined') {
319+ pageStackNormalMode.currentPage.dialNumber = number;
320+ }
321+ }
322+
323+ function removeLiveCallView() {
324+ // if on contacts page in a live call and no calls are found, pop it out
325+ if (pageStackNormalMode.depth > 2 && pageStackNormalMode.currentPage.objectName == "contactsPage") {
326+ pageStackNormalMode.pop();
327+ }
328+
329+ if (pageStackNormalMode.depth > 1 && pageStackNormalMode.currentPage.objectName == "pageLiveCall") {
330+ pageStackNormalMode.pop();
331+ }
332+
333+ while (pageStackGreeterMode.depth > 1) {
334+ pageStackGreeterMode.pop();
335 }
336 }
337
338 function switchToKeypadView() {
339- while (pageStack.depth > 1) {
340- pageStack.pop();
341+ while (pageStackNormalMode.depth > 1) {
342+ pageStackNormalMode.pop();
343+ }
344+ while (pageStackGreeterMode.depth > 1) {
345+ pageStackGreeterMode.pop();
346 }
347 }
348
349 function animateLiveCall() {
350- if (pageStack.currentPage && pageStack.currentPage.triggerCallAnimation) {
351- pageStack.currentPage.triggerCallAnimation();
352+ var stack = mainView.greeterMode ? pageStackGreeterMode : pageStackNormalMode
353+ if (stack.currentPage && stack.currentPage.triggerCallAnimation) {
354+ stack.currentPage.triggerCallAnimation();
355 } else {
356 switchToLiveCall();
357 }
358 }
359
360 function switchToLiveCall() {
361- // pop the stack if the live call is not the visible view
362- // FIXME: using the objectName here is not pretty, change by something less prone to errors
363- while (pageStack.depth > 1 && pageStack.currentPage.objectName != "pageLiveCall") {
364- pageStack.pop();
365+ var stack = mainView.greeterMode ? pageStackGreeterMode : pageStackNormalMode
366+
367+ if (pageStackNormalMode.depth > 2 && pageStackNormalMode.currentPage.objectName == "contactsPage") {
368+ // pop contacts Page
369+ stack.pop();
370 }
371+
372 var properties = {}
373 if (isEmergencyNumber(pendingNumberToDial)) {
374 properties["defaultTimeout"] = 30000
375 }
376
377- if (pageStack.depth === 1) {
378- pageStack.push(Qt.resolvedUrl("LiveCallPage/LiveCall.qml"), properties)
379+ if (stack.currentPage.objectName == "pageLiveCall") {
380+ return;
381 }
382+
383+ stack.push(Qt.resolvedUrl("LiveCallPage/LiveCall.qml"), properties)
384 }
385
386 Component.onCompleted: {
387 i18n.domain = "dialer-app"
388 i18n.bindtextdomain("dialer-app", i18nDirectory)
389- pageStack.push(Qt.createComponent("DialerPage/DialerPage.qml"))
390+ pageStackNormalMode.push(Qt.createComponent("DialerPage/DialerPage.qml"))
391
392 // if there are calls, even if we don't have info about them yet, push the livecall view
393 if (callManager.hasCalls) {
394@@ -484,16 +539,22 @@
395 target: callManager
396 onHasCallsChanged: {
397 if (!callManager.hasCalls) {
398+ mainView.lastHasCalls = callManager.hasCalls
399 return;
400 }
401
402+ var stack = mainView.greeterMode ? pageStackGreeterMode : pageStackNormalMode
403 // if we are animating the dialpad view, do not switch to livecall directly
404- if (pageStack.currentPage && pageStack.currentPage.callAnimationRunning) {
405+ if (stack.currentPage && stack.currentPage.callAnimationRunning) {
406+ mainView.lastHasCalls = callManager.hasCalls
407 return;
408 }
409
410 // if not, just open the live call
411- switchToLiveCall();
412+ if (mainView.lastHasCalls != callManager.hasCalls || mainView.greeterMode) {
413+ mainView.lastHasCalls = callManager.hasCalls
414+ switchToLiveCall();
415+ }
416 }
417 }
418
419@@ -575,7 +636,16 @@
420 }
421
422 PageStack {
423- id: pageStack
424- anchors.fill: parent
425+ id: pageStackNormalMode
426+ anchors.fill: parent
427+ active: mainView.state == "normalMode"
428+ visible: active
429+ }
430+
431+ PageStack {
432+ id: pageStackGreeterMode
433+ anchors.fill: parent
434+ active: mainView.state == "greeterMode"
435+ visible: active
436 }
437 }

Subscribers

People subscribed via source and target branches