Merge lp:~fboucault/address-book-app/converged_bottom_edge into lp:address-book-app

Proposed by Florian Boucault
Status: Merged
Approved by: Bill Filler
Approved revision: 512
Merged at revision: 490
Proposed branch: lp:~fboucault/address-book-app/converged_bottom_edge
Merge into: lp:address-book-app
Prerequisite: lp:~fboucault/address-book-app/multicolumns
Diff against target: 2687 lines (+865/-241)
97 files modified
examples/contenthub.qml (+1/-1)
src/imports/ABContactEditorPage.qml (+7/-2)
src/imports/ABContactListPage.qml (+191/-64)
src/imports/ABContactViewPage.qml (+12/-10)
src/imports/BottomEdge.qml (+321/-0)
src/imports/BottomEdgeShadow.qml (+31/-0)
src/imports/CMakeLists.txt (+2/-0)
src/imports/ContentHubProxy.qml (+1/-1)
src/imports/MainWindow.qml (+22/-2)
src/imports/Settings/MyselfPhoneNumbersModel.qml (+1/-1)
src/imports/Settings/SettingsPage.qml (+1/-1)
src/imports/Ubuntu/AddressBook/Base/ContactDetailBase.qml (+1/-1)
src/imports/Ubuntu/AddressBook/Base/ContactDetailGroupBase.qml (+1/-1)
src/imports/Ubuntu/AddressBook/Base/ContactDetailGroupWithTypeBase.qml (+1/-1)
src/imports/Ubuntu/AddressBook/Base/ContactDetailItem.qml (+1/-1)
src/imports/Ubuntu/AddressBook/Base/ContactExporter.qml (+1/-1)
src/imports/Ubuntu/AddressBook/Base/KeyboardRectangle.qml (+1/-1)
src/imports/Ubuntu/AddressBook/Base/RemoveContactsDialog.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactEditor/AvatarImport.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactEditor/ComboButtonAddField.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailAddressesEditor.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailAvatarEditor.qml (+2/-2)
src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailEmailsEditor.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailGroupWithTypeEditor.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailNameEditor.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailOnlineAccountsEditor.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailOrganizationsEditor.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailPhoneNumbersEditor.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailSyncTargetEditor.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailWithTypeEditor.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactEditor/ContactEditorPage.qml (+17/-5)
src/imports/Ubuntu/AddressBook/ContactEditor/TextInputDetail.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactEditor/ValueSelector.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactShare/ContactSharePage.qml (+3/-1)
src/imports/Ubuntu/AddressBook/ContactView/ActionButton.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactView/BasicFieldView.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactView/ContactDetailAddressesView.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactView/ContactDetailAvatarView.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactView/ContactDetailEmailsView.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactView/ContactDetailGroupWithTypeView.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactView/ContactDetailNameView.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactView/ContactDetailOnlineAccountsView.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactView/ContactDetailOrganizationsView.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactView/ContactDetailPhoneNumberView.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactView/ContactDetailPhoneNumbersView.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactView/ContactDetailSyncTargetView.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactView/ContactDetailWithTypeView.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactView/ContactFetchError.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactView/ContactHeaderView.qml (+1/-1)
src/imports/Ubuntu/AddressBook/ContactView/ContactViewPage.qml (+1/-1)
src/imports/Ubuntu/Contacts/ActionButton.qml (+1/-1)
src/imports/Ubuntu/Contacts/ContactAvatar.qml (+3/-3)
src/imports/Ubuntu/Contacts/ContactDelegate.qml (+1/-1)
src/imports/Ubuntu/Contacts/ContactDetailOnlineAccountTypeModel.qml (+1/-1)
src/imports/Ubuntu/Contacts/ContactDetailPhoneNumberTypeModel.qml (+1/-1)
src/imports/Ubuntu/Contacts/ContactDetailPickerPhoneNumberDelegate.qml (+1/-1)
src/imports/Ubuntu/Contacts/ContactFetch.qml (+1/-1)
src/imports/Ubuntu/Contacts/ContactListButtonDelegate.qml (+1/-1)
src/imports/Ubuntu/Contacts/ContactListModel.qml (+1/-1)
src/imports/Ubuntu/Contacts/ContactListView.qml (+61/-4)
src/imports/Ubuntu/Contacts/ContactSimpleListView.qml (+10/-2)
src/imports/Ubuntu/Contacts/FastScroll.qml (+1/-1)
src/imports/Ubuntu/Contacts/ListItemWithActions.qml (+1/-1)
src/imports/Ubuntu/Contacts/ListItemWithActionsCheckBox.qml (+1/-1)
src/imports/Ubuntu/Contacts/MostCalledList.qml (+1/-1)
src/imports/Ubuntu/Contacts/MostCalledModel.qml (+1/-1)
src/imports/Ubuntu/Contacts/MultipleSelectionListView.qml (+1/-1)
src/imports/Ubuntu/Contacts/MultipleSelectionVisualModel.qml (+1/-1)
src/imports/Ubuntu/Contacts/Ofono.qml (+1/-1)
src/imports/Ubuntu/Contacts/OnlineAccountsDummy.qml (+1/-1)
src/imports/Ubuntu/Contacts/OnlineAccountsHelper.qml (+1/-1)
src/imports/Ubuntu/Contacts/PageWithBottomEdge.qml (+2/-2)
src/imports/Ubuntu/Contacts/SIMCardImportPage.qml (+1/-1)
src/imports/Ubuntu/Contacts/SIMList.qml (+1/-1)
src/imports/Ubuntu/Contacts/SectionDelegate.qml (+1/-2)
src/imports/Ubuntu/Contacts/SubtitledWithColors.qml (+1/-1)
src/imports/Ubuntu/Contacts/VCardParser.qml (+1/-1)
src/imports/Ubuntu/Contacts/qmldir (+1/-1)
src/imports/VCardImportDialog.qml (+1/-1)
tests/autopilot/address_book_app/__init__.py (+50/-30)
tests/autopilot/address_book_app/address_book/_contact_view_page.py (+1/-7)
tests/autopilot/address_book_app/address_book/_sim_card_import_page.py (+2/-2)
tests/autopilot/address_book_app/pages/_ab_contact_list_page.py (+26/-7)
tests/autopilot/address_book_app/tests/__init__.py (+2/-2)
tests/autopilot/address_book_app/tests/test_add_contact.py (+8/-5)
tests/autopilot/address_book_app/tests/test_create_new_from_uri.py (+7/-5)
tests/autopilot/address_book_app/tests/test_delete_contact.py (+1/-1)
tests/autopilot/address_book_app/tests/test_edit_contact.py (+10/-10)
tests/qml/tst_ContactAvatar.qml (+1/-1)
tests/qml/tst_ContactEditor.qml (+1/-1)
tests/qml/tst_ContactList.qml (+1/-1)
tests/qml/tst_ContactListModel.qml (+1/-1)
tests/qml/tst_ContactListView.qml (+1/-1)
tests/qml/tst_ContactPreviewPage.qml (+1/-1)
tests/qml/tst_ListWithActions.qml (+1/-1)
tests/qml/tst_UbuntuContacts.qml (+1/-1)
tests/qml/tst_VCardParser.qml (+1/-1)
To merge this branch: bzr merge lp:~fboucault/address-book-app/converged_bottom_edge
Reviewer Review Type Date Requested Status
Renato Araujo Oliveira Filho (community) Approve
PS Jenkins bot continuous-integration Needs Fixing
Robert Bruce Park (community) Needs Fixing
Review via email: mp+270693@code.launchpad.net

Commit message

Make bottom edge usable with a mouse.
Make it smarter when more than one column is available.

To post a comment you must log in.
475. By Florian Boucault

Better avatar for new contact.

476. By Florian Boucault

Better selected contact handling.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
477. By Florian Boucault

Avoid crashes upon deletion.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
478. By Florian Boucault

Added constraints on AdaptivePageLayout so that right column is not squeezed too small.

479. By Florian Boucault

Do not show other import options when adding a new contact.

480. By Florian Boucault

Correctly set the pageStack property to the contact list page.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Renato Araujo Oliveira Filho (renatofilho) wrote :

-Application starts with the keyboard visible.
-Create new contact page appears empty.

review: Needs Fixing
481. By Florian Boucault

Fix 1 column layout.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
482. By Florian Boucault

Fixed doc

483. By Florian Boucault

Always highlight the opened contact.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
484. By Florian Boucault

Fixed sizing of ABContactEditorPage

485. By Florian Boucault

Always reset state

486. By Florian Boucault

Fixed bottom edge stacking.

487. By Florian Boucault

2 columns width fix

488. By Florian Boucault

Prevent forced focus at startup

489. By Florian Boucault

Fix split second visible anime at startup

490. By Florian Boucault

Missing code for previous fix.

491. By Florian Boucault

Show newly created contact only in multicolumn mode.

492. By Florian Boucault

Better new contact placeholder handling

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
493. By Florian Boucault

Added confirmation dialog when cancelling contact edit

494. By Florian Boucault

Cleaner opening of view and edit contact pages.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
495. By Florian Boucault

Cancel edition before trying to show a contact.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
496. By Florian Boucault

Fixed wrong aspect ratio when using UbuntuShape.

497. By Florian Boucault

Fixed freeze upon cancelling new contact.

498. By Florian Boucault

When going back from editing an existing contact, do not go directly back to the contact list.

499. By Florian Boucault

Removed dead code.

500. By Florian Boucault

Support case when pageStack is still a PageStack.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
501. By Florian Boucault

use content-hub 1.3 imports

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Robert Bruce Park (robru) wrote :

Comment inline.

review: Needs Fixing
502. By Florian Boucault

debian: fixed versioning vs arch ordering.

503. By Florian Boucault

Removed edit cancellation dialog.

Revision history for this message
Florian Boucault (fboucault) :
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Renato Araujo Oliveira Filho (renatofilho) :
504. By Florian Boucault

Reverted content hub 13

505. By Florian Boucault

Merged from multicolumns branch

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Renato Araujo Oliveira Filho (renatofilho) :
506. By Florian Boucault

Merged lp:~renatofilho/address-book-app/fix-bottom-edge

507. By Florian Boucault

Moved ContactDelegate.qml up in qmldir together with the other public APIs

508. By Florian Boucault

Moved public APIs of elements to their beginning.

509. By Florian Boucault

Merged lp:~renatofilho/address-book-app/code-style-fix

510. By Florian Boucault

Merged from trunk

511. By Florian Boucault

Merged lp:~renatofilho/address-book-app/fix-close-animation

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
512. By Florian Boucault

Switched all imports of QtQuick to version 2.4

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Renato Araujo Oliveira Filho (renatofilho) wrote :

