Merge lp:~michael-sheldon/content-hub/peer-picker-updates into lp:content-hub
- peer-picker-updates
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | Ken VanDine |
Approved revision: | 127 |
Merged at revision: | 127 |
Proposed branch: | lp:~michael-sheldon/content-hub/peer-picker-updates |
Merge into: | lp:content-hub |
Diff against target: |
596 lines (+400/-90) 7 files modified
doc/qml/pages/mainpage.qdoc (+3/-3) doc/qml/pages/moduledef.qdoc (+1/-1) import/Ubuntu/Content/ContentPeerPicker.qdoc (+82/-0) import/Ubuntu/Content/ContentPeerPicker10.qml (+261/-0) import/Ubuntu/Content/ContentPeerPicker11.qml (+24/-73) import/Ubuntu/Content/contenthubplugin.cpp (+20/-12) import/Ubuntu/Content/qmldir (+9/-1) |
To merge this branch: | bzr merge lp:~michael-sheldon/content-hub/peer-picker-updates |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Ken VanDine | Approve | ||
PS Jenkins bot | continuous-integration | Approve | |
Review via email: mp+227551@code.launchpad.net |
Commit message
Make the ContentPeerPicker's header text customisable and replace the bottom cancel button with new header style cancel.
Description of the change
Make the ContentPeerPicker's header text customisable and replace the bottom cancel button with new header style cancel.
Michael Sheldon (michael-sheldon) wrote : | # |
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:125
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Ken VanDine (ken-vandine) wrote : | # |
This change includes bumping the Ubuntu.Components import version to 1.1, is that available in the 14.04 framework?
- 126. By Michael Sheldon
-
Separate new ContentPeerPicker into new QML API version and duplicate existing 0.1 elements as 1.0
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:126
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 127. By Michael Sheldon
-
Fix documentation for separate versions of ContentPeerPicker
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:127
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Ken VanDine (ken-vandine) wrote : | # |
This looks good with the API bump, I tested all the versions with my example apps and they all work as expected.
However, our plugin package is versioned 0.1, I guess that needs to be changed to 1.1. I also noticed even though our plugin package is versioned so it can be parallel installable, it isn't installed in a versioned directory.
Michael Sheldon (michael-sheldon) wrote : | # |
I'm not entirely sure we want to have separate packages for the different versions as the way the QML versioning works means that the one package contains both versions of the API, with the files used for each controlled by the qmldir file (and by the C++ version registration).
Ken VanDine (ken-vandine) wrote : | # |
> I'm not entirely sure we want to have separate packages for the different
> versions as the way the QML versioning works means that the one package
> contains both versions of the API, with the files used for each controlled by
> the qmldir file (and by the C++ version registration).
Yeah, in this case from a functional point of view it all works fine, the package name is just useful for package depends (not for click). So if your app import Ubuntu.Content 1.1 you would need to have that package installed. As for keeping them around and parallel installable, it'll be much more useful when we transition to say a 2.0 API version which might not be backwards compatible and we stop carrying old versions. This way the old module can be installed as well.
We currently have 3 packages depending on qtdeclarative5-
address-book-app
unity-webapps-qml
ubuntu-
This can land without actually breaking apps, which is great but there isn't a clear way for any of those apps depending on package versions ensure that 1.1 is installed. And folks would likely assume content0.1 provides that API versions. However, changing that to content1.1 doesn't make it clear that it also provides 0.1, so no silver bullet there.
Ken VanDine (ken-vandine) wrote : | # |
This looks good, but lets land this along with:
https:/
Preview Diff
1 | === modified file 'doc/qml/pages/mainpage.qdoc' |
2 | --- doc/qml/pages/mainpage.qdoc 2014-04-02 12:00:25 +0000 |
3 | +++ doc/qml/pages/mainpage.qdoc 2014-07-22 08:44:26 +0000 |
4 | @@ -67,8 +67,8 @@ |
5 | |
6 | \qml |
7 | import QtQuick 2.0 |
8 | -import Ubuntu.Components 0.1 |
9 | -import Ubuntu.Content 0.1 |
10 | +import Ubuntu.Components 1.1 |
11 | +import Ubuntu.Content 1.1 |
12 | |
13 | Rectangle { |
14 | id: root |
15 | @@ -140,7 +140,7 @@ |
16 | \part Components |
17 | Available through: |
18 | \code |
19 | - import Ubuntu.Content 0.1 |
20 | + import Ubuntu.Content 1.1 |
21 | \endcode |
22 | |
23 | */ |
24 | |
25 | === modified file 'doc/qml/pages/moduledef.qdoc' |
26 | --- doc/qml/pages/moduledef.qdoc 2014-04-02 12:18:01 +0000 |
27 | +++ doc/qml/pages/moduledef.qdoc 2014-07-22 08:44:26 +0000 |
28 | @@ -1,3 +1,3 @@ |
29 | /*! |
30 | - \qmlmodule Ubuntu.Content 0.1 |
31 | + \qmlmodule Ubuntu.Content 1.1 |
32 | */ |
33 | |
34 | === added file 'import/Ubuntu/Content/ContentPeerPicker.qdoc' |
35 | --- import/Ubuntu/Content/ContentPeerPicker.qdoc 1970-01-01 00:00:00 +0000 |
36 | +++ import/Ubuntu/Content/ContentPeerPicker.qdoc 2014-07-22 08:44:26 +0000 |
37 | @@ -0,0 +1,82 @@ |
38 | +/* |
39 | + * Copyright 2014 Canonical Ltd. |
40 | + * |
41 | + * This program is free software; you can redistribute it and/or modify |
42 | + * it under the terms of the GNU Lesser General Public License as published by |
43 | + * the Free Software Foundation; version 3. |
44 | + * |
45 | + * This program is distributed in the hope that it will be useful, |
46 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
47 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
48 | + * GNU Lesser General Public License for more details. |
49 | + * |
50 | + * You should have received a copy of the GNU Lesser General Public License |
51 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
52 | + */ |
53 | + |
54 | +/*! |
55 | + \qmltype ContentPeerPicker |
56 | + \inqmlmodule Ubuntu.Content |
57 | + \brief Component that allows users to select a source/destination for content transfer |
58 | + |
59 | + This component displays a list of applications, devices and services which |
60 | + are appropriate for transferring a given content type with. |
61 | +*/ |
62 | + |
63 | +/*! |
64 | + \qmlproperty ContentHandler ContentPeerPicker::handler |
65 | + \brief The ContentHandler to use when finding peers. |
66 | +*/ |
67 | + |
68 | +/*! |
69 | + \qmlproperty ContentType ContentPeerPicker::contentType |
70 | + \brief The ContentType to use when finding peers. |
71 | +*/ |
72 | + |
73 | +/*! |
74 | + \qmlproperty bool ContentPeerPicker::showTitle |
75 | + \brief Determines whether the header should be displayed. |
76 | + |
77 | + This makes it possible to hide the header, which can be useful |
78 | + if embedding the picker within another page or popup. |
79 | +*/ |
80 | + |
81 | +/*! |
82 | + \qmlproperty ContentPeer ContentPeerPicker::peer |
83 | + \brief The peer selected by the user. |
84 | + |
85 | + Once the peerSelected signal has been sent, this provides the |
86 | + ContentPeer which the user has selected. |
87 | +*/ |
88 | + |
89 | +/*! |
90 | + \qmlproperty Loader ContentPeerPicker::customerPeerModelLoader |
91 | + \brief A Loader containing a ContentPeerModel. |
92 | + |
93 | + This can optionally be used to provide a pre-populated ContentPeerModel |
94 | + to this ContentPeerPicker. |
95 | +*/ |
96 | + |
97 | +/*! |
98 | + \qmlproperty string ContentPeerPicker::headerText |
99 | + \brief Text to display in the header. |
100 | +*/ |
101 | + |
102 | +/*! |
103 | + \qmlsignal ContentPeerPicker::peerSelected |
104 | + \brief Emitted when a user selects a peer. |
105 | + |
106 | + Once this signal has been emitted the selected peer can be accessed via |
107 | + the peer property. |
108 | + \c onPeerSelected |
109 | +*/ |
110 | + |
111 | +/*! |
112 | + \qmlsignal ContentPeerPicker::cancelPressed |
113 | + \brief Emitted when the user clicks the cancel button. |
114 | + |
115 | + The ContentPeerPicker will be hidden automatically when the user cancels |
116 | + the operations and the active ContentTransfer will be set to Aborted. |
117 | + \c onCancelPressed |
118 | +*/ |
119 | + |
120 | |
121 | === added file 'import/Ubuntu/Content/ContentPeerPicker10.qml' |
122 | --- import/Ubuntu/Content/ContentPeerPicker10.qml 1970-01-01 00:00:00 +0000 |
123 | +++ import/Ubuntu/Content/ContentPeerPicker10.qml 2014-07-22 08:44:26 +0000 |
124 | @@ -0,0 +1,261 @@ |
125 | +/* |
126 | + * Copyright 2013 Canonical Ltd. |
127 | + * |
128 | + * This program is free software; you can redistribute it and/or modify |
129 | + * it under the terms of the GNU Lesser General Public License as published by |
130 | + * the Free Software Foundation; version 3. |
131 | + * |
132 | + * This program is distributed in the hope that it will be useful, |
133 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
134 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
135 | + * GNU Lesser General Public License for more details. |
136 | + * |
137 | + * You should have received a copy of the GNU Lesser General Public License |
138 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
139 | + */ |
140 | + |
141 | +import QtQuick 2.0 |
142 | +import Ubuntu.Components 0.1 |
143 | +import Ubuntu.Components.Popups 0.1 |
144 | +import Ubuntu.Components.ListItems 0.1 as ListItem |
145 | +import Ubuntu.Content 0.1 |
146 | + |
147 | +/*! |
148 | + \internal |
149 | + Documentation is in ContentPeerPicker.qdoc |
150 | +*/ |
151 | +Item { |
152 | + id: root |
153 | + anchors.fill: parent |
154 | + |
155 | + property var handler |
156 | + property var contentType |
157 | + property alias showTitle: header.visible |
158 | + property var peer |
159 | + property var customPeerModelLoader |
160 | + property var completed: false |
161 | + |
162 | + signal peerSelected |
163 | + signal cancelPressed |
164 | + |
165 | + Rectangle { |
166 | + anchors.fill: parent |
167 | + color: Theme.palette.normal.overlay |
168 | + } |
169 | + |
170 | + Header { |
171 | + id: header |
172 | + title: (handler === ContentHandler.Source) ? i18n.tr("Choose from") : (handler === ContentHandler.Destination ? i18n.tr("Open with") : i18n.tr("Share to")) |
173 | + } |
174 | + |
175 | + Loader { |
176 | + id: peerModelLoader |
177 | + active: false |
178 | + sourceComponent: ContentPeerModel { } |
179 | + onLoaded: { |
180 | + item.handler = root.handler; |
181 | + item.contentType = root.contentType; |
182 | + } |
183 | + } |
184 | + |
185 | + Component.onCompleted: { |
186 | + if (root.visible) { |
187 | + if (customPeerModelLoader) { |
188 | + customPeerModelLoader.active = true; |
189 | + } else { |
190 | + peerModelLoader.active = true; |
191 | + } |
192 | + } |
193 | + completed = true; |
194 | + } |
195 | + |
196 | + onVisibleChanged: { |
197 | + if (completed) { |
198 | + if (customPeerModelLoader) { |
199 | + customPeerModelLoader.active = true; |
200 | + } else { |
201 | + peerModelLoader.active = true; |
202 | + } |
203 | + } |
204 | + } |
205 | + |
206 | + onHandlerChanged: { |
207 | + if (!customPeerModelLoader && peerModelLoader.item) { |
208 | + appPeers.model = undefined; // Clear grid view |
209 | + peerModelLoader.item.handler = root.handler; |
210 | + appPeers.model = peerModelLoader.item.peers; |
211 | + } |
212 | + } |
213 | + |
214 | + onContentTypeChanged: { |
215 | + if (!customPeerModelLoader && peerModelLoader.item) { |
216 | + appPeers.model = undefined; // Clear grid view |
217 | + peerModelLoader.item.contentType = root.contentType; |
218 | + appPeers.model = peerModelLoader.item.peers; |
219 | + } |
220 | + } |
221 | + |
222 | + Component { |
223 | + id: peerDelegate |
224 | + Item { |
225 | + width: units.gu(13.5) |
226 | + height: units.gu(16) |
227 | + AbstractButton { |
228 | + width: parent.width |
229 | + height: icon.height + label.height |
230 | + UbuntuShape { |
231 | + id: icon |
232 | + anchors { |
233 | + top: parent.top |
234 | + horizontalCenter: parent.horizontalCenter |
235 | + } |
236 | + radius: "medium" |
237 | + width: units.gu(8) |
238 | + height: units.gu(7.5) |
239 | + image: Image { |
240 | + id: image |
241 | + objectName: "image" |
242 | + sourceSize { width: icon.width; height: icon.height } |
243 | + asynchronous: true |
244 | + cache: false |
245 | + source: "image://content-hub/" + modelData.appId |
246 | + horizontalAlignment: Image.AlignHCenter |
247 | + verticalAlignment: Image.AlignVCenter |
248 | + } |
249 | + } |
250 | + |
251 | + Label { |
252 | + id: label |
253 | + objectName: "label" |
254 | + anchors { |
255 | + baseline: icon.bottom |
256 | + baselineOffset: units.gu(2) |
257 | + left: parent.left |
258 | + right: parent.right |
259 | + leftMargin: units.gu(1) |
260 | + rightMargin: units.gu(1) |
261 | + } |
262 | + |
263 | + opacity: 0.9 |
264 | + fontSize: "small" |
265 | + elide: Text.ElideMiddle |
266 | + horizontalAlignment: Text.AlignHCenter |
267 | + text: modelData.name || modelData.appId |
268 | + } |
269 | + |
270 | + onClicked: { |
271 | + peer = modelData |
272 | + peerSelected() |
273 | + } |
274 | + } |
275 | + |
276 | + } |
277 | + } |
278 | + |
279 | + ListItem.Header { |
280 | + id: appTitle |
281 | + anchors.top: header.visible ? header.bottom : parent.top |
282 | + text: i18n.tr("Apps") |
283 | + } |
284 | + |
285 | + Rectangle { |
286 | + id: apps |
287 | + color: "#FFFFFF" |
288 | + clip: true |
289 | + anchors { |
290 | + left: parent.left |
291 | + right: parent.right |
292 | + top: appTitle.bottom |
293 | + bottom: devTitle.visible ? devTitle.top : cancelButton.top |
294 | + bottomMargin: units.gu(1) |
295 | + } |
296 | + |
297 | + Flickable { |
298 | + anchors.fill: parent |
299 | + |
300 | + ResponsiveGridView { |
301 | + id: appPeers |
302 | + anchors.fill: parent |
303 | + minimumHorizontalSpacing: units.gu(0.5) |
304 | + maximumNumberOfColumns: 6 |
305 | + delegateWidth: units.gu(11) |
306 | + delegateHeight: units.gu(9.5) |
307 | + verticalSpacing: units.gu(2) |
308 | + model: customPeerModelLoader ? customPeerModelLoader.item.peers : peerModelLoader.item.peers |
309 | + delegate: peerDelegate |
310 | + |
311 | + Label { |
312 | + anchors.top: parent.top |
313 | + anchors.topMargin: units.gu(2.5) |
314 | + anchors.horizontalCenter: parent.horizontalCenter |
315 | + width: parent.width - units.gu(5) |
316 | + wrapMode: Text.WordWrap |
317 | + horizontalAlignment: Text.AlignHCenter |
318 | + text: root.handler === ContentHandler.Source ? i18n.tr("Sorry, there aren't currently any apps installed that can provide this type of content.") : i18n.tr("Sorry, there aren't currently any apps installed that can handle this type of content.") |
319 | + visible: appPeers.model ? appPeers.model.length == 0 : false |
320 | + } |
321 | + } |
322 | + } |
323 | + } |
324 | + |
325 | + ListItem.Header { |
326 | + id: devTitle |
327 | + // TODO: make this visible when we have a way to populate devices |
328 | + visible: false |
329 | + anchors { |
330 | + left: parent.left |
331 | + right: parent.right |
332 | + top: apps.bottom |
333 | + } |
334 | + text: i18n.tr("Devices") |
335 | + } |
336 | + |
337 | + Rectangle { |
338 | + id: devices |
339 | + // TODO: make this visible when we have a way to populate devices |
340 | + visible: false |
341 | + color: "#FFFFFF" |
342 | + width: parent.width |
343 | + radius: 0 |
344 | + anchors { |
345 | + left: parent.left |
346 | + right: parent.right |
347 | + top: devTitle.bottom |
348 | + bottom: cancelButton.top |
349 | + bottomMargin: units.gu(1) |
350 | + } |
351 | + |
352 | + Flickable { |
353 | + anchors.fill: parent |
354 | + |
355 | + ResponsiveGridView { |
356 | + id: devPeers |
357 | + anchors.fill: parent |
358 | + minimumHorizontalSpacing: units.gu(0.5) |
359 | + maximumNumberOfColumns: 6 |
360 | + delegateWidth: units.gu(11) |
361 | + delegateHeight: units.gu(9.5) |
362 | + verticalSpacing: units.gu(2) |
363 | + delegate: peerDelegate |
364 | + } |
365 | + } |
366 | + } |
367 | + |
368 | + Button { |
369 | + id: cancelButton |
370 | + objectName: "contentPeerPickerCancelButton" |
371 | + text: i18n.tr("Cancel") |
372 | + anchors { |
373 | + left: parent.left |
374 | + bottom: parent.bottom |
375 | + margins: units.gu(1) |
376 | + } |
377 | + onClicked: { |
378 | + if(root.activeTransfer) { |
379 | + root.activeTransfer.state = ContentTransfer.Aborted; |
380 | + } |
381 | + cancelPressed(); |
382 | + } |
383 | + } |
384 | + |
385 | +} |
386 | |
387 | === renamed file 'import/Ubuntu/Content/ContentPeerPicker.qml' => 'import/Ubuntu/Content/ContentPeerPicker11.qml' |
388 | --- import/Ubuntu/Content/ContentPeerPicker.qml 2014-07-09 13:03:19 +0000 |
389 | +++ import/Ubuntu/Content/ContentPeerPicker11.qml 2014-07-22 08:44:26 +0000 |
390 | @@ -15,76 +15,28 @@ |
391 | */ |
392 | |
393 | import QtQuick 2.0 |
394 | -import Ubuntu.Components 0.1 |
395 | +import Ubuntu.Components 1.1 |
396 | import Ubuntu.Components.Popups 0.1 |
397 | import Ubuntu.Components.ListItems 0.1 as ListItem |
398 | -import Ubuntu.Content 0.1 |
399 | +import Ubuntu.Content 1.1 |
400 | |
401 | /*! |
402 | - \qmltype ContentPeerPicker |
403 | - \inqmlmodule Ubuntu.Content |
404 | - \brief Component that allows users to select a source/destination for content transfer |
405 | - |
406 | - This component displays a list of applications, devices and services which |
407 | - are appropriate for transferring a given content type with. |
408 | + \internal |
409 | + Documentation is in ContentPeerPicker.qdoc |
410 | */ |
411 | Item { |
412 | id: root |
413 | anchors.fill: parent |
414 | |
415 | - /*! |
416 | - \qmlproperty ContentHandler handler |
417 | - \brief The ContentHandler to use when finding peers. |
418 | - */ |
419 | property var handler |
420 | - |
421 | - /*! \qmlproperty ContentType contentType |
422 | - \brief The ContentType to use when finding peers. |
423 | - */ |
424 | property var contentType |
425 | - |
426 | - /*! \qmlproperty bool showTitle |
427 | - \brief Determines whether the header should be displayed. |
428 | - |
429 | - This makes it possible to hide the header, which can be useful |
430 | - if embedding the picker within another page or popup. |
431 | - */ |
432 | property alias showTitle: header.visible |
433 | - |
434 | - /*! \qmlproperty ContentPeer peer |
435 | - \brief The peer selected by the user. |
436 | - |
437 | - Once the peerSelected signal has been sent, this provides the |
438 | - ContentPeer which the user has selected. |
439 | - */ |
440 | property var peer |
441 | - |
442 | - /*! \qmlproperty Loader customerPeerModelLoader |
443 | - \brief A Loader containing a ContentPeerModel. |
444 | - |
445 | - This can optionally be used to provide a pre-populated ContentPeerModel |
446 | - to this ContentPeerPicker. |
447 | - */ |
448 | property var customPeerModelLoader |
449 | - |
450 | + property string headerText |
451 | property var completed: false |
452 | |
453 | - /*! \qmlsignal peerSelected |
454 | - \brief Emitted when a user selects a peer. |
455 | - |
456 | - Once this signal has been emitted the selected peer can be accessed via |
457 | - the peer property. |
458 | - \c onPeerSelected |
459 | - */ |
460 | signal peerSelected |
461 | - |
462 | - /*! \qmlsignal cancelPressed |
463 | - \brief Emitted when the user clicks the cancel button. |
464 | - |
465 | - The ContentPeerPicker will be hidden automatically when the user cancels |
466 | - the operations and the active ContentTransfer will be set to Aborted. |
467 | - \c onCancelPressed |
468 | - */ |
469 | signal cancelPressed |
470 | |
471 | Rectangle { |
472 | @@ -94,7 +46,23 @@ |
473 | |
474 | Header { |
475 | id: header |
476 | - title: (handler === ContentHandler.Source) ? i18n.tr("Choose from") : (handler === ContentHandler.Destination ? i18n.tr("Open with") : i18n.tr("Share to")) |
477 | + title: headerText ? headerText : (handler === ContentHandler.Source) ? i18n.tr("Choose from") : (handler === ContentHandler.Destination ? i18n.tr("Open with") : i18n.tr("Share to")) |
478 | + useDeprecatedToolbar: false |
479 | + config: PageHeadConfiguration { |
480 | + backAction: Action { |
481 | + objectName: "cancel" |
482 | + |
483 | + iconName: "close" |
484 | + text: i18n.tr("Cancel") |
485 | + onTriggered: { |
486 | + if(root.activeTransfer) { |
487 | + root.activeTransfer.state = ContentTransfer.Aborted; |
488 | + } |
489 | + cancelPressed() |
490 | + } |
491 | + |
492 | + } |
493 | + } |
494 | } |
495 | |
496 | Loader { |
497 | @@ -215,7 +183,7 @@ |
498 | left: parent.left |
499 | right: parent.right |
500 | top: appTitle.bottom |
501 | - bottom: devTitle.visible ? devTitle.top : cancelButton.top |
502 | + bottom: devTitle.visible ? devTitle.top : parent.bottom |
503 | bottomMargin: units.gu(1) |
504 | } |
505 | |
506 | @@ -270,7 +238,7 @@ |
507 | left: parent.left |
508 | right: parent.right |
509 | top: devTitle.bottom |
510 | - bottom: cancelButton.top |
511 | + bottom: parent.bottom |
512 | bottomMargin: units.gu(1) |
513 | } |
514 | |
515 | @@ -290,21 +258,4 @@ |
516 | } |
517 | } |
518 | |
519 | - Button { |
520 | - id: cancelButton |
521 | - objectName: "contentPeerPickerCancelButton" |
522 | - text: i18n.tr("Cancel") |
523 | - anchors { |
524 | - left: parent.left |
525 | - bottom: parent.bottom |
526 | - margins: units.gu(1) |
527 | - } |
528 | - onClicked: { |
529 | - if(root.activeTransfer) { |
530 | - root.activeTransfer.state = ContentTransfer.Aborted; |
531 | - } |
532 | - cancelPressed(); |
533 | - } |
534 | - } |
535 | - |
536 | } |
537 | |
538 | === modified file 'import/Ubuntu/Content/contenthubplugin.cpp' |
539 | --- import/Ubuntu/Content/contenthubplugin.cpp 2014-07-04 13:09:29 +0000 |
540 | +++ import/Ubuntu/Content/contenthubplugin.cpp 2014-07-22 08:44:26 +0000 |
541 | @@ -66,16 +66,24 @@ |
542 | TRACE() << Q_FUNC_INFO; |
543 | Q_ASSERT(uri == QLatin1String("Ubuntu.Content")); |
544 | |
545 | - const int versionMajor = 0; |
546 | - const int versionMinor = 1; |
547 | - |
548 | - qmlRegisterUncreatableType<ContentHandler>(uri, versionMajor, versionMinor, "ContentHandler", "Not creatable as an object, use only to retrieve handler enums (e.g. ContentHandler.Source)"); |
549 | - qmlRegisterSingletonType<ContentHub>(uri, versionMajor, versionMinor, "ContentHub", qml_content_hub); |
550 | - qmlRegisterType<ContentItem>(uri, versionMajor, versionMinor, "ContentItem"); |
551 | - qmlRegisterType<ContentPeer>(uri, versionMajor, versionMinor, "ContentPeer"); |
552 | - qmlRegisterType<ContentPeerModel>(uri, versionMajor, versionMinor, "ContentPeerModel"); |
553 | - qmlRegisterType<ContentScope>(uri, versionMajor, versionMinor, "ContentScope"); |
554 | - qmlRegisterType<ContentStore>(uri, versionMajor, versionMinor, "ContentStore"); |
555 | - qmlRegisterUncreatableType<ContentTransfer>(uri, versionMajor, versionMinor, "ContentTransfer", "created by hub"); |
556 | - qmlRegisterUncreatableType<ContentType>(uri, versionMajor, versionMinor, "ContentType", "Use only the type"); |
557 | + QVector<QPair<int, int>> versions; |
558 | + versions.append(QPair<int, int>(0, 1)); |
559 | + versions.append(QPair<int, int>(1, 0)); |
560 | + versions.append(QPair<int, int>(1, 1)); |
561 | + |
562 | + // Register common types for version 0.1, 1.0 and 1.1 |
563 | + for(int i = 0; i < versions.length(); i++) { |
564 | + int versionMajor = versions[i].first; |
565 | + int versionMinor = versions[i].second; |
566 | + |
567 | + qmlRegisterUncreatableType<ContentHandler>(uri, versionMajor, versionMinor, "ContentHandler", "Not creatable as an object, use only to retrieve handler enums (e.g. ContentHandler.Source)"); |
568 | + qmlRegisterSingletonType<ContentHub>(uri, versionMajor, versionMinor, "ContentHub", qml_content_hub); |
569 | + qmlRegisterType<ContentItem>(uri, versionMajor, versionMinor, "ContentItem"); |
570 | + qmlRegisterType<ContentPeer>(uri, versionMajor, versionMinor, "ContentPeer"); |
571 | + qmlRegisterType<ContentPeerModel>(uri, versionMajor, versionMinor, "ContentPeerModel"); |
572 | + qmlRegisterType<ContentScope>(uri, versionMajor, versionMinor, "ContentScope"); |
573 | + qmlRegisterType<ContentStore>(uri, versionMajor, versionMinor, "ContentStore"); |
574 | + qmlRegisterUncreatableType<ContentTransfer>(uri, versionMajor, versionMinor, "ContentTransfer", "created by hub"); |
575 | + qmlRegisterUncreatableType<ContentType>(uri, versionMajor, versionMinor, "ContentType", "Use only the type"); |
576 | + } |
577 | } |
578 | |
579 | === modified file 'import/Ubuntu/Content/qmldir' |
580 | --- import/Ubuntu/Content/qmldir 2014-02-26 15:51:06 +0000 |
581 | +++ import/Ubuntu/Content/qmldir 2014-07-22 08:44:26 +0000 |
582 | @@ -1,5 +1,13 @@ |
583 | module Ubuntu.Content |
584 | plugin ubuntu-content-hub-plugin |
585 | |
586 | +#0.1 |
587 | ContentTransferHint 0.1 ContentTransferHint.qml |
588 | -ContentPeerPicker 0.1 ContentPeerPicker.qml |
589 | +ContentPeerPicker 0.1 ContentPeerPicker10.qml |
590 | + |
591 | +#1.0 |
592 | +ContentTransferHint 1.0 ContentTransferHint.qml |
593 | +ContentPeerPicker 1.0 ContentPeerPicker10.qml |
594 | + |
595 | +#1.1 |
596 | +ContentPeerPicker 1.1 ContentPeerPicker11.qml |
Are there any related MPs required for this MP to build/function as expected? Please list.
* No
Is your branch in sync with latest trunk (e.g. bzr pull lp:trunk -> no changes)
* Yes
Did you perform an exploratory manual test run of your code change and any related functionality on device or emulator?
* Yes
Did you successfully run all tests found in your component's Test Plan (https:/ /wiki.ubuntu. com/Process/ Merges/ TestPlan/ content- hub) on device or emulator?
* Yes, however attaching contacts from the address-book currently fails due to https:/ /bugs.launchpad .net/address- book-app/ +bug/1346278
If you changed the UI, was the change specified/approved by design?
* Yes, change specified at UX sprint
If you changed the packaging (debian), did you add a core-dev as a reviewer to this MP?
* No change