1 Content Management & Exchange {#mainpage}
2 =============================
4 Unity and the overall Ubuntu experience put heavy emphasis on the
5 notion of content, with Unity’s dash offering streamlined access to
6 arbitrary content, both local to the device or online. More to
this,
7 Unity’s dash is the primary way of surfacing content on mobile form
8 factors without the need to access individual applications and their
9 respective content silos. The content-hub deals with
10 application-specific content management and implements an architecture
11 that allows an
app to define its own content silo, exchange content
12 with other applications/the
system, and a way to provide the
user with
13 content picking functionality.
15 To ease conversations, we start over with a set of definitions:
17 - Content item: A content item is an entity that consists of meta-data
18 and data. E.g., an image is a content item, where the actual pixels
19 are the data, and information like size, image format, bit depth,
22 - Content types: A set of well-known content types. E.g., images or
25 - Content set: A set of unique content items. Can be considered a
26 content item itself, e.g., in the
case of playlists.
28 - Content owner: The unique owner of a content item. A content item
31 - Content store: A container (think of it as a top-level folder in
32 the filesystem) that contains content items of a certain
33 type. Different stores exist
for different scopes, where scope
34 refers to either
system-wide,
user-wide or
app-specific storage
37 - Content transfer: Transferring content item/s to and from a source
38 or destination. A transfer is uniquely defined by:
40 * The content destination
41 * The transfer direction, either
import or export
42 * The set of items that should be exchanged
45 - Content picking: Operation that allows a
user to select content
for
46 subsequent
import from a content source (e.g., an application). The
47 content source is responsible
for providing a UI to the
user.
49 Architectural Overview
50 ----------------------
52 The architecture enforces complete application isolation, both in
53 terms of content separation, sandboxing/confinement and in terms of
54 the application lifecycle. As we cannot assume that two apps that want
55 to exchange content are running at the same time, a
system-level
56 component needs to mediate and control the content exchange operation,
57 making sure that neither
app instance assumes the existence of the
60 Example usage - Importing Pictures
61 ----------------------------------
63 \snippet acceptance-tests/app_hub_communication_transfer.cpp Importing pictures