looks good

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'examples/contenthub.qml'
2--- examples/contenthub.qml 2013-12-12 23:21:33 +0000
3+++ examples/contenthub.qml 2015-10-26 13:18:18 +0000
4@@ -1,4 +1,4 @@
5-import QtQuick 2.0
6+import QtQuick 2.4
7 import Ubuntu.Components 0.1
8 import Ubuntu.Content 0.1
9 import QtContacts 5.0
10
11=== modified file 'src/imports/ABContactEditorPage.qml'
12--- src/imports/ABContactEditorPage.qml 2015-10-26 13:18:17 +0000
13+++ src/imports/ABContactEditorPage.qml 2015-10-26 13:18:18 +0000
14@@ -14,7 +14,7 @@
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18-import QtQuick 2.2
19+import QtQuick 2.4
20 import QtContacts 5.0
21
22 import Ubuntu.Components 1.3
23@@ -25,20 +25,25 @@
24 id: root
25 objectName: "contactEditorPage"
26
27+ property alias backIconName: backAction.iconName
28+
29 head.backAction: Action {
30+ id: backAction
31+
32 objectName: "cancel"
33+ name: "cancel"
34
35 text: i18n.tr("Cancel")
36 iconName: "back"
37 onTriggered: {
38 root.cancel()
39- root.active = false
40 }
41 }
42
43 head.actions: [
44 Action {
45 objectName: "save"
46+ name: "save"
47
48 text: i18n.tr("Save")
49 iconName: "ok"
50
51=== modified file 'src/imports/ABContactListPage.qml'
52--- src/imports/ABContactListPage.qml 2015-10-26 13:18:17 +0000
53+++ src/imports/ABContactListPage.qml 2015-10-26 13:18:18 +0000
54@@ -1,4 +1,4 @@
55-/*
56+/*
57 * Copyright (C) 2012-2015 Canonical, Ltd.
58 *
59 * This program is free software; you can redistribute it and/or modify
60@@ -14,7 +14,7 @@
61 * along with this program. If not, see <http://www.gnu.org/licenses/>.
62 */
63
64-import QtQuick 2.2
65+import QtQuick 2.4
66 import QtContacts 5.0
67
68 import Ubuntu.Components 1.3
69@@ -26,7 +26,7 @@
70 import Ubuntu.AddressBook.Base 0.1
71 import Ubuntu.AddressBook.ContactShare 0.1
72
73-ContactsUI.PageWithBottomEdge {
74+Page {
75 id: mainPage
76 objectName: "contactListPage"
77
78@@ -36,7 +36,10 @@
79 property QtObject contactIndex: null
80 property string newPhoneToAdd: ""
81 property alias contactManager: contactList.manager
82+ property Page contactViewPage: null
83+ property Page contactEditorPage: null
84
85+ readonly property bool bottomEdgePageOpened: bottomEdge.opened && bottomEdge.fullLoaded
86 readonly property bool isEmpty: (contactList.count === 0)
87 readonly property bool allowToQuit: (application.callbackApplication.length > 0)
88 readonly property var contactModel: contactList.listModel ? contactList.listModel : null
89@@ -55,40 +58,53 @@
90
91 function createContactWithPhoneNumber(phoneNumber)
92 {
93- var newContact = ContactsJS.createEmptyContact(phoneNumber, mainPage)
94- //WORKAROUND: SKD changes the page header as soon as the page get created
95- // setting active false will avoid that
96- if (bottomEdgeEnabled) {
97- mainPage.showBottomEdgePage(Qt.resolvedUrl("ABContactEditorPage.qml"),
98- {model: contactList.listModel,
99- contact: newContact,
100- active: false,
101- enabled: false,
102- initialFocusSection: "name"})
103- } else {
104- pageStack.addPageToNextColumn(mainPage,
105+ var newContact = ContactsJS.createEmptyContact(phoneNumber, mainPage);
106+ openEditPage({model: contactList.listModel,
107+ contact: newContact,
108+ initialFocusSection: "name"},
109+ mainPage);
110+ }
111+
112+ function openEditPage(editPageProperties, sourcePage) {
113+ var incubator = pageStack.addPageToNextColumn(sourcePage,
114 Qt.resolvedUrl("ABContactEditorPage.qml"),
115- {model: contactList.listModel,
116- contact: newContact,
117- initialFocusSection: "name"})
118+ editPageProperties);
119+ incubator.onStatusChanged = function(status) {
120+ if (status == Component.Ready) {
121+ mainPage.contactEditorPage = incubator.object;
122+ }
123 }
124 }
125
126- function showContact(contactId)
127- {
128- pageStack.addPageToNextColumn(mainPage,
129+ function openViewPage(viewPageProperties) {
130+ var incubator = pageStack.addPageToNextColumn(mainPage,
131 Qt.resolvedUrl("ABContactViewPage.qml"),
132- {model: contactList.listModel,
133- contactId: contactId})
134+ viewPageProperties);
135+ incubator.onStatusChanged = function(status) {
136+ if (status == Component.Ready) {
137+ contactViewPage = incubator.object;
138+ }
139+ }
140+ }
141+
142+ function showContact(contact)
143+ {
144+ mainPage.state = "default";
145+ openViewPage({model: contactList.listModel,
146+ contact: contact});
147+ }
148+
149+ function showContactWithId(contactId)
150+ {
151+ openViewPage({model: contactList.listModel,
152+ contactId: contactId});
153 }
154
155 function addPhoneToContact(contactId, phoneNumber)
156 {
157- pageStack.addPageToNextColumn(mainPage,
158- Qt.resolvedUrl("ABContactViewPage.qml"),
159- {model: contactList.listModel,
160- contactId: contactId,
161- addPhoneToContact: phoneNumber})
162+ openViewPage({model: contactList.listModel,
163+ contactId: contactId,
164+ addPhoneToContact: phoneNumber});
165 }
166
167 function importContact(urls)
168@@ -128,16 +144,29 @@
169 contactList.reset()
170 }
171
172+ function showContactEditorPage(editorPage) {
173+ contactList.currentIndex = -1;
174+ mainPage.contactEditorPage = editorPage;
175+ pageStack.addPageToNextColumn(mainPage, editorPage);
176+ editorPage.ready();
177+ editorPage.contactSaved.connect(onNewContactSaved);
178+ }
179+
180+ function onNewContactSaved(contact) {
181+ if (pageStack.columns > 1) {
182+ showContact(contact);
183+ }
184+ }
185+
186 title: i18n.tr("Contacts")
187- bottomEdgeTitle: "+"
188- bottomEdgeEnabled: !contactList.isInSelectionMode
189
190 flickable: null
191 ContactsUI.ContactListView {
192 id: contactList
193 objectName: "contactListView"
194 showImportOptions: !mainPage.pickMode &&
195- mainPage.newPhoneToAdd === ""
196+ mainPage.newPhoneToAdd === "" &&
197+ (!mainPage.contactEditorPage || !mainPage.contactEditorPage.active)
198 anchors {
199 top: parent.top
200 left: parent.left
201@@ -147,16 +176,14 @@
202 filterTerm: searchField.text
203 multiSelectionEnabled: true
204 multipleSelection: (mainPage.pickMode && mainPage.pickMultipleContacts) || !mainPage.pickMode
205+ highlightedContact: contactViewPage ? contactViewPage.contact :
206+ contactEditorPage ? contactEditorPage.contact : null
207
208 onAddContactClicked: mainPage.createContactWithPhoneNumber(label)
209 onAddNewContactClicked: mainPage.createContactWithPhoneNumber(mainPage.newPhoneToAdd)
210
211 onContactClicked: {
212- mainPage.state = "default"
213- pageStack.addPageToNextColumn(mainPage,
214- Qt.resolvedUrl("ABContactViewPage.qml"),
215- {model: contactList.listModel,
216- contact: contact})
217+ showContact(contact);
218 }
219 onIsInSelectionModeChanged: mainPage.state = isInSelectionMode ? "selection" : "default"
220 onSelectionCanceled: {
221@@ -353,9 +380,8 @@
222 actions: selectionState.actions
223 }
224 PropertyChanges {
225- target: mainPage
226- bottomEdgeEnabled: false
227- title: " "
228+ target: bottomEdge
229+ enabled: false
230 }
231 },
232 PageHeadState {
233@@ -368,10 +394,13 @@
234 }
235 PropertyChanges {
236 target: mainPage
237- bottomEdgeEnabled: false
238 title: i18n.tr("Add contact")
239 }
240 PropertyChanges {
241+ target: bottomEdge
242+ enabled: false
243+ }
244+ PropertyChanges {
245 target: contactList
246 detailToPick: -1
247 }
248@@ -386,8 +415,8 @@
249 showAddNewButton: true
250 }
251 PropertyChanges {
252- target: mainPage
253- bottomEdgeEnabled: false
254+ target: bottomEdge
255+ enabled: false
256 }
257 }
258 ]
259@@ -397,20 +426,6 @@
260 }
261 }
262
263- // We need to reset the page proprerties in case of the page was created pre-populated,
264- // with phonenumber or contact.
265- onBottomEdgeDismissed: {
266- //WORKAROUND: SKD changes the page header as soon as the page get created
267- // setting active false will avoid that
268- var newContact = ContactsUI.ContactsJS.createEmptyContact("", mainPage)
269- mainPage.setBottomEdgePage(Qt.resolvedUrl("ABContactEditorPage.qml"),
270- {model: contactList.listModel,
271- contact: newContact,
272- active: false,
273- enabled: false,
274- initialFocusSection: "name"})
275- }
276-
277 KeyboardRectangle {
278 id: keyboard
279 }
280@@ -426,7 +441,8 @@
281 !contactList.favouritesIsSelected &&
282 mainPage.isEmpty &&
283 (mainPage.newPhoneToAdd === "") &&
284- !(contactList.filterTerm && contactList.filterTerm !== ""))
285+ !(contactList.filterTerm && contactList.filterTerm !== "")) &&
286+ bottomEdge.visible
287
288 Behavior on visible {
289 SequentialAnimation {
290@@ -526,15 +542,126 @@
291 contactList.listModel.importContacts("file://" + TEST_DATA)
292 }
293
294- mainPage.setBottomEdgePage(Qt.resolvedUrl("ABContactEditorPage.qml"),
295- {model: contactList.listModel,
296- contact: ContactsUI.ContactsJS.createEmptyContact("", mainPage),
297- active: false,
298- enabled: false,
299- initialFocusSection: "name"})
300-
301 if (pageStack) {
302 pageStack.contactListPage = mainPage
303 }
304 }
305+
306+ Component {
307+ id: editorPageBottomEdge
308+ ABContactEditorPage {
309+ backIconName: "down"
310+ implicitWidth: mainPage.width
311+ implicitHeight: mainPage.height
312+ model: contactList.listModel
313+ contact: ContactsJS.createEmptyContact("", mainPage)
314+ initialFocusSection: "name"
315+ enabled: false
316+ }
317+ }
318+
319+ Component {
320+ id: emptyContact
321+ ContactsUI.ContactDelegate {
322+ property Contact contact: Contact {
323+ Name {
324+ firstName: i18n.tr("New contact")
325+ }
326+ Avatar {
327+ imageUrl: "image://theme/contact"
328+ }
329+ }
330+ width: mainPage.width
331+ }
332+ }
333+
334+ BottomEdge {
335+ id: bottomEdge
336+ objectName: "bottomEdge"
337+
338+ property var incubator
339+
340+ // FIXME: this is a workaround for the lack of fully asynchronous loading
341+ // of Pages in AdaptativePageLayout
342+ function createObjectAsynchronously(url, properties, callback) {
343+ var component = Qt.createComponent(url, Component.Asynchronous);
344+ if (component.status == Component.Ready) {
345+ incubateObject(component, properties, callback);
346+ } else {
347+ component.onStatusChanged.connect(function(status) {
348+ if (status == Component.Ready) {
349+ incubateObject(component, properties, callback);
350+ }
351+ });
352+ }
353+ }
354+
355+ function incubateObject(component, properties, callback) {
356+ if (component.status == Component.Ready) {
357+ incubator = component.incubateObject(null,
358+ properties,
359+ Qt.Asynchronous);
360+ incubator.onStatusChanged = function(status) {
361+ if (status == Component.Ready) {
362+ callback(incubator.object);
363+ incubator = null;
364+ }
365+ }
366+ }
367+ }
368+
369+ function loadEditorPage() {
370+ var newContact = ContactsJS.createEmptyContact("", mainPage);
371+ createObjectAsynchronously(Qt.resolvedUrl("ABContactEditorPage.qml"),
372+ {model: contactList.listModel,
373+ contact: newContact,
374+ initialFocusSection: "name"},
375+ showContactEditorPage);
376+ }
377+
378+ anchors.fill: parent
379+ contentComponent: pageStack.columns == 1 ? editorPageBottomEdge : emptyContact
380+ flickable: contactList
381+ iconName: "contact-new"
382+ enabled: !contactList.isInSelectionMode
383+ backGroundEffectEnabled: pageStack.columns === 1
384+
385+ onOpenBegin: {
386+ contactList.prepareNewContact = true;
387+ contactList.positionViewAtBeginning();
388+ if (pageStack.columns > 1) {
389+ loadEditorPage();
390+ }
391+ }
392+ onOpenEnd: {
393+ bottomEdge.visible = false;
394+ contactList.showNewContact = true;
395+ if (pageStack.columns <= 1) {
396+ showContactEditorPage(bottomEdge.content);
397+ }
398+ }
399+
400+ onClicked: {
401+ bottomEdge.open();
402+ }
403+ }
404+
405+ Connections {
406+ target: mainPage.contactViewPage
407+ onEditContact: {
408+ openEditPage(editPageProperties, mainPage.contactViewPage);
409+ }
410+ }
411+
412+ Connections {
413+ target: mainPage.contactEditorPage
414+ onActiveChanged: {
415+ if (!mainPage.contactEditorPage.active) {
416+ contactList.prepareNewContact = false;
417+ contactList.showNewContact = false;
418+ bottomEdge.visible = true;
419+ bottomEdge.close();
420+ }
421+ }
422+ }
423 }
424
425=== modified file 'src/imports/ABContactViewPage.qml'
426--- src/imports/ABContactViewPage.qml 2015-10-26 13:18:17 +0000
427+++ src/imports/ABContactViewPage.qml 2015-10-26 13:18:18 +0000
428@@ -14,7 +14,7 @@
429 * along with this program. If not, see <http://www.gnu.org/licenses/>.
430 */
431
432-import QtQuick 2.2
433+import QtQuick 2.4
434 import Ubuntu.Components 1.3
435 import Ubuntu.Components.Popups 1.3 as Popups
436 import Ubuntu.Contacts 0.1
437@@ -28,10 +28,13 @@
438 objectName: "contactViewPage"
439
440 property string addPhoneToContact: ""
441+ signal editContact(var editPageProperties)
442
443 head.actions: [
444 Action {
445 objectName: "share"
446+ name: "share"
447+
448 text: i18n.tr("Share")
449 iconName: "share"
450 onTriggered: {
451@@ -43,13 +46,13 @@
452 },
453 Action {
454 objectName: "edit"
455+ name: "edit"
456+
457 text: i18n.tr("Edit")
458 iconName: "edit"
459 onTriggered: {
460- pageStack.addPageToCurrentColumn(root,
461- Qt.resolvedUrl("ABContactEditorPage.qml"),
462- {model: root.model,
463- contact: root.contact})
464+ editContact({model: root.model,
465+ contact: root.contact});
466 }
467 }
468 ]
469@@ -73,11 +76,10 @@
470 var newDetail = Qt.createQmlObject(detailSourceTemplate, contact)
471 if (newDetail) {
472 contact.addDetail(newDetail)
473- pageStack.addPageToCurrentColumn(root, Qt.resolvedUrl("ABContactEditorPage.qml"),
474- { model: root.model,
475- contact: contact,
476- initialFocusSection: "phones",
477- newDetails: [newDetail]})
478+ editContact({ model: root.model,
479+ contact: contact,
480+ initialFocusSection: "phones",
481+ newDetails: [newDetail] })
482 root.addPhoneToContact = ""
483 }
484 }
485
486=== added file 'src/imports/BottomEdge.qml'
487--- src/imports/BottomEdge.qml 1970-01-01 00:00:00 +0000
488+++ src/imports/BottomEdge.qml 2015-10-26 13:18:18 +0000
489@@ -0,0 +1,321 @@
490+/*
491+ * Copyright (C) 2015 Canonical, Ltd.
492+ *
493+ * This program is free software; you can redistribute it and/or modify
494+ * it under the terms of the GNU General Public License as published by
495+ * the Free Software Foundation; version 3.
496+ *
497+ * This program is distributed in the hope that it will be useful,
498+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
499+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
500+ * GNU General Public License for more details.
501+ *
502+ * You should have received a copy of the GNU General Public License
503+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
504+ */
505+
506+import QtQuick 2.4
507+import Ubuntu.Components 1.3
508+
509+Item {
510+ id: bottomEdge
511+
512+ readonly property alias content: bottomEdgeLoader.item
513+ readonly property bool fullLoaded: bottomEdgeLoader.status == Loader.Ready
514+
515+ property bool opened: false
516+ property Component contentComponent
517+ property string iconName
518+ property Item flickable
519+ property alias backGroundEffectEnabled: darkBg.visible
520+
521+ signal openBegin
522+ signal openEnd
523+ signal clicked
524+ visible: enabled
525+
526+ function open() {
527+ bottomEdge.state = "expanded";
528+ }
529+
530+ function close() {
531+ bottomEdge.state = "collapsed";
532+ }
533+
534+ Rectangle {
535+ id: darkBg
536+
537+ anchors.fill: parent
538+ color: "black"
539+ opacity: 0.0
540+ }
541+
542+ Item {
543+ id: bottomEdgeBody
544+ anchors {
545+ left: parent.left
546+ right: parent.right
547+ }
548+ height: bottomEdgeContent.height
549+
550+ Item {
551+ id: bottomEdgeContent
552+ anchors {
553+ left: parent.left
554+ right: parent.right
555+ }
556+ height: bottomEdgeLoader.height
557+
558+ Item {
559+ id: bottomEdgeShadows
560+ anchors.fill: bottomEdgeContent
561+
562+ BottomEdgeShadow {
563+ anchors.bottom: parent.top
564+ }
565+
566+ BottomEdgeShadow {
567+ anchors.top: parent.bottom
568+ rotation: 180
569+ }
570+ }
571+
572+ Rectangle {
573+ anchors.fill: parent
574+ color: Theme.palette.normal.background
575+ }
576+
577+ Loader {
578+ id: bottomEdgeLoader
579+ sourceComponent: bottomEdge.contentComponent
580+ asynchronous: true
581+ }
582+ }
583+
584+
585+ BottomEdgeHint {
586+ id: bottomEdgeHint
587+
588+ anchors.bottom: bottomEdgeBody.top
589+ iconName: bottomEdge.iconName
590+ onClicked: bottomEdge.clicked()
591+
592+ Connections {
593+ target: bottomEdgeDragArea
594+ onClosedChanged: {
595+ if (!bottomEdgeDragArea.closed) {
596+ bottomEdgeHint.state = "Visible";
597+ }
598+ }
599+ }
600+
601+ Connections {
602+ target: flickable
603+ onVerticalVelocityChanged: {
604+ if (!bottomEdgeDragArea.closed) {
605+ return;
606+ }
607+
608+ if (flickable.verticalVelocity > 0) {
609+ bottomEdgeHint.state = "Hidden";
610+ } else if (flickable.verticalVelocity < 0) {
611+ bottomEdgeHint.state = "Visible";
612+ }
613+ }
614+ }
615+ }
616+ }
617+
618+
619+ state: "collapsed"
620+ states: [
621+ State {
622+ name: "collapsed"
623+ ParentChange {
624+ target: bottomEdgeContent
625+ parent: bottomEdgeBody
626+ x: 0
627+ y: 0
628+ }
629+ PropertyChanges {
630+ target: bottomEdgeBody
631+ y: bottomEdgeDragArea.drag.maximumY
632+ }
633+ PropertyChanges {
634+ target: bottomEdgeContent
635+ opacity: 0.0
636+ }
637+ PropertyChanges {
638+ target: darkBg
639+ opacity: 0.0
640+ }
641+ },
642+ State {
643+ name: "expanded"
644+ ParentChange {
645+ target: bottomEdgeContent
646+ parent: bottomEdge
647+ x: 0
648+ y: 0
649+ }
650+ PropertyChanges {
651+ target: bottomEdgeContent
652+ opacity: 1.0
653+ }
654+ PropertyChanges {
655+ target: bottomEdgeBody
656+ y: 0
657+ }
658+ PropertyChanges {
659+ target: bottomEdgeShadows
660+ opacity: 0.0
661+ visible: true
662+ }
663+ PropertyChanges {
664+ target: darkBg
665+ opacity: 0.8
666+ }
667+ },
668+ State {
669+ name: "floating"
670+ when: bottomEdgeDragArea.drag.active
671+ PropertyChanges {
672+ target: bottomEdgeContent
673+ opacity: 1.0
674+ }
675+ PropertyChanges {
676+ target: darkBg
677+ opacity: bottomEdgeBody.y > 0 ? 0.8 - (bottomEdgeBody.y / bottomEdgeDragArea.drag.maximumY) : 0.8
678+ }
679+ }
680+ ]
681+
682+ transitions: [
683+ Transition {
684+ to: "collapsed"
685+ SequentialAnimation {
686+ alwaysRunToEnd: true
687+ ParallelAnimation {
688+ ParentAnimation {
689+ UbuntuNumberAnimation {
690+ properties: "x,y"
691+ duration: UbuntuAnimation.SlowDuration
692+ target: bottomEdgeContent
693+ }
694+ }
695+ UbuntuNumberAnimation {
696+ target: bottomEdgeBody
697+ property: "y"
698+ duration: UbuntuAnimation.SlowDuration
699+ }
700+ UbuntuNumberAnimation {
701+ target: darkBg
702+ property: "opacity"
703+ duration: UbuntuAnimation.SlowDuration
704+ }
705+ }
706+ PropertyAction {
707+ target: bottomEdgeContent
708+ property: "opacity"
709+ }
710+ ScriptAction {
711+ script: {
712+ bottomEdgeLoader.active = false
713+ bottomEdgeLoader.active = true
714+ bottomEdge.opened = false
715+ }
716+ }
717+ }
718+ },
719+ Transition {
720+ to: "expanded"
721+ SequentialAnimation {
722+ alwaysRunToEnd: true
723+ ParallelAnimation {
724+ ScriptAction {
725+ script: bottomEdge.openBegin()
726+ }
727+ ParentAnimation {
728+ UbuntuNumberAnimation {
729+ properties: "x,y"
730+ duration: UbuntuAnimation.SlowDuration
731+ target: bottomEdgeContent
732+ }
733+ }
734+ UbuntuNumberAnimation {
735+ target: bottomEdgeShadows
736+ property: "opacity"
737+ duration: UbuntuAnimation.SlowDuration
738+ }
739+ UbuntuNumberAnimation {
740+ target: darkBg
741+ property: "opacity"
742+ duration: UbuntuAnimation.SlowDuration
743+ }
744+ }
745+ UbuntuNumberAnimation {
746+ target: bottomEdgeContent
747+ property: "opacity"
748+ duration: UbuntuAnimation.FastDuration
749+ }
750+ ScriptAction {
751+ script: {
752+ bottomEdge.opened = true
753+ bottomEdge.openEnd()
754+ }
755+
756+ }
757+ }
758+ }
759+ ]
760+
761+ MouseArea {
762+ id: bottomEdgeDragArea
763+ objectName: "bottomEdgeDragArea"
764+
765+ property real previousY: -1
766+ property string dragDirection: "None"
767+ property bool closed: drag.target.y == bottomEdgeDragArea.drag.maximumY
768+ && !bottomEdgeDragArea.pressed
769+
770+ preventStealing: true
771+ propagateComposedEvents: true
772+ drag {
773+ axis: Drag.YAxis
774+ target: bottomEdgeBody
775+ minimumY: 0
776+ maximumY: bottomEdge.height
777+ }
778+
779+ anchors {
780+ left: parent.left
781+ right: parent.right
782+ bottom: parent.bottom
783+ }
784+ height: bottomEdgeHint.height
785+
786+ onPressed: {
787+ previousY = mouse.y;
788+ }
789+
790+ onReleased: {
791+ if (dragDirection === "BottomToTop") {
792+ bottomEdge.state = "expanded";
793+ } else {
794+ bottomEdge.state = "collapsed";
795+ }
796+ previousY = -1;
797+ dragDirection = "None";
798+ }
799+
800+ onMouseYChanged: {
801+ var yOffset = previousY - mouseY;
802+ // skip if was a small move
803+ if (Math.abs(yOffset) <= units.gu(2)) {
804+ return;
805+ }
806+ previousY = mouseY;
807+ dragDirection = yOffset > 0 ? "BottomToTop" : "TopToBottom";
808+ }
809+ }
810+}
811
812=== added file 'src/imports/BottomEdgeShadow.qml'
813--- src/imports/BottomEdgeShadow.qml 1970-01-01 00:00:00 +0000
814+++ src/imports/BottomEdgeShadow.qml 2015-10-26 13:18:18 +0000
815@@ -0,0 +1,31 @@
816+/*
817+ * Copyright (C) 2015 Canonical, Ltd.
818+ *
819+ * This program is free software; you can redistribute it and/or modify
820+ * it under the terms of the GNU General Public License as published by
821+ * the Free Software Foundation; version 3.
822+ *
823+ * This program is distributed in the hope that it will be useful,
824+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
825+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
826+ * GNU General Public License for more details.
827+ *
828+ * You should have received a copy of the GNU General Public License
829+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
830+ */
831+
832+import QtQuick 2.4
833+import Ubuntu.Components 1.3
834+
835+Rectangle {
836+ id: bottomEdgeShadow
837+ anchors {
838+ left: parent.left
839+ right: parent.right
840+ }
841+ height: units.gu(1)
842+ gradient: Gradient {
843+ GradientStop { position: 0.0; color: Qt.rgba(0.0, 0.0, 0.0, 0.0) }
844+ GradientStop { position: 1.0; color: Qt.rgba(0.0, 0.0, 0.0, 0.3) }
845+ }
846+}
847
848=== modified file 'src/imports/CMakeLists.txt'
849--- src/imports/CMakeLists.txt 2015-09-03 17:15:32 +0000
850+++ src/imports/CMakeLists.txt 2015-10-26 13:18:18 +0000
851@@ -7,6 +7,8 @@
852 ContentHubProxy.qml
853 MainWindow.qml
854 VCardImportDialog.qml
855+ BottomEdgeShadow.qml
856+ BottomEdge.qml
857 )
858
859 install(FILES ${ADDRESS_BOOK_APP_QMLS}
860
861=== modified file 'src/imports/ContentHubProxy.qml'
862--- src/imports/ContentHubProxy.qml 2015-05-07 17:27:16 +0000
863+++ src/imports/ContentHubProxy.qml 2015-10-26 13:18:18 +0000
864@@ -14,7 +14,7 @@
865 * along with this program. If not, see <http://www.gnu.org/licenses/>.
866 */
867
868-import QtQuick 2.2
869+import QtQuick 2.4
870 import Ubuntu.Content 0.1 as ContentHub
871
872 QtObject {
873
874=== modified file 'src/imports/MainWindow.qml'
875--- src/imports/MainWindow.qml 2015-10-26 13:18:17 +0000
876+++ src/imports/MainWindow.qml 2015-10-26 13:18:18 +0000
877@@ -14,7 +14,7 @@
878 * along with this program. If not, see <http://www.gnu.org/licenses/>.
879 */
880
881-import QtQuick 2.2
882+import QtQuick 2.4
883 import Ubuntu.Components 1.3
884 import Ubuntu.Components.Popups 1.3 as Popups
885
886@@ -31,7 +31,7 @@
887 {
888 mainStack.resetStack()
889 if (mainStack.contactListPage) {
890- mainStack.contactListPage.showContact(contactId)
891+ mainStack.contactListPage.showContactWithId(contactId)
892 } else {
893 console.error("Contact preview requested but ContactListPage not loaded")
894 }
895@@ -122,10 +122,30 @@
896 }
897
898 anchors.fill: parent
899+ layouts: [
900+ PageColumnsLayout {
901+ when: mainStack.width >= units.gu(80)
902+ PageColumn {
903+ maximumWidth: units.gu(50)
904+ minimumWidth: units.gu(40)
905+ preferredWidth: units.gu(40)
906+ }
907+ PageColumn {
908+ fillWidth: true
909+ }
910+ },
911+ PageColumnsLayout {
912+ when: true
913+ PageColumn {
914+ fillWidth: true
915+ }
916+ }
917+ ]
918 }
919
920 ABContactListPage {
921 id: contactPage
922+ pageStack: mainStack
923 }
924
925 Component.onCompleted: {
926
927=== modified file 'src/imports/Settings/MyselfPhoneNumbersModel.qml'
928--- src/imports/Settings/MyselfPhoneNumbersModel.qml 2015-03-16 12:57:43 +0000
929+++ src/imports/Settings/MyselfPhoneNumbersModel.qml 2015-10-26 13:18:18 +0000
930@@ -14,7 +14,7 @@
931 * along with this program. If not, see <http://www.gnu.org/licenses/>.
932 */
933
934-import QtQuick 2.2
935+import QtQuick 2.4
936 import MeeGo.QOfono 0.2
937 import Ubuntu.Telephony.PhoneNumber 0.1
938
939
940=== modified file 'src/imports/Settings/SettingsPage.qml'
941--- src/imports/Settings/SettingsPage.qml 2015-10-26 13:18:17 +0000
942+++ src/imports/Settings/SettingsPage.qml 2015-10-26 13:18:18 +0000
943@@ -14,7 +14,7 @@
944 * along with this program. If not, see <http://www.gnu.org/licenses/>.
945 */
946
947-import QtQuick 2.2
948+import QtQuick 2.4
949 import QtContacts 5.0
950
951 import Ubuntu.Components 1.3
952
953=== modified file 'src/imports/Ubuntu/AddressBook/Base/ContactDetailBase.qml'
954--- src/imports/Ubuntu/AddressBook/Base/ContactDetailBase.qml 2015-10-26 13:18:17 +0000
955+++ src/imports/Ubuntu/AddressBook/Base/ContactDetailBase.qml 2015-10-26 13:18:18 +0000
956@@ -14,7 +14,7 @@
957 * along with this program. If not, see <http://www.gnu.org/licenses/>.
958 */
959
960-import QtQuick 2.2
961+import QtQuick 2.4
962 import QtContacts 5.0 as QtContacts
963 import Ubuntu.Components.ListItems 1.3 as ListItem
964
965
966=== modified file 'src/imports/Ubuntu/AddressBook/Base/ContactDetailGroupBase.qml'
967--- src/imports/Ubuntu/AddressBook/Base/ContactDetailGroupBase.qml 2015-05-07 17:27:16 +0000
968+++ src/imports/Ubuntu/AddressBook/Base/ContactDetailGroupBase.qml 2015-10-26 13:18:18 +0000
969@@ -14,7 +14,7 @@
970 * along with this program. If not, see <http://www.gnu.org/licenses/>.
971 */
972
973-import QtQuick 2.2
974+import QtQuick 2.4
975
976 FocusScope {
977 id: root
978
979=== modified file 'src/imports/Ubuntu/AddressBook/Base/ContactDetailGroupWithTypeBase.qml'
980--- src/imports/Ubuntu/AddressBook/Base/ContactDetailGroupWithTypeBase.qml 2015-05-07 17:27:16 +0000
981+++ src/imports/Ubuntu/AddressBook/Base/ContactDetailGroupWithTypeBase.qml 2015-10-26 13:18:18 +0000
982@@ -14,7 +14,7 @@
983 * along with this program. If not, see <http://www.gnu.org/licenses/>.
984 */
985
986-import QtQuick 2.2
987+import QtQuick 2.4
988 import QtContacts 5.0 as QtContacts
989
990 ContactDetailGroupBase {
991
992=== modified file 'src/imports/Ubuntu/AddressBook/Base/ContactDetailItem.qml'
993--- src/imports/Ubuntu/AddressBook/Base/ContactDetailItem.qml 2015-10-26 13:18:17 +0000
994+++ src/imports/Ubuntu/AddressBook/Base/ContactDetailItem.qml 2015-10-26 13:18:18 +0000
995@@ -14,7 +14,7 @@
996 * along with this program. If not, see <http://www.gnu.org/licenses/>.
997 */
998
999-import QtQuick 2.2
1000+import QtQuick 2.4
1001
1002 import Ubuntu.Components 1.3
1003 import Ubuntu.Contacts 0.1
1004
1005=== modified file 'src/imports/Ubuntu/AddressBook/Base/ContactExporter.qml'
1006--- src/imports/Ubuntu/AddressBook/Base/ContactExporter.qml 2015-10-26 13:18:17 +0000
1007+++ src/imports/Ubuntu/AddressBook/Base/ContactExporter.qml 2015-10-26 13:18:18 +0000
1008@@ -14,7 +14,7 @@
1009 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1010 */
1011
1012-import QtQuick 2.2
1013+import QtQuick 2.4
1014 import QtContacts 5.0
1015
1016 import Ubuntu.Components 1.3
1017
1018=== modified file 'src/imports/Ubuntu/AddressBook/Base/KeyboardRectangle.qml'
1019--- src/imports/Ubuntu/AddressBook/Base/KeyboardRectangle.qml 2015-05-07 17:27:16 +0000
1020+++ src/imports/Ubuntu/AddressBook/Base/KeyboardRectangle.qml 2015-10-26 13:18:18 +0000
1021@@ -14,7 +14,7 @@
1022 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1023 */
1024
1025-import QtQuick 2.2
1026+import QtQuick 2.4
1027
1028 Item {
1029 id: keyboardRect
1030
1031=== modified file 'src/imports/Ubuntu/AddressBook/Base/RemoveContactsDialog.qml'
1032--- src/imports/Ubuntu/AddressBook/Base/RemoveContactsDialog.qml 2015-10-26 13:18:17 +0000
1033+++ src/imports/Ubuntu/AddressBook/Base/RemoveContactsDialog.qml 2015-10-26 13:18:18 +0000
1034@@ -14,7 +14,7 @@
1035 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1036 */
1037
1038-import QtQuick 2.2
1039+import QtQuick 2.4
1040 import Ubuntu.Components 1.3
1041 import Ubuntu.Components.Popups 1.3
1042
1043
1044=== modified file 'src/imports/Ubuntu/AddressBook/ContactEditor/AvatarImport.qml'
1045--- src/imports/Ubuntu/AddressBook/ContactEditor/AvatarImport.qml 2015-10-26 13:18:17 +0000
1046+++ src/imports/Ubuntu/AddressBook/ContactEditor/AvatarImport.qml 2015-10-26 13:18:18 +0000
1047@@ -14,7 +14,7 @@
1048 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1049 */
1050
1051-import QtQuick 2.2
1052+import QtQuick 2.4
1053
1054 import Ubuntu.Components 1.3
1055 import Ubuntu.Components.Popups 1.3
1056
1057=== modified file 'src/imports/Ubuntu/AddressBook/ContactEditor/ComboButtonAddField.qml'
1058--- src/imports/Ubuntu/AddressBook/ContactEditor/ComboButtonAddField.qml 2015-10-26 13:18:17 +0000
1059+++ src/imports/Ubuntu/AddressBook/ContactEditor/ComboButtonAddField.qml 2015-10-26 13:18:18 +0000
1060@@ -14,7 +14,7 @@
1061 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1062 */
1063
1064-import QtQuick 2.2
1065+import QtQuick 2.4
1066 import QtContacts 5.0
1067
1068 import Ubuntu.Components 1.3
1069
1070=== modified file 'src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailAddressesEditor.qml'
1071--- src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailAddressesEditor.qml 2015-05-07 17:27:16 +0000
1072+++ src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailAddressesEditor.qml 2015-10-26 13:18:18 +0000
1073@@ -14,7 +14,7 @@
1074 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1075 */
1076
1077-import QtQuick 2.2
1078+import QtQuick 2.4
1079 import QtContacts 5.0
1080
1081 import Ubuntu.Contacts 0.1
1082
1083=== modified file 'src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailAvatarEditor.qml'
1084--- src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailAvatarEditor.qml 2015-10-26 13:18:17 +0000
1085+++ src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailAvatarEditor.qml 2015-10-26 13:18:18 +0000
1086@@ -14,7 +14,7 @@
1087 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1088 */
1089
1090-import QtQuick 2.2
1091+import QtQuick 2.4
1092 import QtContacts 5.0
1093
1094 import Ubuntu.Components 1.3
1095@@ -73,12 +73,12 @@
1096 radius: "medium"
1097 anchors.fill: parent
1098 source: avatarImage.source != defaultAvatar ? avatarImage : null
1099+ sourceFillMode: UbuntuShape.PreserveAspectCrop
1100
1101 Image {
1102 id: avatarImage
1103 objectName: "avatarImage"
1104
1105- fillMode: Image.PreserveAspectCrop
1106 asynchronous: true
1107 source: root.getAvatar(root.detail)
1108 anchors.centerIn: visible ? avatar : undefined
1109
1110=== modified file 'src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailEmailsEditor.qml'
1111--- src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailEmailsEditor.qml 2015-05-07 17:27:16 +0000
1112+++ src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailEmailsEditor.qml 2015-10-26 13:18:18 +0000
1113@@ -14,7 +14,7 @@
1114 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1115 */
1116
1117-import QtQuick 2.2
1118+import QtQuick 2.4
1119 import QtContacts 5.0
1120
1121 import Ubuntu.Contacts 0.1
1122
1123=== modified file 'src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailGroupWithTypeEditor.qml'
1124--- src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailGroupWithTypeEditor.qml 2015-10-26 13:18:17 +0000
1125+++ src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailGroupWithTypeEditor.qml 2015-10-26 13:18:18 +0000
1126@@ -14,7 +14,7 @@
1127 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1128 */
1129
1130-import QtQuick 2.2
1131+import QtQuick 2.4
1132 import QtContacts 5.0
1133
1134 import Ubuntu.Components 1.3
1135
1136=== modified file 'src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailNameEditor.qml'
1137--- src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailNameEditor.qml 2015-10-26 13:18:17 +0000
1138+++ src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailNameEditor.qml 2015-10-26 13:18:18 +0000
1139@@ -14,7 +14,7 @@
1140 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1141 */
1142
1143-import QtQuick 2.2
1144+import QtQuick 2.4
1145 import QtContacts 5.0
1146
1147 import Ubuntu.Components 1.3
1148
1149=== modified file 'src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailOnlineAccountsEditor.qml'
1150--- src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailOnlineAccountsEditor.qml 2015-05-07 17:27:16 +0000
1151+++ src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailOnlineAccountsEditor.qml 2015-10-26 13:18:18 +0000
1152@@ -14,7 +14,7 @@
1153 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1154 */
1155
1156-import QtQuick 2.2
1157+import QtQuick 2.4
1158 import QtContacts 5.0
1159
1160 import Ubuntu.Contacts 0.1
1161
1162=== modified file 'src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailOrganizationsEditor.qml'
1163--- src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailOrganizationsEditor.qml 2015-05-07 17:27:16 +0000
1164+++ src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailOrganizationsEditor.qml 2015-10-26 13:18:18 +0000
1165@@ -14,7 +14,7 @@
1166 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1167 */
1168
1169-import QtQuick 2.2
1170+import QtQuick 2.4
1171 import QtContacts 5.0
1172
1173 ContactDetailGroupWithTypeEditor {
1174
1175=== modified file 'src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailPhoneNumbersEditor.qml'
1176--- src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailPhoneNumbersEditor.qml 2015-05-07 17:27:16 +0000
1177+++ src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailPhoneNumbersEditor.qml 2015-10-26 13:18:18 +0000
1178@@ -14,7 +14,7 @@
1179 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1180 */
1181
1182-import QtQuick 2.2
1183+import QtQuick 2.4
1184 import QtContacts 5.0
1185
1186 import Ubuntu.Contacts 0.1
1187
1188=== modified file 'src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailSyncTargetEditor.qml'
1189--- src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailSyncTargetEditor.qml 2015-10-26 13:18:17 +0000
1190+++ src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailSyncTargetEditor.qml 2015-10-26 13:18:18 +0000
1191@@ -14,7 +14,7 @@
1192 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1193 */
1194
1195-import QtQuick 2.2
1196+import QtQuick 2.4
1197 import QtContacts 5.0
1198
1199 import Ubuntu.Components 1.3
1200
1201=== modified file 'src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailWithTypeEditor.qml'
1202--- src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailWithTypeEditor.qml 2015-10-26 13:18:17 +0000
1203+++ src/imports/Ubuntu/AddressBook/ContactEditor/ContactDetailWithTypeEditor.qml 2015-10-26 13:18:18 +0000
1204@@ -14,7 +14,7 @@
1205 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1206 */
1207
1208-import QtQuick 2.2
1209+import QtQuick 2.4
1210 import QtContacts 5.0
1211
1212 import Ubuntu.Components 1.3
1213
1214=== modified file 'src/imports/Ubuntu/AddressBook/ContactEditor/ContactEditorPage.qml'
1215--- src/imports/Ubuntu/AddressBook/ContactEditor/ContactEditorPage.qml 2015-10-26 13:18:17 +0000
1216+++ src/imports/Ubuntu/AddressBook/ContactEditor/ContactEditorPage.qml 2015-10-26 13:18:18 +0000
1217@@ -14,7 +14,7 @@
1218 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1219 */
1220
1221-import QtQuick 2.2
1222+import QtQuick 2.4
1223 import QtContacts 5.0
1224
1225 import Ubuntu.Components 1.3
1226@@ -55,7 +55,11 @@
1227 field.cancel()
1228 }
1229 }
1230- pageStack.removePages(contactEditor)
1231+ if (pageStack.removePages) {
1232+ pageStack.removePages(contactEditor)
1233+ } else {
1234+ pageStack.pop()
1235+ }
1236 }
1237
1238 function save() {
1239@@ -93,7 +97,11 @@
1240 contactEditor.contactSaved(contact)
1241 }
1242 }
1243- pageStack.removePages(contactEditor)
1244+ if (pageStack.removePages) {
1245+ pageStack.removePages(contactEditor)
1246+ } else {
1247+ pageStack.pop()
1248+ }
1249 }
1250
1251 function makeMeVisible(item) {
1252@@ -136,7 +144,6 @@
1253 nameEditor.fieldDelegates[0].forceActiveFocus()
1254 break;
1255 }
1256- contactEditor.initialFocusSection = ""
1257 }
1258
1259 function focusToLastPhoneField()
1260@@ -473,7 +480,12 @@
1261 // WORKAROUND: SDK element crash if pop the page where the dialog was created
1262 Component.onDestruction: {
1263 if (popPages) {
1264- contactEditor.pageStack.removePages(contactEditor)
1265+ if (contactEditor.pageStack.removePages) {
1266+ contactEditor.pageStack.removePages(contactEditor)
1267+ } else {
1268+ contactEditor.pageStack.pop() // editor page
1269+ contactEditor.pageStack.pop() // view page
1270+ }
1271 }
1272 }
1273 }
1274
1275=== modified file 'src/imports/Ubuntu/AddressBook/ContactEditor/TextInputDetail.qml'
1276--- src/imports/Ubuntu/AddressBook/ContactEditor/TextInputDetail.qml 2015-10-26 13:18:17 +0000
1277+++ src/imports/Ubuntu/AddressBook/ContactEditor/TextInputDetail.qml 2015-10-26 13:18:18 +0000
1278@@ -14,7 +14,7 @@
1279 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1280 */
1281
1282-import QtQuick 2.2
1283+import QtQuick 2.4
1284 import Ubuntu.Components 1.3
1285 import Ubuntu.Keyboard 0.1
1286 import Ubuntu.Telephony.PhoneNumber 0.1
1287
1288=== modified file 'src/imports/Ubuntu/AddressBook/ContactEditor/ValueSelector.qml'
1289--- src/imports/Ubuntu/AddressBook/ContactEditor/ValueSelector.qml 2015-10-26 13:18:17 +0000
1290+++ src/imports/Ubuntu/AddressBook/ContactEditor/ValueSelector.qml 2015-10-26 13:18:18 +0000
1291@@ -14,7 +14,7 @@
1292 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1293 */
1294
1295-import QtQuick 2.2
1296+import QtQuick 2.4
1297 import Ubuntu.Components 1.3
1298
1299 Item {
1300
1301=== modified file 'src/imports/Ubuntu/AddressBook/ContactShare/ContactSharePage.qml'
1302--- src/imports/Ubuntu/AddressBook/ContactShare/ContactSharePage.qml 2015-10-26 13:18:17 +0000
1303+++ src/imports/Ubuntu/AddressBook/ContactShare/ContactSharePage.qml 2015-10-26 13:18:18 +0000
1304@@ -14,7 +14,7 @@
1305 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1306 */
1307
1308-import QtQuick 2.2
1309+import QtQuick 2.4
1310 import QtContacts 5.0
1311
1312 import Ubuntu.Components 1.3
1313@@ -31,6 +31,8 @@
1314 signal canceled()
1315 signal completed()
1316
1317+ // invisible header
1318+ header: Item { height: 0 }
1319 ContentHub.ContentPeerPicker {
1320 visible: true
1321 anchors.fill: parent
1322
1323=== modified file 'src/imports/Ubuntu/AddressBook/ContactView/ActionButton.qml'
1324--- src/imports/Ubuntu/AddressBook/ContactView/ActionButton.qml 2015-10-26 13:18:17 +0000
1325+++ src/imports/Ubuntu/AddressBook/ContactView/ActionButton.qml 2015-10-26 13:18:18 +0000
1326@@ -14,7 +14,7 @@
1327 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1328 */
1329
1330-import QtQuick 2.2
1331+import QtQuick 2.4
1332 import Ubuntu.Components 1.3
1333
1334 AbstractButton {
1335
1336=== modified file 'src/imports/Ubuntu/AddressBook/ContactView/BasicFieldView.qml'
1337--- src/imports/Ubuntu/AddressBook/ContactView/BasicFieldView.qml 2015-10-26 13:18:17 +0000
1338+++ src/imports/Ubuntu/AddressBook/ContactView/BasicFieldView.qml 2015-10-26 13:18:18 +0000
1339@@ -14,7 +14,7 @@
1340 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1341 */
1342
1343-import QtQuick 2.2
1344+import QtQuick 2.4
1345 import Ubuntu.Components 1.3
1346
1347 Item {
1348
1349=== modified file 'src/imports/Ubuntu/AddressBook/ContactView/ContactDetailAddressesView.qml'
1350--- src/imports/Ubuntu/AddressBook/ContactView/ContactDetailAddressesView.qml 2015-10-26 13:18:17 +0000
1351+++ src/imports/Ubuntu/AddressBook/ContactView/ContactDetailAddressesView.qml 2015-10-26 13:18:18 +0000
1352@@ -14,7 +14,7 @@
1353 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1354 */
1355
1356-import QtQuick 2.2
1357+import QtQuick 2.4
1358 import QtContacts 5.0 as QtContacts
1359 import Ubuntu.Components 1.3
1360
1361
1362=== modified file 'src/imports/Ubuntu/AddressBook/ContactView/ContactDetailAvatarView.qml'
1363--- src/imports/Ubuntu/AddressBook/ContactView/ContactDetailAvatarView.qml 2015-10-26 13:18:17 +0000
1364+++ src/imports/Ubuntu/AddressBook/ContactView/ContactDetailAvatarView.qml 2015-10-26 13:18:18 +0000
1365@@ -14,7 +14,7 @@
1366 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1367 */
1368
1369-import QtQuick 2.2
1370+import QtQuick 2.4
1371 import QtGraphicalEffects 1.0
1372 import QtContacts 5.0
1373 import Ubuntu.Components 1.3
1374
1375=== modified file 'src/imports/Ubuntu/AddressBook/ContactView/ContactDetailEmailsView.qml'
1376--- src/imports/Ubuntu/AddressBook/ContactView/ContactDetailEmailsView.qml 2015-10-26 13:18:17 +0000
1377+++ src/imports/Ubuntu/AddressBook/ContactView/ContactDetailEmailsView.qml 2015-10-26 13:18:18 +0000
1378@@ -14,7 +14,7 @@
1379 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1380 */
1381
1382-import QtQuick 2.2
1383+import QtQuick 2.4
1384 import QtContacts 5.0 as QtContacts
1385 import Ubuntu.Components 1.3
1386
1387
1388=== modified file 'src/imports/Ubuntu/AddressBook/ContactView/ContactDetailGroupWithTypeView.qml'
1389--- src/imports/Ubuntu/AddressBook/ContactView/ContactDetailGroupWithTypeView.qml 2015-10-26 13:18:17 +0000
1390+++ src/imports/Ubuntu/AddressBook/ContactView/ContactDetailGroupWithTypeView.qml 2015-10-26 13:18:18 +0000
1391@@ -14,7 +14,7 @@
1392 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1393 */
1394
1395-import QtQuick 2.2
1396+import QtQuick 2.4
1397 import QtContacts 5.0 as QtContacts
1398
1399 import Ubuntu.Components 1.3
1400
1401=== modified file 'src/imports/Ubuntu/AddressBook/ContactView/ContactDetailNameView.qml'
1402--- src/imports/Ubuntu/AddressBook/ContactView/ContactDetailNameView.qml 2015-10-26 13:18:17 +0000
1403+++ src/imports/Ubuntu/AddressBook/ContactView/ContactDetailNameView.qml 2015-10-26 13:18:18 +0000
1404@@ -14,7 +14,7 @@
1405 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1406 */
1407
1408-import QtQuick 2.2
1409+import QtQuick 2.4
1410 import Ubuntu.Components 1.3
1411 import QtContacts 5.0
1412
1413
1414=== modified file 'src/imports/Ubuntu/AddressBook/ContactView/ContactDetailOnlineAccountsView.qml'
1415--- src/imports/Ubuntu/AddressBook/ContactView/ContactDetailOnlineAccountsView.qml 2015-10-26 13:18:17 +0000
1416+++ src/imports/Ubuntu/AddressBook/ContactView/ContactDetailOnlineAccountsView.qml 2015-10-26 13:18:18 +0000
1417@@ -14,7 +14,7 @@
1418 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1419 */
1420
1421-import QtQuick 2.2
1422+import QtQuick 2.4
1423 import QtContacts 5.0 as QtContacts
1424
1425 import Ubuntu.Components 1.3
1426
1427=== modified file 'src/imports/Ubuntu/AddressBook/ContactView/ContactDetailOrganizationsView.qml'
1428--- src/imports/Ubuntu/AddressBook/ContactView/ContactDetailOrganizationsView.qml 2015-05-07 17:27:16 +0000
1429+++ src/imports/Ubuntu/AddressBook/ContactView/ContactDetailOrganizationsView.qml 2015-10-26 13:18:18 +0000
1430@@ -14,7 +14,7 @@
1431 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1432 */
1433
1434-import QtQuick 2.2
1435+import QtQuick 2.4
1436 import QtContacts 5.0 as QtContacts
1437
1438
1439
1440=== modified file 'src/imports/Ubuntu/AddressBook/ContactView/ContactDetailPhoneNumberView.qml'
1441--- src/imports/Ubuntu/AddressBook/ContactView/ContactDetailPhoneNumberView.qml 2015-05-14 18:12:33 +0000
1442+++ src/imports/Ubuntu/AddressBook/ContactView/ContactDetailPhoneNumberView.qml 2015-10-26 13:18:18 +0000
1443@@ -14,7 +14,7 @@
1444 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1445 */
1446
1447-import QtQuick 2.2
1448+import QtQuick 2.4
1449
1450 import Ubuntu.AddressBook.Base 0.1
1451
1452
1453=== modified file 'src/imports/Ubuntu/AddressBook/ContactView/ContactDetailPhoneNumbersView.qml'
1454--- src/imports/Ubuntu/AddressBook/ContactView/ContactDetailPhoneNumbersView.qml 2015-10-26 13:18:17 +0000
1455+++ src/imports/Ubuntu/AddressBook/ContactView/ContactDetailPhoneNumbersView.qml 2015-10-26 13:18:18 +0000
1456@@ -14,7 +14,7 @@
1457 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1458 */
1459
1460-import QtQuick 2.2
1461+import QtQuick 2.4
1462 import QtContacts 5.0 as QtContacts
1463
1464 import Ubuntu.Contacts 0.1
1465
1466=== modified file 'src/imports/Ubuntu/AddressBook/ContactView/ContactDetailSyncTargetView.qml'
1467--- src/imports/Ubuntu/AddressBook/ContactView/ContactDetailSyncTargetView.qml 2015-10-26 13:18:17 +0000
1468+++ src/imports/Ubuntu/AddressBook/ContactView/ContactDetailSyncTargetView.qml 2015-10-26 13:18:18 +0000
1469@@ -14,7 +14,7 @@
1470 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1471 */
1472
1473-import QtQuick 2.2
1474+import QtQuick 2.4
1475 import Ubuntu.Components 1.3
1476 import QtContacts 5.0
1477 import Ubuntu.Contacts 0.1
1478
1479=== modified file 'src/imports/Ubuntu/AddressBook/ContactView/ContactDetailWithTypeView.qml'
1480--- src/imports/Ubuntu/AddressBook/ContactView/ContactDetailWithTypeView.qml 2015-10-26 13:18:17 +0000
1481+++ src/imports/Ubuntu/AddressBook/ContactView/ContactDetailWithTypeView.qml 2015-10-26 13:18:18 +0000
1482@@ -14,7 +14,7 @@
1483 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1484 */
1485
1486-import QtQuick 2.2
1487+import QtQuick 2.4
1488 import QtContacts 5.0
1489
1490 import Ubuntu.Components 1.3
1491
1492=== modified file 'src/imports/Ubuntu/AddressBook/ContactView/ContactFetchError.qml'
1493--- src/imports/Ubuntu/AddressBook/ContactView/ContactFetchError.qml 2015-10-26 13:18:17 +0000
1494+++ src/imports/Ubuntu/AddressBook/ContactView/ContactFetchError.qml 2015-10-26 13:18:18 +0000
1495@@ -14,7 +14,7 @@
1496 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1497 */
1498
1499-import QtQuick 2.2
1500+import QtQuick 2.4
1501 import Ubuntu.Components 1.3
1502 import Ubuntu.Components.Popups 1.3
1503
1504
1505=== modified file 'src/imports/Ubuntu/AddressBook/ContactView/ContactHeaderView.qml'
1506--- src/imports/Ubuntu/AddressBook/ContactView/ContactHeaderView.qml 2015-10-26 13:18:17 +0000
1507+++ src/imports/Ubuntu/AddressBook/ContactView/ContactHeaderView.qml 2015-10-26 13:18:18 +0000
1508@@ -14,7 +14,7 @@
1509 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1510 */
1511
1512-import QtQuick 2.2
1513+import QtQuick 2.4
1514 import Ubuntu.Components 1.3
1515 import Ubuntu.Components.ListItems 1.3 as ListItem
1516
1517
1518=== modified file 'src/imports/Ubuntu/AddressBook/ContactView/ContactViewPage.qml'
1519--- src/imports/Ubuntu/AddressBook/ContactView/ContactViewPage.qml 2015-10-26 13:18:17 +0000
1520+++ src/imports/Ubuntu/AddressBook/ContactView/ContactViewPage.qml 2015-10-26 13:18:18 +0000
1521@@ -14,7 +14,7 @@
1522 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1523 */
1524
1525-import QtQuick 2.2
1526+import QtQuick 2.4
1527 import QtContacts 5.0
1528
1529 import Ubuntu.Components 1.3
1530
1531=== modified file 'src/imports/Ubuntu/Contacts/ActionButton.qml'
1532--- src/imports/Ubuntu/Contacts/ActionButton.qml 2015-10-26 13:18:17 +0000
1533+++ src/imports/Ubuntu/Contacts/ActionButton.qml 2015-10-26 13:18:18 +0000
1534@@ -14,7 +14,7 @@
1535 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1536 */
1537
1538-import QtQuick 2.2
1539+import QtQuick 2.4
1540 import Ubuntu.Components 1.3
1541
1542 AbstractButton {
1543
1544=== modified file 'src/imports/Ubuntu/Contacts/ContactAvatar.qml'
1545--- src/imports/Ubuntu/Contacts/ContactAvatar.qml 2015-10-26 13:18:17 +0000
1546+++ src/imports/Ubuntu/Contacts/ContactAvatar.qml 2015-10-26 13:18:18 +0000
1547@@ -14,7 +14,7 @@
1548 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1549 */
1550
1551-import QtQuick 2.2
1552+import QtQuick 2.4
1553 import QtContacts 5.0
1554 import Ubuntu.Components 1.3
1555 import Ubuntu.Contacts 0.1
1556@@ -51,12 +51,13 @@
1557
1558 anchors.centerIn: parent
1559 text: Contacts.contactInitialsFromString(contactDisplayName)
1560- font.pointSize: 88
1561 color: UbuntuColors.lightAubergine
1562 visible: (img.status != Image.Ready)
1563+ fontSize: "large"
1564 }
1565
1566 source: !img.visible ? img : null
1567+ sourceFillMode: UbuntuShape.PreserveAspectCrop
1568
1569 Image {
1570 id: img
1571@@ -65,7 +66,6 @@
1572 property string avatarUrl: ContactsJS.getAvatar(contactElement, fallbackAvatarUrl)
1573
1574 anchors.centerIn: visible ? avatar : undefined
1575- fillMode: Image.PreserveAspectCrop
1576 asynchronous: true
1577 source: avatar.showAvatarPicture ? avatar.avatarUrl : ""
1578 height: visible ? units.gu(3) : avatar.height
1579
1580=== modified file 'src/imports/Ubuntu/Contacts/ContactDelegate.qml'
1581--- src/imports/Ubuntu/Contacts/ContactDelegate.qml 2015-10-26 13:18:17 +0000
1582+++ src/imports/Ubuntu/Contacts/ContactDelegate.qml 2015-10-26 13:18:18 +0000
1583@@ -14,7 +14,7 @@
1584 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1585 */
1586
1587-import QtQuick 2.2
1588+import QtQuick 2.4
1589 import QtContacts 5.0
1590 import Ubuntu.Components 1.3
1591 import Ubuntu.Components.ListItems 1.3 as ListItem
1592
1593=== modified file 'src/imports/Ubuntu/Contacts/ContactDetailOnlineAccountTypeModel.qml'
1594--- src/imports/Ubuntu/Contacts/ContactDetailOnlineAccountTypeModel.qml 2015-05-07 17:27:16 +0000
1595+++ src/imports/Ubuntu/Contacts/ContactDetailOnlineAccountTypeModel.qml 2015-10-26 13:18:18 +0000
1596@@ -14,7 +14,7 @@
1597 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1598 */
1599
1600-import QtQuick 2.2
1601+import QtQuick 2.4
1602 import QtContacts 5.0 as QtContacts
1603
1604 ListModel {
1605
1606=== modified file 'src/imports/Ubuntu/Contacts/ContactDetailPhoneNumberTypeModel.qml'
1607--- src/imports/Ubuntu/Contacts/ContactDetailPhoneNumberTypeModel.qml 2015-05-07 17:27:16 +0000
1608+++ src/imports/Ubuntu/Contacts/ContactDetailPhoneNumberTypeModel.qml 2015-10-26 13:18:18 +0000
1609@@ -14,7 +14,7 @@
1610 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1611 */
1612
1613-import QtQuick 2.2
1614+import QtQuick 2.4
1615 import QtContacts 5.0 as QtContacts
1616
1617 ListModel {
1618
1619=== modified file 'src/imports/Ubuntu/Contacts/ContactDetailPickerPhoneNumberDelegate.qml'
1620--- src/imports/Ubuntu/Contacts/ContactDetailPickerPhoneNumberDelegate.qml 2015-10-26 13:18:17 +0000
1621+++ src/imports/Ubuntu/Contacts/ContactDetailPickerPhoneNumberDelegate.qml 2015-10-26 13:18:18 +0000
1622@@ -14,7 +14,7 @@
1623 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1624 */
1625
1626-import QtQuick 2.2
1627+import QtQuick 2.4
1628 import Ubuntu.Components 1.3
1629 import QtContacts 5.0 as QtContacts
1630
1631
1632=== modified file 'src/imports/Ubuntu/Contacts/ContactFetch.qml'
1633--- src/imports/Ubuntu/Contacts/ContactFetch.qml 2015-06-01 22:13:47 +0000
1634+++ src/imports/Ubuntu/Contacts/ContactFetch.qml 2015-10-26 13:18:18 +0000
1635@@ -14,7 +14,7 @@
1636 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1637 */
1638
1639-import QtQuick 2.2
1640+import QtQuick 2.4
1641
1642 Item {
1643 id: root
1644
1645=== modified file 'src/imports/Ubuntu/Contacts/ContactListButtonDelegate.qml'
1646--- src/imports/Ubuntu/Contacts/ContactListButtonDelegate.qml 2015-10-26 13:18:17 +0000
1647+++ src/imports/Ubuntu/Contacts/ContactListButtonDelegate.qml 2015-10-26 13:18:18 +0000
1648@@ -14,7 +14,7 @@
1649 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1650 */
1651
1652-import QtQuick 2.0
1653+import QtQuick 2.4
1654 import Ubuntu.Components 1.3
1655
1656 Item {
1657
1658=== modified file 'src/imports/Ubuntu/Contacts/ContactListModel.qml'
1659--- src/imports/Ubuntu/Contacts/ContactListModel.qml 2015-06-29 15:35:07 +0000
1660+++ src/imports/Ubuntu/Contacts/ContactListModel.qml 2015-10-26 13:18:18 +0000
1661@@ -14,7 +14,7 @@
1662 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1663 */
1664
1665-import QtQuick 2.2
1666+import QtQuick 2.4
1667 import QtContacts 5.0
1668 import Ubuntu.Contacts 0.1
1669
1670
1671=== modified file 'src/imports/Ubuntu/Contacts/ContactListView.qml'
1672--- src/imports/Ubuntu/Contacts/ContactListView.qml 2015-10-26 13:18:17 +0000
1673+++ src/imports/Ubuntu/Contacts/ContactListView.qml 2015-10-26 13:18:18 +0000
1674@@ -14,7 +14,7 @@
1675 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1676 */
1677
1678-import QtQuick 2.2
1679+import QtQuick 2.4
1680 import QtContacts 5.0
1681
1682 import Ubuntu.Components 1.3
1683@@ -202,6 +202,18 @@
1684 */
1685 property bool showAddNewButton: false
1686 /*!
1687+ \qmlproperty bool prepareNewContact
1688+
1689+ This property holds if space for a draft new contact should be made available or not
1690+ */
1691+ property bool prepareNewContact: false
1692+ /*!
1693+ \qmlproperty bool showNewContact
1694+
1695+ This property holds if a draft new contact should be visible or not
1696+ */
1697+ property bool showNewContact: false
1698+ /*!
1699 \qmlproperty bool syncing
1700
1701 This property holds if the list is running a sync with online accounts or not
1702@@ -230,6 +242,18 @@
1703 This property holds if the busy indicator should became visible
1704 */
1705 property bool showBusyIndicator: true
1706+ /*!
1707+ \qmlproperty real verticalVelocity
1708+
1709+ This property holds the vertical velocity of the list
1710+ */
1711+ readonly property real verticalVelocity: view.verticalVelocity
1712+ /*!
1713+ \qmlproperty Contact highlightedContact
1714+
1715+ This property holds a reference to the Contact that should be highlighted
1716+ */
1717+ property Contact highlightedContact: null
1718
1719 property var _busyDialog: null
1720
1721@@ -358,6 +382,7 @@
1722 property bool showFavourites: true
1723 property alias favouritesIsSelected: contactsModel.onlyFavorites
1724 property bool contactsLoaded: false
1725+ highlightedContact: root.highlightedContact
1726
1727 function getSectionText(index) {
1728 var tag = listModel.contacts[index].tag.tag
1729@@ -396,12 +421,26 @@
1730 anchors {
1731 left: parent.left
1732 right: parent.right
1733- margins: units.gu(1)
1734- }
1735- height: childrenRect.height
1736+ }
1737+
1738+ Connections {
1739+ target: root
1740+ onPrepareNewContactChanged: {
1741+ if (root.prepareNewContact) {
1742+ view.contentY = Qt.binding(function() {return -view.headerItem.height});
1743+ } else {
1744+ view.contentY = view.contentY;
1745+ }
1746+ }
1747+ }
1748
1749 // AddNewButton
1750 ContactListButtonDelegate {
1751+ anchors {
1752+ left: parent.left
1753+ right: parent.right
1754+ margins: units.gu(1)
1755+ }
1756 objectName: "addNewButton"
1757
1758 iconSource: "image://theme/add"
1759@@ -411,6 +450,22 @@
1760 visible: root.showAddNewButton
1761 }
1762
1763+ ContactDelegate {
1764+ property var contact: Contact {
1765+ Name {
1766+ firstName: i18n.tr("New contact")
1767+ }
1768+ Avatar {
1769+ imageUrl: "image://theme/contact"
1770+ }
1771+ }
1772+ selected: true
1773+ visible: root.prepareNewContact
1774+ height: root.prepareNewContact ? defaultHeight : 0
1775+ Behavior on height {UbuntuNumberAnimation {}}
1776+ opacity: root.showNewContact ? 1.0 : 0.0
1777+ }
1778+
1779 Column {
1780 id: importFromButtons
1781 objectName: "importFromButtons"
1782@@ -420,6 +475,7 @@
1783 anchors {
1784 left: parent.left
1785 right: parent.right
1786+ margins: units.gu(1)
1787 }
1788 height: visible ? childrenRect.height : 0
1789
1790@@ -480,6 +536,7 @@
1791 anchors {
1792 left: parent.left
1793 right: parent.right
1794+ margins: units.gu(1)
1795 }
1796 parentView: view
1797 visible: view.favouritesIsSelected
1798
1799=== modified file 'src/imports/Ubuntu/Contacts/ContactSimpleListView.qml'
1800--- src/imports/Ubuntu/Contacts/ContactSimpleListView.qml 2015-10-26 13:18:17 +0000
1801+++ src/imports/Ubuntu/Contacts/ContactSimpleListView.qml 2015-10-26 13:18:18 +0000
1802@@ -14,7 +14,7 @@
1803 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1804 */
1805
1806-import QtQuick 2.2
1807+import QtQuick 2.4
1808 import QtContacts 5.0
1809 import Ubuntu.Components 1.3
1810 import Ubuntu.Components.ListItems 1.3 as ListItem
1811@@ -144,6 +144,13 @@
1812 */
1813 property list<Action> rightSideActions
1814
1815+ /*!
1816+ \qmlproperty Contact highlightedContact
1817+
1818+ This property holds a reference to the Contact that should be highlighted
1819+ */
1820+ property Contact highlightedContact: null
1821+
1822 /* internal */
1823 property var _currentSwipedItem: null
1824
1825@@ -227,6 +234,7 @@
1826 }
1827 }
1828
1829+ highlightFollowsCurrentItem: true
1830 currentIndex: -1
1831 section {
1832 property: showSections ? "contact.tag.tag" : ""
1833@@ -261,7 +269,7 @@
1834 flicking: contactListView.flicking
1835 width: parent.width
1836 selected: (contactListView.multiSelectionEnabled && contactListView.isSelected(contactDelegate))
1837- || index === contactListView.currentIndex
1838+ || (contactListView.highlightedContact && contactListView.highlightedContact.contactId == contact.contactId)
1839 selectionMode: contactListView.isInSelectionMode
1840 defaultAvatarUrl: contactListView.defaultAvatarImageUrl
1841 isCurrentItem: ListView.isCurrentItem
1842
1843=== modified file 'src/imports/Ubuntu/Contacts/FastScroll.qml'
1844--- src/imports/Ubuntu/Contacts/FastScroll.qml 2015-10-26 13:18:17 +0000
1845+++ src/imports/Ubuntu/Contacts/FastScroll.qml 2015-10-26 13:18:18 +0000
1846@@ -40,7 +40,7 @@
1847 ****************************************************************************/
1848
1849 // FastScroll.qml
1850-import QtQuick 2.2
1851+import QtQuick 2.4
1852 import Ubuntu.Components 1.3
1853 import "FastScroll.js" as Sections
1854
1855
1856=== modified file 'src/imports/Ubuntu/Contacts/ListItemWithActions.qml'
1857--- src/imports/Ubuntu/Contacts/ListItemWithActions.qml 2015-10-26 13:18:17 +0000
1858+++ src/imports/Ubuntu/Contacts/ListItemWithActions.qml 2015-10-26 13:18:18 +0000
1859@@ -14,7 +14,7 @@
1860 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1861 */
1862
1863-import QtQuick 2.2
1864+import QtQuick 2.4
1865 import Ubuntu.Components 1.3
1866
1867 Item {
1868
1869=== modified file 'src/imports/Ubuntu/Contacts/ListItemWithActionsCheckBox.qml'
1870--- src/imports/Ubuntu/Contacts/ListItemWithActionsCheckBox.qml 2015-10-26 13:18:17 +0000
1871+++ src/imports/Ubuntu/Contacts/ListItemWithActionsCheckBox.qml 2015-10-26 13:18:18 +0000
1872@@ -14,7 +14,7 @@
1873 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1874 */
1875
1876-import QtQuick 2.2
1877+import QtQuick 2.4
1878 import Ubuntu.Components 1.3
1879
1880 CheckBox {
1881
1882=== modified file 'src/imports/Ubuntu/Contacts/MostCalledList.qml'
1883--- src/imports/Ubuntu/Contacts/MostCalledList.qml 2015-05-13 22:26:05 +0000
1884+++ src/imports/Ubuntu/Contacts/MostCalledList.qml 2015-10-26 13:18:18 +0000
1885@@ -14,7 +14,7 @@
1886 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1887 */
1888
1889-import QtQuick 2.2
1890+import QtQuick 2.4
1891
1892 Column {
1893 id: root
1894
1895=== modified file 'src/imports/Ubuntu/Contacts/MostCalledModel.qml'
1896--- src/imports/Ubuntu/Contacts/MostCalledModel.qml 2015-05-14 02:37:01 +0000
1897+++ src/imports/Ubuntu/Contacts/MostCalledModel.qml 2015-10-26 13:18:18 +0000
1898@@ -15,7 +15,7 @@
1899 */
1900
1901
1902-import QtQuick 2.2
1903+import QtQuick 2.4
1904 import QtContacts 5.0
1905
1906 import Ubuntu.History 0.1
1907
1908=== modified file 'src/imports/Ubuntu/Contacts/MultipleSelectionListView.qml'
1909--- src/imports/Ubuntu/Contacts/MultipleSelectionListView.qml 2015-10-26 13:18:17 +0000
1910+++ src/imports/Ubuntu/Contacts/MultipleSelectionListView.qml 2015-10-26 13:18:18 +0000
1911@@ -14,7 +14,7 @@
1912 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1913 */
1914
1915-import QtQuick 2.2
1916+import QtQuick 2.4
1917 import Ubuntu.Components 1.3
1918 import Ubuntu.Components.Popups 1.3 as Popups
1919
1920
1921=== modified file 'src/imports/Ubuntu/Contacts/MultipleSelectionVisualModel.qml'
1922--- src/imports/Ubuntu/Contacts/MultipleSelectionVisualModel.qml 2015-05-07 17:27:16 +0000
1923+++ src/imports/Ubuntu/Contacts/MultipleSelectionVisualModel.qml 2015-10-26 13:18:18 +0000
1924@@ -14,7 +14,7 @@
1925 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1926 */
1927
1928-import QtQuick 2.2
1929+import QtQuick 2.4
1930
1931 VisualDataModel {
1932 id: contactVisualModel
1933
1934=== modified file 'src/imports/Ubuntu/Contacts/Ofono.qml'
1935--- src/imports/Ubuntu/Contacts/Ofono.qml 2015-03-17 17:14:09 +0000
1936+++ src/imports/Ubuntu/Contacts/Ofono.qml 2015-10-26 13:18:18 +0000
1937@@ -14,7 +14,7 @@
1938 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1939 */
1940
1941-import QtQuick 2.0
1942+import QtQuick 2.4
1943 import MeeGo.QOfono 0.2
1944
1945 Item {
1946
1947=== modified file 'src/imports/Ubuntu/Contacts/OnlineAccountsDummy.qml'
1948--- src/imports/Ubuntu/Contacts/OnlineAccountsDummy.qml 2015-02-06 16:37:12 +0000
1949+++ src/imports/Ubuntu/Contacts/OnlineAccountsDummy.qml 2015-10-26 13:18:18 +0000
1950@@ -14,7 +14,7 @@
1951 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1952 */
1953
1954-import QtQuick 2.2
1955+import QtQuick 2.4
1956
1957 Item {
1958 id: root
1959
1960=== modified file 'src/imports/Ubuntu/Contacts/OnlineAccountsHelper.qml'
1961--- src/imports/Ubuntu/Contacts/OnlineAccountsHelper.qml 2015-10-26 13:18:17 +0000
1962+++ src/imports/Ubuntu/Contacts/OnlineAccountsHelper.qml 2015-10-26 13:18:18 +0000
1963@@ -14,7 +14,7 @@
1964 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1965 */
1966
1967-import QtQuick 2.2
1968+import QtQuick 2.4
1969 import Ubuntu.Components 1.3
1970 import Ubuntu.OnlineAccounts 0.1
1971 import Ubuntu.OnlineAccounts.Client 0.1
1972
1973=== modified file 'src/imports/Ubuntu/Contacts/PageWithBottomEdge.qml'
1974--- src/imports/Ubuntu/Contacts/PageWithBottomEdge.qml 2015-10-26 13:18:17 +0000
1975+++ src/imports/Ubuntu/Contacts/PageWithBottomEdge.qml 2015-10-26 13:18:18 +0000
1976@@ -62,7 +62,7 @@
1977
1978 */
1979
1980-import QtQuick 2.2
1981+import QtQuick 2.4
1982 import Ubuntu.Components 1.3
1983
1984 Page {
1985@@ -103,7 +103,7 @@
1986 {
1987 if (edgeLoader.status === Loader.Ready) {
1988 edgeLoader.item.active = true
1989- page.pageStack.addPageToCurrentColumn(page, edgeLoader.item)
1990+ page.pageStack.push(edgeLoader.item)
1991 if (edgeLoader.item.flickable) {
1992 edgeLoader.item.flickable.contentY = -page.header.height
1993 edgeLoader.item.flickable.returnToBounds()
1994
1995=== modified file 'src/imports/Ubuntu/Contacts/SIMCardImportPage.qml'
1996--- src/imports/Ubuntu/Contacts/SIMCardImportPage.qml 2015-10-26 13:18:17 +0000
1997+++ src/imports/Ubuntu/Contacts/SIMCardImportPage.qml 2015-10-26 13:18:18 +0000
1998@@ -14,7 +14,7 @@
1999 * along with this program. If not, see <http://www.gnu.org/licenses/>.
2000 */
2001
2002-import QtQuick 2.2
2003+import QtQuick 2.4
2004 import QtContacts 5.0
2005
2006 import Ubuntu.Components 1.3
2007
2008=== modified file 'src/imports/Ubuntu/Contacts/SIMList.qml'
2009--- src/imports/Ubuntu/Contacts/SIMList.qml 2015-03-17 17:14:09 +0000
2010+++ src/imports/Ubuntu/Contacts/SIMList.qml 2015-10-26 13:18:18 +0000
2011@@ -14,7 +14,7 @@
2012 * along with this program. If not, see <http://www.gnu.org/licenses/>.
2013 */
2014
2015-import QtQuick 2.2
2016+import QtQuick 2.4
2017
2018 import MeeGo.QOfono 0.2
2019
2020
2021=== modified file 'src/imports/Ubuntu/Contacts/SectionDelegate.qml'
2022--- src/imports/Ubuntu/Contacts/SectionDelegate.qml 2015-10-26 13:18:17 +0000
2023+++ src/imports/Ubuntu/Contacts/SectionDelegate.qml 2015-10-26 13:18:18 +0000
2024@@ -14,7 +14,7 @@
2025 * along with this program. If not, see <http://www.gnu.org/licenses/>.
2026 */
2027
2028-import QtQuick 2.2
2029+import QtQuick 2.4
2030 import Ubuntu.Components 1.3
2031 import Ubuntu.Components.ListItems 1.3
2032
2033@@ -28,7 +28,6 @@
2034
2035 anchors.fill: parent
2036 verticalAlignment: Text.AlignVCenter
2037- font.pointSize: 76
2038 height: units.gu(3)
2039 }
2040 ThinDivider {
2041
2042=== modified file 'src/imports/Ubuntu/Contacts/SubtitledWithColors.qml'
2043--- src/imports/Ubuntu/Contacts/SubtitledWithColors.qml 2015-10-26 13:18:17 +0000
2044+++ src/imports/Ubuntu/Contacts/SubtitledWithColors.qml 2015-10-26 13:18:18 +0000
2045@@ -14,7 +14,7 @@
2046 * along with this program. If not, see <http://www.gnu.org/licenses/>.
2047 */
2048
2049-import QtQuick 2.0
2050+import QtQuick 2.4
2051 import Ubuntu.Components 1.3
2052
2053 MouseArea {
2054
2055=== modified file 'src/imports/Ubuntu/Contacts/VCardParser.qml'
2056--- src/imports/Ubuntu/Contacts/VCardParser.qml 2014-08-13 20:52:57 +0000
2057+++ src/imports/Ubuntu/Contacts/VCardParser.qml 2015-10-26 13:18:18 +0000
2058@@ -14,7 +14,7 @@
2059 * along with this program. If not, see <http://www.gnu.org/licenses/>.
2060 */
2061
2062-import QtQuick 2.2
2063+import QtQuick 2.4
2064 import QtContacts 5.0
2065
2066 QtObject {
2067
2068=== modified file 'src/imports/Ubuntu/Contacts/qmldir'
2069--- src/imports/Ubuntu/Contacts/qmldir 2015-04-29 14:22:40 +0000
2070+++ src/imports/Ubuntu/Contacts/qmldir 2015-10-26 13:18:18 +0000
2071@@ -3,6 +3,7 @@
2072 plugin ubuntu-contacts-qml
2073
2074 ContactAvatar 0.1 ContactAvatar.qml
2075+ContactDelegate 0.1 ContactDelegate.qml
2076 ContactDetailOnlineAccountTypeModel 0.1 ContactDetailOnlineAccountTypeModel.qml
2077 ContactDetailPhoneNumberTypeModel 0.1 ContactDetailPhoneNumberTypeModel.qml
2078 ContactFetch 0.1 ContactFetch.qml
2079@@ -20,7 +21,6 @@
2080 SIMList 0.1 SIMList.qml
2081
2082 internal ContactAvatar ContactAvatar.qml
2083-internal ContactDelegate ContactDelegate.qml
2084 internal ContactDetailPickerPhoneNumberDelegate ContactDetailPickerPhoneNumberDelegate.qml
2085 internal ContactImportButton ContactImportButton.qml
2086 internal ContactList ContactList.js
2087
2088=== modified file 'src/imports/VCardImportDialog.qml'
2089--- src/imports/VCardImportDialog.qml 2015-10-26 13:18:17 +0000
2090+++ src/imports/VCardImportDialog.qml 2015-10-26 13:18:18 +0000
2091@@ -14,7 +14,7 @@
2092 * along with this program. If not, see <http://www.gnu.org/licenses/>.
2093 */
2094
2095-import QtQuick 2.2
2096+import QtQuick 2.4
2097 import QtContacts 5.0
2098 import Ubuntu.Components 1.3
2099 import Ubuntu.Components.Popups 1.3 as Popups
2100
2101=== modified file 'tests/autopilot/address_book_app/__init__.py'
2102--- tests/autopilot/address_book_app/__init__.py 2015-10-26 13:18:17 +0000
2103+++ tests/autopilot/address_book_app/__init__.py 2015-10-26 13:18:18 +0000
2104@@ -32,7 +32,6 @@
2105 from address_book_app import pages
2106 from address_book_app import address_book
2107
2108-
2109 logger = logging.getLogger(__name__)
2110
2111
2112@@ -65,30 +64,18 @@
2113 # ContactListPage is the only page that can appears multiple times
2114 # Ex.: During the pick mode we alway push a new contactListPage, to
2115 # preserve the current application status.
2116- contact_list_pages = self.select_many(
2117- pages.ABContactListPage, objectName='contactListPage')
2118-
2119- # alway return the page without pickMode
2120- for p in contact_list_pages:
2121- if not p.pickMode:
2122- return p
2123- return None
2124+ return self.wait_select_single(pages.ABContactListPage,
2125+ objectName='contactListPage', pickMode=False)
2126
2127 def get_contact_edit_page(self):
2128 # We can have two contact editor page because of bottom edge page
2129 # but we will return only the active one
2130- list_page = self.get_contact_list_page()
2131- list_page.bottomEdgePageLoaded.wait_for(True)
2132- contact_editor_pages = self.select_many(
2133- pages.ABContactEditorPage, objectName="contactEditorPage")
2134- for p in contact_editor_pages:
2135- if p.active:
2136- return p
2137- raise exceptions.StateNotFoundError('contactEditorPage not found')
2138+ return self.wait_select_single(objectName="contactEditorPage", active=True)
2139
2140 def get_contact_view_page(self):
2141 return self.wait_select_single(pages.ABContactViewPage,
2142- objectName="contactViewPage")
2143+ objectName="contactViewPage",
2144+ active=True)
2145
2146 def get_contact_list_pick_page(self):
2147 contact_list_pages = self.select_many(
2148@@ -100,10 +87,10 @@
2149
2150 def get_share_page(self):
2151 return self.wait_select_single("ContactSharePage",
2152- objectName="contactSharePage")
2153+ objectName="contactSharePage",
2154+ active=True)
2155
2156 def start_import_contacts(self):
2157- self.open_header()
2158 view = self.get_contact_list_view()
2159 if view.count > 0:
2160 self.click_action_button("importFromSimHeaderButton")
2161@@ -114,19 +101,37 @@
2162 self.pointing_device.click_object(import_buttom)
2163
2164 return self.wait_select_single(address_book.SIMCardImportPage,
2165- objectName="simCardImportPage")
2166+ objectName="simCardImportPage",
2167+ active=True)
2168
2169 def get_contact_list_view(self):
2170 """
2171- Returns a ContactListView iobject for the current window
2172+ Returns a ContactListView object for the current window
2173 """
2174 return self.wait_select_single("ContactListView",
2175 objectName="contactListView")
2176
2177- def get_button(self, buttonName):
2178- actionbar = self.select_single('ActionBar', objectName='headerActionBar')
2179- return actionbar._get_action_button(buttonName)
2180+ def get_action(self, action_name):
2181+ actionbars = self.select_many('ActionBar', objectName='headerActionBar')
2182+ for actionbar in actionbars:
2183+ object_name = action_name + "_action_button"
2184+ try:
2185+ button = actionbar.select_single(objectName=object_name)
2186+ if button:
2187+ return button
2188+ except introspection.dbus.StateNotFoundError:
2189+ continue
2190+ return None
2191
2192+ def click_action_button(self, action_name):
2193+ actionbars = self.select_many('ActionBar', objectName='headerActionBar')
2194+ for actionbar in actionbars:
2195+ try:
2196+ actionbar.click_action_button(action_name)
2197+ return
2198+ except ubuntuuitoolkit.ToolkitException:
2199+ continue
2200+ raise exceptions.StateNotFoundError('Action %s not found.' % action_name)
2201
2202 def open_header(self):
2203 header = self.get_header()
2204@@ -153,22 +158,36 @@
2205 """
2206 Press the 'Cancel' button
2207 """
2208- header = self.open_header()
2209- header.click_custom_back_button()
2210+ buttons = self.select_many(objectName='customBackButton')
2211+ for button in buttons:
2212+ if button.enabled and button.visible:
2213+ self.pointing_device.click_object(button)
2214+ return
2215+
2216+ #self.click_action_button("customBackButton")
2217
2218 def save(self):
2219 """
2220 Press the 'Save' button
2221 """
2222- bottom_swipe_page = self.get_contact_list_page()
2223 self.click_action_button("save")
2224- bottom_swipe_page.isCollapsed.wait_for(True)
2225+
2226+ def edit(self):
2227+ """
2228+ Press the 'Save' button
2229+ """
2230+ self.click_action_button("edit")
2231+
2232+ def delete(self):
2233+ """
2234+ Press the 'Delete' button
2235+ """
2236+ self.click_action_button("delete")
2237
2238 def confirm_import(self):
2239 """
2240 Press the 'confirm' button
2241 """
2242- self.open_header()
2243 self.click_action_button("confirmImport")
2244
2245 def get_toolbar(self):
2246@@ -182,4 +201,5 @@
2247 """
2248 bottom_swipe_page = self.get_contact_list_page()
2249 bottom_swipe_page.reveal_bottom_edge_page()
2250+
2251 return self.get_contact_edit_page()
2252
2253=== modified file 'tests/autopilot/address_book_app/address_book/_contact_view_page.py'
2254--- tests/autopilot/address_book_app/address_book/_contact_view_page.py 2015-05-11 14:21:03 +0000
2255+++ tests/autopilot/address_book_app/address_book/_contact_view_page.py 2015-10-26 13:18:18 +0000
2256@@ -19,10 +19,4 @@
2257
2258 class ContactViewPage(_common.PageWithHeader):
2259 """Autopilot helper for the ContactView page."""
2260-
2261- def go_to_edit_contact(self):
2262- self.get_header().click_action_button('edit')
2263- return self.get_root_instance().select_single(
2264- _contact_editor_page.ContactEditorPage,
2265- objectName='contactEditorPage',
2266- active=True)
2267+ pass
2268
2269=== modified file 'tests/autopilot/address_book_app/address_book/_sim_card_import_page.py'
2270--- tests/autopilot/address_book_app/address_book/_sim_card_import_page.py 2015-05-12 15:43:25 +0000
2271+++ tests/autopilot/address_book_app/address_book/_sim_card_import_page.py 2015-10-26 13:18:18 +0000
2272@@ -72,7 +72,7 @@
2273 """Return a list with the names of the contacts."""
2274 contact_delegates = self._get_sorted_contact_delegates()
2275 name_labels = [
2276- delegate.select_single('Label', objectName='nameLabel') for
2277+ delegate.select_single('UCLabel', objectName='nameLabel') for
2278 delegate in contact_delegates
2279 ]
2280 return [label.text for label in name_labels]
2281@@ -96,6 +96,6 @@
2282 contact = self._get_contact_delegate(index)
2283 self.pointing_device.click_object(contact)
2284 contacts.append(contact.select_single(
2285- 'Label', objectName='nameLabel').text)
2286+ 'UCLabel', objectName='nameLabel').text)
2287
2288 return contacts
2289
2290=== modified file 'tests/autopilot/address_book_app/pages/_ab_contact_list_page.py'
2291--- tests/autopilot/address_book_app/pages/_ab_contact_list_page.py 2015-05-13 13:25:18 +0000
2292+++ tests/autopilot/address_book_app/pages/_ab_contact_list_page.py 2015-10-26 13:18:18 +0000
2293@@ -21,9 +21,9 @@
2294
2295 import autopilot.logging
2296 import ubuntuuitoolkit
2297-
2298 import address_book_app.address_book as address_book
2299
2300+from autopilot.introspection import dbus
2301 from address_book_app.pages import ABContactViewPage
2302
2303
2304@@ -32,7 +32,7 @@
2305 log_action_debug = autopilot.logging.log_action(logging.debug)
2306
2307
2308-class ABContactListPage(address_book.PageWithHeader, address_book.PageWithBottomEdge):
2309+class ABContactListPage(address_book.PageWithHeader):
2310
2311 """Autopilot helper for the Contact List page."""
2312
2313@@ -46,8 +46,10 @@
2314 """
2315 contact_delegate = self._get_contact_delegate(index)
2316 self.pointing_device.click_object(contact_delegate)
2317+ # WORKAROUND: give some time to the view became available
2318+ time.sleep(5.0)
2319 return self.get_root_instance().select_single(
2320- ABContactViewPage, objectName='contactViewPage')
2321+ ABContactViewPage, objectName='contactViewPage', active=True)
2322
2323 def _get_contact_delegate(self, index):
2324 contact_delegates = self._get_sorted_contact_delegates()
2325@@ -108,9 +110,9 @@
2326 'ContactListView', objectName='contactListView')
2327
2328 @log_action_info
2329- def delete_selected_contacts(self):
2330- self.get_header().click_action_button('delete')
2331- self.isCollapsed.wait_for(True)
2332+ def delete_selected_contacts(self, main_window):
2333+ main_window.delete()
2334+ self.bottomEdgePageOpened.wait_for(False)
2335 dialog = self.get_root_instance().wait_select_single(
2336 address_book.RemoveContactsDialog, objectName='removeContactsDialog')
2337 dialog.confirm_removal()
2338@@ -119,7 +121,7 @@
2339 """Return a list with the names of the contacts."""
2340 contact_delegates = self._get_sorted_contact_delegates()
2341 name_labels = [
2342- delegate.select_single('Label', objectName='nameLabel') for
2343+ delegate.select_single('UCLabel', objectName='nameLabel') for
2344 delegate in contact_delegates
2345 ]
2346 return [label.text for label in name_labels]
2347@@ -136,3 +138,20 @@
2348 objectName='contactListView.importFromSimCardButton')
2349 return import_from_sim_button.visible
2350
2351+ def reveal_bottom_edge_page(self):
2352+ """Bring the bottom edge page to the screen"""
2353+ self.bottomEdgePageOpened.wait_for(False)
2354+ try:
2355+ action_item = self.wait_select_single(objectName='bottomEdgeDragArea')
2356+ action_item.enabled.wait_for(True)
2357+ start_x = (action_item.globalRect.x +
2358+ (action_item.globalRect.width * 0.5))
2359+ start_y = action_item.globalRect.y + (action_item.height * 0.2)
2360+ stop_y = start_y - (self.height * 0.7)
2361+ self.pointing_device.drag(
2362+ start_x, start_y, start_x, stop_y, rate=2)
2363+ #self pointer became invalid at this point
2364+ #self.bottomEdgePageOpened.wait_for(True)
2365+ except dbus.StateNotFoundError:
2366+ logger.error('ButtomEdge element not found.')
2367+ raise
2368
2369=== modified file 'tests/autopilot/address_book_app/tests/__init__.py'
2370--- tests/autopilot/address_book_app/tests/__init__.py 2015-04-14 22:19:01 +0000
2371+++ tests/autopilot/address_book_app/tests/__init__.py 2015-10-26 13:18:18 +0000
2372@@ -169,12 +169,12 @@
2373 list_page = self.main_window.get_contact_list_page()
2374 list_page.open_contact(index)
2375
2376- self.assertThat(list_page.visible, Eventually(Equals(False)))
2377 view_page = self.main_window.get_contact_view_page()
2378 self.assertThat(view_page.visible, Eventually(Equals(True)))
2379
2380 # Edit contact
2381- edit_page = view_page.go_to_edit_contact()
2382+ self.main_window.edit()
2383+ edit_page = self.main_window.get_contact_edit_page()
2384 self.assertThat(edit_page.visible, Eventually(Equals(True)))
2385
2386 return edit_page
2387
2388=== modified file 'tests/autopilot/address_book_app/tests/test_add_contact.py'
2389--- tests/autopilot/address_book_app/tests/test_add_contact.py 2015-05-12 15:43:25 +0000
2390+++ tests/autopilot/address_book_app/tests/test_add_contact.py 2015-10-26 13:18:18 +0000
2391@@ -36,14 +36,17 @@
2392 contact_editor = self.app.main_window.go_to_add_contact()
2393
2394 # Check if the contact list disapear and contact editor appears
2395- self.assertThat(list_page.visible, Eventually(Equals(False)))
2396+ #FIXME: list_page became an invalid pointer after push a new page
2397+ #self.assertThat(list_page.bottomEdgePageOpened, Eventually(Equals(True)))
2398 self.assertThat(contact_editor.visible, Eventually(Equals(True)))
2399+ self.assertThat(contact_editor.active, Eventually(Equals(True)))
2400
2401 # cancel new contact without save
2402 self.app.main_window.cancel()
2403
2404 # Check if the contact list is visible again
2405 self.assertThat(list_page.visible, Eventually(Equals(True)))
2406+ self.assertThat(list_page.bottomEdgePageOpened, Eventually(Equals(False)))
2407
2408 # Check if the contact list still empty
2409 list_view = self.app.main_window.get_contact_list_view()
2410@@ -115,11 +118,11 @@
2411 # Check if they have the correct label
2412 for idx in range(3):
2413 email_type = view_page.select_single(
2414- "Label",
2415+ "UCLabel",
2416 objectName="type_email_" + str(idx))
2417
2418 email_label = view_page.select_single(
2419- "Label",
2420+ "UCLabel",
2421 objectName="label_emailAddress_" + str(idx) + ".0")
2422
2423 self.assertThat(emails[email_label.text], Equals(email_type.text))
2424@@ -166,11 +169,11 @@
2425 # Check if they have the correct label
2426 for idx in range(5):
2427 phone_type = view_page.select_single(
2428- "Label",
2429+ "UCLabel",
2430 objectName="type_phoneNumber_" + str(idx))
2431
2432 phone_label = view_page.select_single(
2433- "Label",
2434+ "UCLabel",
2435 objectName="label_phoneNumber_" + str(idx) + ".0")
2436
2437 self.assertThat(phones[phone_label.text], Equals(phone_type.text))
2438
2439=== modified file 'tests/autopilot/address_book_app/tests/test_create_new_from_uri.py'
2440--- tests/autopilot/address_book_app/tests/test_create_new_from_uri.py 2014-09-02 19:23:05 +0000
2441+++ tests/autopilot/address_book_app/tests/test_create_new_from_uri.py 2015-10-26 13:18:18 +0000
2442@@ -23,16 +23,17 @@
2443
2444 def test_save_new_contact(self):
2445 list_page = self.app.main_window.get_contact_list_page()
2446- list_page.isReady.wait_for(True)
2447+ #FIXME: contacts list object became invalid after push a new page
2448+ #list_page.bottomEdgePageOpened.wait_for(True)
2449
2450 edit_page = self.app.main_window.get_contact_edit_page()
2451 self.assertThat(edit_page.visible, Eventually(Equals(True)))
2452
2453 # add name to the contact
2454- firstNameField = self.app.main_window.wait_select_single(
2455+ firstNameField = edit_page.wait_select_single(
2456 "TextInputDetail",
2457 objectName="firstName")
2458- lastNameField = self.app.main_window.wait_select_single(
2459+ lastNameField = edit_page.wait_select_single(
2460 "TextInputDetail",
2461 objectName="lastName")
2462
2463@@ -43,6 +44,7 @@
2464 self.app.main_window.save()
2465
2466 # open contact view
2467+ list_page = self.app.main_window.get_contact_list_page()
2468 list_page.open_contact(0)
2469 view_page = self.app.main_window.get_contact_view_page()
2470 self.assertThat(view_page.visible, Eventually(Equals(True)))
2471@@ -53,10 +55,10 @@
2472 objectName="phones")
2473 self.assertThat(phone_group.detailsCount, Eventually(Equals(1)))
2474 phone_type = view_page.select_single(
2475- "Label",
2476+ "UCLabel",
2477 objectName="type_phoneNumber_0")
2478 phone_label = view_page.select_single(
2479- "Label",
2480+ "UCLabel",
2481 objectName="label_phoneNumber_0.0")
2482 self.assertThat(phone_label.text, Eventually(Equals("1234567890")))
2483 self.assertThat(phone_type.text, Eventually(Equals("Mobile")))
2484
2485=== modified file 'tests/autopilot/address_book_app/tests/test_delete_contact.py'
2486--- tests/autopilot/address_book_app/tests/test_delete_contact.py 2014-09-02 19:23:05 +0000
2487+++ tests/autopilot/address_book_app/tests/test_delete_contact.py 2015-10-26 13:18:18 +0000
2488@@ -69,6 +69,6 @@
2489 if self.action == "cancel":
2490 self.app.main_window.cancel()
2491 elif self.action == "delete":
2492- list_page.delete_selected_contacts()
2493+ list_page.delete_selected_contacts(self.app.main_window)
2494
2495 self.assertEqual(list_page.get_contacts(), self.expected_result)
2496
2497=== modified file 'tests/autopilot/address_book_app/tests/test_edit_contact.py'
2498--- tests/autopilot/address_book_app/tests/test_edit_contact.py 2015-05-12 15:43:25 +0000
2499+++ tests/autopilot/address_book_app/tests/test_edit_contact.py 2015-10-26 13:18:18 +0000
2500@@ -59,7 +59,7 @@
2501
2502 # check if the new value is correct
2503 phone_label_1 = view_page.select_single(
2504- "Label",
2505+ "UCLabel",
2506 objectName="label_phoneNumber_1.0")
2507 self.assertThat(phone_label_1.text,
2508 Eventually(Equals(self.PHONE_NUMBERS[1])))
2509@@ -89,14 +89,14 @@
2510
2511 # check if we have onlye one phone
2512 view_page = list_page.open_contact(0)
2513- phone_group = view_page.select_single(
2514+ phone_group = self.main_window.wait_select_single(
2515 "ContactDetailGroupWithTypeView",
2516 objectName="phones")
2517 self.assertThat(phone_group.detailsCount, Eventually(Equals(1)))
2518
2519 # check if the new value is correct
2520- phone_label_1 = view_page.select_single(
2521- "Label",
2522+ phone_label_1 = phone_group.wait_select_single(
2523+ "UCLabel",
2524 objectName="label_phoneNumber_0.0")
2525 self.assertThat(phone_label_1.text,
2526 Eventually(Equals(self.PHONE_NUMBERS[1])))
2527@@ -119,14 +119,14 @@
2528 self.assertThat(view_page.visible, Eventually(Equals(True)))
2529
2530 # check if we have a new email
2531- email_group = view_page.select_single(
2532+ email_group = self.main_window.select_single(
2533 "ContactDetailGroupWithTypeView",
2534 objectName="emails")
2535 self.assertThat(email_group.detailsCount, Eventually(Equals(1)))
2536
2537 # check if the new value is correct
2538- email_label_1 = view_page.select_single(
2539- "Label",
2540+ email_label_1 = email_group.select_single(
2541+ "UCLabel",
2542 objectName="label_emailAddress_0.0")
2543 self.assertThat(email_label_1.text,
2544 Eventually(Equals("fulano@internet.com.br")))
2545@@ -146,7 +146,7 @@
2546
2547 # check if the email list is empty
2548 view_page = self.app.main_window.get_contact_view_page()
2549- emails_group = view_page.select_single(
2550+ emails_group = self.main_window.select_single(
2551 "ContactDetailGroupWithTypeView",
2552 objectName="emails")
2553 self.assertThat(emails_group.detailsCount, Eventually(Equals(0)))
2554@@ -168,7 +168,7 @@
2555
2556 # check if is possible to save a contact without name
2557 self.app.main_window.save()
2558- accept_button = self.app.main_window.get_button("save")
2559+ accept_button = self.app.main_window.get_action("save")
2560 self.assertThat(accept_button.enabled, Eventually(Equals(False)))
2561
2562 # Cancel edit
2563@@ -213,6 +213,6 @@
2564
2565 # check if the type was saved correct
2566 im_type = view_page.select_single(
2567- "Label",
2568+ "UCLabel",
2569 objectName="type_onlineAccount_0")
2570 self.assertThat(im_type.text, Eventually(Equals("Aim")))
2571
2572=== modified file 'tests/qml/tst_ContactAvatar.qml'
2573--- tests/qml/tst_ContactAvatar.qml 2014-07-08 14:20:01 +0000
2574+++ tests/qml/tst_ContactAvatar.qml 2015-10-26 13:18:18 +0000
2575@@ -14,7 +14,7 @@
2576 * along with this program. If not, see <http://www.gnu.org/licenses/>.
2577 */
2578
2579-import QtQuick 2.2
2580+import QtQuick 2.4
2581 import QtContacts 5.0
2582 import QtTest 1.0
2583 import Ubuntu.Test 0.1
2584
2585=== modified file 'tests/qml/tst_ContactEditor.qml'
2586--- tests/qml/tst_ContactEditor.qml 2015-10-26 13:18:17 +0000
2587+++ tests/qml/tst_ContactEditor.qml 2015-10-26 13:18:18 +0000
2588@@ -14,7 +14,7 @@
2589 * along with this program. If not, see <http://www.gnu.org/licenses/>.
2590 */
2591
2592-import QtQuick 2.2
2593+import QtQuick 2.4
2594 import QtTest 1.0
2595 import Ubuntu.Components 1.3
2596 import Ubuntu.Test 0.1
2597
2598=== modified file 'tests/qml/tst_ContactList.qml'
2599--- tests/qml/tst_ContactList.qml 2015-10-26 13:18:17 +0000
2600+++ tests/qml/tst_ContactList.qml 2015-10-26 13:18:18 +0000
2601@@ -14,7 +14,7 @@
2602 * along with this program. If not, see <http://www.gnu.org/licenses/>.
2603 */
2604
2605-import QtQuick 2.2
2606+import QtQuick 2.4
2607 import QtTest 1.0
2608 import Ubuntu.Components 1.3
2609 import Ubuntu.Test 0.1
2610
2611=== modified file 'tests/qml/tst_ContactListModel.qml'
2612--- tests/qml/tst_ContactListModel.qml 2015-10-26 13:18:17 +0000
2613+++ tests/qml/tst_ContactListModel.qml 2015-10-26 13:18:18 +0000
2614@@ -14,7 +14,7 @@
2615 * along with this program. If not, see <http://www.gnu.org/licenses/>.
2616 */
2617
2618-import QtQuick 2.2
2619+import QtQuick 2.4
2620 import QtTest 1.0
2621 import Ubuntu.Components 1.3
2622 import Ubuntu.Test 0.1
2623
2624=== modified file 'tests/qml/tst_ContactListView.qml'
2625--- tests/qml/tst_ContactListView.qml 2015-10-26 13:18:17 +0000
2626+++ tests/qml/tst_ContactListView.qml 2015-10-26 13:18:18 +0000
2627@@ -14,7 +14,7 @@
2628 * along with this program. If not, see <http://www.gnu.org/licenses/>.
2629 */
2630
2631-import QtQuick 2.2
2632+import QtQuick 2.4
2633 import QtTest 1.0
2634 import Ubuntu.Components 1.3
2635 import Ubuntu.Test 0.1
2636
2637=== modified file 'tests/qml/tst_ContactPreviewPage.qml'
2638--- tests/qml/tst_ContactPreviewPage.qml 2015-10-26 13:18:17 +0000
2639+++ tests/qml/tst_ContactPreviewPage.qml 2015-10-26 13:18:18 +0000
2640@@ -14,7 +14,7 @@
2641 * along with this program. If not, see <http://www.gnu.org/licenses/>.
2642 */
2643
2644-import QtQuick 2.2
2645+import QtQuick 2.4
2646 import QtTest 1.0
2647 import Ubuntu.Test 0.1
2648 import QtContacts 5.0
2649
2650=== modified file 'tests/qml/tst_ListWithActions.qml'
2651--- tests/qml/tst_ListWithActions.qml 2015-10-26 13:18:17 +0000
2652+++ tests/qml/tst_ListWithActions.qml 2015-10-26 13:18:18 +0000
2653@@ -14,7 +14,7 @@
2654 * along with this program. If not, see <http://www.gnu.org/licenses/>.
2655 */
2656
2657-import QtQuick 2.2
2658+import QtQuick 2.4
2659 import Ubuntu.Components 1.3
2660 import QtTest 1.0
2661 import Ubuntu.Test 0.1
2662
2663=== modified file 'tests/qml/tst_UbuntuContacts.qml'
2664--- tests/qml/tst_UbuntuContacts.qml 2015-06-29 15:02:45 +0000
2665+++ tests/qml/tst_UbuntuContacts.qml 2015-10-26 13:18:18 +0000
2666@@ -14,7 +14,7 @@
2667 * along with this program. If not, see <http://www.gnu.org/licenses/>.
2668 */
2669
2670-import QtQuick 2.2
2671+import QtQuick 2.4
2672 import QtTest 1.0
2673 import Ubuntu.Contacts 0.1
2674
2675
2676=== modified file 'tests/qml/tst_VCardParser.qml'
2677--- tests/qml/tst_VCardParser.qml 2014-08-13 20:52:57 +0000
2678+++ tests/qml/tst_VCardParser.qml 2015-10-26 13:18:18 +0000
2679@@ -14,7 +14,7 @@
2680 * along with this program. If not, see <http://www.gnu.org/licenses/>.
2681 */
2682
2683-import QtQuick 2.2
2684+import QtQuick 2.4
2685 import QtTest 1.0
2686 import Ubuntu.Test 0.1
2687 import QtContacts 5.0

Subscribers

People subscribed via source and target branches