Merge lp:~michael-sheldon/content-hub/peer-picker-updates into lp:content-hub

Proposed by Michael Sheldon
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
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.

To post a comment you must log in.
Revision history for this message
Michael Sheldon (michael-sheldon) wrote :

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

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
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?

review: Needs Information
126. By Michael Sheldon

Separate new ContentPeerPicker into new QML API version and duplicate existing 0.1 elements as 1.0

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
127. By Michael Sheldon

Fix documentation for separate versions of ContentPeerPicker

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
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.

review: Needs Fixing
Revision history for this message
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).

Revision history for this message
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-ubuntu-content0.1:
 address-book-app
 unity-webapps-qml
 ubuntu-system-settings

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.

Revision history for this message
Ken VanDine (ken-vandine) wrote :

This looks good, but lets land this along with:
https://code.launchpad.net/~ken-vandine/content-hub/api_v1/+merge/227948

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
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

Subscribers

People subscribed via source and target branches