SoftwareCenter

Differences between revisions 359 and 698 (spanning 339 versions)
Revision 359 as of 2010-03-29 13:17:54
Size: 130544
Editor: eth0
Comment: bug 532774: Current item appears unselected after re-expanding "Get Software"
Revision 698 as of 2019-04-28 16:57:10
Size: 157611
Editor: mpt
Comment: fix italics
Deletions are marked like this. Additions are marked like this.
Line 6: Line 6:
''This is a living specification for Ubuntu Software Center. '''Your feedback is welcome''' at [[SoftwareCenter/Comments]]. Ubuntu Software Center is a major part of Ubuntu’s overall [[SoftwareHandling|software handling]].''
Line 11: Line 9:
Ubuntu Software Center is a utility for installing and removing software in Ubuntu. In version 1, it builds on the basic philosophy of Add/Remove Applications with an easier-to-use design. In version 2, the primary feature goals are displaying non-application packages, and making PPAs and other repositories more prominent. In version 3, we plan to offer commercial software for sale, and allow ratings and reviews of software. Later versions may include recommendation features, replace other tools such as `apturl`, `gdebi`, APTonCD, and most of the Computer Janitor, and integrate with Update Manager. Integrating those various utilities will make handling software easier, socially improve security, hopefully free space on the Ubuntu CD, and provide a prominent showcase for Ubuntu and partner software. Ubuntu Software Center is implemented using Python, GTK, and [[https://launchpad.net/aptdaemon|Aptdaemon]], and may use Package``Kit for some components. The project is [[https://launchpad.net/software-center|hosted in Launchpad]].

<<Anchor(contributing)>>
== How you can help ==

We welcome useful contributions from anyone, regardless of age, gender, or experience.

If your expertise is in one of these areas, search through this specification for the color-coded sections relevant to you:
||<tablestyle="color:Black" style="background:LightGreen">Artists||<style="background:LightCoral">Copy-editors||<style="background:orange">GTK/Clutter hackers||<style="background:SkyBlue">Interface designers||<style="background:Plum">Librarians||<style="background:Peru">Packagers||

Otherwise, if you are a '''Python programmer''', [[https://code.launchpad.net/software-center|get the latest code]] and try [[https://bugs.launchpad.net/ubuntu/+source/software-center|fixing existing bugs]], or [[#future|implementing something for version 3.0]]. When you have something ready, [[https://help.launchpad.net/Code/Review|propose it for merging]].

If you are a '''tester''', look through this specification and compare the behavior described, sentence by sentence, to the behavior you see in [[https://code.launchpad.net/~software-store-developers/software-center/trunk|the trunk version]]. If something has been implemented but behaves differently from how the specification describes it, [[https://bugs.launchpad.net/ubuntu/+source/software-center|report a bug]] if it hasn’t been reported already.
Ubuntu Software Center is a utility for installing, purchasing, and removing software in Ubuntu, a major part of Ubuntu’s overall [[SoftwareHandling|software handling]]. This design specification describes, for designers, developers, testers, and potential contributors, how USC is supposed to work. The project is [[https://launchpad.net/software-center|open source]].
Line 29: Line 15:
In past versions of Ubuntu, there have been many graphical utilities promoted for installing and removing software. For installing and uninstalling graphical applications you could use “Add/Remove Applications“ or the more technical “Synaptic Package Manager”, though the former warned you to use the latter “for more complicated needs”. For installing and uninstalling other software, you had to use Synaptic. For installing updates, the usual route is Update Manager, but it instructs you to run Synaptic if it encounters conflicts. For configuring where all these utilities look for software, you use “Software Sources”. For installing official software via the Web, you use `apturl`. For installing downloaded `.deb` packages, you use `gdebi`. And for removing no-longer-needed software, you use Computer Janitor. This redundancy increases the amount of interface people have to learn, wastes space on the Ubuntu CD, and fragments development effort. Having multiple sanctioned graphical methods of installing software also makes people more likely to think that unsanctioned methods are just as safe, when they are not. Meanwhile, the descriptions of available software are often technical gibberish. And many software project and vendor Web sites either provide command-line installation instructions (dulling users to malicious terminal commands from other sources) or `.tar.gz` downloads that are difficult to install and near-impossible to update.

Instead, there should be one obvious mechanism for installing and removing software in Ubuntu, with a self-evident name and an interface anyone can use. There should be a coordinated system for developers and enthusiasts to improve the usefulness of descriptions and other metadata for software packages. And projects and vendors whose software is packaged for Ubuntu should be encouraged to provide links to their software’s presence in the Software Center, instead of command-line installation instructions.

||<tablestyle="background: #eee; color: #000; margin: 0 2em 1em;" style="padding: 0.5em 1em;">If Linux has an Achilles heel, from the point of view of a Windows user, it's installing new software. Be prepared to enter a new world in which Windows Update is a model of simplicity by comparison, and in which you may feel as if you need a Ph.D. in physics merely to install new applications or updates.<<BR>><<BR>>— Preston Gralla, “[[http://www.computerworld.com/action/article.do?command=viewArticleBasic&articleId=9126042&pageNumber=3|Living free with Linux: 2 weeks without Windows]]”, ''Computerworld''||

||<tablestyle="background: #eee; color: #000; margin: 0 2em 1em;" style="padding: 0.5em 1em;"> First there is the Add/Remove Applications program, which is designed to allow you to Add and Remove Applications. Second, there is the Synaptic Package Manager, which allows you to Manage Packages (in a manner that is uniquely synaptic, apparently) or Applications as some might call them, by allowing you to Add and Remove them. Finally there is Software Sources, which, if Wine’s installation instructions are any indication, provides Sources of Software, filling a glaring gap in Ubuntu Linux by allowing you to Add and Remove Applications.<<BR>><<BR>>— Ash Pringle, “[[http://www.zmogo.com/gear/the-new-year-linux-resolution-day-5/|The New Year Linux resolution: Day 5]]”, ''zMogo''||
Early versions of Ubuntu shipped many graphical utilities for installing and removing software: Add/Remove Applications, Synaptic Package Manager, Update Manager, Software Sources, apturl, GDebi, and Computer Janitor. This redundancy increased the amount of interface people had to learn, wasted space on the Ubuntu CD, fragmented development effort, and made people more likely to think that unsanctioned software installation methods were safe. Ubuntu Software Center replaces Add/Remove Applications, Synaptic, apturl, and GDebi, and acts as one of the main entry points to Software & Updates Settings.

Beyond providing a central point for installing and removing software, USC played a small but important part in encouraging [[http://developer.ubuntu.com/|application development on Ubuntu]], by providing application developers with a prominent way to offer their software for installation.
Line 38: Line 20:
== Ubuntu Software Center 2.0 ==

 * Packages affected: `aptdaemon`, `software-center`

=== Definitions used in this specification ===

<<Anchor(def-alert)>>
 alert:: A [[#def-dialog|dialog]] that emits the standard alert sound (if any) when it opens, and requests attention if it opens in the background.

<<Anchor(def-alphabetically)>>
 alphabetically:: Following the [[http://unicode.org/reports/tr10/|Unicode Collation Algorithm]] for the user’s locale. For example, in an English locale, “Déjà Dup Backup Utility” should be sorted alphabetically between “Debian Documentation Browser” and “Desk``Scribe”.

<<Anchor(def-dialog)>>
 dialog:: A window that is modal to its parent (if it has one), only ever minimizes together with its parent (if it has one), and does not have any buttons in its title bar (except Minimize if it has no parent).

<<Anchor(def-em)>>
 em:: The height of the Gnome application font setting. For example, if the current Gnome application font setting works out to be 12 pixels, then 3 em = 36 pixels.

<<Anchor(def-leading)>>
 leading:: Left whenever the system is using a left-to-right language. Right whenever the system is using a right-to-left language. (All mockups in this specification are of left-to-right layouts.)

<<Anchor(def-software-item)>>
 software item:: A package or an application. If `app-install-data` or an archive index refer to one and only one application in a package, the package itself should not be treated as a software item, because it is represented by the application instead. But if there are multiple applications in a package, or none at all, the package should be treated as a software item.

<<Anchor(def-trailing)>>
 trailing:: Right whenever the system is using a left-to-right language. Left whenever the system is using a right-to-left language.
Line 68: Line 23:
The program itself, as well as application launchers, help pages, and marketing materials, should consistently use the term “Ubuntu Software Center” (''not'' just “Software Center”). This name should be localized, for example as “Centre” in Commonwealth countries. It is not necessary to translate it word-for-word, but:
 * Translations should include the word “Ubuntu”, to reduce confusion about whether some software is available in ''Ubuntu'' Software Center, as opposed to being available in [[http://packages.qa.debian.org/s/software-center.html|Debian Software Center]] or any other OS using the Center code.
 * Translations should not use a word that means “applications” in particular rather than “software” in general, because as of version 2, the Center allows installation of non-application software such as fonts and themes.
The program itself, as well as application launchers, help pages, and marketing materials, should consistently follow these guidelines:
||<tablestyle="font-size:1.5em;" rowstyle="color:green" style="border:none">✔||<style="border:none;">Ubuntu Software Center||
||<rowstyle="color:red;" style="border:none">✘||<style="border:none">the Ubuntu Software Center||
||<rowstyle="color:red;" style="border:none">✘||<style="border:none">Software Center||
||<rowstyle="color:red;" style="border:none">✘||<style="border:none">the Software Center||

For example, you might say “'''Jazz``Writer, the hit note-taking app, has just arrived in Ubuntu Software Center.'''”

The name should be localized, for example as “Centre” in Commonwealth countries. It is not necessary to translate it word-for-word, but translations should (a) include the word “Ubuntu” (to reduce confusion with [[http://packages.qa.debian.org/s/software-center.html|Debian Software Center]] ''etc''), and (b) should not use a word that means “applications” in particular (because it also allows installation of non-application software such as add-ons, fonts, and themes).
Line 74: Line 35:
The application Comment should be “Lets you choose from thousands of free applications available for Ubuntu” (without a period), and the summary in the About window should be “Lets you choose from thousands of free applications available for Ubuntu.” (with a period).

The package Summary should be “Utility for browsing, installing, and removing applications” (without a period).
The application Comment should be “Lets you choose from thousands of applications available for Ubuntu” (without a period), and the summary in the About window should be “Lets you choose from thousands of applications available for Ubuntu.” (with a period). The package Summary should be “Utility for browsing, installing, and removing applications” (without a period).
Line 79: Line 38:
||Ubuntu Software Center lets you browse and install thousands of free applications and other software available for Ubuntu. You can view available software by category, or search quickly by name or description. You can also examine the software already installed, and remove items you no longer need.<<BR>><<BR>>To install or remove software using the Center, you need administrator access on the computer.|| ||Ubuntu Software Center lets you browse and install thousands of free and paid applications and other software available for Ubuntu. You can view available software by category, or search quickly by name or description. You can also examine the software already installed, and remove items you no longer need.<<BR>><<BR>>To install, purchase, or remove software using USC, you need administrator access on the computer.||
Line 84: Line 43:
||<:>1.''x''||<:>2.''x''||

The version shipped in Ubuntu 10.04 should be at least 2.0.
||<:>Versions 1~4||<:>Version 5+||
Line 90: Line 47:
If USC is launched by any means when it is already open, the existing instance should be focused.

==== Launching graphically ====
If USC is launched by any means when it is already open, the existing instance should be focused. Otherwise, the main window should open within five seconds on benchmark hardware, even if most of the UI is not ready yet, so that all controls need to be disabled.

||<style="border:none">{{attachment:launch-0.png}}||<style="border:none">→||<style="border:none">{{attachment:launch-1.png}}||<style="border:none">→||<style="border:none">{{attachment:launch-2.png}}||<style="border:none">→||<style="border:none">{{attachment:launch-3.png}}||

If USC isn’t ready after two seconds, a USC icon should appear centered in the window.

If, after two more seconds, the system has not finished generating an up-to-date package database in your current UI language, a progress bar should appear below the icon, showing the database generation (bug Bug:434601). If after two more seconds it still hasn’t finished, progress text should begin appearing below the progress bar: “Updating package database…” followed by the latest package name.

==== Directly ====

In Unity, Ubuntu Software Center should be a default item in the launcher.
Line 96: Line 61:
In Ubuntu Netbook Remix (`netbook-launcher`), “Ubuntu Software Center” should appear in the “System” > “Administration” subcategory.

''How do we specify performance requirements? Also need to specify progress feedback if launching is slow.''

When opened directly, the Center should by default display the [[#lobby|lobby screen]] of the “Get Software” section, scrolled to the top. The search field should be empty. Default focus should be on the [[#search-field|search field]] (so that you can start searching immediately, or use Down followed by other arrow keys to navigate the items in the lobby screen).

==== Launching from the command line ====

`software-center` should launch the Center to its default view. `software-center `''package-name'' should open the Center to display that package. ''What to do if the package is unknown?''
When opened directly, USC should by default display the [[#home|home screen]] of the “All Software” section, scrolled to the top. The search field should be empty. Default focus should be on the [[#search-field|search field]] (so that you can start searching immediately, or use Down followed by other arrow keys to navigate the items in the home screen).

<<Anchor(apturl)>>
==== From an apt: link ====

Opening an `apt:` URL should launch Ubuntu Software Center directly to the appropriate screen; or if it is already open, focus it, wait until any currently-open [[#def-alert|alerts]] or [[#def-dialog|dialogs]] have been dismissed, and then switch to the appropriate screen. What that “appropriate screen” is depends on the URL and whether the package is known to exist.

If the URL is of the form “`apt:package-name`”:

 * If the package is known, the [[#software-item|software item screen]] for the package. '''Test case:''' (sc-001) Follow the link [[http://apt.ubuntu.com/p/python-wxtools|apt:python-wxtools]]. It should show the item screen for “All Software” > “System” > “python-wxtools”.

 * <<Anchor(unknown-package)>> If the package is not known, an ephemeral error screen in the “All Software” section. It should be possible to return to this screen later in the [[#navigation-back-forward|navigation history]], but it should not be possible to navigate to it directly. '''Test case:''' (sc-009) Follow the link [[http://apt.ubuntu.com/p/abcdefghijklmnop|apt:abcdefghijklmnop]].

 {{attachment:apturl-unknown-package.png}}

If the URL is of the form “`apt:package-name?minver=1.0`”:

 * If the package is not known, the same kind of ephemeral error screen as used for `apt:unknown-package-name`.

 * If the package is known, the [[#software-item|software item screen]] for the package. If a version late enough is not available, this screen should include an extra ribbon, between the summary and the [[#software-item-screen-state-installed|installation state bar]]: “Sorry, version {minver} isn’t available in your current software sources.”.

 {{attachment:apturl-version-unavailable.png}}

If the URL is of the form “`apt:package1,package2,`…”: A [[#custom-list|custom package list]] for the package names (including displaying the comma-separated names in the [[#search-field|search field]]).

If the URL is of the form “`apt:package-name?section=multiverse`”:

 * If the section is not currently enabled, a placeholder for the package screen, inviting you to enable the section. It should use the package name as its heading, the text ‘This software is available from the “{source}” source, which you are not currently using.’, and a button “Use This Source”. Activating the button should add the source, and the software item screen should automatically expand to its normal format.

 {{attachment:apturl-channel-invitation.png}}

 ''Erratum: The text currently implemented is shorter and better.''

 * If the section is enabled but the package is not present in it, the same ephemeral error screen as used for `apt:unknown-package-name`.

 * Otherwise, the [[#software-item|software item screen]] for the package.

If the URL is of the form “`apt:package-name?channel=lucid-partner`”: Exactly the same appearance and behavior as for `apt:package-name?section=multiverse`, but enabling a whitelisted repository as listed in `/usr/share/app-install/channels/`, rather than a section.

When this feature is fully implemented, the `software-center` package should be marked as `Provides: apturl` and `Replaces: apturl`.

<<Anchor(gdebi)>><<Anchor(standalone-package)>>
==== from a standalone .deb package ====

||<tablestyle="background: #eee; color: #000; margin: 2em 1em;" style="padding: 0.5em 1em;">While installing Skype, I was informed that a “later version is available in a software channel. You are strongly advised to install the version from the software channel, since it is usually better supported.” I'm pretty sure that could have been translated to, “Click ‘Next’ to install a newer version of Skype.”<<BR>><<BR>>— Farhad Manjoo, “[[http://www.slate.com/id/2261781/|Get a blazing-fast computer for free]]”, ''Slate''||

{{attachment:software-item-screen-standalone.png}}

Opening a `.deb` package should launch Ubuntu Software Center (or focus it, wait until any dialogs are dismissed, and then navigate) to a temporary [[#software-item-screen|software item screen]] for the package.

In the navigation bar, the screen should be located in an “Other” source, following “All Software” or “Installed” depending on whether this package version is already installed.

This software item screen should differ from the standard one:
 * Its visual design should hint that this is a little less safe than installing a package from a repository.
 * The installation state bar should say “Standalone software package”, not “Free”. (For all USC knows, you might have had to pay to download the package in the first place.)
 * If one of your repositories contains a package with the same name but a higher version number, there should be an extra bar below the installation state bar, with text of the form ‘Ubuntu has a newer version.’ (without quotes) or ‘“Other Repository Label” has a newer version.’ (with quotes). Activating the adjacent “Newer Version” button should navigate to the software item screen for the newer version.

The `software-center` package should be marked as `Provides: gdebi` and `Replaces: gdebi`.

==== from the command line ====

`software-center` should launch USC to its default view. `software-center `''package-name'' should open USC to display that package. If the package is unknown, it should display [[#unknown-package|the same unknown-package screen as apturl uses]].

<<Anchor(navigation-pane)>>
=== Main window ===

{{attachment:window-layout.png}}

The main window should be a normal, resizable window containing a '''navigation bar''' and a '''main pane'''. Initially, the window should be centered on the main display, but its size and position should persist between sessions.

<<Anchor(navigation-bar)>>
The navigation bar should contain:

 1. Back and Forward buttons.

 1. Tab-like buttons for navigating between sections. Exactly one should be selected at any time:

  a. [[#available|Available software]], defaulting to “All Software”, with a menubutton for all [[#channels|available software sources]].

  a. The individual available software source you are currently looking at, if any. (Before this item appears, all those on the trailing side should slide out to make room, and after it disappears they should slide back.)

  {{attachment:navigation-bar-transitions.png}}

  a. [[#installed|Installed software]], defaulting to “All Installed” (appearing as “Installed” in the navigation bar), with a menubutton for all [[#channels|installed software sources]].

  a. The individual installed software source you are currently looking at, if any. (Before this item appears, all those on the trailing side should slide out to make room, and after it disappears they should slide back.)

  a. “[[#history|History]]”

  a. (“Popular”, “[[#updates|Updates]]”, and/or “Account” sections may be added later.)

  a. “[[progress|Progress]]”, present only occasionally.

 1. [[#search-field|The search field]], visible for any [[#searching|searchable]] screen.

'''Test case:''' (sc-002) Launch USC. From the “All Software” menu, choose “Canonical Partners”. All following items in the navigation bar should slide to the right, making room for a “Canonical Partners” item, highlighted, between “All Software” and “Installed”. Next, from the “Installed” menu choose “For Purchase”. The “Canonical Partners” item should disappear, and the “Installed” item should slide to the left, making room for a “For Purchase” item, highlighted, between “Installed” and “History”. Click Back; the “For Purchase” item should disappear from the navigation bar, and the “Canonical Partners” item should reappear, highlighted once more.

==== Navigation ====

<<Anchor(navigation-between-screens)>>
===== Navigation in general =====

Whenever USC navigates to a screen, whether directly (with mouse or keyboard) or indirectly (''e.g.'' when it first launches), it should:
 1. immediately reveal (if necessary) and highlight the appropriate item in the navigation bar, if it has changed;
 1. begin displaying the corresponding screen in the main pane;
 1. if the corresponding screen has not displayed within 2 seconds, display a blank screen with a horizontally and vertically centered spinner, until the screen is available.
 1. Unless the screen was navigated to by [[#navigation-back-forward|Back/Forward]] or by editing the search field, the screen should be focused as a whole (fixing bug Bug:832265). From this initial focus, pressing Down or Tab should focus the first item in the screen, and pressing Shift+Tab should focus the sort menu if present.

'''Test case:''' (sc-003) On a slow computer, choose “System”; the spinner screen should appear until the full list is available. Press Down; the first item in the category should be selected. Press Shift+Tab; the sort menu should be selected.

===== Section navigation =====

The '''section navigation commands''' — “All Software”, “Installed”, and so on — should always navigate to the ''top level'' of that section, with no search text or scroll position. (The alternative would have been to remember your exact position in each section, as in previous versions of USC, but that made it harder to understand how to navigate up to the top level in each. Instead, we rely on Back and Forward navigation to preserve state.) '''Test case:''' (sc-006) In the “All Software” section, navigate to Abi``Word. In the navigation bar click on “Installed”, then on “All Software”. USC should return to the home screen.

<<Anchor(navigation-back-forward)>><<Anchor(get-software-navigation)>>
===== Back/Forward navigation =====

The '''navigation history''' (not to be confused with USC’s “History” section) is a browser-like history of which screens USC has navigated to, either directly (for example, by clicking a link or using the navigation bar) or indirectly (for example, by following an `apt:` link), since it opened. Unlike previous versions of USC, it should include screens from any section.

The '''Back and Forward commands''' should navigate through this navigation history, as with a Web browser: navigating using the history should not add items to it, and navigating without using the history should discard all forward items from the history. The Back command should be unavailable whenever no previous screens exist in the history, and the Forward command whenever no later screens exist in the history.

 '''Test case:''' (sc-007)
  1. Launch USC. In both the navigation bar and the menus, the Back and Forward commands should be unavailable.
  2. Choose “History”. The Back command should become available.
  3. Choose Back. USC should return to the home screen, Forward should become available, and Back should no longer be.
  4. Choose Forward. USC should return to the History screen, Back should become available, and Forward should no longer be.

Each item in the history should remember its scroll position, whether [[#software-list-view-disclosure|items hidden by default were shown]], what software item was selected (if any), and what element was focused (if any). These attributes should persist if you return to the screen using Back/Forward navigation, but not if you navigate to the screen any other way.

If the search field was non-empty when you navigated to a separate screen, the search you had entered just before you navigated should be stored as its own history item. Intermediate searches should not be in the history.

Whenever a screen in the navigation history does not currently exist (for example, the “Progress” screen when no tasks are in progress, or the software item screen for an item that was uninstalled and doesn’t exist in any software source), the Back and Forward commands should skip over that screen in the history — and the commands should be unavailable if all previous or later screens, respectively, consist of screens of that sort.

 '''Test case:''' (sc-008)
  1. Launch USC. In Software & Updates Settings, add a new PPA. In USC, choose “All Software From Source” > that PPA. Back should become available.
  2. Choose Back. Back should become unavailable, and Forward should become available.
  3. In Software & Updates Settings, remove the PPA. Forward should no longer be available.
  4. In Software & Updates Settings, re-add the same PPA. Forward should become available once more.
  5. Choose Forward. USC should return to the screen for that PPA.

<<Anchor(all-software)>><<Anchor(available)>>
==== “All Software” section ====

The “All Software” section should present ''the union of'' {all software that is available, from any of the computer’s current software sources, plus any software source represented by a `X-AppInstall-Channel` attribute in `app-install-data`}, and (unlike previous versions of USC) {all software that is installed, regardless of whether it is installed from any of the computer’s current software sources}.

The section encompasses a [[#home|home screen]], as well as screens for top-level search results, [[#category|individual categories]], category search results, [[#subcategory|subcategories]], subcategory search results, software sources and search results, and individual software items.

Whenever you are in the “All Software” section, the “View” > “Software Maintained by Anyone” and “View” > “Software Maintained by Canonical” items should be enabled. Changing the selection should determine whether all software or just Canonical-updated software is are shown. The selection should persist regardless of which screen in the “All Software” section is being displayed.

Whenever a software item is selected — whether searching from the [[#home|home screen]], in a [[#category|category]], in a [[#subcategory|subcategory]], or implicitly because you are at a [[#software-item-screen|software item screen]] itself:
 * If it is an item that is not currently installed nor being installed, “File” > “Install” should be enabled. Selecting it should [[#installing|install the selected item]].
 * If it is an item that is currently installed and not currently being removed, “File” > “Remove” should be enabled. Selecting it should [[#removing|remove the selected item]].

<<Anchor(home)>><<Anchor(lobby)>>
===== Home screen =====

||<tablestyle="float:right;margin:0 0 1em 1em;" style="border:none;">{{attachment:home.png}}||
||<style="border:none;">''Erratum: “Most Popular” should be “[[#popular|What’s Popular]]”.''||

The home screen should be a [[#searching|searchable]] screen containing as many of these elements as have been implemented so far:
 * [[#exhibits|exhibit banners]]
 * [[#categories|categories]]
 * [[#whats-new|“What’s New”]]
 * “Recommended For You”
 * “Latest Videos”
 * [[#top-rated|“Top Rated”]]
 * [[#popular|“What’s Popular”]]
 * “Give Your Feedback”
 * a footer of the form “29 079 items available”.

Arrow keys should change focus between the selectable items in the home screen.

<<Anchor(categories)>>
The “Categories” section of the home screen should list (without icons) [[#def-alphabetically|alphabetically]] all categories, as defined and sorted under “[[#Genre|Genre]]”, which contain any items matching the current repositories and view options.

<<Anchor(exhibits)>>
===== Exhibit banners =====

An '''exhibit''' is either a single item, or a collection of items on a theme, that is temporarily promoted at the top of the home screen. Exhibits are stored and transmitted as mini-HTML documents from the USC server.

Whenever the server provides exhibits for your Ubuntu version, and any of those exhibits are for — or are collections that contain any — items available with your current filters, the banner area on the home screen should show a carousel of those particular exhibits. When there are multiple applicable exhibits, the current one should fade into the next one after ten seconds. The carousel should pause whenever the window is not focused.

In any other case (for example, if there is no Internet connection, or there are no exhibits for the Ubuntu version you’re running), the banner area should show a fallback banner (included in the USC code) that links to the canned list of Featured applications.

Activating the banner for a single-item exhibit should navigate to the [[#software-item-screen|software item screen]] for that item. Activating the banner for a multi-item exhibit should navigate to a list view, with the appropriate heading, showing whichever items match your current filters.

''Future work: Switch from a list view to a tile view.''

<<Anchor(whats-new)>>
===== “What’s New” =====

On the home screen, the “What’s New” area should use [[#tile|tiles]] to list, newest first, the applications that appeared most recently in any of your software channels, ''excluding items'' that you have already installed. (For this purpose, an “application” is any package containing a `.desktop` file.) The number of applications should be as many as fills the height of the “Categories” area next to it (or, if “Recommended For You” has been implemented, half the height).

{{attachment:whats-new.png}}

Choosing “More” in the home screen area should navigate to a separate “What’s New” screen that uses a [[#software-tile-view|software tile view]] to list, newest first, the 60 applications that appeared most recently in any of your software sources, ''regardless of'' whether they are installed (bug Bug:1009967).

<<Anchor(top-rated)>>
===== “Top Rated” overall =====

An item’s '''dampened rating''' (DR) should be 3 plus the sum, for each possible number of stars (1, 2, 3, 4, and 5), of (that number of stars – 3) multiplied by the [[http://evanmiller.org/how-not-to-sort-by-average-rating.html|lower bound of the Wilson score confidence interval]] with a 90% confidence level for the proportion of ratings that had that number of stars.

For example:
||★☆☆☆☆||★★☆☆☆||★★★☆☆||★★★★☆||★★★★★||DR ||
|| 0|| 0|| 0|| 0|| 0||3.0 ||
|| 16|| 0|| 0|| 0|| 0||1.19||
|| 8|| 0|| 0|| 0|| 0||1.34||
|| 4|| 0|| 0|| 0|| 0||1.58||
|| 2|| 0|| 0|| 0|| 0||1.90||
|| 1|| 0|| 0|| 0|| 0||2.24||
|| 0|| 1|| 0|| 0|| 0||2.62||
|| 0|| 0|| 1|| 0|| 0||3.00||
|| 0|| 0|| 0|| 1|| 0||3.38||
|| 0|| 0|| 0|| 0|| 1||3.76||
|| 0|| 0|| 0|| 0|| 2||4.10||
|| 0|| 0|| 0|| 0|| 4||4.42||
|| 0|| 0|| 0|| 0|| 8||4.66||
|| 0|| 0|| 0|| 0|| 16||4.81||

Sorting items by “Top Rated” should sort them by their DR, so that (for example) an item with ten reviews, nine 5-star and one 4-star, is appropriately ranked higher than an item that has only two reviews, both 5-star.

On the home screen, the “Top Rated” area should use [[#tile|tiles]] to list, in descending order of DR, the items with the highest DR (out of all items that USC is configured to display), regardless of whether they are installed (bug Bug:1009967). The number of items shown in this area depends on whether “[[#popular|What’s Popular]]” has also been implemented: 24 if it hasn’t, 12 if it has.

Choosing “More” in the “Top Rated” area should navigate to a separate “Top Rated” screen that uses a [[#software-tile-view|software tile view]] to list, in descending order of DR, the 60 items with the highest DR, regardless of whether they are installed. (As usual, the number of stars shown for each item should represent the median rating, not the DR itself.)

{{attachment:top-rated.png}}

<<Anchor(category)>>
===== Category screen =====

A category screen should be [[#searching|searchable]]. It should always begin with a heading giving the name of the category, and end with centered text of the form “1234 items available” (this count should include items in any subcategories).

If the category is set to “[[#Genre|Show non-applications by default]]”, it should use a [[#software-listing-view|software listing view]]. Otherwise, it should use a [[#software-tile-view|software tile view]], and non-application items should be [[#software-list-view-disclosure|hidden by default]].

 * If it [[#Genre|has any subcategories]] that contain any items matching the current repositories and view options, the screen should have buttons for each subcategory, a “Top Rated” area listing the 12 top rated items in that category, and (once implemented) a “What’s Popular” area listing the 12 most installed items in that category that are not already in the “Top Rated” area. (Using 12 items produces a filled last row whether there are 1, 2, 3, or 4 items per row.)

 {{attachment:category-with-subcategories.png}}

 ''Erratum: “Most Popular” should be “What’s Popular”.''

 * Otherwise, if “What’s Popular” has been implemented ''and'' the category contains more than 60 items, the screen should consist only of the “Top Rated” and “What’s Popular” areas, each listing 12 items.

 {{attachment:category-without-subcategories-large.png}}

 ''Erratum: “Most Popular” should be “What’s Popular”.''

 * Otherwise, if “What’s Popular” has ''not'' yet been implemented ''or'' the category contains up to 60 items, the screen should consist of a [[#software-tile-view|software tile view]] listing every item in the category. Opposite the heading should be an option menu for choosing the sort order, “By Rating” (the default), “By Name”, or “Newest First”.

 {{attachment:category-without-subcategories-small.png}}

<<Anchor(top-rated-category)>>
Whenever the screen contains a “Top Rated” area, that area should list, in descending order of [[#top-rated|dampened rating]], the 12 items with the highest DR in that category. Choosing “More” should navigate to a separate “Top Rated in {Category Name}” screen, listing, in descending order, the 60 items with the highest DR in that category.

Whenever the screen contains a “What’s Popular” area, that area should list, in descending order, the 12 most popular items in that category, that are neither installed nor already shown in the “Top Rated” area. (This avoids repetition, giving visibility to more items.) Choosing “More” should navigate to a separate “What’s Popular in {Category Name}” screen, listing, in descending order, the 60 most popular items in that category ''regardless'' of whether they are installed or in a “Top Rated” list.

If the category is not set to “[[#Genre|Show non-applications by default]]”, non-application items should be [[#software-list-view-disclosure|hidden by default]].

<<Anchor(subcategory)>>
===== Subcategory screen =====

||<^>{{attachment:subcategory-listing.png}}||<^>{{attachment:subcategory-tiles.png}}||

Like [[#category|the category screen]], a subcategory screen should be [[#searching|searchable]]. It should always begin with a link to the parent category and a heading naming the subcategory, and end with centered text of the form “1234 items available”. If more than one sort order has been implemented, opposite the heading should be an option menu for sorting “By Rating” (the default), “By Popularity” (once implemented), “By Name”, or “Newest First”.

If the subcategory is set to “[[#Genre|Show non-applications by default]]”, it should use a [[#software-listing-view|software listing view]]. Otherwise, it should use a [[#software-tile-view|software tile view]], and non-application items should be [[#software-list-view-disclosure|hidden by default]].

''Where to show the number of items in the subcategory? We can’t nicely show them at the bottom, because in a tile view the bottom will always be scrolling out of view.''

<<Anchor(installed)>><<Anchor(software-list-view-categorized)>>
==== “Installed” section ====

||<tablestyle="float:right;margin:0 0 1em 1em;" style="border:none;">{{attachment:installed.png}}||

In the navigation bar, “Installed” should have an icon of a computer. It may have [[#broken|an emblem indicating inconsistent package state]].

The “Installed” screen should show all software items currently installed, regardless of whether they are available from any of the computer’s current software sources.

The items should be grouped into the [[#Genre|primary categories]] (but not the subcategories) to which they belong. Categories for which no items are installed should not be shown. A category should expand or collapse if you click anywhere in its row; expand if you press Right when it is highlighted; and collapse if you press Left when it is highlighted. The expanded or collapsed state of every category should be remembered between sessions.

At the end of the list should be centered text of the form “1047 items installed”.

Whenever you are in the “Installed” section, the “View” > “All Software” and “View” > “Canonical-Updated Software” items should be enabled. Changing the selection should determine whether all software is shown, or just Canonical-updated software. The selection should persist regardless of which screen is being displayed.

The “Installed” screen should be [[#searching|searchable]]. Whenever the search field is non-empty, a software item should be visible only if it matches the search text. A category should be visible only if either (a) it contains any matching software items, or (b) the category name itself matches the search text. Searching should not cause a category to expand or collapse by itself.

<<Anchor(installed-software-list-view)>>
Software items in the “Installed” screen should show their icon, title, and summary. The icon should be indented so that it lines up with the start of the category name above.

Apart from that extra indentation, individual items in the “Installed” section should look and behave just as in [[#software-list-view|any other software list view]].

<<Anchor(software-item-screen)>>
==== Software item screen ====

||<tablestyle="float:right;margin:0 0 1em 1em;width:520px;" style="border:none;">{{attachment:software-item-screen.png}}||

A software item screen should show information about an item, let you [[#installing|install]] or [[#removing|remove]] it or change any [[#add-ons|add-ons]], and (if you have currently or previously installed it) [[/RatingsAndReviews|rate and review it]].

A software item screen is not [[#searching|searchable]].

Whenever a software item screen is being displayed:
 * If it is installed or currently being removed, “Installed” should be highlighted in the [[#navigation-bar|navigation bar]]. Otherwise, “All Software” should be highlighted. '''Test case:''' (sc-012) Navigate to an item that isn’t installed; “All Software” should be highlighted. Install it; once installation finishes, “Installed” should be highlighted. Now remove it; once removal finishes, “All Software” should be highlighted once more.
 * If it is an item that is neither currently installed nor being installed, “File” > “Install” should be enabled. Selecting it should [[#installing|install the selected item]].
 * If it is an item that is currently installed and not currently being removed, “File” > “Remove” should be enabled. Selecting it should [[#removing|remove the selected item]].
 * <<Anchor(software-item-screen-copying)>>Whenever text is selected in the screen, the copy action (“Edit” > “Copy” and Ctrl C) should be enabled. Choosing it should copy the selected text to the clipboard.
 * “Edit” > “Copy Web Link” should be enabled. Choosing it should [[#web-link-package|copy a Web link for the relevant package]].
 * If the relevant package is not maintained by Canonical and you then choose “View” > “Canonical-Updated Software”, USC should automatically navigate up to the subcategory screen; or, if the entire subcategory contains no Canonical-updated items, up to the category screen; or, if the entire category contains no Canonical-updated items, up to the [[#home|home screen]]).

Except where specified elsewhere, a software item screen should contain:

 1. A link to its [[#Genre|primary category]].

 1. A triangle (▶) and a link to its [[#Genre|primary subcategory]], if it has one.

 1. Its [[#software-icon|icon]], except that the installed emblem should not be shown for an installed application (because it’s shown in the installation state bar immediately below instead, which clarifies that the emblem is not part of the application icon itself).

 1. On the trailing side, stars representing the item’s average rating.

 1. Its [[SoftwarePackageOperations#title|title]], wrapping to multiple lines if necessary.

 1. Its [[#software-summary|summary]], wrapping to multiple lines if necessary.

 1. <<Anchor(software-item-screen-state-installed)>><<Anchor(date-installed)>><<Anchor(self-awareness)>> An [[#software-item-screen-state-installed|installation state bar]]:

  * If the item is not installed nor queued for installation, the price of the item (''e.g.'' “Free”) at the leading end, and a button at the trailing end: “Buy…” if installation requires sign-in and payment, “Install…” if it requires sign-in only, or “Install” if it requires neither.

  * If the item is installed and not queued for removal, the installed emblem and the text “Installed” (or, if known, “Installed on {date}”) at the leading end (except for Ubuntu Software Center itself, where it should say “Installed (you’re using it right now)”), and a “Remove” button at the trailing end.

  * If the item is being installed or removed, or is queued for installation or removal (but ''not'' if its add-ons are being changed), the status text for the installation at the leading end, and a progress bar at the trailing end.

  {{attachment:software-item-screen-state-available-installing.jpg}}

  {{attachment:software-item-screen-state-installed-removing.jpg}}

 1. Its [[#software-description|description]]. If the item is in `app-install-data` and refers to a package that is not present in the `apt` cache, the text “To show information about this item, the software catalog needs updating.”, and an “Update Now” button. Choosing “Update Now” should update the screen to its usual format. And if the item is not available for this architecture, instead of the description should appear the text “Sorry, <Title> is not available for this type of computer (<Architecture>).”.

 1. A “Developer Web site” link to the URL in the package’s `Homepage:` field, if there is one. The link should have a context menu containing “Open Link” and “Copy Link Address” items.

 1. A “Report a Problem” link, if [[#isv-support|the vendor has registered a support URL]].

 1. If the item is or would be recommended for you, [[/Recommendations#Displaying|the reason or the hidden status]].

 1. <<Anchor(gallery)>> A mini gallery of all available videos and/or screenshots of the item (bug Bug:1049988), if there are any. (If there are none, the description should extend to the space they would normally occupy (bug Bug:1056897).) To emphasize that it is a gallery (bug Bug:691594), the gallery should include thumbnails of each item even if there is only one. The currently displayed media, and each thumbnail, should each appear inside an inset border, with the border of the focused item highlighted. The selected screenshot or video should take up to half the width of the window, and up to the full height of the window, while maintaining its aspect ratio (bug Bug:673214). If you activate a screenshot or video (by clicking it, or pressing Space or Enter when it is focused), a small determinate progress meter should appear centered over it, showing download or buffering progress. If it loads, the screenshot or video should then visibly zoom into a chromeless overlay window that is the height of the display, the width of the display, or the original size of the image, whichever results in the smallest scaled image (bug Bug:995129). Clicking or pressing any key should zoom the overlay back into the main display.<<BR>>
 {{attachment:software-item-screen-gallery.png}}

 1. The [[#add-ons|add-ons]] section.

 1. Text describing the “Total size:” of the item:
  * if it is not downloaded or installed, “{``X} to download, {Y} when installed”, where X is the download size including not-yet-installed dependencies, and Y is the installed size including not-yet-installed dependencies;
  * if it is already downloaded but not installed, “{Y} when installed” (bug Bug:851222);
  * if it is installed, and you have not specified any changes to add-ons, “{Y} on disk”
  * if it is installed, and you have specified changes to add-ons, “{``X} to download, {Y} on disk”.

 1. Text of the form “Version: {package name} {version number}”.

 1. Text of the form “Last update: {full date}” (bug Bug:680523).

 1. The label “License:” followed by its [[#license|license text]].

 1. The label “Downloaded from:” followed by [[#channels|the appropriate text]] (private bug Bug:882831).

 1. The label “Updates provided:” followed by [[#updates-text|the appropriate text]].

 1. A “People also installed” area, if there are any relevant items.

 1. The item’s [[/RatingsAndReviews#reviews-reading|ratings and reviews]].

||<style="background:LightCoral">Copy-editors||
||Within USC, examine the title, summary, and description of an item. Is it concise and helpful? Is the spelling, grammar, and paragraph formatting correct? If it’s a non-geek application, does the description avoid geek language? Is it in the appropriate category? If you find a problem, and you are comfortable diving into code to fix it yourself, follow the [[https://wiki.ubuntu.com/DistributedDevelopment/Documentation|distributed development instructions]] with the [[https://code.launchpad.net/ubuntu/+source/app-install-data-ubuntu|app-install-data-ubuntu]] package to fix problems in an application’s title or summary, or [[https://launchpad.net/ubuntu|the package itself]] to fix problems with its description. Otherwise, [[https://bugs.launchpad.net/ubuntu|report a bug]] with (a) the current text, (b) what needs improving, and (c) your proposed replacement text, and give the bug report the `metadata` tag.||

||<style="background:Peru">Packagers||
||Please look for [[https://bugs.launchpad.net/ubuntu/+bugs?field.tag=metadata|bugs that people have reported]] about inappropriate application names or summaries, or package descriptions or categories, and fix them. Thanks for your help.||

||<style="background:Peru">Packagers||
||If a single package contains multiple applications, and people might reasonably want to install these applications separately, work to separate the packages into one per application.||

<<Anchor(history)>>
==== “History” section ====

The “History” section should display all installations, updates, removals (including purges), and other changes, in reverse chronological order.

{{attachment:history.png}}

Below the navigation bar, a '''filter bar''' should have items for “All Changes”, “All Installations” (including purchases), “Purchases”, and “Removals” (including purges) (bug Bug:990998). (It does not need an item for “Updates”, because the use case for seeing those — debugging a problem — involves seeing all other package changes too.)

History entries should be grouped in branches labelled by day. Clicking anywhere on a branch — or pressing Space when it is selected — should expand it if it is collapsed, and collapse it if it is expanded. When a branch is selected, pressing Right should also expand it, and Left collapse it. For the day on which the most recent events happened, that branch should be expanded by default from the start of every USC session.

The “History” screen should be [[#searching|searchable]]. Whenever the search field is non-empty, a history entry should be shown only if it matches the search text, and a date branch should be shown only if it contains any items matching the search text. Searching should not cause a date branch to expand or collapse by itself.

Each history entry should consist of an icon, text, a time, and a price.
 * The icon should be [[#software-icon|that of the relevant software item]].
 * The text should be of the form:
  * “{[[SoftwarePackageOperations#short-name|short name]]} installed”
  * “{short name} removed”
  * “{short name} purged”
  * “{short name} updated from version {version} to {version}”
  * “{short name} downgraded from version {version} to {version}”
 * The time should be of the form “4:08 PM”.
 * The price should be of the form “$4.99” if it was a purchase, or “—” otherwise.

<<Anchor(purchases)>>
{{attachment:previous-purchases-screen.png}}

<<Anchor(in-progress)>><<Anchor(progress)>>
==== “Progress” section ====

{{attachment:progress.png}}

The “Progress” section should be visible only when items are being installed or removed, or when the last installation or removal finished less than five seconds ago. If the section disappears while being displayed, USC should return to the section that was previously being displayed.

In the navigation bar, the section should have an animated icon of two semicircular arrows chasing each other clockwise. The icon should be overlaid with an emblem showing the number of tasks yet to be completed.

The section itself should list the items requested for installation or removal, earliest first. The rows in the list should be based on a [[#software-list-view|software item list view]], with these differences:
 * the second row of text is [[SoftwarePackageOperations#operations|the task status text]], rather than the package summary or package name;
 * each row has a (text-less) progress bar representing [[SoftwarePackageOperations#operations|the task progress]] proportion;
 * each row representing an installation has a cancel button (which can be triggered by the Esc key when the row is selected), while each row representing a removal has a gap the same size as a cancel button (so that its progress bar lines up with the progress bars of installation rows).

{{attachment:1.0-in-progress-row.jpg}}

The cancel button for an individual item should be present only when the item has not yet started or is still downloading.
Line 115: Line 490:
-------------------
  _Close Ctrl W
---------------------------
  Reinstall _Purchases…
  _Deauthorize Computer…
  Sync Between Computers…
---------------------------
  _Close Ctrl W
Line 119: Line 498:
“Install” and “Remove” should be disabled by default. “Close” should, by default, close the window and exit the Center.

''In future this menu will contain items for more obscure package operations.''
“Install” and “Remove” should activate the [[#installing|Install]] and [[#removing|Remove]] functions respectively. “Close” should, by default, close the window and exit USC.
Line 139: Line 516:
  _Software Sources…   _Software & Updates Settings
Line 142: Line 519:
“Software Sources…” should open the Software Sources control panel. (`software-properties-gtk` [[http://launchpad.net/bugs/523755|should be responsible]] for focusing an existing copy of itself if it is already open.)

All other items in this menu should be insensitive by default; their availability and behavior is defined elsewhere in this specification.
“Software & Updates Settings…” should open the Software & Updates Settings control panel. (`software-properties-gtk` [[http://launchpad.net/bugs/523755|should be responsible]] for focusing an existing copy of itself if it is already open.)

All other items in this menu should be disabled by default; their availability and behavior is defined elsewhere in this specification.
Line 149: Line 526:
* All Software
  Canonical-Maintained Software
* Software Maintained by Anyone
  Software Maintained by Canonical
------------------------------------
  Go Back [
  Go Forward ]
------------------------------------
/ New Applications in Launcher
------------------------------------
  Turn On Recommendations… | Turn Off Recommendations
  Reset Recommendations…
Line 153: Line 538:
All items in this menu should be insensitive by default; their availability and behavior is defined elsewhere in this specification. '''Test case:''' While a package is installing, navigate to the “In Progress” section, and open the “View” menu. Its items should be insensitive.

''In future this menu may include items for different view types (Icons, List, Gallery).''
The “Software Maintained by Anyone”, “Software Maintained by Canonical”, and “Reset Recommendations…” items should be disabled by default; their availability and behavior is defined elsewhere in this specification.

The “Go Back” and “Go Forward” items should represent [[#navigation-back-forward|the Back and Forward actions]].

'''Test case:''' (sc-003) Start installing something in USC. While it is installing, navigate to the “In Progress” section, and open the “View” menu. Its items should be disabled.
Line 161: Line 548:
  Help With _Payments
  _Terms of Use
--------------------------------
  For Software _Developers
Line 167: Line 558:
“About This Version” should open the About window, or focus it if it is already open.

<<Anchor(location-bar)>>
==== Location bar ====

{{attachment:location-bar.jpg}}

Many Center sections include a location bar, which appears at the top of the main pane. It should appear as a raised block inside the main pane.

The location bar contains various contents, sometimes including a title, path button, and/or [[#search-field|search field]]. Where there is a title, it should be displayed in bold text. The search field should always be at the trailing end, while any other contents are at the leading end. Whenever the search field is not present, the other contents should consume, if necessary, some of the space the search field would otherwise consume.

<<Anchor(path-button)>>
===== Path button =====

||<tablestyle="float: left; margin: 0 1em 1em 0;" style="border: none;">{{attachment:path-button.jpg}}||

In some screens, the location bar includes a path button. This should consist of a button in one or more interlocking segments, with the point of one fitting into the crook of the next. If the button cannot be wide enough to display the text of all the segments, then the first segment should be shortened, with the text inside it being ellipsized at the trailing end, ''e.g.'' “Get Softw…”. If the button is still too wide even after the first segment has been shortened to read just “…”, then the second segment should be shortened in the same way, and so on.

||<tablestyle="clear: both;" style="border: none;">||

The path button should have the accessible name “You are here:”.

<<Anchor(search-field)>>
===== Search field =====

{{attachment:search-field.jpg}}

Whenever a search field is present in the window, the “Edit” > “Search…” menu item should be sensitive. Selecting it should focus the search field, and (even if it is focused already) select its entire contents.

Whenever the search field is focused, the “Edit” > “Undo”, “Redo”, “Cut”, “Copy”, “Paste”, “Delete”, and “Select All” items should have their usual sensitivity and operation for a text field.

Inside the leading end of the field should be a symbolic magnifying glass icon. Clicking the icon should focus the field and select its entire contents.

When (and only when) the search field is not empty, the trailing end of the field should have a symbolic clear icon. Clicking the icon should focus the field and clear its contents.

Besides the normal behavior for text fields, whenever the insertion point (caret) is at the trailing end of the search field, pressing the Down arrow key should focus the contents of the main pane and select the first item — such as the first department in the [[#lobby|lobby screen]], or the first result in any list of search results.

The search field should have the accessible name “Search”.

<<Anchor(search-results)>>
<<Anchor(searching)>>
==== Searching in general ====

When searching anywhere in the Center, any word in the search string that is followed by a space or punctuation should be treated as a a complete word, while any word that is not should be treated as if it may be either a complete word or the beginning of a word. '''Test case:''' Searching from the lobby for “atom” should return both Atomix and Liferea (an Atom feed reader). But searching for “atom ” (with a trailing space) should return only Liferea.

[``[[https://blueprints.launchpad.net/ubuntu/+spec/foundations-lucid-non-applications-in-software-center|foundations-lucid-non-applications-in-software-center]] 1 of 4]

If the search terms exactly match a package name, that package should be returned first in the results, ''even if'' the package was [[#software-list-view-disclosure|hidden by default]].

<<Anchor(software-icon-view)>>
==== Software icon view ====

A software icon view is used mainly to present [[#def-software-item|software items]], and currently also to display the list of departments in the “Get Software” section.

Each item in an icon view features [[#software-icon|the software item’s icon]] and its [[#software-title|title]].

If the icon is scalable, or larger than 4 em in either dimension, it should be scaled down proportionally so that it is 4 em in its largest dimension. If the icon is already smaller than 4 em in both dimensions, it should be drawn at actual size and centered (both horizontally and vertically) inside a 4 em square that has a 0.05-em-wide border of color 170,170,170 (#aaaaaa).

Underneath the icon, the item title should be printed in 0.9-em text that is horizontally centered but top-aligned in its own block; if the title occupies more than two lines, it should be ellipsized in the middle (because unique elements of titles are more often at the beginning or the end). If the package is not available for this computer’s architecture, both the icon and the text should have 50% opacity, but the package should still be selectable.

Items should be laid out like horizontal text: starting at the leading edge and continuing until there is no room for another item on the same line, then wrapping downward.

Each item in a software icon view should produce a pointing-hand pointer when moused over, and single-clicking should navigate to that item.

<<Anchor(software-list-view)>>
“Help With Payments” should open the default Web browser to [[https://help.ubuntu.com/community/Pay]] (bug Bug:1107824).

“For Software Developers” should open the default Web browser to [[https://developer.ubuntu.com/]].

“About This Version” should open or focus the About window.

<<Anchor(tile)>>
==== Software item tiles ====

{{attachment:software-item-tiles.png}}

''Errata:
 * The installed emblem should be at the bottom left of the icon, not the bottom right.
 * “Games — Puzzles” should be “Puzzles”.''

Tiles are used to present software items on [[#home|the home screen]], category screens, subcategory screens, search results, and other listings.

Tiles have a minimum width. In an area that is to be filled with tiles, the number of tiles on each row should be based on the minimum width, with each tile stretching equally to fill any remaining width.

A '''normal software item tile''' contains the item’s:
 1. [[#software-icon|Icon]]. If the icon is scalable, or larger than 4 em in either dimension, it should be scaled down proportionally so that it is 4 em in its largest dimension. To subtly encourage developers to produce large/scalable icons, if the icon is already smaller than 4 em in both dimensions, it should be drawn at actual size and centered (both horizontally and vertically) inside a 4 em square that has a 0.05-em-wide border of color 170,170,170 (#aaaaaa).
 1. [[SoftwarePackageOperations#title|Title]], ellipsized in the middle if necessary to fit on one line.
 1. Average rating (omitted entirely if there are not enough ratings).
 1. [[#Genre|Subcategory name]] if it has one, otherwise its [[#Genre|Category name]], either ellipsized at the trailing end if necessary to fit on one line.
 1. Price (or “FREE” if the price is zero).

A '''category-specific software item tile''' is identical except that it omits the category name (because it would be identical for every item). And a '''subcategory-specific software item tile''' omits the category ''and'' subcategory names.

If the package is not available for this computer’s architecture, the whole tile should have 50% opacity, but should still be clickable.

The whole tile should have a pointing-hand pointer when moused over, and should be a darker shade whenever it is being clicked (bug Bug:1017454). Single-clicking should navigate to that item.

<<Anchor(software-tile-view)>>
==== Software tile view ====

A software tile view is used to present [[#def-software-item|software items]] on various screens. It includes a heading, followed by a grid of [[#software-item-tile|software item tiles]].

Where there is no limit on the number of items shown, initially only 60 items should be loaded and shown initially (60 because that will produce a decent batch of complete rows whether there are 2, 3, 4, 5, or 6 tiles per row). If there are more items, the bottom of the view should have enough space for a spinner. When you scroll to the bottom of the view, the spinner should appear until the next 60 items load and replace it.

<<Anchor(software-list-view)>><<Anchor(get-software-list-view)>>
Line 234: Line 600:
[``[[https://blueprints.launchpad.net/ubuntu/+spec/foundations-lucid-software-center-ui-improvements|foundations-lucid-software-center-ui-improvements]] 1 of 7]

A software list view is used in several screens in the Center. In a list view, each [[#def-software-item|software item]] should have a row displaying the item’s [[#software-icon|icon]], [[#software-title|title]], and [[#software-summary|summary]]. The row’s accessible name should be the item’s title, and its accessible description should be the item’s summary.

{{attachment:item-row-basic.jpg}}

Various extra elements are added to the software list view [[#get-software-list-view|in the “Get Software” section]], [[#installed-software-list-view|in the “Installed Software” section]], and [[#in-progress|in the “In Progress” section]].

In any software list view, as with the [[#software-icon-view|software icon view]], the icon should be overlaid in the corner with the installed emblem if the package is currently installed.

If either row of text is wider than the space available, it should be ellipsized at the trailing end.

By default, none of the rows in a software list view should be selected. If the view allows selection, clicking anywhere in an row should select that item, and Ctrl+clicking on a selected item should deselect it. If no item is selected, pressing the Down arrow key should select the first row, and conversely pressing the Up arrow key should select the last row. If the view does ''not'' allow selection, the arrow keys should scroll the view without highlighting rows.

If the software item is not installable for this computer’s architecture, both the icon and the text — but not the buttons when the row is expanded — should have 50% opacity, but the item should still be selectable.

Whenever an item is selected in a software list view:
 * “Edit” > “Copy Web Link” should be sensitive. Choosing it should [[#web-link-package|copy a Web link for the relevant package]].
 * The first button in the row should, if it is sensitive, be focused by default (otherwise no button should be focused); pressing Tab should cycle through any remaining buttons before leaving the list. '''Test case:''' With an item (that does not have add-ons) selected and focused in the list, press Ctrl F; the search field should be focused. Press Tab; the row and its “More Info” button should be focused. Press Tab again; the “Install” button should be focused. Press Tab again; the selected item in [[#navigation-pane|the navigation pane]] should be focused.
A software list view is used for the “[[#history|History]]” and “[[#progress|Progress]]” sections. A variation of the list view is used in the “[[#installed|Installed]]” section. In future it may also be used in “All Software” for technical categories and subcategories (instead of the usual tile view), and for search results in those categories and subcategories.

{{attachment:software-item-list-basic.png}}

In a list view, each [[#def-software-item|software item]] should have a row displaying the item’s [[#software-icon|icon]], [[SoftwarePackageOperations#title|title]], and [[#software-summary|summary]]. The row’s accessible name should be the item’s title, and its accessible description should be the item’s summary. If either row of text is wider than the space available, it should be ellipsized at the trailing end.

In “All Software” and “Installed”, the titles of items with ratings should be followed by stars for the average rating, and the number of ratings in brackets. If the width of those three things is greater than the width of the list, the stars and number should together be flush at the trailing end of the row, while the title is ellipsized at its end. (Previously the stars were always flush at the trailing end, making it difficult to see which rating belonged to which item. Moving them next to the title means stars are not aligned for different rows, but that matters little, because the ratings will much more often be used for sorting than for direct comparison.)

||<style="border:none;vertical-align:top;">{{attachment:software-item-list-with-ratings.png}}||<style="border:none;vertical-align:middle;">⇄||<style="border:none;vertical-align:top;">{{attachment:software-item-list-selected.png}}||

In the “All Software”, “Installed”, and “History” sections, when (and only when) an item is selected, the row should expand to reveal buttons: “More Info” and “Remove” for an item that is installed, queued for removal, or being removed, and “More Info” and “Install” etc for an item in any other state.

The “More Info” button should have Enter as its access key. Activating it should navigate to the [[#software-item-screen|software item screen]].

The “Install” button should be disabled if the item is currently installing or queued for installation. Similarly, the “Remove” button should be disabled if the item is currently being removed or queued for removal, or if its add-ons are being changed or queued for change. Neither button should have an access key (because that would interfere with typing letters to navigate the list).

The “More Info” in the row should, if it is enabled, be focused by default (otherwise no button should be focused); pressing Tab should cycle through any remaining buttons before leaving the list (bug 634952)). '''Test case:''' (usc-005) Navigate to “All Software” > “Universal Access”. Select “Indic Onscreen Keyboard”. Press Ctrl F; the search field should be focused. Press Tab; the ttf-alee row and its “More Info” button should be focused. Press Tab again; the “Install” button should be focused.

{{attachment:software-item-list-installing.png}}

When an item is being installed, being removed, having its add-ons changed, or queued for any of those tasks, the trailing end of the row should have a progress bar showing progress of the task. If the item is being installed or is having its add-ons changed, it should also have an icon-only cancel button. During this time the secondary text for the row should be the status text for the task, instead of the item’s [[#software-summary|summary]].

If the item is not installable for this computer’s architecture, the icon and the text — but not any buttons when the row is expanded — should have 50% opacity, but the item should still be selectable.

By default, none of the rows in a software list view should be selected. If the view allows selection, clicking anywhere in an row should select that item, and Ctrl+clicking on a selected item should deselect it. If no item is selected, pressing the Down arrow key should select the first row, and conversely pressing the Up arrow key should select the last row. If the view does not allow selection, the arrow keys should scroll the view without highlighting rows.

Whenever an item is selected in a software list view, “Edit” > “Copy Web Link” should be enabled. Choosing it should [[#web-link-package|copy a Web link for the relevant package]].
Line 257: Line 631:
[``[[https://blueprints.launchpad.net/ubuntu/+spec/foundations-lucid-non-applications-in-software-center|foundations-lucid-non-applications-in-software-center]] 2 of 4]

If a software list view has '''items hidden by default''', the bottom of the pane containing the view should have a panel (below the bottom of the scrollbar) containing text of the form “__17 other__ technical items”. Following that link should display the items that were hidden by default, and make the panel itself slide down into oblivion.
If a software list view has '''items hidden by default''', the bottom of the pane containing the view should have a panel (below the bottom of the scrollbar) containing a hyperlink of the form “__Show 17 technical items__”. Following the link should display the items that were hidden by default, and make the link change to the form “__Hide 17 technical items__”. Except [[#navigation-back-forward|in Back/Forward navigation]], revisiting the software list view should not persist in showing items; it should resume hiding them by default.
Line 263: Line 635:
<<Anchor(software-list-view-categorized)>>
==== Categorized list view screen ====

[``[[https://blueprints.launchpad.net/ubuntu/+spec/foundations-lucid-software-center-ui-improvements|foundations-lucid-software-center-ui-improvements]] 2 of 7]

||<tablestyle="float: right; margin: 0 0 1em 1em;" style="border: none;">{{attachment:categorized-list-view-screen.jpg}}||

A categorized list view screen should use a [[#software-list-view|software list view]], with the addition that all its software items should be child items of parent items for [[#Genre|the department]] (but not the subsection) that they belong to. ''Only'' departments that actually contain items should be shown. The expanded or collapsed state of every department, for every categorized list view screen, should be remembered between sessions until that department stops existing in that list view.

Any categorized list view screen should have a [[#location-bar|location bar]], containing a section-dependent title and a [[#search-field|search field]]. It should also have section-dependent [[#status-bar|status bar]] text (which, as usual, should temporarily be overridden when displaying [[#search-results|search results]]).

Searching from a categorized list view screen should not cause any departments to expand of their own accord. However, departments that do not either (a) contain any matching software items, or (b) have names that match the search text themselves, should themselves not be present in the list view.

||<tablestyle="clear: both;" style="border: none;">||

<<Anchor(software-item-screen)>>
==== Software item screen ====

In both the “Get Software” and “Installed Software” sections, a '''software item screen''' should show information about an item, and let you install or remove it. (Once [[#add-ons|add-on handling]] is implemented, it should also let you select and change add-ons.)

Whenever a software item screen is being displayed:
 * If it is an item that is neither currently installed nor being installed, “File” > “Install” should be sensitive. Selecting it should [[#installing|install the selected item]].
 * If it is an item that is currently installed and not currently being removed, “File” > “Remove” should be sensitive. Selecting it should [[#removing|remove the selected item]].
 * Whenever text is selected in the screen, “Edit” > “Copy” should be sensitive. Choosing it should copy the selected text to the clipboard.
 * “Edit” > “Copy Web Link” should be sensitive. Choosing it should [[#web-link-package|copy a Web link for the relevant package]].
 * The [[#status-bar|status bar]] should contain no text.

''Erratum: In 2.0, the stars and reference to reviews shown here should not be present.''

{{attachment:software-item-screens.jpg}}

A software item screen should contain:
 * The [[#software-icon|icon]] for the item.
 * The [[#software-title|title]] of the item.
 * The [[#software-summary|summary]] of the item.
 * If the item is installed, being removed, or queued for removal, its [[#software-item-screen-state-installed|installed state bar]].
 * A thumbnail of the screenshot of the item from [[http://screenshots.ubuntu.com/|screenshots.ubuntu.com]], if there is one, or otherwise the centered greyed-out text “No screenshot available”. Activating the screenshot (by clicking it, or pressing Enter when it is focused) should open it in your preferred image viewer.
 * Description text:
  * If the item is in `app-install-data` but refers to a package in a software source that is not enabled, the text ‘This software is available from the “{source}” source, which you are not currently using.’.
  * Otherwise, if the item is in `app-install-data` and refers to a package that is not present in the `apt` cache, the text “To show information about this item, the software catalog needs updating.”.
  * Otherwise, if the item is not available for this architecture, the text “Sorry, <Title> is not available for this type of computer (<Architecture>).”.
  * Otherwise, the package description.
 * A “Web site” link to the Web site, if there is one.
 * The [[#add-ons|add-ons]] section (if add-on handling has been implemented).
 * Text describing the total size of the item:
  * if it is not installed, “Total size: {``X} to download, {Y} when installed ({Z} available)”, where X is the download size including not-yet-installed dependencies, Y is the installed size including not-yet-installed dependencies, and Z = the amount of space free on the partition where the software would be installed;
  * if it is already installed, “Total size: {Y} on disk ({Z} available)”.
 * The [[#software-item-screen-state-available|availability state bar]].
 * Text of the form “Version: {version number} ({package name})”.
 * The text “License:” followed by its [[#license|license label]].
 * The text “Updates:” followed by the maintenance status for the item.

<<Anchor(software-item-screen-state-installed)>>The '''installed state bar''' contents depends on the item’s exact state.

 * If the item is installed and not queued for removal, the installed icon and the text “Installed” at the leading end, and a “Remove” button at the trailing end.

 * If the item is being removed or queued for removal, the status text for the removal at the leading end, and a progress bar at the trailing end.

 {{attachment:software-item-screen-state-installed-removing.jpg}}

<<Anchor(software-item-screen-state-available)>>The '''availability state bar''' contents also depends on the item’s exact state.

 * If the item is in `app-install-data` but refers to a package in a software source that is not enabled, a “Use This Source” button that enables that source.

 * Otherwise, if the item is in `app-install-data` and refers to a package that is not present in the `apt` cache, an “Update Now” button that updates the `apt` cache.

 * Otherwise, if the item is not available for this architecture, no button at all.

 * Otherwise, if the item is installed, [[#add-ons|add-on handling]] has been implemented, and add-ons are being changed, the text “Changing add-ons…” at the leading end, and a progress bar and icon-only cancel button at the trailing end.

 {{attachment:software-item-screen-state-changing-add-ons.jpg}}

 * Otherwise, if the item is installed and add-on handling has been implemented, the text “Free” at the leading end, and “Cancel” and “Apply Changes” buttons at the trailing end.

 * Otherwise, if the item is currently being installed or queued for installation, the status text for the installation at the leading end, and a progress bar and an icon-only cancel button at the trailing end.

 {{attachment:software-item-screen-state-available-installing.jpg}}

 * Otherwise, if the item is not installed, the text “Free” at the leading end, and an “Install” button.

 * Otherwise, no bar at all.

The “Get Software” section shows screens for both uninstalled and installed items, and these should share the overall “Get Software” color scheme. The “Installed Software” section shows screens for installed items only, and should have a different color scheme.

||<style="background:LightCoral">Copy-editors||
||Within the Center, examine the title, summary, and description of an item. Is it concise and helpful? Is the spelling and grammar correct? If it’s a non-geek application, does the description avoid geek language? Is it in the appropriate department? If you find a problem, and you are comfortable diving into code to fix it yourself, follow the [[https://wiki.ubuntu.com/DistributedDevelopment/Documentation|distributed development instructions]] with the [[https://code.launchpad.net/ubuntu/+source/app-install-data-ubuntu|app-install-data-ubuntu]] package to fix problems in an application’s title or summary, or [[https://launchpad.net/ubuntu|the package itself]] to fix problems with its description. Otherwise, [[https://bugs.launchpad.net/ubuntu|report a bug]] with (a) the current text, (b) what needs improving, and (c) your proposed replacement text, and give the bug report the `metadata` tag.||

||<style="background:Peru">Packagers||
||Please look for [[https://bugs.launchpad.net/ubuntu/+bugs?field.tag=metadata|bugs that people have reported]] about inappropriate application names or summaries, or package descriptions or departments, and fix them. Thanks for your help.||

||<style="background:Peru">Packagers||
||If a single package contains multiple applications, and people might reasonably want to install these applications separately, work to separate the packages into one per application.||

=== Main window ===

||<tablestyle="margin: 0 0 1em 1em; clear: right; float: right;" style="border: none;"> {{attachment:main-window-structure.jpg}}||

The Center should use a normal window, with the title “Ubuntu Software Center”.

''default window size and placement TBD''

The main window has four major components: the menu bar at the top, the [[#navigation-pane|navigation pane]] on the leading side, the main pane on the trailing side, and the [[#status-bar|status bar]] at the bottom. The bar between the navigation pane and the main pane should be draggable to change their respective widths.

Sometimes the main pane contains a [[#location-bar|location bar]] or an action bar.

<<Anchor(navigation-pane)>>
==== Navigation pane ====

The navigation pane should have the accessible name “Software sources”. It should have a vertical scrollbar only when necessary, and should never have a horizontal scrollbar. Instead, each item inside it should be ellipsized at its trailing end whenever there is not enough room to show it completely.

The navigation pane should list the top-level sections that can be navigated to, each with a text-size icon and a label:
 * “[[#available|Get Software]]”
 * “[[#installed|Installed Software]]”
 * an 0.5-em gap
 * “[[#in-progress|In Progress]]”.

''In future versions the navigation pane will contain other items, such as history, recommendations, and user-created collections.''

In the navigation pane, one and only one item should be selected at any time. Single-clicking an item should select it and immediately change the visible section. Double-clicking should behave identically to single-clicking, and secondary-clicking or dragging should do nothing.

Navigating to a section should display, to the extent still applicable, the section exactly as it was when it was last viewed since the Center was launched: the same department, category, search results, scroll position, etc. This memory should not persist once the Center is closed.

If you collapse the parent item of the selected item in the navigation pane, that parent item should become selected instead.

'''Test case:''' In the “Get Software” section, navigate to the Abi``Word application, and scroll to the bottom of the Abi``Word screen. In the navigation pane click on “Installed Software”, then on “Get Software”. The Center should resume displaying the bottom of the Abi``Word screen.

'''Test case:''' In the “Installed Software” section, navigate to the Firefox application. Close the Center, then reopen it. Click on “Installed Software”. The Center should display the top level of the Installed Software section.

'''Test case:''' Begin installing something. While it is installing, in the “Get Software” > “Internet” section, search for “chat”, and scroll through the results. Click on “In Progress”; the Center should show the installation progress. Now click on “Get Software”. The Center should return to the search results for “chat” within the “Get Software” > “Internet” department, in exactly the scroll position that you left it.

<<Anchor(main-pane)>>
==== Main pane ====

Whenever the main pane contains a location bar with [[#path-button|a path button]], the main pane should have an accessible name the same as the text of the last item in the path button.

Whenever the main pane does not contain a location bar with a path button, the main pane should have an accessible name the same as the text of the selected item in [[#navigation-pane|the navigation pane]].

<<Anchor(available)>>
==== “Get Software” section ====

The “Get Software” section should present all software items that are installable from any of the computer’s current software sources (plus any software source represented by a `X-AppInstall-Channel` attribute in `app-install-data`), regardless of whether they are already installed (already-installed items should have the “installed” emblem). It should not provide access to packages that are currently installed but not in any of your software sources; these should be in [[#installed|the “Installed Software” section]] instead.

The section contains a “lobby” screen, screens for each “department”, screens for subsections, and a screen for each [[#def-software-item|software item]].

In the navigation pane, the “Get Software” item should have the same icon as the Software Center itself. It may have [[#broken-catalog|an extra icon at the trailing end for a broken software catalog]].

Whenever you are in the “Get Software” section, the “View” > “All Software” and “View” > “Canonical-Maintained Software” items should be sensitive. Changing the selection should determine whether all software or just Canonical-maintained software is are shown. The selection should persist regardless of which screen in the “Get Software” section is being displayed.

Whenever a software item is selected — whether searching from the [[#lobby|lobby]], in a [[#department|department]], in a [[#subsection|subsection]], or implicitly by being in a [[#get-software-item|software item]] screen itself:
 * If it is an item that is not currently installed nor being installed, “File” > “Install” should be sensitive. Selecting it should [[#installing|install the selected item]].
 * If it is an item that is currently installed and not currently being removed, “File” > “Remove” should be sensitive. Selecting it should [[#removing|remove the selected item]].

<<Anchor(get-software-navigation)>>
===== Back/Forward navigation =====

[``[[https://blueprints.launchpad.net/ubuntu/+spec/foundations-lucid-software-center-ui-improvements|foundations-lucid-software-center-ui-improvements]] 3 of 7]

Starting from each launch of the Center, it should remember a navigation history of the screens you have visited in the “Get Software” section (not including any screens for [[#channels|individual software sources]]). This navigation history should function as in a conventional Web browser: navigating using the history should move within it without adding items to it, and navigating without using the history should discard all forward items from the history.

Each item in the history should remember its scroll position, what software item was selected (if any), and what element was focused (if any).

If the search field was non-empty when you navigated to a separate screen, the search you had entered just before you navigated should be stored as its own history item. Intermediate searches should not be in the history.

'''Test case:'''
 1. Launch the Center. Both the Back and Forward buttons should be insensitive.
 1. Navigate to the “Games” section. The Back button should become sensitive.
 1. Navigate to the “Installed Software” section, and then to an individual item screen inside it. Return to “Get Software” in the navigation list. You should be back in the “Games” section.
 1. Activate the Back button. You should return to the lobby, the Back button should become insensitive, and the Forward button should become sensitive.
 1. Activate the Forward button. You should return to the “Games” section, the Back button should become sensitive, and the Forward button should become insensitive.

===== Location bar in the “Get Software” section =====

{{attachment:get-software-location-bar.jpg}}

All screens in the “Get Software” section should have a [[#location-bar|location bar]], containing at least Back and Forward buttons and a [[#path-button|path button]]. (The elements in the path button are defined for individual screens in this specification.)

The Back and Forward buttons should navigate through the [[#get-software-navigation|navigation history]]. If there is no screen to go back to or forward to, the Back and Forward buttons should be insensitive respectively.

<<Anchor(get-software-list-view)>>
===== Software list view in “Get Software” =====

''Erratum: In 2.0, the stars and reference to reviews shown here should not be present.''

||<style="border:none;vertical-align:top;">{{attachment:item-row-available-unselected.jpg}}||<style="border:none;vertical-align:middle;">⇄||<style="border:none;vertical-align:top;">{{attachment:item-row-available-selected.jpg}}||

When (and only when) a row is selected, it should expand to reveal “More Info” and “Install” buttons (and, if [[#add-ons|add-on handling]] has been implemented and the item has add-ons, a “Choose Add-Ons…”/“Change Add-Ons…” button depending on whether the item is currently installed).

||<style="border:none;vertical-align:top;">{{attachment:item-row-available-unselected.jpg}}||<style="border:none;vertical-align:middle;">⇄||<style="border:none; vertical-align:top;">{{attachment:item-row-available-selected.jpg}}||
||<style="border:none;vertical-align:top;">{{attachment:item-row-available-installed-unselected.jpg}}||<style="border:none;vertical-align:middle;">⇄||<style="border:none;vertical-align:top;">{{attachment:item-row-available-installed-selected.jpg}}||

The “More Info” button should have Enter as its access key. Activating it should navigate to [[#get-software-item|the software item screen]].

The “Install” button (and, once implemented, the “Choose Add-Ons…”/“Change Add-Ons…” button) should be insensitive if the item is installed, currently installing, or scheduled for installation. The “Install” button should not have an access key (because that would interfere with typing letters to navigate the list). Activating the button should [[#installing|install the item]].

When an item is being installed or removed (or, once [[#add-ons|add-on handling]] has been implemented, is having its add-ons changed), the trailing end of the row should have a progress bar showing progress of the task. If the item is being installed (or is having its add-ons changed), it should also have an icon-only cancel button. During this time the secondary text for the row should be the status text for the task, instead of the item’s [[#software-summary|summary]].

||<style="border:none;vertical-align:top;">{{attachment:item-row-available-installing-unselected.jpg}}||<style="border:none;vertical-align:middle;">⇄||<style="border:none;vertical-align:top;">{{attachment:item-row-available-installing-selected.jpg}}||
||<style="border:none;vertical-align:top;">{{attachment:item-row-available-removing-unselected.jpg}}||<style="border:none;vertical-align:middle;">⇄||<style="border:none;vertical-align:top;">{{attachment:item-row-available-removing-selected.jpg}}||

<<Anchor(lobby)>>
===== Lobby screen =====

{{attachment:lobby.jpg}}

The lobby is the entry point to the Center, so it is important that it be attractive and welcoming. (The term “lobby” should not appear anywhere in the interface or help text.)

Whenever the lobby screen is being displayed:
 * The [[#path-button|path button]] should consist only of the “Get Software” element.
 * The [[#status-bar|status bar]] text should be of the form “29 079 items available”.

The background of the lobby screen should be grey-blue 182,189,196 (#b6bdc4), and all text in that screen should be black 0,0,0 (#000000). The padding between the edges of the lobby and its contents should be 1 em, both horizontally and vertically.

The lobby currently has one section, “[[#departments|Departments]]”. The header should use a background... ''TBD'' The section should have a bottom margin of 2 em.

Arrow keys should change focus between the selectable items in the lobby screen.

<<Anchor(departments)>>
The “Departments” section of the lobby screen should list the departments as defined and sorted under “[[#Genre|Genre]]”, using an [[#software-icon-view|icon view]].

||<tablestyle="color:Black" style="background:LightGreen">Artists||
||What is a more attractive way of presenting these departments? Currently they look very similar to individual applications, but probably they should look different. Perhaps they should use buttons of some sort? Perhaps the clickable element for each department could incorporate small versions of the icons for the most popular applications or packages in that department?||

<<Anchor(department)>>
===== Department screen =====

[``[[https://blueprints.launchpad.net/ubuntu/+spec/foundations-lucid-software-center-ui-improvements|foundations-lucid-software-center-ui-improvements]] 4 of 7]

{{attachment:get-software-department.jpg}}

If a department [[#Genre|has any subsections]], ''or'' if it has any items marked as `X-AppInstall-AlwaysOnTop`, the department screen should have two panes. Otherwise, it should have one pane.

If there are any items marked as `X-AppInstall-AlwaysOnTop`, the top pane should begin with a “Bundles” section, presenting those items [[#def-alphabetically|alphabetically]] in an [[#software-icon-view|icon view]].

Next in the top pane should be a section with the same name as the department itself (''e.g.'' “Games”), presenting those items [[#def-alphabetically|alphabetically]] in an [[#software-icon-view|icon view]].

The bottom pane — or, if there is only one pane, the only pane — should be an [[#def-alphabetically|alphabetically]] sorted [[#software-list-view|software list view]] of the software items in that department. If the department is not set to “[[#Genre|Show non-applications by default]]”, non-application items should be [[#software-list-view-disclosure|hidden by default]].

Whenever a department screen is being displayed:
 * The [[#path-button|path button]] should contain only segments for “Get Software” and the name of the department.
 * The [[#status-bar|status bar]] text should be of the form “301 items available”, counting all the items in that department, including all subsections.

<<Anchor(subsection)>>
===== Subsection screen =====

[``[[https://blueprints.edge.launchpad.net/ubuntu/+spec/foundations-lucid-software-center-subcategories|foundations-lucid-software-center-subcategories]] 1 of 2]

{{attachment:get-software-subsection.jpg}}

A subsection screen should be an [[#def-alphabetically|alphabetically]] sorted [[#software-list-view|software list view]] of the [[#def-software-item|software items]] in that subsection. If the subsection is not set to “[[#Genre|Show non-applications by default]]”, non-application items should be [[#software-list-view-disclosure|hidden by default]].

Whenever a subsection screen is being displayed:
 * The [[#path-button|path button]] should contain three segments — “Get Software”, the department, and the subsection.
 * The [[#status-bar|status bar]] text should be of the form “17 items available”, counting all the items in that subsection.

<<Anchor(get-software-searching)>>
===== Searching in “Get Software” =====

When in the lobby, or in the screen for a department or subsection, the location bar should contain a [[#search-field|search field]] that searches within that scope. This should follow [[#searching|the standard searching behavior]].

In addition, whenever the search field contains any text, or has been empty for less than two seconds:
 * The [[#path-button|path button]] should have an extra item at the trailing end, “Search Results”. Selecting the parent item in the path button should clear the search field, thereby navigating to the previous screen.
 * The rest of [[#main-pane|the main pane]] should temporarily be replaced by a [[#software-list-view|software list view]] of search results. If in a department or subsection, the results should be limited in scope to that department or subsection.
 * The [[#status-bar|status bar]] text should be of the form “No matching items” or “37 matching items”.

'''Test case:''' Launch the Center. Type Ctrl F; the search field should be focused. Type “fire” (without quotes or pressing Enter); the “Search Results” path button element should appear, and the main pane should be replaced by search results, with Firefox first. Press the down arrow key once; Firefox should be selected in the results. Press Enter; the Center should navigate to the software item screen for Firefox.

{{attachment:department-search.jpg}}

[``[[https://blueprints.launchpad.net/ubuntu/+spec/foundations-lucid-non-applications-in-software-center|foundations-lucid-non-applications-in-software-center]] 3 of 4]

When searching from the lobby, a non-application item should be [[#software-list-view-disclosure|hidden by default]] if its [[#Genre|primary subsection]] (or, if it has no subsection, its primary department) does not “Show non-application packages by default”.

When searching from a department screen, a non-application item should be hidden by default if its presence in ''that'' department is in a subsection (or, if it has no subsection, that department itself) that does not show non-application packages by default.

 When searching from a subsection screen, a non-application item should be hidden by default if ''that'' subsection does not “Show non-application packages by default”.

For the sake of people who are unfamiliar with how they should use the search, there should be a greylist of words that are downplayed when searching. “Downplayed” in this sense means that:
 * A search that consists only of greylisted words should work just as if none of the words were greylisted.
 * In any other search that contains one or more greylisted words, the greylisted words should be ignored: only the words that are not greylisted should be searched for. However, once the results are chosen, the presence of any greylisted words should cause a result to appear higher in the list.

For English, the greylist should be “app application package program programme suite tool”. The greylist should have a translation note: “Do not translate this list directly. Instead, provide a list of words in your language that people are likely to include in a search but that should normally be ignored in the search.”

'''Test case:''' From the lobby, search for “drawing”. Then search for “drawing program”. The Center should return exactly the same results for both searches, but in a different order.

'''Test case:''' From the lobby, search for “application suite”. The Center should return only results that include both those words.

||'''Testers'''||
||You can help us improve the search function by [[/SearchTesting|testing it in successive versions]].||

''Needs refactoring: Some of this search logic also applies to “Installed Software”.''

<<Anchor(get-software-item)>>
===== Software item screen in “Get Software” =====

Whenever a [[#software-item-screen|software item screen]] is being displayed in the “Get Software” section:
 * The [[#path-button|path button]] should consist of elements for “Get Software”, then the primary department to which the item belongs, then the primary subsection if any, then the [[#software-title|title]] of the item.
 * The [[#location-bar|location bar]] should not contain a [[#search-field|search field]].
 * If the relevant package is not maintained by Canonical and you then choose “View” > “Canonical-Maintained Software”, the Center should automatically navigate up to the subsection screen; or, if the entire subsection contains no Canonical-maintained items, up to the department screen; or, if the entire department contains no Canonical-maintained items, up to the [[#lobby|lobby]] screen).

<<Anchor(installed)>>
==== “Installed Software” section ====

The “Installed Software” section should provide access to all software items that are currently installed, regardless of whether they are available from any of the computer’s current software sources.

[``[[https://blueprints.launchpad.net/ubuntu/+spec/foundations-lucid-software-center-ui-improvements|foundations-lucid-software-center-ui-improvements]] 5 of 7]

The “Installed Software” section should have its own home screen, and screens for individual [[#def-software-item|software items]]. It should not include screens for each department or subsection.

Whenever you are in the “Installed Software” section, the “View” > “All Software” and “View” > “Canonical-Maintained Software” items should be sensitive. Changing the selection should determine whether all software or just Canonical-maintained software is shown. The selection should persist regardless of which screen in the “Installed Software” section is being displayed.

Regardless of which screen is being displayed, the section should should have a [[#location-bar|location bar]] containing a [[#path-button|path button]].

In the navigation pane, “Installed Software” should have an icon of a computer. It may have [[#broken-catalog|an extra icon at the trailing end for a broken software catalog]].

{{attachment:installed-software.jpg}}

The top level of the “Installed Software” section should show a [[#software-list-view-categorized|categorized list view screen]] listing all the software items currently installed, with its title being “Installed Software”, and its status text being of the form “1047 items installed”.

<<Anchor(installed-software-list-view)>>
===== Software list view in “Installed Software” =====

When (and only when) a row is selected, it should be expanded to reveal “More Info” and “Remove” buttons (and, if [[#add-ons|add-on handling]] is implemented and the item has add-ons, a “Change Add-Ons…” button).

||<style="border:none;vertical-align:top;">{{attachment:item-row-installed-unselected.jpg}}||<style="border:none;">⇄||<style="border:none;vertical-align:top;">{{attachment:item-row-installed-selected.jpg}}||

The “More Info” button should have Enter as its access key. Activating it should navigate to [[#installed-software-item|the software item screen]].

The “Remove” button should not have an access key (because that would interfere with typing letters to navigate the list). Both it, and “File” > “Remove”, should be insensitive if the item is either being removed or scheduled for removal. Activating the button or the menu item should [[#removing|remove the software item]].

As with the “Get Software” section, when an item is being removed or is queued for removal, its row should have a progress bar at the trailing end, and its secondary text should be status text rather than the item summary. If the item is successfully removed, the progress bar should remain full for one second before the row disappears altogether (because the item is no longer installed).

||<style="border:none;vertical-align:top;">{{attachment:item-row-installed-removing-unselected.jpg}}||<style="border:none;">⇄||<style="border:none;vertical-align:top;">{{attachment:item-row-installed-removing-selected.jpg}}||

<<Anchor(installed-software-item)>>
===== Software item screen in “Installed Software” section =====

Whenever a [[#software-item-screen|software item screen]] is being displayed in the “Installed Software” section:
 * The [[#path-button|path button]] should consist of elements for “Installed Software”, then the [[#software-title|title]] of the package. (There should not be elements for departments or subsections.)
 * The [[#location-bar|location bar]] should not contain a [[#search-field|search field]].
 * “File” > “Remove” should be sensitive. Selecting it should [[#removing|remove the selected package]].
 * “Edit” > “Copy Web Link” should be sensitive. Choosing it should [[#web-link-package|copy a Web link for the selected package]].
 * If the package is not maintained by Canonical and you then choose “View” > “Canonical-Maintained Software”, the Center should automatically navigate back to the main “Installed Software” screen.
Line 607: Line 636:
==== Individual software sources ====

[``[[https://blueprints.launchpad.net/ubuntu/+spec/foundations-lucid-software-center-ui-improvements|foundations-lucid-software-center-ui-improvements]] 6 of 7]

{{attachment:get-software-channels.jpg}}

In the navigation pane, the top-level “Get Software” and “Installed Software” sections should present the aggregate of available or installed software items, respectively, from all enabled software sources.

Meanwhile, those individual software sources should be presented as separate child items of the “Get Software” item and the “Installed Software” item. “Get Software” should have child items for each software source that is enabled, plus an item for any source represented by an `X-AppInstall-Channel` in `app-install-data`). “Installed Software” should have child items for each source from which any software is currently installed, plus an item containing all installed packages with an unknown source.

Both “Get Software” and “Installed Software” should be collapsed on first launch, but their expanded or collapsed state should persist between sessions.
If an software source disappears while it is selected, the parent item should become selected.

The icon, label, and sort order for individual software sources inside each of “Get Software” and “Installed Software” should be as follows:
 1. Main, Universe, Restricted, and Multiverse for the current Ubuntu version should be aggregated into a single first item, with the Ubuntu logo as its icon, and the label “Provided by Ubuntu”.
 1. Next should be any sources represented by an `X-AppInstall-Channel` attribute in `app-install-data`, sorted [[#def-alphabetically|alphabetically]]. The Canonical partner repository for the current Ubuntu version should have the Canonical logo as its icon, and the label “Canonical Partners”. Any others should have a generic repository icon, and should have a label equal to the contents of the `Label:` field from the `Release` file.
 1. Next should be any PPAs, sorted [[#def-alphabetically|alphabetically]]. Each should use the same PPA icon that Launchpad uses, and should have a label equal to the contents of the `Label:` field from the `Release` file. Until this label has been retrieved from Launchpad, a PPA item should use the same naming scheme as any other non-CD source.
 1. Next should be any other network sources, sorted [[#def-alphabetically|alphabetically]]. Each should use a generic repository icon, and a label consisting of its URI with the protocol stripped, ''e.g.'' “packages.example.org/ubuntu/”. (We don’t use the `Label:` here because we don’t trust third-party repositories as much as we trust PPAs.)
 1. Next should be any volumes (such as CDs, DVDs, or USB sticks) containing packages, sorted alphabetically. Each should have the same icon as it has in the file manager. If a volume contains a `/.disk/info` file, its label should be of the form “{OS version}”, where the OS version is the contents of `/.disk/info` up to but not including the first `"` character nor any spaces immediately preceding it. Otherwise, the label should be the same as it is in the file manager.
 1. Finally, in “Installed Software”, the section for packages with an unknown source should have a question mark as its icon, and the label “Other”.

The screen for each individual software source should present a [[#software-list-view|software list view]] of all the items in that source. Whenever this screen is being displayed, the [[#status-bar|status bar]] text should be of the form “141 items” (as appropriate for the number of items in that source).

'''Test case:'''
 1. With “Get Software” collapsed and “Installed Software” expanded, close the Ubuntu Software Center and reopen it. The state should be remembered.
 1. Expand the “Get Software” item. Add a PPA in Software Sources. The PPA should appear immediately as a child item of “Get Software”, and should soon be relabelled from its URL to its display name.
 1. Install a package from that PPA. When it finishes installing, the PPA should appear immediately as a child item of “Installed Software” too.
 1. Select that new child item. Remove the package. When it finishes uninstalling, the PPA should disappear as a child item of “Installed Software”, and that parent item should become selected.
 1. Select the PPA inside “Get Software”, then remove the PPA from Software Sources. The PPA should disappear immediately as a child item of “Get Software”, and that parent item should become selected.

'''Test case:'''
 1. Download and install the Skype package.
 1. Expand the Ubuntu Software Center “Installed Software” section. it should have an “Other” child item that lists the Skype package.
 1. Expand the “Get Software” section. It should ''not'' have an “Other” child item.
==== Software sources ====

||<tablestyle="clear:both; float:right; margin:0 0 1em 1em;" style="border: none;">{{attachment:software-sources.png}}||

In most cases, the collection of software that USC presents should consist of the aggregate of available software items from all enabled software sources, plus any software currently installed that has no known source.

When it is appropriate to present individual software sources separately, they should be presented as follows (and in this order):

<<Anchor(updates-text)>>

||'''Source'''||'''Icon'''||'''Label'''||'''“Downloaded from” text'''||'''“Updates provided” text'''||
||Main and Restricted for the current Ubuntu version||<(|2>the Ubuntu logo||<(|2>“'''Provided by Ubuntu'''”||“Ubuntu”||“by Canonical until June 2027”, or “none (Canonical updates ended June 2011)”||
||Universe and Multiverse for the current Ubuntu version||“Ubuntu”||“by the Ubuntu development community”||
||The Canonical partner repository for the current Ubuntu version||the Canonical logo||“'''Canonical Partners'''”||“Canonical”||“by the vendor”||
||Any other sources represented by an `X-AppInstall-Channel` attribute in `app-install-data`, sorted [[#def-alphabetically|alphabetically]]||a generic repository icon||the contents of the `Label:` field from their `Release` file||domain name of the repository||“unknown”||
||Purchasable items||money||“'''For Purchase'''”||“Canonical”||“by the vendor”||
||the Independent repository for the current Ubuntu version||a cluster of people||“'''Independent'''”||“Canonical”||“by the developer”||
||Any PPAs (not including those for purchased items), sorted [[#def-alphabetically|alphabetically]]||The same PPA icon that Launchpad uses||the contents of the `Label:` field from their `Release` file, once retrieved from Launchpad — until then, the same naming scheme as any other non-CD source||“Launchpad”||“by the developer”||
||Any other network sources, sorted [[#def-alphabetically|alphabetically]]||a generic repository icon||its URI with the protocol stripped, ''e.g.'' “packages.example.org/ubuntu/” (we don’t use the `Label:` here because we don’t trust third-party repositories as much as we trust PPAs)||domain name of the repository||“unknown”||
||Any volumes (such as CDs, DVDs, or USB sticks) containing packages, sorted alphabetically||the same icon as it has in the file manager||If a volume contains a `/.disk/info` file, “{OS version}”, where the OS version is the contents of `/.disk/info` up to but not including the first `"` character nor any spaces immediately preceding it. Otherwise, the same label as is used in the file manager.||“—”||“none”||
||Packages without an associated source||a question mark in a disc||“'''Other'''”||“unknown”||“none”||

The '''available software sources''' should consist of this full list, except for “Other”.

The '''installed software sources''' should consist of all those items in this list from which you have installed any software.

'''Test case:''' (sc-013)
 1. Launch USC.
 1. Add a PPA in Software & Updates Settings.
 1. Open the “All Software” menu; the PPA should be shown in the menu.
 1. Open the “Installed Software” menu; the PPA should not be shown in the menu.
 1. Install a package from that PPA. When it finishes installing, open the “Installed Software” menu again; the PPA should now be present.
 1. Select that menu item, and remove the package; when it finishes uninstalling, the PPA should disappear from the “Installed” menu, and USC should automatically navigate to the main “Installed” screen.
 1. Select the PPA from the “All Software”, then remove the PPA from Software & Updates Settings. The PPA should disappear from the “All Software” menu, and USC should automatically navigate to the home screen.

'''Test case:''' (sc-014)
 1. Download and install a standalone .deb package, such as [[http://www.opera.com/browser/download/|Opera]].
 1. Open the “Installed Software” menu; it should have an “Other” child item that, if selected, shows the item you installed.
 1. Open the “All Software” menu; it should have an identical “Other” child item.
 1. Uninstall the package; the “Other” item should disappear from both menus, if that was the only standalone item installed.

<<Anchor(channel-view)>>
Line 644: Line 680:
When any individual software source inside “Get Software” is selected, [[#main-pane|the main pane]] should show a [[#software-list-view|software list view]] of all the packages that source contains, with a single-segment [[#path-button|path button]] using the same label for the source as the navigation pane does, and status text of the form “17 items available”.

When any individual software source inside “Installed Software” is selected, the main pane should show a [[#software-list-view|software list view]] listing all the packages currently installed (or in the process of being removed) from that source, with a single-segment path button using the same label as the navigation pane, and status text of the form “3 items installed”.

For all sources except “Provided by Ubuntu”, the items in the “View” menu should be insensitive, because they do not apply.

<<Anchor(in-progress)>>
==== “In Progress” section ====

{{attachment:in-progress.jpg}}<<BR>>

The “In Progress” section should be visible only when items are being installed or removed, or when the last installation or removal finished less than two seconds ago. If the section disappears while being displayed, the Center should return to the section that was previously being displayed.

In the navigation pane, the section should have an animated icon of two green semicircular arrows chasing each other clockwise. After the words “In Progress” should be, in brackets, the number of tasks yet to be completed.

Whenever the “In Progress” section is being displayed, the [[#status-bar|status bar]] text should be of the form “2 items remaining” or “All items completed”, as appropriate.

The section itself should list the items requested for installation or removal, earliest first. The rows in the list should be based on a [[#software-list-view|software item list view]], with these differences:
 * the second row of text is status text, rather than the package summary or package name;
 * each row has a progress bar (which itself never contains any text);
 * each row representing an installation has a cancel button (which can be triggered by the Esc key when the row is selected), while each row representing a removal has a gap the same size as a cancel button (so that its progress bar lines up with the progress bars of installation rows).

{{attachment:1.0-in-progress-row.jpg}}

The cancel button for an individual item should be sensitive only when the item has not yet started or is still downloading.

If you try to close the Center while an item is installing or being removed:
 1. All items in the navigation pane, other than “In Progress”, should become insensitive.
 1. The Center should switch to displaying the “In Progress” section.
 1. When installation is completed or cancelled, the Center should close.

<<Anchor(status-bar)>>
==== Status bar ====

The status bar should contain status text, and, in the trailing corner, a resize handle.

The status text should be centered within the status bar, both horizontally (as if the resize handle was not present) and vertically.

=== Determining software item information ===

[``[[https://blueprints.launchpad.net/ubuntu/+spec/foundations-lucid-software-center-repository-based-index|foundations-lucid-software-center-repository-based-index]] 1 of 1]

For any [[#def-software-item|software item]] (a package, or an application with a `.desktop` file inside a package), there a variety of fields that are derived from the item’s entry in the `app-install-data` package, the archive index, the Debian control file for the package, or a combination of these.
When any individual software source inside “All Software” is selected, the main pane should show a [[#software-list-view|software list view]] of all the packages that source contains, with status text of the form “17 items available”.

When any individual software source inside “Installed” is selected, the main pane should show a [[#software-list-view|software list view]] listing all the packages currently installed (or in the process of being removed) from that source, with status text of the form “3 items installed”.

For all sources except “Provided by Ubuntu”, the items in the “View” menu should be disabled, because they do not apply.

=== Determining information about software items ===

Most information about a package — its title, short name, summary, and license info — should [[SoftwarePackageOperations#packages|come from Aptdaemon]]. These are the exceptions:

<<Anchor(Genre)>>
==== Icon and genre ====
Line 689: Line 694:
==== Icon ====

The '''icon''' should be the icon supplied for the application by your current theme, if there is one; otherwise the icon provided by `app-install-data`, if there is one; otherwise the generic package icon. ''This may be enhanced later for more specialized generic icons.''

<<Anchor(software-title)>>
==== Title ====

[``[[https://blueprints.launchpad.net/ubuntu/+spec/foundations-lucid-non-applications-in-software-center|foundations-lucid-non-applications-in-software-center]] 4 of 4]

The '''title''' should be the application Name, if there is one; otherwise the package synopsis (the first line of [[http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Description|the Description field]]). If this leaves multiple packages with the same title, the package name should be appended in brackets to the title of each of them: “{Previous Title} ({package name})”. (This is the same approach used for [[SessionMenu#account-switching|disambiguating account names in Ubuntu’s session menu]].) '''Test case:''' Search for the “backintime-gnome” package. The item should have the title “Back In Time (backintime-gnome)”.
The '''icon''' should be [[SoftwarePackageOperations#icon|the usual icon for the package]], except that unless otherwise specified, a package that is currently installed should have its icon overlaid in the bottom left corner with the installed checkmark emblem.
Line 701: Line 697:
==== Summary ====

The '''summary''' should be the application Comment, if there is one; otherwise the package synopsis, if the application has a Name but not a Comment; otherwise the package name (because if you’re looking at a non-application package in the first place, you’re fairly likely to be the sort of user who wants to know the package name).

==== Genre ====

[``[[https://blueprints.edge.launchpad.net/ubuntu/+spec/foundations-lucid-software-center-subcategories|foundations-lucid-software-center-subcategories]] 2 of 2]

Every item has a genre represented by a '''primary department''', and sometimes also by a '''primary subsection''' and/or a '''secondary department'''. If an item has a secondary department, it may also have a '''secondary subsection'''. Each department, and each subsection, should have its own icon.

As used elsewhere in this specification, an item’s '''department''' means its primary department, and its '''subsection''' means its primary subsection.

These are the departments and subsections, in the order in which they should be presented when presented together:
||<^ rowstyle="background: #ddd; color: #000;">'''Department'''||<^|2>'''Equivalent [[http://standards.freedesktop.org/menu-spec/latest/apa.html|menu spec]] categories'''||<^|2>'''Equivalent [[http://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections|sections]]'''||<^|2>'''Package name pattern'''||<^|2>'''Show non-application packages by default'''||
||<rowstyle="background: #ddd; color: #000;"> - Subsection ||
The '''summary''' should be the application Comment, if there is one; otherwise the package synopsis with its first word capitalized, if the application has a Name but not a Comment; otherwise the package name (because if you’re looking at a non-application package in the first place, you’re fairly likely to be the sort of user who wants to know the package name).

<<Anchor(license)>>
The '''license label''' for an item should be:
 * “Open source”, if it is in Main or Universe;
 * “Proprietary”, if it is in Restricted or archive.canonical.com;
 * “Unknown”, if it is anywhere else (including Multiverse and standalone packages).


''If you want this to be more specific (bug Bug:435183), do what you can to get [[http://dep.debian.net/deps/dep5/|DEP-5]] implemented. When it is implemented in USC, the words “Open source” (or their localized equivalent) should be included in the string for each license, rather than in a separate string (bug Bug:811489).''

Finally, every item has a genre represented by a '''primary category''', and sometimes also by a '''primary subcategory''' and/or a '''secondary category'''. If an item has a secondary category, it may also have a '''secondary subcategory'''. Each category, and each subcategory, should have its own icon.

As used elsewhere in this specification, an item’s '''category''' means its primary category, and its '''subcategory''' means its primary subcategory.

<<Anchor(menu-spec-mapping)>>
These are the categories and subcategories, in the order in which they should be presented when presented together:
||<^ rowstyle="background: #ddd; color: #000;">'''Category'''||<^|2>'''Equivalent [[http://standards.freedesktop.org/menu-spec/latest/apa.html|menu spec]] categories'''||<^|2>'''Equivalent [[http://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections|sections]]'''||<^|2>'''Package name pattern'''||<^|2>'''Show non-application packages by default'''||
||<rowstyle="background: #ddd; color: #000;"> - Subcategory ||
Line 717: Line 716:
|| '''Books & Magazines''' || X-Publication || - || || - ||
Line 724: Line 724:
|| - Shooter (bug Bug:626414) || Shooter || - || - || - ||
Line 753: Line 754:
|| - Background Pictures || - || - || `*-backgrounds`, `*-wallpapers` || yes || || - Background Pictures || - || - || `*-backgrounds`, `*-wallpapers`, `ubuntu-wallpapers-*` || yes ||
|| - Dash Search Plugins (bug Bug:1025333) || - || - || `unity-lens-*` but not `*-dbgsym` || yes ||
Line 776: Line 778:
||For 3.0, we will be refining this new classification scheme for the Center. For example, what subcategories could the “Games” department have? And how could the items in the “Internet” menu be redistributed? Tell us your ideas on [[/Classification|the Classification page]]. Thanks!||

The algorithm for determining an item’s primary department and subsection should be:
 1. If it has a `.desktop` file with at least one `Category:` value that matches one of the ''subsections'' listed above, then:
  1. Use the first recognizable `Category:` value to determine the subsection from the table.
  1. Determine the department from the subsection’s location in the table.
||If [[http://launchpad.net/bugs/57418|debtags had become available]], we would have refined this classification scheme. For example, what subcategories could the “Games” category have? And how could the items in the “Internet” menu be redistributed? Ideas were invited on [[/Classification|the Classification page]].||

The algorithm for determining an item’s primary category and subcategory should be:
 1. If it has a `.desktop` file with at least one `Category:` value that matches one of the ''subcategories'' listed above, then:
  1. Use the first recognizable `Category:` value to determine the subcategory from the table.
  1. Determine the category from the subcategory’s location in the table.
Line 783: Line 785:
 1. If it has a `Section:` that matches one of the ''subsections'' listed above, then:
  1. Use the `Section:` value to determine the subsection from the table.
  1. Determine the department from the subsection’s location in the table.
 1. If it has a `Section:` that matches one of the ''subcategories'' listed above, then:
  1. Use the `Section:` value to determine the subcategory from the table.
  1. Determine the category from the subcategory’s location in the table.
Line 787: Line 789:
 1. If it has a `.desktop` file with at least one `Category:` value that matches one of the ''departments'' listed above, then:
  1. Use the first recognizable `Category:` value as the department.
 1. If it has a `.desktop` file with at least one `Category:` value that matches one of the ''categories'' listed above, then:
  1. Use the first recognizable `Category:` value as the category.
Line 790: Line 792:
 1. If it has a `Section:` that matches one of the ''departments'' listed above, then:
  1. Use the `Section:` value to determine the department from the table.
 1. If it has a `Section:` that matches one of the ''categories'' listed above, then:
  1. Use the `Section:` value to determine the category from the table.
Line 793: Line 795:
 1. Use “System” as the primary department, with ''no'' primary subsection.

The algorithm for determining an item’s secondary department and subsection should be:
 1. If the `.desktop` file has at least one `X-Ubuntu-Category-Secondary:` field that matches one of the known departments, then:
  1. Use the first `X-Ubuntu-Category-Secondary:` value as the subsection.
  1. Determine the department from the subsection’s location in the table above.
 1. Use “System” as the primary category, with ''no'' primary subcategory.

The algorithm for determining an item’s secondary category and subcategory should be:
 1. If the `.desktop` file has at least one `X-Ubuntu-Category-Secondary:` field that matches one of the known categories, then:
  1. Use the first `X-Ubuntu-Category-Secondary:` value as the subcategory.
  1. Determine the category from the subcategory’s location in the table above.
Line 800: Line 802:
 1. The item has no secondary department or subsection.  1. The item has no secondary category or subcategory.
Line 804: Line 806:
<<Anchor(license)>>
==== License label ====

If the relevant package for an item is in:
 * the Main or Universe repositories, its license label should be “Open source”.
 * the Restricted repository or archive.canonical.com, its license label should be “Proprietary”.
 * any other repository (including Multiverse), its license label should be “Unknown”.

''If you want this to be less crude, do what you can to get [[http://dep.debian.net/deps/dep5/|DEP-5]] implemented.''
<<Anchor(hardware)>><<Anchor(system-requirements)>>
==== Hardware requirements ====

{{attachment:hardware-requirements-text.png}}

If a package has one or more of the following `requires-hardware::` debtags, then in [[#software-item-screen|the software item screen]], the “Total size:” row should be followed by an “Also requires:” row listing the requirements in human-readable form. (A translator note should explain that the “Also” refers to the preceding “Total size” requirement.) The requirements should be comma-separated, each preceded by a text-colored checkmark if it detectably meets that requirement, an error-colored cross if it detectably fails, or nothing if the requirement is (currently) untestable.

{{attachment:hardware-requirements-warning.png}}

In addition, whenever the computer detectably does not meet the requirements, immediately above [[#software-item-screen-state-installed|the installation state bar]] should be an extra bar containing a warning specific to the unmet requirements, with a /!\ icon aligned with the button below. And if the software is not currently installed, that “Install” or “Buy…” button should read “Install Anyway” or “Buy Anyway…” instead.

(These `requires-hardware::` tags are largely parallel to [[http://debtags.alioth.debian.org/vocabulary/hardware.html#hardware|Debian’s existing hardware:: tag hierarchy]], with some improvements.)

||'''debtag''' ||'''“Also requires:” text'''||'''Warning text'''||
||`::camera` ||camera ||This software requires a camera, but none are currently connected.||
||`::gps` ||GPS ||This software requires a GPS, but the computer does not have one.||
||`::input:joystick` ||joystick ||This software requires a joystick, but none are currently connected.||
||`::input:mouse` ||mouse ||This software requires a mouse, but none are currently set up.||
||`::input:touchscreen` ||touchscreen ||This software requires a touchscreen, but the computer does not have one.||
||`::laptop` ||notebook computer ||This software is for notebook computers.||
||`::memory:1GB` ||1 GB memory ||This software requires {size} memory, but the computer has only {size}.||
||`::power:ups` ||UPS ||This software requires an uninterruptable power supply, but none is connected.||
||`::printer` ||printer ||This software requires a printer, but none are currently set up.||
||`::scanner` ||scanner ||This software requires a scanner, but none are currently set up.||
||`::storage:cd` ||CD drive ||This software requires a CD drive, but none are currently connected.||
||`::storage:cd:writer` ||CD burner ||This software requires a CD burner, but none are currently connected.||
||`::storage:dvd` ||DVD drive ||This software requires a DVD drive, but none are currently connected.||
||`::storage:dvd:writer`||DVD burner ||This software requires a DVD burner, but none are currently connected.||
||`::storage:floppy` ||floppy disk drive ||This software requires a floppy disk drive, but none are currently connected.||
||`::video:opengl:2.1` ||<(|4>hardware graphics acceleration (OpenGL x.y+)||<(|4>This computer does not have graphics fast enough for this software.||
||`::video:opengl:3.0` ||
||`::video:opengl:3.1` ||
||… ||
||`::video:opengl:driver-blacklist:amd`||<(|4>Graphics driver that is not {comma-and-space-separated list}||This software does not work with the “amd” graphics driver this computer is using.||
||`::video:opengl:driver-blacklist:fglrx,intel`||This software does not work with the “fglrx” graphics driver this computer is using.||
||`::video:opengl:driver-blacklist:intel,nouveau,nvidia`||This software does not work with the “nvidia” graphics driver this computer is using.||
||…||…||
||<-2>Multiple unmet requirements||This software has multiple requirements missing from this computer.||

<<Anchor(searching)>>
=== Searching ===

Whenever the current screen is '''searchable''', the navigation bar should contain a search field (with accessible label “Search”), and the “Edit” > “Search…” command should be enabled. Activating that command should focus the search field, and (even if it is focused already) select its entire contents.

<<Anchor(search-field)>>
==== The search field ====

{{attachment:search-field.jpg}}

Whenever the search field is focused, the “Edit” > “Undo”, “Redo”, “Cut”, “Copy”, “Paste”, “Delete”, and “Select All” items should have their usual enabled/disabled state and operation for a text field.

Inside the leading end of the field should be a symbolic magnifying glass icon. Clicking the icon should focus the field and select its entire contents.

When (and only when) the search field is not empty, the trailing end of the field should have a symbolic clear icon. Clicking the icon should focus the field and clear its contents.

Besides the normal behavior for text fields, whenever the insertion point (caret) is at the trailing end of the search field, pressing the Down arrow key should focus the contents of the main pane and select the first item — such as the first category in the [[#home|home screen]], or the first result in any list of search results.

==== Interpreting search text ====

When searching anywhere in USC, any word in the search string that is followed by a space or punctuation should be treated as a a complete word, while any word that is not should be treated as if it may be either a complete word or the beginning of a word. '''Test case:''' (sc-004) From the top-level “All Software” screen, search for “atom”; it should return both Atomix and Liferea (an Atom feed reader). Now search for “atom ” (with a trailing space); it should return only Liferea.

For the sake of people who are unfamiliar with how they should use the search, there should be a greylist of words that are downplayed when searching. “Downplayed” in this sense means that:
 * A search that consists only of greylisted words should work just as if none of the words were greylisted.
 * In any other search that contains one or more greylisted words, the greylisted words should be ignored: only the words that are not greylisted should be searched for. However, once the results are chosen, the presence of any greylisted words should cause a result to appear higher in the list.

For English, the greylist should be “app application package program programme suite tool”. The greylist should have a translation note: “Do not translate this list directly. Instead, provide a list of words in your language that people are likely to include in a search but that should normally be ignored in the search.”

'''Test case:''' (sc-011) From the home screen, search for “drawing ” (with a trailing space). Then search for “drawing program”. USC should return exactly the same results for both searches, though possibly in a different order.

<<Anchor(search-results)>>
==== Search results and behavior ====

If the search field contains text at the moment you navigate to any other view, that search should be added to the end of the [[#navigation-back-forward|Back/Forward navigation history]], with the previous item being the same screen without any search text. (So clicking Back is one way to clear a search.)

'''Test case:''' (sc-010) Launch USC. Type Ctrl F; the search field should be focused. Type “fire” (without quotes or pressing Enter); the main pane should be replaced by search results, with Firefox first. Press the down arrow key once; Firefox should be selected in the results. Press Enter; USC should navigate to the software item screen for Firefox. Choose Back once; USC should return to the “fire” search results. Choose Back again; USC should return to the home screen.

{{attachment:search-results.png}}

If there are no results, the main pane should temporarily be replaced by a screen of this form:

  '''No results for “google mail”'''

  No items in '''Internet''' ▸ '''Chat''' match “google mail”.

  Suggestions:
   * Try the __2 items in '''Internet'''__ that match.
    [Present only if there is a parent category that has any matches.]
   * Try the __1 item__ that matches in software not maintained by Canonical.
    [Present only if you’re viewing “Canonical-Updated Software” and there are matches in “All Software”.]
   * Try using a different word. / Try using fewer words or different words.
    [Text dependent on how many words are in the search string.]
   * Check the search is spelled correctly.

If there are any results, then at the top of the main pane should be a heading, “Search results”, opposite a menu (if there’s more than one result) for sorting the results “by Relevance” (the default), “by Rating”, or “by Name”. The rest of the main pane should contain search results for that scope. (For example, in a subcategory, the results should be limited in scope to that subcategory.)

In search results, a non-application item should be [[#software-list-view-disclosure|hidden by default]]:
 * from a subcategory screen, if that subcategory does not “Show non-application packages by default”;
 * from a category screen, if (a) it is in one subcategory of that category and that subcategory does not “Show non-application packages by default”, (b) it is in multiple subcategories of that category, and its [[#Genre|primary subcategory]] does not “Show non-application packages by default”, or (c) it is not in any subcategories and the category itself does not “Show non-application packages by default”;
 * from the home screen, if its primary subcategory (or, if it has no subcategory, its primary category) does not “Show non-application packages by default”;
 * never, in any other screen (such as “History”).

If the search terms exactly match a package name, that package should be returned first in the results, ''even if'' the package was [[#software-list-view-disclosure|hidden by default]].

||'''Testers'''||
||You can help us improve the search function by [[/SearchTesting|testing it in successive versions]].||
Line 817: Line 915:
For ease of sharing lists of software, and as a first step towards [[#apturl|replacing apturl]], the Center should allow “searches” that return ad-hoc package sets.

From [[#lobby|the top-level “Get Free Software” screen]], whenever a search string consists entirely of [[http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Source|characters allowed in package names]], interspersed with commas (and no spaces), and optionally followed by a comma:

 * The last element in the [[#path-button|path button]] should be “Custom List” rather than “Search Results” (though it should otherwise behave the same as [[#get-software-searching|a “Search Results” element]]).

 * The rest of [[#main-pane|the main pane]] should display a [[#get-software-list-view|“Get Software” list view]] of the [[#def-software-item|software items]] corresponding to those package names. Unlike usual search results, this list should be sorted in exactly the same order as the search string. If any of the package names does not have a corresponding package in your current software sources, its item in the list should have a question mark as its icon, “Not found” as primary text, and the package name as secondary text; the icon and text should both be greyed out, and selecting the row should not expand it.

 * Whenever at least one of the listed items is installable, the bottom of the pane should have an action bar, containing at its trailing end a button of the form “Install {``X} Items”, where X = the number of items not currently installed (regardless of whether they are queued for installation). Activating this button should [[#installing|install]] all those items.

 * The [[#status-bar|status bar]] should have text of the form “{X} items”, where X = the number of recognized items (''not'' including any “Not found” items).

'''Test case:''' On a machine that has Gobby and Orca installed but neither `9base` nor `abcde`, with “View” > “All Software” selected:
 1. Navigate to the main “Get Software” screen and enter “gobby,orca” (without quotes) in the search field. The path button should show “Get Software” > “Custom List”, the rest of the main pane should list “Gobby” and “Orca”, and the status bar should say “2 items”.
 1. Add “,9base” to the search text (“gobby,orca,9base”). The list should change to “Gobby”, “Orca”, and “Plan 9 userland tools”, in that order; an action bar should appear offering to “Install 1 Item”; and the status bar should say “3 items”.
 1. Add a comma to the end of the string (“gobby,orca,9base,”). Nothing should change.
 1. Add the letters “abcd” to the end of the string (“gobby,orca,9base,abcd”). A greyed-out item should appear at the end of the list: “Not found”/“abcd”. The button should still say “Install 1 Item”, and the status bar should still say “3 items”.
 {{attachment:custom-list.jpg}}
 1. Finally, add the letter “e” to the search string (“gobby,orca,9base,abcde”). The “Not found” item should change to “A Better CD Encoder”/“abcde”, and “Install 1 Item” should change to “Install 2 Items”.

''Future work: Consider whether it makes sense to use custom lists within “Installed Software”, or within [[#channels|individual software sources]].''

<<Anchor(broken-catalog)>>
=== Handling a broken apt cache ===

Whenever the Center detects that the apt cache of packages is currently broken:

 * The “Get Software” and “Installed Software” items in the navigation pane should both have /!\ icons at their trailing end. The icons should produce the pointing-hand cursor when moused over, and when clicked should open the broken-catalog alert.

 {{attachment:catalog-broken-navigation-pane.jpg}}

 * Choosing “Install” or “Remove” for any package should open the broken-catalog [[#def-alert|alert]].

||<tablestyle="clear: both; float: right; margin: 0 0 1em 1em;" style="border: none;">{{attachment:catalog-broken-alert.jpg}}||

The broken-catalog alert should have the primary text: “Nothing can be installed or removed until the software catalog is repaired. Do you want to repair it now?” and the secondary text “Once Update Manager has finished the repairs, you can close it and return to the Center.”.

The alert should have “Cancel” and “Repair” buttons, where “Repair” is the default. Choosing “Cancel” should cancel any installation or removal that produced the alert. Choosing “Repair” should launch Update Manager in repair mode.

''A future version of the Center should be able to repair the catalog itself.''

||<tablestyle="clear: both; margin: 0;" style="border: none;">||

=== Handling an externally-changed apt cache ===

||<tablestyle="clear: both; float: left; margin: 0 1em 1em 0;" style="border: none;">{{attachment:catalog-changed.jpg}}||

Whenever the Center detects that the apt cache of packages has been changed by another process, the contents of [[#main-pane|the main pane]] (including [[#location-bar|location bar]], if any) for every section except “In Progress” should temporarily be covered by a curtain.

The curtain should have at least two lines of centered text: “Another program has changed the software catalog.” and “One moment, please…”. Below the text should be a determinate progress bar for the process of rebuilding the Center’s database.

When the process is complete, the curtain should be raised, and all sections should return (as much as practical) to their previous display.

||<tablestyle="clear: both; margin: 0;" style="border: none;">||
For ease of sharing lists of software, USC should allow “searches” that return ad-hoc package sets.

From [[#home|the home screen]], whenever a search string consists entirely of [[http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Source|characters allowed in package names]], interspersed with commas (and no spaces), and optionally followed by a comma:

 * The main pane should display an [[#get-software-list-view|“All Software” list view]] of the [[#def-software-item|software items]] corresponding to those package names. Unlike usual search results, this list should be sorted in exactly the same order as the search string. If any of the package names does not have a corresponding package in your current software sources, its item in the list should have a question mark as its icon, “Not found” as primary text, and the package name as secondary text; the icon and text should both be greyed out, and selecting the row should not expand it.

 * The bottom of the pane should have an action bar. At its leading end should be text of the form “{X} items”, where X = the number of recognized items (''not'' including any “Not found” items). If any of the recognized items are not currently installed, its trailing end should have a button of the form “Install {``X} Items”, where X = the number of items not currently installed (regardless of whether they are queued for installation).

'''Test case:''' (sc-016) On a machine that has Gobby and Gimp installed but neither `9base` nor `abcde`, with “View” > “All Software” selected:
 1. Navigate to the home screen and enter “gobby,gimp” (without quotes) in the search field. The main pane should list “Gobby” and “GIMP Image Editor”, and the action bar should say “2 items”.
 1. Add “,9base” to the search text (“gobby,gimp,9base”). The list should change to “Gobby”, “GIMP Image Editor”, and “Plan 9 userland tools”, in that order; an action bar should appear offering to “Install 1 Item”; and the action bar should say “3 items”.
 1. Add a comma to the end of the string (“gobby,gimp,9base,”). Nothing should change.
 1. Add the letters “abcd” to the end of the string (“gobby,gimp,9base,abcd”). A greyed-out item should appear at the end of the list: “Not found”/“abcd”. The button should still say “Install 1 Item”, and the action bar should still say “3 items”.
 {{attachment:custom-list.png}}
 1. Finally, add the letter “e” to the search string (“gobby,gimp,9base,abcde”). The “Not found” item should change to “A Better CD Encoder”/“abcde”, and “Install 1 Item” should change to “Install 2 Items”.
Line 875: Line 934:
Whenever you choose to copy a Web link for a package, the Center should copy to the clipboard text of the form `http://apt.ubuntu.com/p/`''`package-name`'' (without a leading or trailing line break). Whenever you choose to copy a Web link for a package, USC should copy to the clipboard text of the form `http://apt.ubuntu.com/p/`''`package-name`'' (without a leading or trailing line break).
Line 881: Line 940:
 1. The “Install” button should be made insensitive for that item, and remain insensitive until the installation has been completed or cancelled.
 1. The Center should [[#broken-catalog|handle a broken apt cache if necessary]].
 1. If the relevant package cannot be installed, an error [[#def-alert|alert]] should appear:
 {{attachment:transaction-error-uninstallable.jpg}}<<BR>>
 The alert should have the primary text “Sorry, {[[#software-title|title]]} can’t be installed at the moment. Try again in a day or two.”, and a secondary “Details” expander control that reveals a text frame containing the `dpkg` error. It should have an “OK” button which is the default.
 1. If necessary, a Policy``Kit [[#def-alert|alert]] (with the USC window as its parent) should appear to enter authentication details.
 1. The Center should begin blocking session exit.
 1. The item should appear in the “In Progress” section. If the item is queued waiting for another package manager to close, the status text for the item should be “Waiting for {Application Name} to exit”. If the item is queued waiting for any other activity to complete, the status text for the item should be “Waiting”.
 1. While the download is taking place, the status text should be set to “Downloaded {``X``} of {Y}”.
 1. While the installation script is running, the status text for the item should be set to the normal text issued by `dpkg`.
 1. If at any point installation is blocked by a `debconf` question, the status text for the item should be set to “Waiting for your response…”
 1. When installation completes, the Center should stop blocking session exit.
 1. The “installed” emblem should be applied to the item icon, and the status text should be set to “Installation complete”.
 1. Five seconds later, the item should disappear from the “In Progress” section.
 1. The “Install” command should become unavailable for that item, and remain unavailable until the installation has been completed or cancelled.
 1. If the item is published through [[http://myapps.developer.ubuntu.com/|MyApps]] or [[AppReviewBoard|the ARB]], and either (a) you have never yet accepted the terms of use or (b) the terms have changed substantially since you last accepted them (bug Bug:1107802), a “Terms of Use” dialog should open for you to accept or decline them. “Decline” should always be enabled, but “Accept” should be enabled only when the terms have loaded completely and successfully. <<BR>>{{attachment:purchase-terms.png}}
 1. If the item requires sign-in and/or filling in a purchase form, USC should navigate through those steps, then return to the previous screen (the listing or software item screen).
 1. <<Anchor(uninstallable)>>If installing the software would involve removing `ubuntu-desktop`, the package should be treated as uninstallable (just as [[SoftwareUpdates#uninstallable|it is with software updates]]) (bug Bug:1110188).
 1. If the relevant package cannot be installed, for that reason or any other, an error [[#def-alert|alert]] should appear, with primary text “Sorry, {[[SoftwarePackageOperations#title|title]]} can’t be installed at the moment. Try again in a day or two.”. A “Details” expander should reveal a text frame containing the `dpkg` error, or, depending on the problem, the text “Installing this software would remove critical Ubuntu components. If this problem persists, contact the software vendor.”.<<BR>>
 {{attachment:transaction-error-uninstallable.jpg}}
 1. <<Anchor(launching)>> If “View” > “New Applications in Launcher” is checked (as it should be by default), and the item is an application without `NoDisplay=True` (bug Bug:1006483):
  1. If the Launcher was in auto-hide mode, it should temporarily reveal itself.
  1. A copy of the item’s icon shown in USC (in the software list view or software item screen, whichever was being used) should be hoisted from that spot to a space the Launcher has just freed for it, resizing as necessary as it moves. If the Launcher was in auto-hide mode, it should then hide again.
  1. For as long as the item is waiting for other package transactions, the Launcher should show it as a greyed-out icon, with the help tip “Waiting to install”. Trying to launch the item should do nothing.
  1. While the item is installing, the Launcher should show installation progress with an overlaid progress bar. Trying to launch the item should still do nothing.
 1. The item should be [[SoftwarePackageOperations#installing|installed with the standard interface]].
 1. The item should appear in the “Progress” section.
 1. If the item is queued waiting for another package manager to close, the status text for the item should be “Waiting for {Application Name} to exit” (bug Bug:995149). Otherwise it should be [[SoftwarePackageOperations#general|the standard status text]] for the operation.

When installation completes, either successfully or unsuccessfully:
 1. If the item is present in the Launcher (that is, it was added and you didn’t remove it during the installation), then:
  * If installation was unsuccessful, the item should disappear from the Launcher.
  * If installation was successful, the launcher item should flash and become launchable.
 1. If installation was successful, the “installed” emblem should be applied to the item icon inside USC, and the status text should be set to “Installation complete”.
 1. Five seconds later, the item should disappear from the “Progress” section.
Line 904: Line 970:
The Remove function should be disabled by default, enabled only when one or more items are selected or you are at an individual software item.
Line 906: Line 974:
 1. The “Remove” button should be made insensitive for that item, and remain insensitive until the removal has been completed or cancelled.

 1. The Center should [[#broken-catalog|handle a broken apt cache if necessary]].

 1. If the relevant package is part of the `ubuntu-desktop` metapackage, the Center should put up a confirmation [[#def-alert|alert]]: “{[[#software-title|title]]} is a core item in Ubuntu. Removing it may cause future upgrades to be incomplete.” The alert should have “Cancel” and “Remove Anyway” buttons; neither button should be the default.

 1. If you request to remove a package that is part of any other metapackage, the Center should put up a confirmation [[#def-alert|alert]]: ‘If you uninstall {[[#software-title|title]]}, future updates will not include new items in the “{metapackage [[#software-title|title]]}” set.’ Again, the alert should have “Cancel” and “Remove Anyway” buttons; neither button should be the default.

 1. If you request to remove a package that is depended on by any other package, or an application that shares a binary package with any other application, the Center should put up a confirmation [[#def-alert|alert]]: “To remove {[[#software-title|title]]}, these items must be removed as well:” — with any affected applications, followed by any other affected packages, listed [[#def-alphabetically|alphabetically]] in an inset [[#software-list-view|software list view]] that does not allow selection but is focused by default. The alert should have “Cancel” and “Remove All” buttons; neither button should be the default.<<BR>><<BR>>{{attachment:remove-depended-alert.jpg}}

 1. The Center should, if necessary, ask for authentication details in a Policy``Kit [[#def-alert|alert]] with the USC window as its parent.

 1. The Center should begin blocking session exit.

 1. The item should appear in the “In Progress” section. If the item is queued waiting for another package manager to close, the status text for the item should be “Waiting for {Application Name} to exit”. If the item is queued waiting for any other activity to complete, the status text for the item should be “Waiting”.
 1. The Remove function for that item should become disabled, and remain disabled until the removal has been completed or cancelled.

 1. USC should [[#broken|handle inconsistent package state if necessary]].

 1. The package removal should be presented in [[SoftwarePackageOperations#removing|the standard way]].
 
 1. At the same time, the item should appear in the “Progress” section. If the item is queued waiting for another package manager to close, the status text for the item should be “Waiting for {Application Name} to exit”. If the item is queued waiting for any other activity to complete, the status text for the item should be “Waiting”.
Line 924: Line 984:
 1. When removal completes, the Center should stop blocking session exit. <<Anchor(add-ons)>>
=== Add-on packages ===

||<tablestyle="float: right; margin: 0 0 1em 1em;" style="border: none;">{{attachment:add-ons.jpg}}||

Package ''A'' should be treated as a '''recommended add-on''' of package ''X'' if either of these are true:
 * ''X'' [[http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps|Recommends]] ''A''
 * ''X'' is the only known package that Depends (directly or indirectly) on some other package ''Y'', and ''Y'' Recommends ''A''.

Package ''A'' should be treated as a '''suggested add-on''' of package ''X'' if any of these are true:
 * ''X'' [[http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps|Suggests]] ''A''
 * ''X'' is the only known package that Depends (directly or indirectly) on some other package ''Y'', and ''Y'' Suggests ''A''
 * ''A'' [[http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps|Enhances]] ''X'' (or Enhances a virtual package that ''X'' Provides), and ''A'' is not a language pack (''i.e.'' does not match a name or pattern in `/usr/share/language-selector/data/pkg_depends`)
 * ''A'' Enhances some other package ''Y'', where ''X'' is the only known package that Depends (directly or indirectly) on ''Y''.

''What about where X depends on a virtual package that A1 or A2 provide? Perhaps show a menu of the options? This applies not just to add-ons but to dependencies too. Also consider the possibility that installing A1 requires uninstalling something else, while installing A2 does not…''

''What if A Enhances X or X Suggests A, but another installed package Y Depends on A? Maybe checked and disabled?''

''What if A Enhances X or X Suggests A, but another installed package Y Recommends A? Maybe checked by default?''

If a software item has any add-ons, it should have an “Add-ons” section in its [[#software-item-screen|software item screen]]. The list of add-ons for the item should be presented as a series of checkboxes. Recommended add-ons should be listed first [[#def-alphabetically|alphabetically]], then suggested add-ons alphabetically.

The add-on’s package name, in brackets, should follow the trailing end of the label for each checkbox. The package name should be a link that navigates to the software item screen for the package.

At the leading end of the label for each checkbox should be a text-sized version of the add-on’s [[#software-icon|icon]]. This should be followed by as much of the add-on’s [[SoftwarePackageOperations#title|title]] as fits in the rest of the window width (without obscuring the package name), ellipsized at the trailing end if necessary.

If the main package is not installed already, the checkboxes for recommended add-ons should be checked by default, while the checkboxes for suggested add-ons should be unchecked by default. If the main package ''is'' installed already, the checkboxes for add-ons that are currently installed should be checked by default, while those that are not should be unchecked by default. The “Total size:” text should update immediately whenever checking or unchecking a checkbox.

{{attachment:software-item-screen-state-changing-add-ons.jpg}}

If the main package is already installed, whenever the current checkbox values no longer match the add-ons currently installed, an '''add-ons state bar''' should appear immediately below the list of checkboxes. Initially, this bar should contain the total price of any newly-selected add-ons (''e.g.'' “Free”) at its leading end, and “Cancel” and “Apply Changes” buttons at its trailing end.

Activating “Cancel” should reset the checkboxes to match the add-ons currently installed (and therefore cause the bar to disappear). Activating “Apply Changes” should install and/or remove the add-ons as specified, showing the status of this process in the add-ons state bar itself.

In [[#in-progress|the “Progress” section]], when installing an item, installing any of its add-ons should be presented as part of the same task. But changing add-ons for an installed item should be presented as a separate task for each add-on.

<<Anchor(isv)>><<Anchor(commercial)>>
=== ISV software ===

This includes software published through [[http://myapps.developer.ubuntu.com/|MyApps]] and [[AppReviewBoard|the ARB]].

<<Anchor(commercial-buying)>>
==== Installing ISV software ====

{{attachment:software-item-screen-state-available-buy.jpg}}

For any software item that costs money and that (to USC’s knowledge) you have not already purchased:
 * When it is selected in a [[#software-list-view|software list view]], the text at the leading end should display the price instead button at the trailing end should be “Buy…” instead of “Install”.
 * Both when it is selected in a software list view, and when you are at its software item screen, “File” > “Install” should instead be “File” > “Buy…”.

If you choose the “Buy…” command by any of these routes:

 1. If necessary, an Ubuntu Single Sign-On/Registration dialog should appear.

 1. If you sign on successfully and USC realizes you have already purchased this item, it should return to the software item screen, which should now be showing the download and installation progress. ''Do we need to show more feedback?''

 1. Otherwise, USC should navigate to a new screen that is blank initially except for a spinner and the text “Connecting to payment service…”.<<BR>>{{attachment:buy-connecting.png}}

 1. Once it has loaded completely, the main pane should display the [[https://launchpad.net/canonical-payment-service|Canonical Payment Service]] screen for buying the item.<<BR>>{{attachment:buy-screen.png}}

 1. Once you complete the payment, USC should return to the software item screen, which should now be showing the download and installation progress.

''Need to handle the edge case where the price changes while you’re purchasing. Perhaps highlight the change and ask you to reconfirm.''

<<Anchor(commercial-reinstalling)>>
==== Reinstalling previous purchases ====

{{attachment:software-item-screen-state-available-purchased.jpg}}

Whenever an item is not currently installed (or queued for installation) but USC knows that it has been previously purchased:
 * Its “Buy…” button in a [[#software-list-view|software list view]] should instead be “Reinstall”.
 * When it is selected or navigated to, “File” > “Buy…” should instead be “Reinstall Purchase”.
 * The “Install” button at the trailing end of its [[#software-item-screen-state-installed|installation state bar]] should be “Reinstall” instead.

{{attachment:previous-purchases-menu.jpg}}

To make it easier to find previous purchases, the “File” menu should contain a “Reinstall Previous Purchases…” item. This should navigate to [[#purchases|the “Purchases” view of the “History” tab]].

{{attachment:previous-purchases-authorize.jpg}}

Wherever it appears, “Reinstall” or “Reinstall Purchase” should end with an ellipsis if you are not currently signed into the account that was used to purchase it. In that case, choosing it should open a sign-on dialog that allows only sign-on, not registration, with primary text “To reinstall this item, sign in to the Ubuntu Single Sign-On account you used to pay for it.”.

If/once you are signed in, the item should [[#installing|install]] without any further interaction.

<<Anchor(reviews)>>
=== Ratings and reviews ===

Specification: [[SoftwareCenter/RatingsAndReviews]]

For the review guidelines see SoftwareCenter/RatingsAndReviewsGuidelines.
For the moderation guidelines see SoftwareCenter/RatingsAndReviewsModerationGuidelines

=== Recommendations ===

Specification: [[SoftwareCenter/Recommendations]]

<<Anchor(isv-support)>>
=== Support and problem reporting for ISV software ===

{{attachment:software-item-screen-web-links.png}}

||<tablestyle="float:right;margin:0 0 1em 1em;" style="border:none;">{{attachment:software-item-report-problem.png}}||

For any software item in “For Purchase” or “Independent”, its software item screen should include a “Report a Problem” link alongside the “Developer Web Site” link.

Activating this link should open a “Report a Problem” dialog with the icon and name of the application. It should ask you to “Please identify the type of problem:”, with radio buttons for the options: “Payment doesn’t work”, “Download doesn’t complete”, “Installation doesn’t work”, “Software installs but doesn’t run properly”, “Inappropriate/offensive” (only once [[https://blueprints.launchpad.net/ubuntu/+spec/foundations-software-maturity-ratings|maturity ratings are implemented]]), “Legal issue”, and “Other” (the default).

Regardless of reason, if you choose “Continue”, USC should open a Web browser to a URL with the package name and reason as query parameters. That URL should then redirect to the developer support site, or the Canonical Support form, depending on the reason.

<<Anchor(oneconf)>>
=== Comparing and syncing installed software between computers ===

||<tablestyle="float:right;margin:0 0 1em 1em;" style="border:none;">{{attachment:menu-file.png}}||

The “File” menu should contain a “Sync Between Computers…” item. If syncing is not already set up, choosing it should:
 1. Navigate to the “Installed” section, if USC is not there already.
 1. If you are not signed in to Ubuntu SSO, open an SSO sign-on dialog with primary text “With multiple Ubuntu computers, you can publish their inventories online to compare the software installed on each.” and secondary text “No-one else will be able to see what you have installed.”
 1. Reveal a sidebar in the “Installed” screen, and focus it. This sidebar should remain visible whenever you view the “Installed” section subsequently.
 1. Begin publishing the name and source, for each package installed on this computer, to the OneConf server.

{{attachment:installed-sync-computers.png}}

If syncing is already set up, choosing “Sync Between Computers…” should just navigate to the “Installed” screen and focus its sidebar.

The sidebar should list all computers registered with this account, starting with “This Computer ({hostname})”, then a space, then any others sorted [[#def-alphabetically|alphabetically]]. Whenever there are no others, the remaining space in the sidebar should instead contain horizontally and vertically centered text: ‘To sync with another computer, choose “Sync Between Computers” from that computer.’ Exactly one computer in the sidebar should be selected at any time.

Whenever “This Computer” is selected in the sidebar, the rest of the main pane should contain [[#installed|the usual contents of the main pane for a single computer]].

Whenever any other computer is selected, and that computer has not yet finished pushing its list of software to the Ubuntu One account, the rest of the main pane should contain horizontally and vertically centered text: ‘“{name}” hasn’t finished publishing its inventory yet. Try again in a few minutes.’

Whenever the other computer ''has'' finished pushing its list of software, the rest of the main pane should consist of a software list view with three branches:
 1. ‘{number} items on “{name of other computer}” not on this computer’, with an “Install All” button at the trailing end, and each item inside having “More Info” and “Install” buttons when selected;
 1. ‘{number} items on this computer not on “{name of other computer}”’, with a “Remove All” button at the trailing end, and each item inside having “More Info” and “Remove” buttons when selected;
 1. ‘{number} items on both computers”, with no button at the trailing end, and each item inside having only a “More Info” button when selected.

The “Install All” and “Remove All” buttons should be the same width.

As with the normal list view, only one branch — or software item inside that branch — should be selected at any time, and whenever an item is selected it should expand to reveal a “More Info” button. In addition, a selected item inside the that-computer-but-not-this-one branch should have an “Install” button at the trailing end, and a selected item inside the this-computer-but-not-that-one branch should have a “Remove” button at the trailing end.

{{attachment:installed-sync-computers-stop.png}}

The menubutton at the bottom of the sidebar should contain one item, ‘Stop Syncing “{name of selected computer}”’. If the selected computer is the computer you are using right now, the “Installed” screen should return to [[#installed|single-computer mode]], and stop publishing this computer’s inventory to the server. If the selected computer is any other computer (for example, one that has been lost or destroyed), “Stop Syncing” should remove that computer both from the sidebar, and from the set of computers that will be synced.
Line 936: Line 1138:
 * “Canonical-maintained” — what’s that?
 * What if a program I want isn’t in the Center?
 * “Canonical-updated” — what’s that?
 * What if a program I want isn’t in Ubuntu Software Center?
Line 941: Line 1143:
There is also an online FAQ for issues with purchases. These are based on the questions most frequently asked by real customers:

[[Pay/FAQs|Software Center purchase issues]]
<<Include(Pay/FAQs/Data)>>
Line 946: Line 1153:
== Changes scheduled for 3.0 ==

<<Anchor(reviews)>>
=== Ratings and reviews ===

[``[[https://blueprints.launchpad.net/ubuntu/+spec/foundations-lucid-ratings-and-reviews-in-software-center|foundations-lucid-ratings-and-reviews-in-software-center]]``]

Reviewing software involves three software components:
 1. Ubuntu Software Center itself
 2. the Ubuntu Single Sign-On service
 3. an Internet server that receives, stores, and publishes reviews.

''A branch implementing this feature should not be merged to trunk until the server side is implemented and reliably maintained.''

<<Anchor(reviews-reviewing)>>
==== Submitting reviews ====

 * http://www.finette.co.uk/blog/index.php/2009/04/on-rating-mechanisms/
 * http://stevenf.tumblr.com/post/78115371/stars
 * http://twitter.com/hotdogsladies/statuses/5985647059

This process begins when you activate the “Review…” button on [[#installed-software-item|an “Installed Software” item screen]].

If necessary, the Center should go through the Ubuntu Single Sign-On authentication/registration process, using the summary text “To review software, you need an Ubuntu Single Sign-On account.”.

''This dialog should eventually be specified and implemented as a separate library. Compare with the [[http://docs.google.com/View?id=dfkkjjcj_82fb6d42hk|Ubuntu One control panel specification]].''

{{attachment:review-single-sign-on.jpg}}

Whenever the computer is not connected to the Internet while the authentication dialog is open, the bottom leading corner of the dialog should feature a mini error icon and the text “Not connected to the Internet.”, and the “Continue” button should be insensitive. (The appearance or disappearance of the error message should not resize the dialog; it should always have been large enough to show the whole message.)

{{attachment:review-single-sign-on-offline.jpg}}

'''Test case:''' In a session where you have not signed in, choose “Write a review”; the sign-in dialog should appear. Disconnect from the Internet; the “Not connected to the Internet” error message should appear, and “Continue” should become insensitive. Reconnect to the Internet; the error message should disappear, and “Continue” should become sensitive.

When you activate “Continue”, a spinner and the text “Signing in…” should appear at the bottom leading corner, the “Cancel” button should become “Stop”, and the “Continue” button should become insensitive. (The change in label should not change the size of the button; it should always have been large enough for either label.)

{{attachment:review-single-sign-on-progress.jpg}}

If the sign-in process stops unsuccessfully, either because you activated “Stop” or because of an error, the spinner and progress text should disappear, “Stop” should change back to “Cancel”, and “Continue” should become sensitive (unless there is no Internet connection). Then:

 * If you activated “Stop”, “Cancel” should also become insensitive for one second (in case you double-clicked on “Stop” by mistake).

 * If the e-mail address or password is incorrect, the error sound (if any) should play, a mini error icon and the text “Incorrect e-mail address or password.” should appear in the bottom leading corner of the dialog, the “Stop” button should change back to “Cancel”, the “Continue” button should become sensitive, and the “E-mail address:” field should be focused.
 
 * The same should happen if there is any HTTP error while signing in, but with the error text “Couldn’t connect to the sign-on service.”.

Once you are signed in, a [[#def-dialog|dialog]] ''without'' a parent window should appear for submitting the review.

{{attachment:review-submit.jpg}}

This dialog should be resizable; resizing it should resize only the review text field. That field should be focused by default.
 
The dialog’s title should be of the form “Review {[[#software-title|Item Title]]}”.

Within the dialog, first should be displayed the [[#software-icon|icon]], [[#software-title|title]], and version number of the software.

Next should be a “Review by:” item showing your name as registered with the Single Sign-On service (as a subtle hint that you are accountable for your words).

The review text field should accept multiple paragraphs, and should use automatic spell-checking. It should be unlabelled, but have the accessible name “Review text”, and the visible caption: “Be brief and informative. Don’t post bug reports.”

The “Summary:” field should accept a single line of text.

The “Rating:” field should consist of five stars plus a caption. By default, no stars should be filled. Whenever the field is focused, the Left and Right keys should increase or decrease the rating in one-star increments, and the `1` through `5` keys should change the rating to that many stars. The caption should reflect the star you are mousing over, if you are, or otherwise the rating you have currently set: “” (no rating yet), “Awful” (1), “Poor” (2), “Adequate” (3), “Good” (4), or “Excellent” (5). Setting a rating level, whether using a pointing device or a key equivalent, should highlight the new rating in a similar visual style as when clicking a checkbox or radio button.

The “Cancel” button should have Esc as its keyboard equivalent.

The “Publish” button should have Enter as its keyboard equivalent. It should be sensitive only if you have entered text in both the review field and the Summary field and set a rating. Activating “Publish” should submit the review.

Whenever there is no Internet connection, this should be shown with an error message and an insensitive “Publish” button, exactly as for the sign-on dialog.

When you activate the “Publish” button, progress should be shown using a spinner and the text “Submitting review…” in the bottom leading corner, exactly as for the sign-on dialog.

{{attachment:review-submit-progress.jpg}}

Stopping and errors should similarly be handled exactly as for the sign-on dialog, but with the text “Couldn’t connect to the review service.” for HTTP errors.

{{attachment:review-submit-error.jpg}}

Submitting a review should send this information to the review server:
 * via URL, the name of the repository and package (''e.g.'' )
 * via POST
 * your Single Sign-On credentials
 * the .

==== Review service ====

 * ''What should we do if you’ve already reviewed this version of this item?''
 * ''What should the length limit be for reviews? And for summaries?''

<<Anchor(reviews-reading)>>
==== Presenting reviews ====

The median rating, and the number of reviews, for all items in a software source should be updated and cached whenever the Center updates the list of software in that source. The median rating, and the five most recent reviews, for an individual item should be updated and cached whenever you visit the screen for a software item and there is an Internet connection.

Throughout the [[#get-software-list-view|“Get Software” section, a list view]] item should have at its trailing end a hyperlink consisting of stars for the median [[#reviews|rating]] for the item, plus text of the form “17 reviews”. Activating the hyperlink should navigate to [[#get-software-item|the software item screen]] and scroll to its “Reviews” section. In addition, text of the form “ (''X'' stars from ''Y'' reviews)” should be present at the end of the item’s accessible description — for example, “An application for managing botanical collections (4 stars from 3 reviews)”.

{{attachment:item-row-available-unselected.jpg}}

When an item is being installed or removed, the progress bar in the list view should replacing any rating/reviews link.

Similarly a [[#get-software-item-screen|software item screen]] should have in its top trailing corner a hyperlink of exactly the same form, which does the same thing. In the “Installed Software” section, this area should instead have a “Rate & Review…” button that begins [[#reviews-reviewing|the review process]].

[[#get-software-item|The software item screen in the “Get Software” section]] should also contain a “Reviews” section.
 * If there is no Internet connection and no cached number of reviews, it should consist of a single paragraph: “Not available while offline.”.
 * Otherwise, if there are no reviews for the item, it should consist of a single paragraph with the sentence “None yet.” If you have installed the current version of the software now or in the past, this should be followed by the link “__Be the first to review it__.”
 * Otherwise, it should consist of the five most relevant reviews for the item, followed by a “__Write a review__” link. “Most relevant” in this sense means the most recent reviews for the current version, with any remainder being the most recent reviews of the next most recent version, then the next most recent, and so on.

{{attachment:get-software-item-reviews.jpg}}

(Omitting reviews in the “Installed Software” section should discourage, without preventing, people from biasing their ratings and reviews based on the ratings and reviews already submitted. They can still refer to the same item in the “Get Software” section if they want to see the current ratings and reviews.)

In the “Get Software” section, an item that has any [[#reviews|reviews]] in a [[#software-list-view|software list view]] should have a link consisting of (a) stars representing the average rating and (b) light text of the form “7 reviews”. Activating the link should navigate to the software item screen and scroll to its Reviews section.

==== Flagging reviews as inappropriate ====

Below each review should be a “Flag” link. Activating the link should invoke the Ubuntu Single Sign-On authentication/registration process, if necessary, using the summary text “To flag a review as inappropriate, you need an Ubuntu Single Sign-On account.”. The dialog should also feature a “Just Hide It” button; activating this button should cancel the process, but Ubuntu Software Center should then also immediately hide the review and remember indefinitely that you do not want to see that review again.

{{attachment:review-report-sign-on.jpg}} {{attachment:review-report.jpg}}

## {{attachment:review-flag-sign-on.jpg}}

Once you are signed in, a parent-less [[#def-dialog|dialog]] should appear for flagging the review.

## {{attachment:review-flag.jpg}}

It should have a “Why is this review inappropriate?” menu with choices “Unspecified”, “Offensive language”, “Infringes copyright”, “Not about this software”, and “Other”.

The “Cancel” button should have Esc as its keyboard equivalent.

The “Flag” button should have Enter as its keyboard equivalent. It should be sensitive only if the reason is not “Unspecified” and you have entered text in the details field.

This dialog should handle progress and HTTP errors in the same way as the review dialog.

=== Single-pane department screen ===

=== Popularity ===

=== Purchasing software ===
== Features that were planned for future versions ==

<<Anchor(launching)>>
=== Learning how to launch an application ===

(bug Bug:761851)

'''Draft implementation plan:''' USC should calculate where on screen it is displaying the application’s icon, then issue a D-Bus call of the form “com.canonical.Unity.Launcher Add``Launcher``Item``From``Position (icon, title, icon_x, icon_y, icon_size, desktop_file, aptdaemon_task)”, where:
 * `icon` is the icon USC was displaying
 * `title` is the [[SoftwarePackageOperations#title|title]] of the item
 * `icon_x` and `icon_y` are the screen coordinates of the center of the icon inside the USC window
 * `icon_size` is the maximum of the width and height of the icon
 * `desktop_file` is the desktop file that the item will launch once the installation is complete
 * `aptdaemon_task` is the aptdaemon transaction ID.
The Launcher should handle the rest.

''For alternative designs that were considered, see /LaunchingApplications.''

''Future work: On the screen for an already-installed application, show an invitation to add it to the launcher if it isn’t there already.''

<<Anchor(commercial-deauthorizing)>>
=== Deauthorizing your computer ===

{{attachment:previous-purchases-menu.jpg}}

So that you can be honest about using keeping purchased software only on your own computers, the “File” menu should contain a “Deauthorize Computer…” item. This item should be enabled only when you are already signed in or when any USC purchases are installed.

{{attachment:deauthorize-simple.jpg}} {{attachment:deauthorize-list.jpg}}

Activating the item should open a confirmation alert, which lists installed purchases only if there are any. Choosing “Deauthorize” should queue any purchased items for removal, and clear your Ubuntu SSO credentials from the computer.

<<Anchor(multiple-versions)>>
=== Choosing between backport and non-backport versions ===

{{attachment:software-item-screen-state-versions.png}}

Whenever the Backports channel contains a version of any item that is greater than the version that would normally be installed, the installation state bar should contain a radio menu on the leading side of the Install/Remove button.

The menu should contain two items, the backport version and the version that would normally be installed, in ascending order. Both should start with “v {version number}”. If the backport version is higher, this should be followed by “(latest)”. And if the normally-installed version is from the Ubuntu archive, this should be followed by “(release)”. The default should be the release version, if it is one of the items, otherwise the highest version.

If the item is not currently installed at all, the adjacent button should be “Install”. If a version different from the selected item is installed, the button should be “Change”. And if the selected version is installed, the button should be “Remove”.

<<Anchor(region)>>
=== Region restrictions ===

For any item which you may not install in your region:

 * The Install command should not be available.

 * In the software item screen, [[#software-item-screen-state-installed|the installation state bar]] should contain only the text “Sorry, this software is not available in your region.”

 * In the software item screen, screenshots should not be displayed. (A common reason for region restrictions is banning of particular logos or imagery.)
Line 1089: Line 1209:
These are mini-specifications for new features and other changes that anyone is welcome to implement for the Ubuntu Software Center. Some are more important than others; some are more difficult than others. If you would like to implement any of them, please do so [[https://code.launchpad.net/software-center|in a branch]] and propose it for merging. Thanks! (Once a feature is implemented, the mini-specification here will similarly be merged into the main specification.)

=== Minimum pane sizes ===

The minimum width of the navigation pane should be just enough to display the icons of the top-level sections listed within it. ''How much is this, exactly?''

The minimum width of the main pane should be 8 em.

=== Auto-sizing the navigation pane ===

Double-clicking the splitter between the navigation pane and the main pane should move it so that the navigation pane is exactly wide enough to fit the widest text currently being displayed in it.
These are mini-specifications for new features and other changes that anyone is welcome to implement. Some are more important than others; some are more difficult than others. If you would like to implement any of them, please do so [[https://code.launchpad.net/software-center|in a branch]] and propose it for merging. Thanks! (Once a feature is implemented, the mini-specification here will similarly be merged into the main specification.)

<<Anchor(go-menu)>>
=== “Go” menu and simplified navigation bar ===

Between the “Edit” and “View” menus should be a “Go” menu. This should replace the “Go Back” and “Go Forward” items, and the following separator, from the “View” menu.

{{{
_Go
===
  Back [
  Forward ]
---------------------------------
  All Software Ctrl 1
  All From Source >
  Installed Ctrl 2
  Installed From Source >
  History Ctrl H
  Progress Ctrl 0
}}}

The “All From Source” submenu should consist of an item, with icon, for each [[#channels|available software source]]. The “Installed From Source” submenu should consist of an item, with icon, for each [[#channels|installed software source]].

Atop the screen for each individual software source should be a header containing the icon and name for the source. This should be followed by a [[#software-list-view|software list view]] of all the items in that source, then centered text of the form “141 items”. In the “Provided by Ubuntu” screens, non-application packages should be [[#software-list-view-disclosure|hidden by default]].

Once this is implemented, the dropdown menus should be removed from the “All Software” and “Installed” navigation bar buttons, simplifying the navigation bar (bug Bug:1020521).

<<Anchor(external-media)>>
=== Installing from external media ===

(bug Bug:449337)

If you insert a volume that consists of software packages, but is not installation media, Ubuntu Software Center should launch to (or navigate to) the screen for that volume as an individual source.

{{attachment:external-media.png}}

The usual header pane should have a checkbox at its trailing end, “Use as a software channel”, reflecting whether the volume is currently in your `sources.list`.

If a volume is added as a software channel, Ubuntu should cache all its package details so that you can request installation without having the media inserted. If you request to install an item from media that is not currently inserted, an “Insert Media” alert should appear using the volume’s icon, primary text “To insert {name of item}, you need to insert the volume “{name of volume}”, and “Cancel” and “Retry” buttons. If the media is detectably inserted, the alert should go away automatically.

<<Anchor(popular)>>
=== “What’s Popular” overall ===

||<tablestyle="float:right;margin:0 0 1em 1em;" style="border:none;">{{attachment:home.png}}||
||<style="border:none;">''Erratum: “Most Popular” should be “[[#popular|What’s Popular]]”.''||

(bug Bug:432525)

An item’s '''popularity''' should be determined by the proportion of people, who have opted in to [[/Recommendations|recommendations]], who have the item installed.

On [[#home|the home screen]], the “What’s Popular” area should use [[#tile|tiles]] to list, in descending order, the 12 most popular items that are not currently installed and that are not already shown in [[#top-rated|the “Top Rated” section]]. (This avoids repetition on the home screen, giving visibility to more items.)

Choosing “More” in the “What’s Popular” area should navigate to a separate “What’s Popular” screen that uses a [[#software-tile-view|software tile view]] to list, in descending order, the 60 most popular items overall — ''regardless'' of whether they are installed or whether they are also in any “Top Rated” listing.

||<tablestyle="clear:both;" style="border:none;">||

<<Anchor(lenses)>>
=== Subcategories for “Tweaks & Themes” ===

(Implementing this will have no effect until [[http://launchpad.net/bugs/57418|Ubuntu archives contain debtags]].)

Any package that is not already in another category, and matches any of these patterns, should appear in a subcategory of “Themes & Tweaks”.
 
||'''Subcategory''' ||'''Rule'''||'''Show non-application packages by default'''||
||Automation ||debtag `admin::automation` ||yes||
||Backup ||debtag `admin::backup` ||yes||
||Benchmarking ||debtag `admin::benchmarking` ||yes||
||Dash Search Plugins||package name `unity-lens-*` but not `*-dbgsym` ||yes||
||Data Recovery ||debtag `admin::recovery` ||yes||
||Disk Utilities ||debtag `admin::filesystem` or `admin::forensics`||yes||
||Package Management ||debtag `admin::package-management` ||yes||
||Themes ||??? ||yes||

The category should be renamed to “Tweaks & Themes” to reflect the shift in emphasis.

(`unity-scope-*` is not included in “Dash Search Plugins” because scopes are only useful inside, and already show up as add-ons for, individual lenses.)

<<Anchor(hamradio)>>
=== Subcategories for “Sound & Video” ===

(This should not be implemented until [[http://launchpad.net/bugs/57418|Ubuntu archives contain debtags]], otherwise there would be only one subcategory.)

Any package that is not already in another category, and matches any of these patterns, should appear in a subcategory of “Sound & Video”.
 
||'''Subcategory''' ||'''Rule'''||'''Examples'''||'''Show non-application packages by default'''||
||Amateur Radio (fixing bug Bug:905894)||Section `hamradio`||ibp, morse, qrq, tk2, wsjt||yes||
||Audio Utilities||tags `scope::utility` + `works-with::audio`||aconnectgui, bitmeter, earcandy, gladish||no||
||Camera||tag `hardware::camera`||cameramonitor, camorama, cheese||no||
||CD/DVD Authoring||?||bombono, brasero, dvdstyler, devede, ogmrip||no||
||CD/DVD Ripping||?||asunder, audex, dvdrip, k9copy||no||
||Codecs & Converters||?||arista, gstreamer0.10-fluendo-plugins, transmageddon||no||
||Media Players||?||audacious, banshee, clementine, decibel, enna, fluendo-dvd||no||
||Music Notation||tag `works-with::music-notation`||canorus, denemo, frescobaldi||yes||
||Music Organization|| ||cowbell, easytag, entagged, exfalso, tagtool||no||
||Radio|| ||betaradio, kradio4, lastfm, pithos, radiotray||no||
||Sequencers & Synthesizers||?||aeolus, amsynth, djplay, drumpads, freemix||no||
||Sound Editors||?||brp-pacu, cecilia, easymp3gain-gtk, fillmore, freqtweak||no||
||Speech||?||daisy-player, espeak-gui, festival, gespeaker||no||
||Pitch Tuning||?||fmit, gxtuner, lingot, gtkguitune, solfege||no||
||TV||?||episoder, freeguide, gnome-dvb-client, me-tv, ubuntu-tv||no||
||Video Editing||?||avidemux, gnome-subtitles, gopchop||no||

<<Anchor(encouraging-archived-version)>>
=== Encouraging use an archived version instead of a standlone .deb ===

When you open a standalone `.deb` package, if one of your repositories contains a package with the same name, ''regardless of'' version number, there should be an extra bar below the installation state bar. Its text should be whichever is appropriate of these:
 * Ubuntu has a newer version of this software.
 * “Other Repository Label” has a newer version of this software.
 * Ubuntu has a trusted version of this software.
 * “Other Repository Label” has a trusted version of this software.

The button at the trailing end of the bar should be labelled “Show” in any case.

=== Launching from multiple standalone .deb packages ===

(bug Bug:1190469)

If you select multiple .deb packages in a file manager, and open them with Ubuntu Software Center, it should display a [[#custom-list|custom list]] for the packages.

<<Anchor(open-package)>>
=== Opening a standalone package from within USC ===

(bug Bug:782617)

At the start of the “File” menu — before “Install”, “Remove” and other actions — should be an “Open Package…” item, with the keyboard equivalent Ctrl O, followed by a separator.

Choosing “Open Package…” should open an “Open Package” file picker that allows selection only of package files. If you choose one to open, USC should display a centered spinner with the caption “Opening package…” until [[#standalone-package|the standalone package screen]] can be shown.

<<Anchor(software-item-dragging)>>
=== Dragging a software item ===

(bug Bug:1088085)

A software item should be draggable, wherever in USC it appears — on the home screen, in any other tile view, in a list view, or (for its icon only) in the software item screen itself.

If you drag an item to the Launcher, then:
 1. If the item is an application without `NoDisplay=True`, the drag should cancel. Otherwise:
 1. If the item is already installed, and already in the Launcher, the Launcher item should move to the new location. Otherwise:
 1. If the item is already installed, and ''not'' already in the Launcher, it should be added to the Launcher at that location. Otherwise:
 1. The icon should appear as a greyed-out item in the Launcher until installation completes or fails.
 1. The item should [[#installing|install as usual]], without a separate icon for the same item appearing in the Launcher, and remaining in the Launcher regardless of the “New Applications in Launcher” setting.

Dragging an item anywhere else, except the Launcher, should drop its icon as a graphic or its title as text.

=== Dragging Web site links ===

Any “Developer Web Site” link should be draggable outside of USC. When dragged to a file manager, it should produce a shortcut with the name “{Title} (Developer Web Site)”; to a rich text document, a hyperlink with the text “{Title} (Developer Web Site)”; and to a plain text field, just the URL.

<<Anchor(reviews-encouraging)>>
=== Being encouraged to submit a review ===

{{attachment:review-encourage.png}}

If you have installed an application, and used it at least three times in the past week, the end of the home screen should have a “Give Your Feedback” box with text of the form: “You’ve used {title} a lot recently. Would you like to __review it__?”. The link should begin the review process for that application.

''Can we vary the “a lot” wording sensibly?''

<<Anchor(updates)>>
=== “Updates” section ===

==== Minimal implementation ====

{{attachment:updates.png}}

Whenever the Backports channel contains a version of any item that is newer than the version you have installed (or fewer than five seconds have passed since that stopped being true), an “Updates” item should appear last in the navigation bar (except for the “Progress” item, when present).

The “Updates” section should begin with a panel giving the number of updates at the leading side, and an “Update All” button on the trailing side. Each individual item should consist of its icon, title, and the new version number on the leading side, and an “Update” button on the trailing side.

Whenever an item is selected, Enter should activate its “Update” button. Whenever an update is installed or waiting to be installed, its “Update” button should be disabled.

'''Test case:''' Install an application for which Backports has a newer version. As soon as its installation finishes, “Updates” should appear in the navigation bar.

==== Enhancement: Navigation bar emblem ====

{{attachment:updates-badge.png}}

In the navigation bar, the icon for the “Updates” item should have a badge containing the number of updates.

==== Enhancement: Launcher item emblem ====

In the Unity launcher, the icon for Ubuntu Software Center should have a badge containing the number of updates, regardless of whether USC is running.

==== Enhancement: Install Ubuntu updates together with application updates ====

{{attachment:updates-ubuntu.png}}

The panel atop the “Updates” screen should contain an “Also install Ubuntu updates” checkbox. Whenever Ubuntu updates are not available, the checkbox should be both disabled (because changing it has no effect) and unchecked (because no Ubuntu updates will be installed when you update anything else). Whenever Ubuntu updates ''are'' available, the checkbox should be enabled, and default to whichever checked/unchecked state it was in last time it was enabled (checked by default).

'''Test case:''' (replaces previous test case) Install Ubuntu without installing updates. Install an application for which Backports has a newer version; as soon as its installation finishes, “Updates” should appear in the navigation bar. Navigate to the “Updates” screen; the “Also install Ubuntu updates” checkbox should be enabled and checked. Use Update Manager to install all updates; as soon as they finish, the “Also install Ubuntu updates” checkbox should become disabled and unchecked.

If you choose “Update All”, ''or'' “Update” for any individual item while the checkbox is checked, installation of Ubuntu updates should be queued ahead of whichever update or updates you chose with that action.

==== Enhancement: “Hide” function for updates ====

In the “Updates” screen, each individual update should have a “Hide” button on the leading side of its “Update” button. The “View” menu should have a corresponding “Hide This Update” item that is disabled except when you are in the “Updates” section and an update is selected. Activating this command should remove the update from the list indefinitely.

Below “Hide This Update” in the “View” menu should be a “Show Previously Hidden Updates” item, which is enabled whenever there are any, regardless of which screen you happen to be in. Selecting the item should navigate to the “Updates” screen if you are not there already, and indefinitely un-hide all updates.

==== Enhancement: Updates to other NotAutomatic channels ====

The “Updates” screen should show updates for not just Backports, but any `NotAutomatic` channel, for example “For Purchase”.

<<Anchor(upgrades)>>
==== Enhancement: New Ubuntu versions shown in “Updates” ====

{{attachment:updates-upgrade.png}}

When a new version of Ubuntu is available, it should appear as the first row in the “Updates” screen, ''above'' the “Update All” panel. In this case the panel should say not “{N} updates available”, but “{N} other updates available”. The row itself should, instead of an “Update” button, have an “Upgrade…” button that opens [[SoftwareUpdates#upgrades|the upgrade dialog]].
Line 1108: Line 1425:
Whenever an item in a [[#software-list-view|software list view]] is selected, “Edit” > “Copy” should be sensitive. Choosing it should copy to the clipboard the item’s [[#software-title|title]] and [[#software-summary|summary]] as plain text separated by one line break. If the item has a custom icon, it should also be copied as both a bitmap and as a vector image if available.

<<Anchor(software-item-screen-copying)>>
=== Copying software item text to the clipboard ===

Whenever text is selected in a [[#software-item-screen|software item screen]], “Edit” > “Copy” should be sensitive. Choosing it should copy the selected text to the clipboard.

<<Anchor(back-forward-actions)>>
=== Back and Forward menu items and keyboard equivalents ===

There should be Back and Forward actions, which the Back and Forward buttons (when present) should be linked to. All references in the specification to the Back and Forward buttons being sensitive or insensitive should be changed to refer to the actions in general.

The “View” menu should contain, at its end, a separator and two items:
{{{
---------------
  Go Back [
  Go Forward ]
}}}

“Go Back” and the [ key should be linked with the Back action, while “Go Forward” and the ] key should be linked with the Forward action.

<<Anchor(add-ons)>>
=== Add-on packages ===

||<tablestyle="float: right; margin: 0 0 1em 1em;" style="border: none;">{{attachment:add-ons.jpg}}||

First: Package ''A'' should be treated as a '''recommended add-on''' of package ''X'' if either of these are true:
 * ''X'' [[http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps|Recommends]] ''A''
 * ''X'' is the only known package that Depends (directly or indirectly) on some other package ''Y'', and ''Y'' Recommends ''A''.

Package ''A'' should be treated as a '''suggested add-on''' of package ''X'' if any of these are true:
 * ''X'' [[http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps|Suggests]] ''A''
 * ''X'' is the only known package that Depends (directly or indirectly) on some other package ''Y'', and ''Y'' Suggests ''A''
 * ''A'' [[http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps|Enhances]] ''X''
 * ''A'' Enhances some other package ''Y'', where ''X'' is the only known package that Depends (directly or indirectly) on ''Y''.

''What about where X depends on a virtual package that A1 or A2 provide? Perhaps show a menu of the options? This applies not just to add-ons but to dependencies too. Also consider the possibility that installing A1 requires uninstalling something else, while installing A2 does not…''

Next: If a software item has any add-ons, it should have an add-ons section in the place specified in its [[#get-software-item|“Get Software” item screen]] or [[#installed-software-item|“Installed Software” item screen]]. If the item is not installed already, the section should have the heading “Choose add-ons”; if it is installed already, the heading should be “Change add-ons”.

The list of add-ons for the item should be presented as a series of checkboxes. The label for each checkbox should be a text-sized version of the add-on’s [[#software-icon|icon]], followed by its [[#software-title|title]]. Recommended add-ons should be listed first [[#def-alphabetically|alphabetically]], then suggested add-ons alphabetically.

If the main package is not installed already, the checkboxes for recommended add-ons should be checked by default, while the checkboxes for suggested add-ons should be unchecked by default. If the main package ''is'' installed already, the checkboxes for add-ons that are currently installed should be checked by default, while those that are not should be unchecked by default.

The “Total size:” text should update immediately whenever checking or unchecking a checkbox. For an item that is already installed, whenever the current state of the checkboxes is different from the installed state of the add-ons, the text should change from Total size: {amount} on disk ({amount} available)”:
 * if the changes involve downloading any new packages, “Total size: {amount} to download, {amount} when changes are applied ({amount} available)”
 * otherwise, “{amount} when changes are applied ({amount} available)”.

If the main package is already installed, the “Total size” text should be followed by an action bar with “Cancel” and “Apply Changes” buttons. Both buttons should be sensitive only when the current state of the checkboxes is different from the installed state of the add-ons themselves. Activating “Apply Changes” should install and/or remove the add-ons as specified.

In [[#in-progress|the “In Progress” section]], when installing an item, installing any of its add-ons should be presented as part of the same task. But changing add-ons for an installed item should be presented as a separate task for each add-on.

Next: Throughout the “Get Software” section, whenever the selected item in a [[#software-list-view|software list view]] is an item that has add-ons, it should have a button to the left of the “Install” button: “Choose Add-Ons…” if the item is not yet installed, or “Change Add-Ons…” if it is. (The button should not have an access key, because that would interfere with typing letters to navigate the list.) The purpose of this button is to alert users that there are options they might want to consider before choosing to install the item. Activating the button should navigate to the relevant software item screen ''and'' scroll to its add-ons section.

<<Anchor(apturl)>>
=== Launching and navigating from apt: links ===

[``[[https://blueprints.launchpad.net/ubuntu/+spec/foundations-lucid-software-center-ui-improvements|foundations-lucid-software-center-ui-improvements]] 7 of 7]

Opening an `apt:` URL should launch the Ubuntu Software Center directly to the appropriate screen; or if it is already open, focus it, wait until any currently-open [[#def-alert|alerts]] or [[#def-dialog|dialogs]] have been dismissed, and then switch to the appropriate screen. What that “appropriate screen” is depends on the URL and installation status, as follows.

==== apt:package-name ====

 * If the package is known and currently installed, the [[#installed-software-item|“Installed Software” item screen]] for the package.

 * If the package is known and not currently installed (even if it is currently ''being'' installed), the [[#get-software-item|“Get Software” item screen]] for the package. '''Test case:''' Follow the link [[http://apt.ubuntu.com/p/python-wxtools|apt:python-wxtools]]; it should show the item screen for “Get Software” > “System” > “python-wxtools”.

 * If the package is not known, an ephemeral error screen in the “Get Software” section, with the path button “Get Software” > “{package name}”. It should be possible to return to this screen later in the [[#get-software-navigation|navigation history]], but it should not be possible to navigate to it directly.

 {{attachment:apturl-unknown-package.jpg}}

==== apt:package-name?minver=1.0 ====

 * If the package is known:

  1. If any version of the package is currently installed, the [[#installed-software-item|“Installed Software” item screen]] for the package. Otherwise, the [[#get-software-item|“Get Software” item screen]] for the package.
  
  2. Either way, if a version late enough is not available, an extra banner at the top of the item screen, immediately under the summary: “Version {minver} or later is not available from your current software sources.”

  {{attachment:apturl-version-unavailable.jpg}}

 * If the package is not known, the same ephemeral error screen as used for `apt:unknown-package-name`.

==== apt:package1,package2,… ====

 * A [[#custom-list|custom package list]] for the package names (including the comma-separated names in the [[#search-field|search field]]).

==== apt:package-name?section=multiverse ====

 * If the package is known and currently installed, the [[#installed-software-item|“Installed Software” item screen]] for the version of the package that is installed.

 * If the package is known and not currently installed (even if it is currently ''being'' installed):

  * If the section is not currently enabled, a screen inviting you to enable it. This screen should have the path button “Get Software” > “{package name}”, the heading “{package name}”, the text ‘This software is available from the “{source}” source, which you are not currently using.’, and a button “Use This Source”. Activating the button should add the source.

  {{attachment:apturl-channel-invitation.jpg}}

  * If/when the section is enabled, the [[#get-software-item|“Get Software” item screen]] for the package.

 * If the package is not known, the same ephemeral error screen as used for `apt:unknown-package-name`.

==== apt:package-name?channel=lucid-partner ====

Exactly the same appearance and behavior as for `apt:package-name?section=multiverse`, but enabling a whitelisted repository as listed in `/usr/share/app-install/channels/`, rather than a section.

==== Replacing apturl ====

When this feature is fully implemented, the `software-center` package should be marked as `Replaces: apturl`.

<<Anchor(date-installed)>>
=== Date installed ===

{{attachment:installed-software-item-with-date.jpg}}

In [[#software-item-screen|the software item screen]] for an item that is installed, instead of just saying “Installed”, the bar containing the “Remove” button should say “Installed {date}”, ''e.g.'' “Installed 2008-10-04”.

<<Anchor(cancel-bar)>>
=== Cancel bar in “In Progress” screen ===

At the bottom of the “In Progress” section should be a panel of the same general appearance as the [[#location-bar|location bar]], but containing only a “Cancel All” button.

The “Cancel All” button should be sensitive only when any items have not yet started or are still downloading.

If you try to close the Center while an item is installing or being removed, as soon as the Center switches to displaying the “In Progress” section, at the left end of the panel containing the “Cancel All” button, this text should be displayed: “The Center will close when these tasks finish.” (The “Cancel All” button should retain its usual sensitivity and effect.)

Maybe a “Pause” button would be even more useful in this bar.
Whenever an item in a [[#software-list-view|software list view]] is selected, “Edit” > “Copy” should be enabled. Choosing it should copy to the clipboard the item’s [[SoftwarePackageOperations#title|title]] and [[#software-summary|summary]] as plain text separated by one line break. If the item has a custom icon, it should also be copied as both a bitmap and as a vector image if available.

<<Anchor(cancel-bar)>><<Anchor(pause)>>
=== Pausing or cancelling all queued tasks ===

{{attachment:progress.png}}

At the bottom of the “Progress” section should be an action bar, with text of the form “2 items remaining” or “All items completed” (as appropriate) at the leading end, and “Pause” and “Cancel All” buttons at the trailing end. When “Pause” is clicked, it should change to “Resume”, the “Progress” navigation bar element should change to “Paused”, and all tasks (except for the current one, if it is no longer pauseable), even any you add ''after'' you clicked “Pause”, should be greyed out except for their cancel buttons. (bug Bug:584687)

Once that’s implemented: The list of paused tasks should persist even if you close and reopen USC or restart the computer.

Finally: Whenever the computer is not connected to the Internet, USC should go into Paused mode automatically.
Line 1237: Line 1440:
(bug Bug:444330)
Line 1241: Line 1446:
<<Anchor(bug-438870)>>
=== Downloading while waiting to install ===

(bug Bug:438870)

When an item to be installed is waiting for other tasks, but the package is not yet downloaded, it should start downloading immediately. ''Or maybe when fewer than 3-ish items are already downloading?''

<<Anchor(tasks-reordering)>>
=== Reordering queued tasks ===

(bug Bug:465531)

For any task in the “Progress” screen that has not yet begun (or that, if [[#bug-438870|parallel downloading]] has been implemented, has started downloading but not yet installing), mousing over the list item should produce a grabbing-hand cursor. If you drag the row up or down, the rows for other unstarted tasks should scoot out of the way to show where the dragged row would end up if dropped. As a keyboard equivalent, Ctrl Up and Ctrl Down should, when possible, make the selected task swap places with the previous or next task respectively.

=== Consistent progress bar for installations and removals ===

Regardless of whether you are installing a free item, installing a for-purchase item, or removing an item, the progress bar in the [[#software-item-screen-state-installed|installation state bar]] should appear at exactly the same moment: immediately after USC knows that you are authenticated for the action.
Line 1243: Line 1466:
Whenever an item is selected in [[#in-progress|the “In Progress” section]], “Edit” > “Copy Web Link” should be sensitive. Choosing it should [[#web-link-package|copy a Web link for the selected package]]. Whenever an item is selected in [[#in-progress|the “In Progress” section]], “Edit” > “Copy Web Link” should be enabled. Choosing it should [[#web-link-package|copy a Web link for the selected package]].
Line 1248: Line 1471:
||<style="background:orange">GTK/Clutter hackers||
Line 1251: Line 1472:
 1. over two seconds, draw a ring around the menu (''e.g.'' “Applications”) in which the application resides
 1. wait for you to open the menu
 1. over two seconds, draw a ring around the interface element (''e.g.'' the Ubuntu button, or the “Applications” menu) in which the application resides
 1. wait for you to activate it
Line 1254: Line 1475:
 1. over two seconds, draw a ring around the application, or around the submenu that contains the application  1. over two seconds, draw a ring around the application, or around the submenu or section that contains the application
Line 1260: Line 1481:
As a less sophisticated solution, the menus and items should — for a few seconds — slowly throb in a different color. <<Anchor(reinstalling)>>
=== “Reinstall” command ===

||<tablestyle="float:right;margin:0 0 1em 1em;">{{attachment:menu-file.png}}||

In the “File” menu, immediately following the “Install” item should be a “Reinstall” item. This item should be enabled whenever you have selected or navigated to an installed software item.

Activating the command should reinstall the item (equivalent to `apt-get reinstall`). The progress feedback should be the same as for [[#installing|installation]], using the same Policy``Kit privilege, but with “Reinstalling…” as the text in the installation state bar.

The help should include a page on the “Reinstall” command.

<<Anchor(purging)>>
=== “Remove Including Settings” command ===

(bug Bug:1029008)

In the “File” menu, immediately following the “Remove” item should be a “Remove Including Settings” item. This item should be enabled whenever you have selected or navigated to an installed software item.

Activating the command should remove the package, its settings (equivalent to `apt-get purge`), and any cached package data. The progress feedback should be the same as for [[#removing|removal]], using the same Policy``Kit privilege, but with “Removing package and settings…” as the text in the installation state bar.

The help should include a page on the “Remove Including Settings” command.

<<Anchor(residual)>>
=== Residual files ===

In the “File” menu, immediately following the “Remove Including Settings” item should be a “Show Residual Files” item. This item should always be enabled.

{{attachment:residual-settings.png}}

Activating the command should be the only way (other than subsequently using Back and Forward) of navigating to an “Installed Software” > “Residual Files” screen. This screen should be a [[#software-list-view|software list view]] of all packages that have been removed from your computer but that have either left behind configuration files, or that have the package still cached (bug Bug:684495). It should be different from a normal software list view in that:
 * At the trailing end of each row should be the size of the settings and cached package files, ''e.g.'' “11 KB”.
 * The secondary text for each item should be the date on which the package was uninstalled.
 * When an item is selected, at its trailing end should be a button labelled “Delete Files”, and the “File” > “Remove Including Settings” menu item should temporarily also become “Delete Files”.

Activating the “Delete Files” command should remove the package’s settings and/or the cached package. The progress feedback should be the same as for [[#removing|removal]], using the same Policy``Kit privilege, but with “Deleting residual files…” as the text in the installation state bar.

At the bottom of of the main pane should be an action bar containing a “Delete All” button, aligned with the “Delete Files” button for the selected item. Activating the “Delete All” button should remove residual settings for all packages displayed.

The help page on the “Remove Including Settings” command should be expanded to cover the “Show Residual Files” command too.

<<Anchor(package-info)>>
=== “Package Info” window ===

(bug Bug:432879)

{{attachment:package-info-version.png}} {{attachment:package-info-related.png}}

In the “File” menu, following the package operation items should be a separator and a “Package Info” item with keyboard equivalent Ctrl I. It should be enabled whenever you are on a software item screen or a software item is selected. Choosing “Package Info” should open a normal window with the title ‘“{package name}” Info’, that persists until you close it regardless of what you do elsewhere in USC. Multiple package info windows may be open simultaneously.

The “Version” tab should show the package’s [[SoftwarePackageOperations#icon|icon]], name, version number, and “Software channel:”, each wrapping to multiple lines if necessary.

The “Related Packages” tab should have a tree with branches for “Depends on”, “Recommends”, “Suggests”, “Dependency of”, “Provides”, “Replaces”, “Conflicts”, and “Breaks” in that order. Inside each branch, individual packages should be shown as hyperlinks: choosing one should open a separate package info window for that package. If any branch contains no items, it should be expanded by default, so that you can see it is empty without having to expand it first.

The “Version” column should use “≥” or “=” before version numbers as appropriate. The “Installed” column should use a checkmark graphic plus the version number for an individual package, a checkmark graphic plus “{total}/{total}” for the “Depends on” branch as a whole, just “{total}/{total}” for the “Recommends” and “Suggests” branches as a whole, and just “{total}” for any other non-zero branches.

=== History enhancements ===

{{attachment:history.2.jpg}}

History rows should have the same layout and behavior as rows in a [[#software-list-view-categorized|categorized software list view]], except that:

 * They should use a text-sized icon instead of a double-sized one (because the icon is less important here, and the history is likely to be long).

 * They should use the software’s [[SoftwarePackageOperations#short-name|short name]] rather than its [[SoftwarePackageOperations#title|title]].

 * For purchases, the short name should be followed by the price paid at that time, in the disabled text color.

 * At the trailing end of the first line should be the time at which the action occurred, again in the disabled text color. In the “All Changes” screen only, the time should be preceded by the type of action: “purchased”, “installed”, “reinstalled”, “updated”, “removed”, or “purged”. For example, a removal that happened at 4:52 PM should appear in “All Changes” as “removed 4:52 PM”, but in “Removals” just as “4:52 PM”.

 * Choosing “More Info” should navigate to the item’s screen in either “All Software” or “Installed Software”, depending on whether the item is currently installed.

 * If the row is for any action that would leave the item installed (such as an installation or an update), but the item is not currently installed, the text “(since removed)” should be at the trailing end of the second line in the disabled text color. Conversely, if the row is for any action that would leave the item uninstalled (such as a removal or a purge), but the item ''is'' currently installed, the text “(since reinstalled)” should be at the trailing end of the second line in the disabled text color.
Line 1264: Line 1556:
||<style="background:orange">GTK/Clutter hackers||

Whenever you navigate from within the lobby screen to a department screen, over 0.5 seconds the left and right halves of the lobby screen should split in two halves sliding out of the pane to the left and right — like a pair of lift/elevator doors opening — to reveal the department screen underneath.

{{attachment:lobby-animation.jpg}}

When navigating from a department screen back to the lobby screen, the reverse should happen: over 0.5 seconds, the left and right halves of the lobby screen should slide in from their respective sides of the main pane, eventually covering the department screen.

||<style="background:orange">GTK/Clutter hackers||

Whenever you navigate from within a department screen to a software item screen, over 0.5 seconds, the icon of that package that was visible in the department screen should simultaneously zoom and move linearly to become the icon of the software item visible in the software item screen. At the same time, the rest of the contents of the department screen should linearly crossfade into the rest of the contents of the software item screen. Both of these effects should also happen when navigating the reverse direction, from the package screen back to the department screen.
Whenever you navigate from within a category screen to a software item screen, over 0.5 seconds, the icon of that package that was visible in the category screen should simultaneously zoom and move linearly to become the icon of the software item visible in the software item screen. At the same time, the rest of the contents of the category screen should linearly crossfade into the rest of the contents of the software item screen. Both of these effects should also happen when navigating the reverse direction, from the package screen back to the category screen.

<<Anchor(wine)>>
=== Wine integration ===

{{attachment:installed-software-wine.png}}

If there are any installed Windows applications that are automatically removable by Wine, the [[#channels|installed software sources]] list should include a “Windows Software” child item. This should be the last item except for “Other”, and should use the generic Windows icon (the same used in Ubuntu Light).

Selecting this item should display a “Windows Software” screen in the main pane, listing those Wine applications. At the bottom of of the main pane should be an action bar containing a “Remove All” button, aligned with the “Remove” button for the selected item.

These removable Windows applications should also show up when browsing or searching the top-level “Installed Software” list.

''Do Windows applications have a title and a summary, or just a title?''

''For implementation details, see NattyWineSoftwareCenter.''

<<Anchor(security)>>
=== Security information for the store ===

(bug Bug:637649)

The “View” menu should contain a “Security Info” item that is disabled by default.

For every page in the sign-on and payment process, if the page is not encrypted — or if there is a problem with the site’s certificate — the page should not display at all. Instead, USC should show a centered error message: “Sorry, the store is not available right now. Try again later.”

{{attachment:security-navbar.png}}

Whenever the page is encrypted and the certificate is okay, at the trailing end of the navigation bar should be a padlock icon with the label “Secure”, and the “Security Info” item should be enabled. If you choose either of those, a “Security Info” window should open with text “The connection to the store is encrypted.” and information about the connection and certificate.

{{attachment:security-window.png}}

'''''Future work:''' Abstract out this window so that it can be used by other applications that deal with certificates.''

<<Anchor(store-account)>>
=== Access to your store account details ===

In the navigation bar, between “History” and “Progress” should be a new item, “Account”, with a wallet icon. [[#go-menu|The “Go” menu, if implemented]], should have a corresponding “My Store Account” item.
{{{
_Go
===
  Back [
  Forward ]
---------------------------------
  All Software Ctrl 1
  All From Source >
  Installed Ctrl 2
  Installed From Source >
  History Ctrl H
  My Store Account
  Progress Ctrl 0
}}}
Selecting either should navigate to an online “Account” screen.

{{attachment:pay-account.png}}

Regardless of whether you are online, the screen should begin with a local banner showing the e-mail address, balance (if available), and a “Sign Out” button. Signing out should work even if you are offline.

If you have not been online since navigating to this screen, the rest of the screen should display horizontally and vertically centered text, “Connect to the Internet to see your purchase and account history.” If you have been online but the page did not load successfully, it should instead be centered text “The account service isn’t available right now. Try again in a few minutes.”, with a “Try Again” button below. Otherwise, it should be a page listing your USC payments, refunds, and other account activity.

== Yet-to-be-specified features ==

 * codec search
 * font search [``[[http://brainstorm.ubuntu.com/idea/15333/|idea 15333]]``]
 * scope control for search (All / Name / Description / Package Codename / Alternatives)
 * icon view as an alternative to list view
 * Melatie runs an accounting business that is far too small to have its own IT manager. She has a support contract for the Ubuntu software on the office PCs, and she knows that this doesn’t cover all the available software, so she wants to keep track of exactly what software is installed that isn’t covered.
 * Ladina works as a developer at a molecular biology lab where she is not a sysadmin. She is having a bit of trouble with Biopython, and wants an easy way of seeing which version of `python-biopython` is installed and where its files are.
 * Installing paid add-ons for free software (for example, filters for Inkscape)

=== Dragging installed applications from USC to a launcher ===

=== Launching via inserting an Ubuntu CD ===

USC needs to be able to tell whether a CD containing packages is:
 * for a previous version of Ubuntu
 * for the same version of Ubuntu
 * for a future version of Ubuntu
 * for a different OS altogether.

=== Launching via file of unknown type ===

USC needs to be able to display applications that handle a particular filetype, ''i.e.'' an equivalent to `gnome-app-install --mime-type text/html`. (Maybe distinguish between file viewers and editors?)

Nautilus then needs to be able to launch USC to this search.

=== License information ===

 * http://wiki.debian.org/Proposals/CopyrightFormat

=== Developer tools ===

 * For a particular package, show which packages are required for development or debugging of that package.
 * Maybe treat `-dev` packages specially?

=== Eliminating the “{title} can’t be installed at the moment” alert ===

Instead of an impossible installation causing an alert saying “Sorry, {title}” can’t be installed at the moment. Try again in a day or two.”, the task should show its error status inline in the “In Progress” section somehow, and sit there across USC launches until you retry it or cancel it. The “In Progress” arrows would need to stop spinning for cases like this, because nothing is actually happening.

=== Others ===

 * make clear which packages are currently subject to CVE vulnerabilities
 * ensure double-clicking on a downloade .deb or .rpm gives an explanation that every user can understand. Perhaps also show an apt: -link as a suggestion for the better way of installing said package?
 * [[http://www.linuxfoundation.org/en/OpenPrinting/Database/DriverPackages|OpenPrinting]]: “To make installing printer drivers not provided by the Linux distributions easier for users, and to make providing printer drivers easier for the printer manufacturers, we have introduced a new concept of distribution-independent printer driver packages.”
 * While installing, the window should be reducible (or perhaps reduce by default) to show only install progress.
 * Make installation asyncronous (background process) and allow user to continue browsing the Software Center meanwhile
 * Replace the “These items must be removed as well” alert with a box embedded in the package screen when you click “Remove”?
 * “Also a ''permalink'' on the description page, would be pretty nice. You want to suggest a package to someone? You just have to copy paste the (apt url) application link into your IM or blog post.” [``[[http://www.stefanoforenza.com/ubuntu-appstore-in-the-workings/|Stefano Forenza]]``]
 * [[http://doctormo.wordpress.com/2009/06/01/ubuntu-apt-url-and-the-white-list/|Martin Owens: apt-url and the whitelist]]
 * “Foo``Bar is not available for this version of Ubuntu, but it is available for version X.Y…”
 * [[http://wiki.debian.org/I18n/SmithReviewProject|Smith Review Project]]: making package descriptions and debconf questions human-readable
 * Maybe the Firefox start page could contain an "Ubuntu software" link, that opens the Store, alongside its "Ubuntu help" link? [Vincenzo Ciancia]
 * SummerOfUsability mockup design iterations by Monica Maceli
 * Installing software locally when the user doesn't have administrator rights
 * If the user does not have admin rights then the program would offer to queue the program for the system admin. This is very useful when the user can just say check your install queue instead of remembering the exact packages that he needed. Especially when he is just clicking a link on the internet. Could also be useful for parents.
 * Multi-level undo.
 * Updates are aggregated by source package, with packages hidden inside an expander.
 * Recommendations and suggestions are shown as children of an item in the list (recommendations selected by default, suggestions not).
 * Incorporate PackageMaintainednessPresentation.
 * Add a “Date Installed” column to the “Installed Software” section.
 * Handle the “Extends” field for packages.
 * Provide an easy mechanism for applications such as Inkscape to select and install plug-ins.
 * Need to define the exact behavior when waiting for other package managers to quit.
 * Provide an optional "Donate" button for projects that need donations to keep going. The button could open up the donate page on their website. Or if non-free (as in beer) software is sold through the software store then the money could go through the site ... (The need was talked about in [[http://twit.tv/floss86|FLOSS Weekly 86 - Ardour]]).
  * Alternatively provide a way of a project displaying a web page instead of the package description. This allows the project to collect revenue via adverts, subscription or donation. It puts the handling of revenue into the hands of the project. If the web page data isn't available then it could revert by default back to the package description. This could also be a preference option.
 * Drag installed applications to `gnome-panel` or other launchers.
 * Saved searches (with an emblem if they contain new stuff since you last looked at them)
 * Add `apt:` URL syntaxes for category pages, and for search results.
 * Prioritize reviews from your contacts. [Matt Griffin]
 * Accessible names for other items that have no explicit label.
 * How can we integrate cross-platform add-on repositories, e.g. [[https://addons.mozilla.org/en-US/firefox/|Firefox add-ons]], [[http://pkg-ruby-extras.alioth.debian.org/rubygems.html|Ruby Gems]], [[http://www.cpan.org/|CPAN]], [[http://ctan.org/|CTAN]], [[http://cran.r-project.org/|CRAN]], [[http://cean.process-one.net/|CEAN]]?
 * Log searches so that we can tweak metadata to suit them. [Randy Linnell]
 * [[http://blog.ubuntu-tweak.com/2010/07/24/ubuntu-tweak-0-5-5-released-with-purge-ppa.html|Purge PPAs]] (''i.e.'' offer to downgrade to the non-PPA versions of packages).

== Definitions used in this specification ==

<<Anchor(def-alert)>>
 alert:: A [[#def-dialog|dialog]] that emits the standard alert sound (if any) when it opens, and requests attention if it opens in the background.

<<Anchor(def-alphabetically)>>
 alphabetically:: Following the [[http://unicode.org/reports/tr10/|Unicode Collation Algorithm]] for the user’s locale. For example, in an English locale, “Déjà Dup Backup Utility” should be sorted alphabetically between “Debian Documentation Browser” and “Desk``Scribe”.
 There are some [[https://bugs.launchpad.net/ubuntu/+source/software-center/+bug/633238|existing bugs]] with categories not being sorted alphabetically.

<<Anchor(def-dialog)>>
 dialog:: A window that is modal to its parent (if it has one), only ever minimizes together with its parent (if it has one), and does not have any buttons in its title bar (except Minimize if it has no parent).

<<Anchor(def-em)>>
 em:: The height of the Gnome application font setting. For example, if the current Gnome application font setting works out to be 12 pixels, then 3 em = 36 pixels.

<<Anchor(def-leading)>>
 leading:: Left whenever the system is using a left-to-right language. Right whenever the system is using a right-to-left language. (All mockups in this specification are of left-to-right layouts.)

<<Anchor(def-software-item)>>
 software item:: A package or an application. If `app-install-data` or an archive index refer to one and only one application in a package, the package itself should not be treated as a software item, because it is represented by the application instead. But if there are multiple applications in a package, or none at all, the package should be treated as a software item in itself.

<<Anchor(def-trailing)>>
 trailing:: Right whenever the system is using a left-to-right language. Left whenever the system is using a right-to-left language.
Line 1278: Line 1716:
=== October 2009 ===

In Ubuntu 9.10, we shipped Ubuntu Software Center 1.0. This includes:
 * A graphical main entrance, that invites searching or browsing software by category.
 * Fast search.
 * Attractive, informative, and easy-to-understand presentation of individual applications within the interface.
 * The ability to continue browsing available software, and queue up installation/removal tasks, while other changes are being made.
 * Better security than Add/Remove Applications (''i.e.'' use of Policy``Kit instead of `gksudo`).
 * A redirector Web service (''e.g.'' redirecting from `http://apt.ubuntu.com/p/package-name` to `apt:package-name`), to better cater for forums and other CMSes that do not allow direct `apt:` links.

=== April 2010 ===

For Ubuntu 10.04 LTS, we plan to:
 * Present non-application packages in an understandable way.
 * Helpfully subcategorize applications such as games, and also categorize non-application packages such as programming utilities, fonts, database software, and screensavers.
 * Improve apt.ubuntu.com so that it handles more browsers, and more usefully caters for people who are not running Ubuntu when they follow the link.

=== October 2010 ===

For Ubuntu 10.10, we plan to:
 * Let you rate and review packages from within the Center, and see ratings and reviews submitted by other Ubuntu users.
 * Interactively demonstrate how to launch the software you’ve just installed.
 * Provide the ability to purchase software from within the Center.
 * Make Ubuntu Software Center a viable alternative to Synaptic, allowing the same fine-grained package control and handling of error cases.
  * Establish and convey a trust level for software in PPAs, and let you easily add PPAs within the Center.

=== April 2011 ===

For Ubuntu 11.04, we plan to:
 * Improve sharing and tracking of software within the Center. For example:
  * Overviews of installed software by license, cost, or maintenance timetable.
  * Discovering software by what your friends have installed.
  * Downloading a package once for installing on many computers.
  * Incorporating [[http://aptoncd.sourceforge.net/|AptOnCD]].
  * A visible history of past installations/removals/purchases, including the ability to undo specific changes.
 * Investigate and, if appropriate, implement specialized interfaces for browsing and installing particular classes of package (fonts, screensavers, ''etc'').
Ubuntu 9.10 (October 2009) shipped Ubuntu Software Center 1.0.2. This included:
 * a graphical main entrance, that invited searching or browsing software by category
 * fast search
 * attractive, informative, and easy-to-understand presentation of individual applications within the interface
 * the ability to continue browsing available software, and queue up installation/removal tasks, while other changes were being made
 * better security than Add/Remove Applications (''i.e.'' use of Policy``Kit instead of `gksudo`)
 * a redirector Web service (redirecting from `http://apt.ubuntu.com/p/package-name` to `apt:package-name`), to better cater for forums and other CMSes that do not allow direct `apt:` links.

Ubuntu 10.04 LTS (April 2010) included Ubuntu Software Center 2.0.2. This version:
 * presented non-application packages in an understandable way
 * helpfully subcategorized applications such as games, and also categorized non-application packages such as programming utilities, fonts, database software, and screensavers
 * offered distinct listings for PPAs and other third-party repositories.

Ubuntu 10.10 (October 2010) included Ubuntu Software Center 3.0.4. This version:
 * allowed software purchases from within USC
 * incorporated apt: URL handling (replacing `apturl`)
 * handled standalone `.deb` packages (replacing `gdebi`)
 * showed a history of past installations/removals/purchases, including the ability to undo specific changes
 * improved the presentation of category (then “department”) screens
 * improved search results.

Ubuntu 11.04 (April 2011) included Ubuntu Software Center 4.0, with ratings and reviews for software, and many performance improvements.

Ubuntu 11.10 (October 2011) included Ubuntu Software Center 5.0, with a simpler layout, and “Top Rated” sections to feature interesting software.

Ubuntu 12.04 (April 2012) included Ubuntu Software Center 5.2, with personalized recommendations, Unity launcher integration, system requirements disclosure, and access to backports.

Ubuntu 12.10 (October 2012) included Ubuntu Software Center 5.4, and Ubuntu 13.04 (April 2013) included Ubuntu Software Center 5.6.
Line 1317: Line 1747:

This is a tentative mockup of version 4:<<BR>>
{{attachment:future-lobby.jpg}}

And this is a laundry list of desired features, for the purpose of designing an interface for version 2.0 that will scale to include those features later. It is ''not'' a list of features scheduled for 2.0.
Line 1343: Line 1768:
 * find software sources (Launchpad PPAs)
  * and know how trusted each PPA is
Line 1386: Line 1808:
== User stories ==

 * Joel wants to install Skype. He goes to [[http://skype.com/|skype.com]], finds the "Download for Ubuntu" button, and clicks it. He doesn't know what a “package” is, let alone a “.deb” or a “repository”.

 * Melatie runs an accounting business that is far too small to have its own IT manager. She has a support contract for the Ubuntu software on the office PCs, and she knows that this doesn’t cover all the available software, so she wants to keep track of exactly what software is installed that isn’t covered.

 * Ladina works as a developer at a molecular biology lab where she is not a sysadmin. She is having a bit of trouble with Biopython, and wants an easy way of seeing which version of `python-biopython` is installed and where its files are.
Line 1396: Line 1810:
 * [[https://launchpad.net/mintinstall|mintInstall]]  * [[http://catlingmindswipe.blogspot.com/2010/05/review-linux-mint-9-software-manager.html|Mint Software Manager]]
 * [[http://packagekit.org/pk-screenshots.html|PackageKit Gnome]]
Line 1398: Line 1813:
 * [[http://www.dotdeb.com|dotdeb.com]] (Ubuntu software)
Line 1409: Line 1825:
== Yet-to-be-specified features ==

 * “Featured this week” area in lobby screen
 * codec search
 * font search [``[[http://brainstorm.ubuntu.com/idea/15333/|idea 15333]]``]
 * scope control for search (All / Name / Description / Package Codename / Alternatives)

=== Launching via inserting an Ubuntu CD ===

The Center needs to be able to tell whether a CD containing packages is:
 * for a previous version of Ubuntu
 * for the same version of Ubuntu
 * for a future version of Ubuntu
 * for a different OS altogether.

You should also be able to eject the CD from the navigation pane, just as you can eject a music CD from Rhythmbox’s side pane.

=== Launching via .deb package (replacing gdebi) ===

=== Launching via file of unknown type ===

The Center needs to be able to display applications that handle a particular filetype, ''i.e.'' an equivalent to `gnome-app-install --mime-type text/html`. (Maybe distinguish between file viewers and editors?)

Nautilus then needs to be able to launch the Center to this search.

=== History section ===

[``[[https://blueprints.launchpad.net/ubuntu/+spec/foundations-lucid-software-center-history-of-packaging-transactions|foundations-lucid-software-center-history-of-packaging-transactions]] 1 of 1]

||<style="background:SkyBlue">Interface designers||
||For version 2.0, we would like the Center to include a history of items installed, removed, updated, and otherwise changed since Ubuntu was installed. How should we present this? Present your ideas at [[SoftwareCenter/History]].||

=== Subcategories ===

 * [[http://lists.debian.org/debian-devel/2009/02/msg00942.html|debtags for package categorization]]
 * http://www.enricozini.org/2007/debtags/package-managers.html
 * http://debtags.alioth.debian.org/ssearch.html

=== Wine integration ===

 * If you have Wine installed and some apps that you've installed manually (through installer files or CDs), there could be a separate department for “Installed Windows Programs”. However, it’s important to communicate that Windows programs are installed just for you, whereas all the other programs are installed for everyone on the system.
   * This could also apply to other applications installed only for you. http://brainstorm.ubuntu.com/idea/6816/
   * Alternatively, the Center could also install wine programs globally to avoid installing the same programs locally multiple times
     * Wine doesn't yet support system-wide installation or multiple users using the same apps simultaneously, however.
 * Individual Windows apps offered through the Center itself could be packaged to support multi-user setup. Scott Ritchie's presentation at UDS-karmic shows how this can be done fairly simply, however it has to be done for Windows apps individually: http://yokozar.org/blog/archives/138
   * Such packaging of an app could go alongside a testing process to make sure the app worked well in the version of Wine we ship.

=== License information ===

 * http://wiki.debian.org/Proposals/CopyrightFormat

=== Developer tools ===

 * For a particular package, show which packages are required for development or debugging of that package.
 * Maybe treat `-dev` packages specially?

=== Eliminating the “{title} can’t be installed at the moment” alert ===

Instead of an impossible installation causing an alert saying “Sorry, {title}” can’t be installed at the moment. Try again in a day or two.”, the task should show its error status inline in the “In Progress” section somehow, and sit there across Center launches until you retry it or cancel it. The “In Progress” arrows would need to stop spinning for cases like this, because nothing is actually happening.
<<Anchor(contributing)>>
== How you can help ==

[[http://www.ubuntu.com/community/ubuntuvalues|We welcome useful contributions from anyone]], regardless of age, gender, or experience. If your expertise is in one of these areas, search through this specification for the color-coded sections relevant to you:

<<Include(SoftwareCenter/ColorKey)>>

Otherwise, if you are a '''Python programmer''', [[https://code.launchpad.net/software-center|get the latest code]] and try [[https://bugs.launchpad.net/ubuntu/+source/software-center|fixing existing bugs]], or [[#future|implementing something for a future version]]. When you have something ready, [[https://help.launchpad.net/Code/Review|propose it for merging]].

If you are a '''tester''', look through this specification and compare the behavior described, sentence by sentence, to the behavior you see in [[https://code.launchpad.net/~software-store-developers/software-center/trunk|the trunk version]]. If something has been implemented but behaves differently from how the specification describes it, [[#bugs|report a bug]] if it hasn’t been reported already.

<<Anchor(bugs)>>
== Where to report bugs ==

Ubuntu Software Center relies on several lower-level components, presents data from various sources, and interacts with multiple server-side components that track their bugs separately. Here’s a quick guide:

||'''Project/Package''' ||'''Kinds of bugs that belong there''' ||
||[[https://bugs.launchpad.net/ubuntu/+source/apt|apt]]||Problems that also occur with `apt-get`||
||[[https://bugs.launchpad.net/aptdaemon|aptdaemon]]||Stuck tasks; Poor feedback for tasks in the “Progress” screen; Poor error messages when tasks fail||
||[[https://bugs.launchpad.net/ubuntu-sso-client|ubuntu-sso-client]]||The sign-in dialog for reinstalling purchases or submitting reviews||
||[[https://bugs.launchpad.net/rnr-server|rnr-server]]||Bad ratings and reviews data (but not presentation)||
||[[https://bugs.launchpad.net/ubuntu-recommender|ubuntu-recommender]]||Bad “Recommended For You” data (but not presentation)||
||[[https://bugs.launchpad.net/ubuntu/+source/app-install-data-ubuntu|app-install-data-ubuntu]]||Duplicate apps in search results; “There isn’t a software package” errors||
||individual packages||Other problems with icons, descriptions, and categories||
||[[https://bugs.launchpad.net/canonical-identity-provider|canonical-identity-provider]]||The sign-in process during purchasing||
||[[https://bugs.launchpad.net/ubuntu-webcatalog|ubuntu-webcatalog]]||The terms inside the “Terms of Use” dialog when purchasing||
||[[https://bugs.launchpad.net/software-center-agent|software-center-agent]]||The rest of the purchase process||
||[[https://bugs.launchpad.net/ubuntu-webcatalog|ubuntu-webcatalog]]||apps.ubuntu.com||
||'''[[https://bugs.launchpad.net/ubuntu/+source/software-center|software-center]]'''||Anything else, or you aren’t sure||
Line 1474: Line 1860:
 * What the Center should do differently when it is running in a live CD session.  * What USC should do differently when it is running in a live CD session.
Line 1478: Line 1864:
 * How will we extract icons, human-friendly application names, summaries, categories, and screenshots for applications in PPAs and other third-party repositories, since they won't be covered by `app-install-data`?
Line 1486: Line 1871:

== Unsorted ideas ==

 * make clear which packages are currently subject to CVE vulnerabilities
 * ensure double-clicking on a downloade .deb or .rpm gives an explanation that every user can understand. Perhaps also show an apt: -link as a suggestion for the better way of installing said package?
 * [[http://www.linuxfoundation.org/en/OpenPrinting/Database/DriverPackages|OpenPrinting]]: “To make installing printer drivers not provided by the Linux distributions easier for users, and to make providing printer drivers easier for the printer manufacturers, we have introduced a new concept of distribution-independent printer driver packages.”
 * While installing, the window should be reducible (or perhaps reduce by default) to show only install progress.
 * Make installation asyncronous (background process) and allow user to continue browsing the Software Center meanwhile
 * Replace the “These items must be removed as well” alert with a box embedded in the package screen when you click “Remove”?
 * “Also a ''permalink'' on the description page, would be pretty nice. You want to suggest a package to someone? You just have to copy paste the (apt url) application link into your IM or blog post.” [``[[http://www.stefanoforenza.com/ubuntu-appstore-in-the-workings/|Stefano Forenza]]``]
 * DONE: [[http://brainstorm.ubuntu.com/idea/19653/|idea 19653]]: “Most users switching over from Windows associate "Add/Remove" only with removing software, and believe that new software needs to be purchased at a retailer ...” -- Covered by renaming from "Add/Remove" to "Ubuntu Software Center".
 * [[http://brainstorm.ubuntu.com/idea/19653/|Idea #19882]]: Problem With Restricted Software Installation Warning
 * [[http://brainstorm.ubuntu.com/idea/17929/|Idea #17929: Its hard to know what are you installing]]
 * [[http://brainstorm.ubuntu.com/idea/14025/|Idea #14025: Better distinction between installed/uninstalled apps in Add/Remove Applications]]
 * [[http://doctormo.wordpress.com/2009/06/01/ubuntu-apt-url-and-the-white-list/|Martin Owens: apt-url and the whitelist]]
 * “Foo``Bar is not available for this version of Ubuntu, but it is available for version X.Y…”
 * [[http://wiki.debian.org/I18n/SmithReviewProject|Smith Review Project]]: making package descriptions and debconf questions human-readable
 * Maybe the Firefox start page could contain an "Ubuntu software" link, that opens the Store, alongside its "Ubuntu help" link? [Vincenzo Ciancia]

 * [[http://brainstorm.ubuntu.com/add-remove-dialog/most_popular_ever|Ubuntu Brainstorm: Most popular ideas for Add/Remove]]
 * [[http://brainstorm.ubuntu.com/synaptic/most_popular_ever/|Ubuntu Brainstorm: Most popular ideas for Synaptic]]
 * SummerOfUsability mockup design iterations by MonicaMaceli
 * Installing software locally when the user doesn't have administrator rights.
 * http://www.anandtech.com/systems/showdoc.aspx?i=3616&p=9
 * If the user does not have admin rights then the program would offer to queue the program for the system admin. This is very useful when the user can just say check your install queue instead of remembering the exact packages that he needed. Especially when he is just clicking a link on the internet. Could also be useful for parents.

 * Multi-level undo.
 * Updates are aggregated by source package, with packages hidden inside an expander.
 * Recommendations and suggestions are shown as children of an item in the list (recommendations selected by default, suggestions not).

 * ''Incorporate PackageMaintainednessPresentation, including its “Future work”''
 {{attachment:maintenance-graph.jpg}}
 * Add a “Date Installed” column to the “Installed Software” section.
 * Handle the “Extends” field for packages.
 * Provide an easy mechanism for applications such as Inkscape to select and install plug-ins.
 * When search field becomes non-empty, switch to results view immediately, perhaps with spinner until first results arrive. [Stuart Langridge]
 * Need to define the exact behavior when waiting for other package managers to quit.
 * Provide an optional "Donate" button for projects that need donations to keep going. The button could open up the donate page on their website. Or if non-free (as in beer) software is sold through the software store then the money could go through the site ... (The need was talked about in [[http://twit.tv/floss86|FLOSS Weekly 86 - Ardour]]). [[http://brainstorm.ubuntu.com/idea/21212|Donate button in Software Store in Ubuntu Brainstorm]].
  * Alternatively provide a way of a project displaying a web page instead of the package description. This allows the project to collect revenue via adverts, subscription or donation. It puts the handling of revenue into the hands of the project. If the web page data isn't available then it could revert by default back to the package description. This could also be a preference option.
 * Drag installed applications to `gnome-panel` or other launchers.
 * Saved searches (with an emblem if they contain new stuff since you last looked at them)
 * Add `apt:` URL syntaxes for:
  * department pages
  * search results.
 * Prioritize reviews from your contacts. [Matt Griffin]
 * Accessible names for other items that have no explicit label.
 * How can we integrate cross-platform add-on repositories, e.g. [[https://addons.mozilla.org/en-US/firefox/|Firefox add-ons]], [[http://pkg-ruby-extras.alioth.debian.org/rubygems.html|Ruby Gems]], [[http://www.cpan.org/|CPAN]], [[http://ctan.org/|CTAN]], [[http://cran.r-project.org/|CRAN]], [[http://cean.process-one.net/|CEAN]]?
 * Log searches so that we can tweak metadata to suit them. [Randy Linnell]
 * How do we use font screenshots from [[http://fonts.debian.net/]] instead of screenshots.debian?
 * How to provide better search results (facet search tags/categories on e.g. the left hand?)

Ubuntu Software Center is a utility for installing, purchasing, and removing software in Ubuntu, a major part of Ubuntu’s overall software handling. This design specification describes, for designers, developers, testers, and potential contributors, how USC is supposed to work. The project is open source.

Contents

  1. Rationale
    1. Branding
    2. Launching
      1. Directly
      2. From an apt: link
      3. from a standalone .deb package
      4. from the command line
    3. Main window
      1. Navigation
        1. Navigation in general
        2. Section navigation
        3. Back/Forward navigation
      2. “All Software” section
        1. Home screen
        2. Exhibit banners
        3. “What’s New”
        4. “Top Rated” overall
        5. Category screen
        6. Subcategory screen
      3. “Installed” section
      4. Software item screen
      5. “History” section
      6. “Progress” section
    4. Common interface components
      1. Menus
      2. Software item tiles
      3. Software tile view
      4. Software list view
      5. Software sources
        1. Software list view for individual software sources
    5. Determining information about software items
      1. Icon and genre
      2. Hardware requirements
    6. Searching
      1. The search field
      2. Interpreting search text
      3. Search results and behavior
    7. Custom package lists
    8. Copying a Web link for a package
    9. Installing software
    10. Removing software
    11. Add-on packages
    12. ISV software
      1. Installing ISV software
      2. Reinstalling previous purchases
    13. Ratings and reviews
    14. Recommendations
    15. Support and problem reporting for ISV software
    16. Comparing and syncing installed software between computers
    17. Help
    18. About window
  2. Features that were planned for future versions
    1. Learning how to launch an application
    2. Deauthorizing your computer
    3. Choosing between backport and non-backport versions
    4. Region restrictions
  3. Features you can implement
    1. “Go” menu and simplified navigation bar
    2. Installing from external media
    3. “What’s Popular” overall
    4. Subcategories for “Tweaks & Themes”
    5. Subcategories for “Sound & Video”
    6. Encouraging use an archived version instead of a standlone .deb
    7. Launching from multiple standalone .deb packages
    8. Opening a standalone package from within USC
    9. Dragging a software item
    10. Dragging Web site links
    11. Being encouraged to submit a review
    12. “Updates” section
      1. Minimal implementation
      2. Enhancement: Navigation bar emblem
      3. Enhancement: Launcher item emblem
      4. Enhancement: Install Ubuntu updates together with application updates
      5. Enhancement: “Hide” function for updates
      6. Enhancement: Updates to other NotAutomatic channels
      7. Enhancement: New Ubuntu versions shown in “Updates”
    13. Smarter ellipsis of software list view items
    14. Copying software list view items to the clipboard
    15. Pausing or cancelling all queued tasks
    16. More informative text for waiting tasks
    17. Downloading while waiting to install
    18. Reordering queued tasks
    19. Consistent progress bar for installations and removals
    20. Copying a Web link for an “In Progress” package
    21. “Where Is It?” button
    22. “Reinstall” command
    23. “Remove Including Settings” command
    24. Residual files
    25. “Package Info” window
    26. History enhancements
    27. Animation of the main pane
    28. Wine integration
    29. Security information for the store
    30. Access to your store account details
  4. Yet-to-be-specified features
    1. Dragging installed applications from USC to a launcher
    2. Launching via inserting an Ubuntu CD
    3. Launching via file of unknown type
    4. License information
    5. Developer tools
    6. Eliminating the “{title} can’t be installed at the moment” alert
    7. Others
  5. Definitions used in this specification
  6. Roadmap
  7. Eventual scope
  8. Similar efforts
  9. How you can help
  10. Where to report bugs
  11. Unresolved issues

Rationale

Early versions of Ubuntu shipped many graphical utilities for installing and removing software: Add/Remove Applications, Synaptic Package Manager, Update Manager, Software Sources, apturl, GDebi, and Computer Janitor. This redundancy increased the amount of interface people had to learn, wasted space on the Ubuntu CD, fragmented development effort, and made people more likely to think that unsanctioned software installation methods were safe. Ubuntu Software Center replaces Add/Remove Applications, Synaptic, apturl, and GDebi, and acts as one of the main entry points to Software & Updates Settings.

Beyond providing a central point for installing and removing software, USC played a small but important part in encouraging application development on Ubuntu, by providing application developers with a prominent way to offer their software for installation.

Branding

The program itself, as well as application launchers, help pages, and marketing materials, should consistently follow these guidelines:

Ubuntu Software Center

the Ubuntu Software Center

Software Center

the Software Center

For example, you might say “JazzWriter, the hit note-taking app, has just arrived in Ubuntu Software Center.

The name should be localized, for example as “Centre” in Commonwealth countries. It is not necessary to translate it word-for-word, but translations should (a) include the word “Ubuntu” (to reduce confusion with Debian Software Center etc), and (b) should not use a word that means “applications” in particular (because it also allows installation of non-application software such as add-ons, fonts, and themes).

The package name and executable name should both be software-center.

The application Comment should be “Lets you choose from thousands of applications available for Ubuntu” (without a period), and the summary in the About window should be “Lets you choose from thousands of applications available for Ubuntu.” (with a period). The package Summary should be “Utility for browsing, installing, and removing applications” (without a period).

The package Description should be:

Ubuntu Software Center lets you browse and install thousands of free and paid applications and other software available for Ubuntu. You can view available software by category, or search quickly by name or description. You can also examine the software already installed, and remove items you no longer need.

To install, purchase, or remove software using USC, you need administrator access on the computer.

The application icon should be of an attractive shopping bag with handles, such as you might get from a high-class department store.

softwarestore.svg

icon-v2.jpg

Versions 1~4

Version 5+

Launching

If USC is launched by any means when it is already open, the existing instance should be focused. Otherwise, the main window should open within five seconds on benchmark hardware, even if most of the UI is not ready yet, so that all controls need to be disabled.

launch-0.png

launch-1.png

launch-2.png

launch-3.png

If USC isn’t ready after two seconds, a USC icon should appear centered in the window.

If, after two more seconds, the system has not finished generating an up-to-date package database in your current UI language, a progress bar should appear below the icon, showing the database generation (bug 434601). If after two more seconds it still hasn’t finished, progress text should begin appearing below the progress bar: “Updating package database…” followed by the latest package name.

Directly

In Unity, Ubuntu Software Center should be a default item in the launcher.

In the standard gnome-panel “Menu Bar” applet, “Ubuntu Software Center” should be the last item in the “Applications” menu, with a separator immediately before it. In the gnome-panel “Main Menu” applet, “Ubuntu Software Center” should similarly be after the list of application categories, with separators immediately before and after it.

When opened directly, USC should by default display the home screen of the “All Software” section, scrolled to the top. The search field should be empty. Default focus should be on the search field (so that you can start searching immediately, or use Down followed by other arrow keys to navigate the items in the home screen).

Opening an apt: URL should launch Ubuntu Software Center directly to the appropriate screen; or if it is already open, focus it, wait until any currently-open alerts or dialogs have been dismissed, and then switch to the appropriate screen. What that “appropriate screen” is depends on the URL and whether the package is known to exist.

If the URL is of the form “apt:package-name”:

  • If the package is known, the software item screen for the package. Test case: (sc-001) Follow the link apt:python-wxtools. It should show the item screen for “All Software” > “System” > “python-wxtools”.

  • If the package is not known, an ephemeral error screen in the “All Software” section. It should be possible to return to this screen later in the navigation history, but it should not be possible to navigate to it directly. Test case: (sc-009) Follow the link apt:abcdefghijklmnop.

    apturl-unknown-package.png

If the URL is of the form “apt:package-name?minver=1.0”:

  • If the package is not known, the same kind of ephemeral error screen as used for apt:unknown-package-name.

  • If the package is known, the software item screen for the package. If a version late enough is not available, this screen should include an extra ribbon, between the summary and the installation state bar: “Sorry, version {minver} isn’t available in your current software sources.”.

    apturl-version-unavailable.png

If the URL is of the form “apt:package1,package2,…”: A custom package list for the package names (including displaying the comma-separated names in the search field).

If the URL is of the form “apt:package-name?section=multiverse”:

  • If the section is not currently enabled, a placeholder for the package screen, inviting you to enable the section. It should use the package name as its heading, the text ‘This software is available from the “{source}” source, which you are not currently using.’, and a button “Use This Source”. Activating the button should add the source, and the software item screen should automatically expand to its normal format.

    apturl-channel-invitation.png

    Erratum: The text currently implemented is shorter and better.

  • If the section is enabled but the package is not present in it, the same ephemeral error screen as used for apt:unknown-package-name.

  • Otherwise, the software item screen for the package.

If the URL is of the form “apt:package-name?channel=lucid-partner”: Exactly the same appearance and behavior as for apt:package-name?section=multiverse, but enabling a whitelisted repository as listed in /usr/share/app-install/channels/, rather than a section.

When this feature is fully implemented, the software-center package should be marked as Provides: apturl and Replaces: apturl.

from a standalone .deb package

While installing Skype, I was informed that a “later version is available in a software channel. You are strongly advised to install the version from the software channel, since it is usually better supported.” I'm pretty sure that could have been translated to, “Click ‘Next’ to install a newer version of Skype.”

— Farhad Manjoo, “Get a blazing-fast computer for free”, Slate

software-item-screen-standalone.png

Opening a .deb package should launch Ubuntu Software Center (or focus it, wait until any dialogs are dismissed, and then navigate) to a temporary software item screen for the package.

In the navigation bar, the screen should be located in an “Other” source, following “All Software” or “Installed” depending on whether this package version is already installed.

This software item screen should differ from the standard one:

  • Its visual design should hint that this is a little less safe than installing a package from a repository.
  • The installation state bar should say “Standalone software package”, not “Free”. (For all USC knows, you might have had to pay to download the package in the first place.)
  • If one of your repositories contains a package with the same name but a higher version number, there should be an extra bar below the installation state bar, with text of the form ‘Ubuntu has a newer version.’ (without quotes) or ‘“Other Repository Label” has a newer version.’ (with quotes). Activating the adjacent “Newer Version” button should navigate to the software item screen for the newer version.

The software-center package should be marked as Provides: gdebi and Replaces: gdebi.

from the command line

software-center should launch USC to its default view. software-center package-name should open USC to display that package. If the package is unknown, it should display the same unknown-package screen as apturl uses.

Main window

window-layout.png

The main window should be a normal, resizable window containing a navigation bar and a main pane. Initially, the window should be centered on the main display, but its size and position should persist between sessions.

The navigation bar should contain:

  1. Back and Forward buttons.
  2. Tab-like buttons for navigating between sections. Exactly one should be selected at any time:
    1. Available software, defaulting to “All Software”, with a menubutton for all available software sources.

    2. The individual available software source you are currently looking at, if any. (Before this item appears, all those on the trailing side should slide out to make room, and after it disappears they should slide back.)

      navigation-bar-transitions.png

    3. Installed software, defaulting to “All Installed” (appearing as “Installed” in the navigation bar), with a menubutton for all installed software sources.

    4. The individual installed software source you are currently looking at, if any. (Before this item appears, all those on the trailing side should slide out to make room, and after it disappears they should slide back.)
    5. History

    6. (“Popular”, “Updates”, and/or “Account” sections may be added later.)

    7. Progress”, present only occasionally.

  3. The search field, visible for any searchable screen.

Test case: (sc-002) Launch USC. From the “All Software” menu, choose “Canonical Partners”. All following items in the navigation bar should slide to the right, making room for a “Canonical Partners” item, highlighted, between “All Software” and “Installed”. Next, from the “Installed” menu choose “For Purchase”. The “Canonical Partners” item should disappear, and the “Installed” item should slide to the left, making room for a “For Purchase” item, highlighted, between “Installed” and “History”. Click Back; the “For Purchase” item should disappear from the navigation bar, and the “Canonical Partners” item should reappear, highlighted once more.

Whenever USC navigates to a screen, whether directly (with mouse or keyboard) or indirectly (e.g. when it first launches), it should:

  1. immediately reveal (if necessary) and highlight the appropriate item in the navigation bar, if it has changed;
  2. begin displaying the corresponding screen in the main pane;
  3. if the corresponding screen has not displayed within 2 seconds, display a blank screen with a horizontally and vertically centered spinner, until the screen is available.
  4. Unless the screen was navigated to by Back/Forward or by editing the search field, the screen should be focused as a whole (fixing bug 832265). From this initial focus, pressing Down or Tab should focus the first item in the screen, and pressing Shift+Tab should focus the sort menu if present.

Test case: (sc-003) On a slow computer, choose “System”; the spinner screen should appear until the full list is available. Press Down; the first item in the category should be selected. Press Shift+Tab; the sort menu should be selected.

Section navigation

The section navigation commands — “All Software”, “Installed”, and so on — should always navigate to the top level of that section, with no search text or scroll position. (The alternative would have been to remember your exact position in each section, as in previous versions of USC, but that made it harder to understand how to navigate up to the top level in each. Instead, we rely on Back and Forward navigation to preserve state.) Test case: (sc-006) In the “All Software” section, navigate to AbiWord. In the navigation bar click on “Installed”, then on “All Software”. USC should return to the home screen.

Back/Forward navigation

The navigation history (not to be confused with USC’s “History” section) is a browser-like history of which screens USC has navigated to, either directly (for example, by clicking a link or using the navigation bar) or indirectly (for example, by following an apt: link), since it opened. Unlike previous versions of USC, it should include screens from any section.

The Back and Forward commands should navigate through this navigation history, as with a Web browser: navigating using the history should not add items to it, and navigating without using the history should discard all forward items from the history. The Back command should be unavailable whenever no previous screens exist in the history, and the Forward command whenever no later screens exist in the history.

  • Test case: (sc-007)

    1. Launch USC. In both the navigation bar and the menus, the Back and Forward commands should be unavailable.
    2. Choose “History”. The Back command should become available.
    3. Choose Back. USC should return to the home screen, Forward should become available, and Back should no longer be.
    4. Choose Forward. USC should return to the History screen, Back should become available, and Forward should no longer be.

Each item in the history should remember its scroll position, whether items hidden by default were shown, what software item was selected (if any), and what element was focused (if any). These attributes should persist if you return to the screen using Back/Forward navigation, but not if you navigate to the screen any other way.

If the search field was non-empty when you navigated to a separate screen, the search you had entered just before you navigated should be stored as its own history item. Intermediate searches should not be in the history.

Whenever a screen in the navigation history does not currently exist (for example, the “Progress” screen when no tasks are in progress, or the software item screen for an item that was uninstalled and doesn’t exist in any software source), the Back and Forward commands should skip over that screen in the history — and the commands should be unavailable if all previous or later screens, respectively, consist of screens of that sort.

  • Test case: (sc-008)

    1. Launch USC. In Software & Updates Settings, add a new PPA. In USC, choose “All Software From Source” > that PPA. Back should become available.

    2. Choose Back. Back should become unavailable, and Forward should become available.
    3. In Software & Updates Settings, remove the PPA. Forward should no longer be available.

    4. In Software & Updates Settings, re-add the same PPA. Forward should become available once more.

    5. Choose Forward. USC should return to the screen for that PPA.

“All Software” section

The “All Software” section should present the union of {all software that is available, from any of the computer’s current software sources, plus any software source represented by a X-AppInstall-Channel attribute in app-install-data}, and (unlike previous versions of USC) {all software that is installed, regardless of whether it is installed from any of the computer’s current software sources}.

The section encompasses a home screen, as well as screens for top-level search results, individual categories, category search results, subcategories, subcategory search results, software sources and search results, and individual software items.

Whenever you are in the “All Software” section, the “View” > “Software Maintained by Anyone” and “View” > “Software Maintained by Canonical” items should be enabled. Changing the selection should determine whether all software or just Canonical-updated software is are shown. The selection should persist regardless of which screen in the “All Software” section is being displayed.

Whenever a software item is selected — whether searching from the home screen, in a category, in a subcategory, or implicitly because you are at a software item screen itself:

  • If it is an item that is not currently installed nor being installed, “File” > “Install” should be enabled. Selecting it should install the selected item.

  • If it is an item that is currently installed and not currently being removed, “File” > “Remove” should be enabled. Selecting it should remove the selected item.

Home screen

home.png

Erratum: “Most Popular” should be “What’s Popular”.

The home screen should be a searchable screen containing as many of these elements as have been implemented so far:

Arrow keys should change focus between the selectable items in the home screen.

The “Categories” section of the home screen should list (without icons) alphabetically all categories, as defined and sorted under “Genre”, which contain any items matching the current repositories and view options.

Exhibit banners

An exhibit is either a single item, or a collection of items on a theme, that is temporarily promoted at the top of the home screen. Exhibits are stored and transmitted as mini-HTML documents from the USC server.

Whenever the server provides exhibits for your Ubuntu version, and any of those exhibits are for — or are collections that contain any — items available with your current filters, the banner area on the home screen should show a carousel of those particular exhibits. When there are multiple applicable exhibits, the current one should fade into the next one after ten seconds. The carousel should pause whenever the window is not focused.

In any other case (for example, if there is no Internet connection, or there are no exhibits for the Ubuntu version you’re running), the banner area should show a fallback banner (included in the USC code) that links to the canned list of Featured applications.

Activating the banner for a single-item exhibit should navigate to the software item screen for that item. Activating the banner for a multi-item exhibit should navigate to a list view, with the appropriate heading, showing whichever items match your current filters.

Future work: Switch from a list view to a tile view.

“What’s New”

On the home screen, the “What’s New” area should use tiles to list, newest first, the applications that appeared most recently in any of your software channels, excluding items that you have already installed. (For this purpose, an “application” is any package containing a .desktop file.) The number of applications should be as many as fills the height of the “Categories” area next to it (or, if “Recommended For You” has been implemented, half the height).

whats-new.png

Choosing “More” in the home screen area should navigate to a separate “What’s New” screen that uses a software tile view to list, newest first, the 60 applications that appeared most recently in any of your software sources, regardless of whether they are installed (bug 1009967).

“Top Rated” overall

An item’s dampened rating (DR) should be 3 plus the sum, for each possible number of stars (1, 2, 3, 4, and 5), of (that number of stars – 3) multiplied by the lower bound of the Wilson score confidence interval with a 90% confidence level for the proportion of ratings that had that number of stars.

For example:

★☆☆☆☆

★★☆☆☆

★★★☆☆

★★★★☆

★★★★★

DR

0

0

0

0

0

3.0

16

0

0

0

0

1.19

8

0

0

0

0

1.34

4

0

0

0

0

1.58

2

0

0

0

0

1.90

1

0

0

0

0

2.24

0

1

0

0

0

2.62

0

0

1

0

0

3.00

0

0

0

1

0

3.38

0

0

0

0

1

3.76

0

0

0

0

2

4.10

0

0

0

0

4

4.42

0

0

0

0

8

4.66

0

0

0

0

16

4.81

Sorting items by “Top Rated” should sort them by their DR, so that (for example) an item with ten reviews, nine 5-star and one 4-star, is appropriately ranked higher than an item that has only two reviews, both 5-star.

On the home screen, the “Top Rated” area should use tiles to list, in descending order of DR, the items with the highest DR (out of all items that USC is configured to display), regardless of whether they are installed (bug 1009967). The number of items shown in this area depends on whether “What’s Popular” has also been implemented: 24 if it hasn’t, 12 if it has.

Choosing “More” in the “Top Rated” area should navigate to a separate “Top Rated” screen that uses a software tile view to list, in descending order of DR, the 60 items with the highest DR, regardless of whether they are installed. (As usual, the number of stars shown for each item should represent the median rating, not the DR itself.)

top-rated.png

Category screen

A category screen should be searchable. It should always begin with a heading giving the name of the category, and end with centered text of the form “1234 items available” (this count should include items in any subcategories).

If the category is set to “Show non-applications by default”, it should use a software listing view. Otherwise, it should use a software tile view, and non-application items should be hidden by default.

  • If it has any subcategories that contain any items matching the current repositories and view options, the screen should have buttons for each subcategory, a “Top Rated” area listing the 12 top rated items in that category, and (once implemented) a “What’s Popular” area listing the 12 most installed items in that category that are not already in the “Top Rated” area. (Using 12 items produces a filled last row whether there are 1, 2, 3, or 4 items per row.)

    category-with-subcategories.png

    Erratum: “Most Popular” should be “What’s Popular”.

  • Otherwise, if “What’s Popular” has been implemented and the category contains more than 60 items, the screen should consist only of the “Top Rated” and “What’s Popular” areas, each listing 12 items.

    category-without-subcategories-large.png

    Erratum: “Most Popular” should be “What’s Popular”.

  • Otherwise, if “What’s Popular” has not yet been implemented or the category contains up to 60 items, the screen should consist of a software tile view listing every item in the category. Opposite the heading should be an option menu for choosing the sort order, “By Rating” (the default), “By Name”, or “Newest First”.

    category-without-subcategories-small.png

Whenever the screen contains a “Top Rated” area, that area should list, in descending order of dampened rating, the 12 items with the highest DR in that category. Choosing “More” should navigate to a separate “Top Rated in {Category Name}” screen, listing, in descending order, the 60 items with the highest DR in that category.

Whenever the screen contains a “What’s Popular” area, that area should list, in descending order, the 12 most popular items in that category, that are neither installed nor already shown in the “Top Rated” area. (This avoids repetition, giving visibility to more items.) Choosing “More” should navigate to a separate “What’s Popular in {Category Name}” screen, listing, in descending order, the 60 most popular items in that category regardless of whether they are installed or in a “Top Rated” list.

If the category is not set to “Show non-applications by default”, non-application items should be hidden by default.

Subcategory screen

subcategory-listing.png

subcategory-tiles.png

Like the category screen, a subcategory screen should be searchable. It should always begin with a link to the parent category and a heading naming the subcategory, and end with centered text of the form “1234 items available”. If more than one sort order has been implemented, opposite the heading should be an option menu for sorting “By Rating” (the default), “By Popularity” (once implemented), “By Name”, or “Newest First”.

If the subcategory is set to “Show non-applications by default”, it should use a software listing view. Otherwise, it should use a software tile view, and non-application items should be hidden by default.

Where to show the number of items in the subcategory? We can’t nicely show them at the bottom, because in a tile view the bottom will always be scrolling out of view.

“Installed” section

installed.png

In the navigation bar, “Installed” should have an icon of a computer. It may have an emblem indicating inconsistent package state.

The “Installed” screen should show all software items currently installed, regardless of whether they are available from any of the computer’s current software sources.

The items should be grouped into the primary categories (but not the subcategories) to which they belong. Categories for which no items are installed should not be shown. A category should expand or collapse if you click anywhere in its row; expand if you press Right when it is highlighted; and collapse if you press Left when it is highlighted. The expanded or collapsed state of every category should be remembered between sessions.

At the end of the list should be centered text of the form “1047 items installed”.

Whenever you are in the “Installed” section, the “View” > “All Software” and “View” > “Canonical-Updated Software” items should be enabled. Changing the selection should determine whether all software is shown, or just Canonical-updated software. The selection should persist regardless of which screen is being displayed.

The “Installed” screen should be searchable. Whenever the search field is non-empty, a software item should be visible only if it matches the search text. A category should be visible only if either (a) it contains any matching software items, or (b) the category name itself matches the search text. Searching should not cause a category to expand or collapse by itself.

Software items in the “Installed” screen should show their icon, title, and summary. The icon should be indented so that it lines up with the start of the category name above.

Apart from that extra indentation, individual items in the “Installed” section should look and behave just as in any other software list view.

Software item screen

software-item-screen.png

A software item screen should show information about an item, let you install or remove it or change any add-ons, and (if you have currently or previously installed it) rate and review it.

A software item screen is not searchable.

Whenever a software item screen is being displayed:

  • If it is installed or currently being removed, “Installed” should be highlighted in the navigation bar. Otherwise, “All Software” should be highlighted. Test case: (sc-012) Navigate to an item that isn’t installed; “All Software” should be highlighted. Install it; once installation finishes, “Installed” should be highlighted. Now remove it; once removal finishes, “All Software” should be highlighted once more.

  • If it is an item that is neither currently installed nor being installed, “File” > “Install” should be enabled. Selecting it should install the selected item.

  • If it is an item that is currently installed and not currently being removed, “File” > “Remove” should be enabled. Selecting it should remove the selected item.

  • Whenever text is selected in the screen, the copy action (“Edit” > “Copy” and Ctrl C) should be enabled. Choosing it should copy the selected text to the clipboard.

  • “Edit” > “Copy Web Link” should be enabled. Choosing it should copy a Web link for the relevant package.

  • If the relevant package is not maintained by Canonical and you then choose “View” > “Canonical-Updated Software”, USC should automatically navigate up to the subcategory screen; or, if the entire subcategory contains no Canonical-updated items, up to the category screen; or, if the entire category contains no Canonical-updated items, up to the home screen).

Except where specified elsewhere, a software item screen should contain:

  1. A link to its primary category.

  2. A triangle (▶) and a link to its primary subcategory, if it has one.

  3. Its icon, except that the installed emblem should not be shown for an installed application (because it’s shown in the installation state bar immediately below instead, which clarifies that the emblem is not part of the application icon itself).

  4. On the trailing side, stars representing the item’s average rating.
  5. Its title, wrapping to multiple lines if necessary.

  6. Its summary, wrapping to multiple lines if necessary.

  7. An installation state bar:

    • If the item is not installed nor queued for installation, the price of the item (e.g. “Free”) at the leading end, and a button at the trailing end: “Buy…” if installation requires sign-in and payment, “Install…” if it requires sign-in only, or “Install” if it requires neither.

    • If the item is installed and not queued for removal, the installed emblem and the text “Installed” (or, if known, “Installed on {date}”) at the leading end (except for Ubuntu Software Center itself, where it should say “Installed (you’re using it right now)”), and a “Remove” button at the trailing end.
    • If the item is being installed or removed, or is queued for installation or removal (but not if its add-ons are being changed), the status text for the installation at the leading end, and a progress bar at the trailing end.

      software-item-screen-state-available-installing.jpg

      software-item-screen-state-installed-removing.jpg

  8. Its description. If the item is in app-install-data and refers to a package that is not present in the apt cache, the text “To show information about this item, the software catalog needs updating.”, and an “Update Now” button. Choosing “Update Now” should update the screen to its usual format. And if the item is not available for this architecture, instead of the description should appear the text “Sorry, <Title> is not available for this type of computer (<Architecture>).”.

  9. A “Developer Web site” link to the URL in the package’s Homepage: field, if there is one. The link should have a context menu containing “Open Link” and “Copy Link Address” items.

  10. A “Report a Problem” link, if the vendor has registered a support URL.

  11. If the item is or would be recommended for you, the reason or the hidden status.

  12. A mini gallery of all available videos and/or screenshots of the item (bug 1049988), if there are any. (If there are none, the description should extend to the space they would normally occupy (bug 1056897).) To emphasize that it is a gallery (bug 691594), the gallery should include thumbnails of each item even if there is only one. The currently displayed media, and each thumbnail, should each appear inside an inset border, with the border of the focused item highlighted. The selected screenshot or video should take up to half the width of the window, and up to the full height of the window, while maintaining its aspect ratio (bug 673214). If you activate a screenshot or video (by clicking it, or pressing Space or Enter when it is focused), a small determinate progress meter should appear centered over it, showing download or buffering progress. If it loads, the screenshot or video should then visibly zoom into a chromeless overlay window that is the height of the display, the width of the display, or the original size of the image, whichever results in the smallest scaled image (bug 995129). Clicking or pressing any key should zoom the overlay back into the main display.
    software-item-screen-gallery.png

  13. The add-ons section.

  14. Text describing the “Total size:” of the item:
    • if it is not downloaded or installed, “{X} to download, {Y} when installed”, where X is the download size including not-yet-installed dependencies, and Y is the installed size including not-yet-installed dependencies;

    • if it is already downloaded but not installed, “{Y} when installed” (bug 851222);

    • if it is installed, and you have not specified any changes to add-ons, “{Y} on disk”
    • if it is installed, and you have specified changes to add-ons, “{X} to download, {Y} on disk”.

  15. Text of the form “Version: {package name} {version number}”.
  16. Text of the form “Last update: {full date}” (bug 680523).

  17. The label “License:” followed by its license text.

  18. The label “Downloaded from:” followed by the appropriate text (private bug 882831).

  19. The label “Updates provided:” followed by the appropriate text.

  20. A “People also installed” area, if there are any relevant items.
  21. The item’s ratings and reviews.

Copy-editors

Within USC, examine the title, summary, and description of an item. Is it concise and helpful? Is the spelling, grammar, and paragraph formatting correct? If it’s a non-geek application, does the description avoid geek language? Is it in the appropriate category? If you find a problem, and you are comfortable diving into code to fix it yourself, follow the distributed development instructions with the app-install-data-ubuntu package to fix problems in an application’s title or summary, or the package itself to fix problems with its description. Otherwise, report a bug with (a) the current text, (b) what needs improving, and (c) your proposed replacement text, and give the bug report the metadata tag.

Packagers

Please look for bugs that people have reported about inappropriate application names or summaries, or package descriptions or categories, and fix them. Thanks for your help.

Packagers

If a single package contains multiple applications, and people might reasonably want to install these applications separately, work to separate the packages into one per application.

“History” section

The “History” section should display all installations, updates, removals (including purges), and other changes, in reverse chronological order.

history.png

Below the navigation bar, a filter bar should have items for “All Changes”, “All Installations” (including purchases), “Purchases”, and “Removals” (including purges) (bug 990998). (It does not need an item for “Updates”, because the use case for seeing those — debugging a problem — involves seeing all other package changes too.)

History entries should be grouped in branches labelled by day. Clicking anywhere on a branch — or pressing Space when it is selected — should expand it if it is collapsed, and collapse it if it is expanded. When a branch is selected, pressing Right should also expand it, and Left collapse it. For the day on which the most recent events happened, that branch should be expanded by default from the start of every USC session.

The “History” screen should be searchable. Whenever the search field is non-empty, a history entry should be shown only if it matches the search text, and a date branch should be shown only if it contains any items matching the search text. Searching should not cause a date branch to expand or collapse by itself.

Each history entry should consist of an icon, text, a time, and a price.

  • The icon should be that of the relevant software item.

  • The text should be of the form:
    • “{short name} installed”

    • “{short name} removed”
    • “{short name} purged”
    • “{short name} updated from version {version} to {version}”
    • “{short name} downgraded from version {version} to {version}”
  • The time should be of the form “4:08 PM”.
  • The price should be of the form “$4.99” if it was a purchase, or “—” otherwise.

previous-purchases-screen.png

“Progress” section

progress.png

The “Progress” section should be visible only when items are being installed or removed, or when the last installation or removal finished less than five seconds ago. If the section disappears while being displayed, USC should return to the section that was previously being displayed.

In the navigation bar, the section should have an animated icon of two semicircular arrows chasing each other clockwise. The icon should be overlaid with an emblem showing the number of tasks yet to be completed.

The section itself should list the items requested for installation or removal, earliest first. The rows in the list should be based on a software item list view, with these differences:

  • the second row of text is the task status text, rather than the package summary or package name;

  • each row has a (text-less) progress bar representing the task progress proportion;

  • each row representing an installation has a cancel button (which can be triggered by the Esc key when the row is selected), while each row representing a removal has a gap the same size as a cancel button (so that its progress bar lines up with the progress bars of installation rows).

1.0-in-progress-row.jpg

The cancel button for an individual item should be present only when the item has not yet started or is still downloading.

Common interface components

_File
=====
  _Install
  _Remove
---------------------------
  Reinstall _Purchases…
  _Deauthorize Computer…
  Sync Between Computers…
---------------------------
  _Close            Ctrl W

“Install” and “Remove” should activate the Install and Remove functions respectively. “Close” should, by default, close the window and exit USC.

_Edit
=====
  _Undo                     Ctrl Z
  _Redo               Shift Ctrl Z
-----------------------------------
  Cu_t                      Ctrl X
  _Copy                     Ctrl C
  Copy _Web Link      Shift Ctrl C
  _Paste                    Ctrl V
  _Delete
-----------------------------------
  Select _All               Ctrl A
-----------------------------------
  Searc_h…                  Ctrl F
-----------------------------------
  _Software & Updates Settings…

“Software & Updates Settings…” should open the Software & Updates Settings control panel. (software-properties-gtk should be responsible for focusing an existing copy of itself if it is already open.)

All other items in this menu should be disabled by default; their availability and behavior is defined elsewhere in this specification.

_View
=====
* Software Maintained by Anyone
  Software Maintained by Canonical
------------------------------------
  Go Back                        [
  Go Forward                     ]
------------------------------------
/ New Applications in Launcher
------------------------------------
  Turn On Recommendations… | Turn Off Recommendations
  Reset Recommendations…

The “Software Maintained by Anyone”, “Software Maintained by Canonical”, and “Reset Recommendations…” items should be disabled by default; their availability and behavior is defined elsewhere in this specification.

The “Go Back” and “Go Forward” items should represent the Back and Forward actions.

Test case: (sc-003) Start installing something in USC. While it is installing, navigate to the “In Progress” section, and open the “View” menu. Its items should be disabled.

_Help
=====
  Ubuntu Software Center _Help…
  Help With _Payments
  _Terms of Use
--------------------------------
  For Software _Developers
--------------------------------
  _About This Version

By default, “Ubuntu Software Center Help…” should open the help viewer to the front page of the help.

“Help With Payments” should open the default Web browser to https://help.ubuntu.com/community/Pay (bug 1107824).

“For Software Developers” should open the default Web browser to https://developer.ubuntu.com/.

“About This Version” should open or focus the About window.

Software item tiles

software-item-tiles.png

Errata:

  • The installed emblem should be at the bottom left of the icon, not the bottom right.
  • “Games — Puzzles” should be “Puzzles”.

Tiles are used to present software items on the home screen, category screens, subcategory screens, search results, and other listings.

Tiles have a minimum width. In an area that is to be filled with tiles, the number of tiles on each row should be based on the minimum width, with each tile stretching equally to fill any remaining width.

A normal software item tile contains the item’s:

  1. Icon. If the icon is scalable, or larger than 4 em in either dimension, it should be scaled down proportionally so that it is 4 em in its largest dimension. To subtly encourage developers to produce large/scalable icons, if the icon is already smaller than 4 em in both dimensions, it should be drawn at actual size and centered (both horizontally and vertically) inside a 4 em square that has a 0.05-em-wide border of color 170,170,170 (#aaaaaa).

  2. Title, ellipsized in the middle if necessary to fit on one line.

  3. Average rating (omitted entirely if there are not enough ratings).
  4. Subcategory name if it has one, otherwise its Category name, either ellipsized at the trailing end if necessary to fit on one line.

  5. Price (or “FREE” if the price is zero).

A category-specific software item tile is identical except that it omits the category name (because it would be identical for every item). And a subcategory-specific software item tile omits the category and subcategory names.

If the package is not available for this computer’s architecture, the whole tile should have 50% opacity, but should still be clickable.

The whole tile should have a pointing-hand pointer when moused over, and should be a darker shade whenever it is being clicked (bug 1017454). Single-clicking should navigate to that item.

Software tile view

A software tile view is used to present software items on various screens. It includes a heading, followed by a grid of software item tiles.

Where there is no limit on the number of items shown, initially only 60 items should be loaded and shown initially (60 because that will produce a decent batch of complete rows whether there are 2, 3, 4, 5, or 6 tiles per row). If there are more items, the bottom of the view should have enough space for a spinner. When you scroll to the bottom of the view, the spinner should appear until the next 60 items load and replace it.

Software list view

A software list view is used for the “History” and “Progress” sections. A variation of the list view is used in the “Installed” section. In future it may also be used in “All Software” for technical categories and subcategories (instead of the usual tile view), and for search results in those categories and subcategories.

software-item-list-basic.png

In a list view, each software item should have a row displaying the item’s icon, title, and summary. The row’s accessible name should be the item’s title, and its accessible description should be the item’s summary. If either row of text is wider than the space available, it should be ellipsized at the trailing end.

In “All Software” and “Installed”, the titles of items with ratings should be followed by stars for the average rating, and the number of ratings in brackets. If the width of those three things is greater than the width of the list, the stars and number should together be flush at the trailing end of the row, while the title is ellipsized at its end. (Previously the stars were always flush at the trailing end, making it difficult to see which rating belonged to which item. Moving them next to the title means stars are not aligned for different rows, but that matters little, because the ratings will much more often be used for sorting than for direct comparison.)

software-item-list-with-ratings.png

software-item-list-selected.png

In the “All Software”, “Installed”, and “History” sections, when (and only when) an item is selected, the row should expand to reveal buttons: “More Info” and “Remove” for an item that is installed, queued for removal, or being removed, and “More Info” and “Install” etc for an item in any other state.

The “More Info” button should have Enter as its access key. Activating it should navigate to the software item screen.

The “Install” button should be disabled if the item is currently installing or queued for installation. Similarly, the “Remove” button should be disabled if the item is currently being removed or queued for removal, or if its add-ons are being changed or queued for change. Neither button should have an access key (because that would interfere with typing letters to navigate the list).

The “More Info” in the row should, if it is enabled, be focused by default (otherwise no button should be focused); pressing Tab should cycle through any remaining buttons before leaving the list (bug 634952)). Test case: (usc-005) Navigate to “All Software” > “Universal Access”. Select “Indic Onscreen Keyboard”. Press Ctrl F; the search field should be focused. Press Tab; the ttf-alee row and its “More Info” button should be focused. Press Tab again; the “Install” button should be focused.

software-item-list-installing.png

When an item is being installed, being removed, having its add-ons changed, or queued for any of those tasks, the trailing end of the row should have a progress bar showing progress of the task. If the item is being installed or is having its add-ons changed, it should also have an icon-only cancel button. During this time the secondary text for the row should be the status text for the task, instead of the item’s summary.

If the item is not installable for this computer’s architecture, the icon and the text — but not any buttons when the row is expanded — should have 50% opacity, but the item should still be selectable.

By default, none of the rows in a software list view should be selected. If the view allows selection, clicking anywhere in an row should select that item, and Ctrl+clicking on a selected item should deselect it. If no item is selected, pressing the Down arrow key should select the first row, and conversely pressing the Up arrow key should select the last row. If the view does not allow selection, the arrow keys should scroll the view without highlighting rows.

Whenever an item is selected in a software list view, “Edit” > “Copy Web Link” should be enabled. Choosing it should copy a Web link for the relevant package.

Unless otherwise specified, a software list view should always have a vertical scrollbar. (This prevents elements at the trailing end from jumping about when the view contents switches between shorter than, and longer than, the container’s height). A software list view should never have a horizontal scrollbar.

If a software list view has items hidden by default, the bottom of the pane containing the view should have a panel (below the bottom of the scrollbar) containing a hyperlink of the form “Show 17 technical items”. Following the link should display the items that were hidden by default, and make the link change to the form “Hide 17 technical items”. Except in Back/Forward navigation, revisiting the software list view should not persist in showing items; it should resume hiding them by default.

software-list-view-disclosure.jpg

Software sources

software-sources.png

In most cases, the collection of software that USC presents should consist of the aggregate of available software items from all enabled software sources, plus any software currently installed that has no known source.

When it is appropriate to present individual software sources separately, they should be presented as follows (and in this order):

Source

Icon

Label

“Downloaded from” text

“Updates provided” text

Main and Restricted for the current Ubuntu version

the Ubuntu logo

Provided by Ubuntu

“Ubuntu”

“by Canonical until June 2027”, or “none (Canonical updates ended June 2011)”

Universe and Multiverse for the current Ubuntu version

“Ubuntu”

“by the Ubuntu development community”

The Canonical partner repository for the current Ubuntu version

the Canonical logo

Canonical Partners

“Canonical”

“by the vendor”

Any other sources represented by an X-AppInstall-Channel attribute in app-install-data, sorted alphabetically

a generic repository icon

the contents of the Label: field from their Release file

domain name of the repository

“unknown”

Purchasable items

money

For Purchase

“Canonical”

“by the vendor”

the Independent repository for the current Ubuntu version

a cluster of people

Independent

“Canonical”

“by the developer”

Any PPAs (not including those for purchased items), sorted alphabetically

The same PPA icon that Launchpad uses

the contents of the Label: field from their Release file, once retrieved from Launchpad — until then, the same naming scheme as any other non-CD source

“Launchpad”

“by the developer”

Any other network sources, sorted alphabetically

a generic repository icon

its URI with the protocol stripped, e.g. “packages.example.org/ubuntu/” (we don’t use the Label: here because we don’t trust third-party repositories as much as we trust PPAs)

domain name of the repository

“unknown”

Any volumes (such as CDs, DVDs, or USB sticks) containing packages, sorted alphabetically

the same icon as it has in the file manager

If a volume contains a /.disk/info file, “{OS version}”, where the OS version is the contents of /.disk/info up to but not including the first " character nor any spaces immediately preceding it. Otherwise, the same label as is used in the file manager.

“—”

“none”

Packages without an associated source

a question mark in a disc

Other

“unknown”

“none”

The available software sources should consist of this full list, except for “Other”.

The installed software sources should consist of all those items in this list from which you have installed any software.

Test case: (sc-013)

  1. Launch USC.
  2. Add a PPA in Software & Updates Settings.

  3. Open the “All Software” menu; the PPA should be shown in the menu.
  4. Open the “Installed Software” menu; the PPA should not be shown in the menu.
  5. Install a package from that PPA. When it finishes installing, open the “Installed Software” menu again; the PPA should now be present.
  6. Select that menu item, and remove the package; when it finishes uninstalling, the PPA should disappear from the “Installed” menu, and USC should automatically navigate to the main “Installed” screen.
  7. Select the PPA from the “All Software”, then remove the PPA from Software & Updates Settings. The PPA should disappear from the “All Software” menu, and USC should automatically navigate to the home screen.

Test case: (sc-014)

  1. Download and install a standalone .deb package, such as Opera.

  2. Open the “Installed Software” menu; it should have an “Other” child item that, if selected, shows the item you installed.
  3. Open the “All Software” menu; it should have an identical “Other” child item.
  4. Uninstall the package; the “Other” item should disappear from both menus, if that was the only standalone item installed.

Software list view for individual software sources

When any individual software source inside “All Software” is selected, the main pane should show a software list view of all the packages that source contains, with status text of the form “17 items available”.

When any individual software source inside “Installed” is selected, the main pane should show a software list view listing all the packages currently installed (or in the process of being removed) from that source, with status text of the form “3 items installed”.

For all sources except “Provided by Ubuntu”, the items in the “View” menu should be disabled, because they do not apply.

Determining information about software items

Most information about a package — its title, short name, summary, and license info — should come from Aptdaemon. These are the exceptions:

Icon and genre

The icon should be the usual icon for the package, except that unless otherwise specified, a package that is currently installed should have its icon overlaid in the bottom left corner with the installed checkmark emblem.

The summary should be the application Comment, if there is one; otherwise the package synopsis with its first word capitalized, if the application has a Name but not a Comment; otherwise the package name (because if you’re looking at a non-application package in the first place, you’re fairly likely to be the sort of user who wants to know the package name).

The license label for an item should be:

  • “Open source”, if it is in Main or Universe;
  • “Proprietary”, if it is in Restricted or archive.canonical.com;
  • “Unknown”, if it is anywhere else (including Multiverse and standalone packages).

If you want this to be more specific (bug 435183), do what you can to get DEP-5 implemented. When it is implemented in USC, the words “Open source” (or their localized equivalent) should be included in the string for each license, rather than in a separate string (bug 811489).

Finally, every item has a genre represented by a primary category, and sometimes also by a primary subcategory and/or a secondary category. If an item has a secondary category, it may also have a secondary subcategory. Each category, and each subcategory, should have its own icon.

As used elsewhere in this specification, an item’s category means its primary category, and its subcategory means its primary subcategory.

These are the categories and subcategories, in the order in which they should be presented when presented together:

Category

Equivalent menu spec categories

Equivalent sections

Package name pattern

Show non-application packages by default

- Subcategory

Accessories

Utility, System

-

-

Books & Magazines

X-Publication

-

-

Education

Education

-

-

Fonts

-

-

(t,o)tf-*

yes

Games

Game, Sports

-

-

- Board Games

BoardGame

-

-

- Card Games

CardGame

-

-

- Puzzles

LogicGame

-

-

- Role-Playing

RolePlaying

-

-

- Shooter (bug 626414)

Shooter

-

-

-

- Sports

SportsGame

-

-

Graphics

Graphics

-

-

- 3D

3DGraphics

-

-

- Drawing

VectorGraphics

-

-

- Painting

RasterGraphics

-

-

- Photography

Photography

-

-

- Publishing

Publishing

-

-

- Scanning & OCR

Scanning, OCR

-

-

- Viewers

Viewer

-

-

Internet

Network

-

-

- Chat

InstantMessaging, IRCClient

-

-

- File Sharing

FileTransfer

-

-

- Mail

Email

- (not mail)

-

- Web Browsers

WebBrowser

- (not web)

-

Office

Office

-

-

Science & Engineering

Science

science

yes

- Astronomy

Astronomy

-

-

- Biology

Biology

-

-

- Chemistry

Chemistry

-

-

- Computing & Robotics

ArtificialIntelligence, ComputerScience, Robotics

-

-

- Electronics

Electronics

-

-

- Engineering

Engineering

-

-

- Geography

Geography

-

-

- Geology

Geology, Geoscience

-

-

- Mathematics

DataVisualization, Math, NumericalAnalysis

math, gnu-r

yes

- Medicine

MedicalSoftware

-

- Physics

Electricity, Physics

-

Sound & Video

AudioVideo, Audio, Video

- (not sound or video)

-

Themes & Tweaks

Settings

-

- Background Pictures

-

-

*-backgrounds, *-wallpapers, ubuntu-wallpapers-*

yes

- Dash Search Plugins (bug 1025333)

-

-

unity-lens-* but not *-dbgsym

yes

- Themes

-

-

*-theme

yes

Universal Access

Accessibility

-

Developer Tools

Development

devel

yes

- Debugging

Debugger

- (not debug)

-

- Graphic Interface Design

GUIDesigner

-

-

- Haskell

-

haskell

yes

- IDEs

IDE

-

-

- Java

-

java

yes

- Libraries

-

libdevel (not libs or oldlibs)

yes

- Lisp

-

lisp

yes

- Localization

Translation

- (not localization)

-

- Mono/CLI

-

cli-mono

yes

- OCaml

-

ocaml

yes

- Perl

-

perl

yes

- Profiling

Profiling

-

yes

- Python

-

python

yes

- Ruby

-

ruby

yes

- Version Control

RevisionControl

vcs

yes

- Web Development

WebDevelopment

-

-

System

-

-

yes

Librarians

If debtags had become available, we would have refined this classification scheme. For example, what subcategories could the “Games” category have? And how could the items in the “Internet” menu be redistributed? Ideas were invited on the Classification page.

The algorithm for determining an item’s primary category and subcategory should be:

  1. If it has a .desktop file with at least one Category: value that matches one of the subcategories listed above, then:

    1. Use the first recognizable Category: value to determine the subcategory from the table.

    2. Determine the category from the subcategory’s location in the table.
    3. Stop.
  2. If it has a Section: that matches one of the subcategories listed above, then:

    1. Use the Section: value to determine the subcategory from the table.

    2. Determine the category from the subcategory’s location in the table.
    3. Stop.
  3. If it has a .desktop file with at least one Category: value that matches one of the categories listed above, then:

    1. Use the first recognizable Category: value as the category.

    2. Stop.
  4. If it has a Section: that matches one of the categories listed above, then:

    1. Use the Section: value to determine the category from the table.

    2. Stop.
  5. Use “System” as the primary category, with no primary subcategory.

The algorithm for determining an item’s secondary category and subcategory should be:

  1. If the .desktop file has at least one X-Ubuntu-Category-Secondary: field that matches one of the known categories, then:

    1. Use the first X-Ubuntu-Category-Secondary: value as the subcategory.

    2. Determine the category from the subcategory’s location in the table above.
    3. Stop.
  2. The item has no secondary category or subcategory.

Test case: We should have a test repository containing packages with various combinations of Category: and/or X-Ubuntu-Category-Secondary:.

Hardware requirements

hardware-requirements-text.png

If a package has one or more of the following requires-hardware:: debtags, then in the software item screen, the “Total size:” row should be followed by an “Also requires:” row listing the requirements in human-readable form. (A translator note should explain that the “Also” refers to the preceding “Total size” requirement.) The requirements should be comma-separated, each preceded by a text-colored checkmark if it detectably meets that requirement, an error-colored cross if it detectably fails, or nothing if the requirement is (currently) untestable.

hardware-requirements-warning.png

In addition, whenever the computer detectably does not meet the requirements, immediately above the installation state bar should be an extra bar containing a warning specific to the unmet requirements, with a Warning /!\ icon aligned with the button below. And if the software is not currently installed, that “Install” or “Buy…” button should read “Install Anyway” or “Buy Anyway…” instead.

(These requires-hardware:: tags are largely parallel to Debian’s existing hardware:: tag hierarchy, with some improvements.)

debtag

“Also requires:” text

Warning text

::camera

camera

This software requires a camera, but none are currently connected.

::gps

GPS

This software requires a GPS, but the computer does not have one.

::input:joystick

joystick

This software requires a joystick, but none are currently connected.

::input:mouse

mouse

This software requires a mouse, but none are currently set up.

::input:touchscreen

touchscreen

This software requires a touchscreen, but the computer does not have one.

::laptop

notebook computer

This software is for notebook computers.

::memory:1GB

1 GB memory

This software requires {size} memory, but the computer has only {size}.

::power:ups

UPS

This software requires an uninterruptable power supply, but none is connected.

::printer

printer

This software requires a printer, but none are currently set up.

::scanner

scanner

This software requires a scanner, but none are currently set up.

::storage:cd

CD drive

This software requires a CD drive, but none are currently connected.

::storage:cd:writer

CD burner

This software requires a CD burner, but none are currently connected.

::storage:dvd

DVD drive

This software requires a DVD drive, but none are currently connected.

::storage:dvd:writer

DVD burner

This software requires a DVD burner, but none are currently connected.

::storage:floppy

floppy disk drive

This software requires a floppy disk drive, but none are currently connected.

::video:opengl:2.1

hardware graphics acceleration (OpenGL x.y+)

This computer does not have graphics fast enough for this software.

::video:opengl:3.0

::video:opengl:3.1

::video:opengl:driver-blacklist:amd

Graphics driver that is not {comma-and-space-separated list}

This software does not work with the “amd” graphics driver this computer is using.

::video:opengl:driver-blacklist:fglrx,intel

This software does not work with the “fglrx” graphics driver this computer is using.

::video:opengl:driver-blacklist:intel,nouveau,nvidia

This software does not work with the “nvidia” graphics driver this computer is using.

Multiple unmet requirements

This software has multiple requirements missing from this computer.

Searching

Whenever the current screen is searchable, the navigation bar should contain a search field (with accessible label “Search”), and the “Edit” > “Search…” command should be enabled. Activating that command should focus the search field, and (even if it is focused already) select its entire contents.

The search field

search-field.jpg

Whenever the search field is focused, the “Edit” > “Undo”, “Redo”, “Cut”, “Copy”, “Paste”, “Delete”, and “Select All” items should have their usual enabled/disabled state and operation for a text field.

Inside the leading end of the field should be a symbolic magnifying glass icon. Clicking the icon should focus the field and select its entire contents.

When (and only when) the search field is not empty, the trailing end of the field should have a symbolic clear icon. Clicking the icon should focus the field and clear its contents.

Besides the normal behavior for text fields, whenever the insertion point (caret) is at the trailing end of the search field, pressing the Down arrow key should focus the contents of the main pane and select the first item — such as the first category in the home screen, or the first result in any list of search results.

Interpreting search text

When searching anywhere in USC, any word in the search string that is followed by a space or punctuation should be treated as a a complete word, while any word that is not should be treated as if it may be either a complete word or the beginning of a word. Test case: (sc-004) From the top-level “All Software” screen, search for “atom”; it should return both Atomix and Liferea (an Atom feed reader). Now search for “atom ” (with a trailing space); it should return only Liferea.

For the sake of people who are unfamiliar with how they should use the search, there should be a greylist of words that are downplayed when searching. “Downplayed” in this sense means that:

  • A search that consists only of greylisted words should work just as if none of the words were greylisted.
  • In any other search that contains one or more greylisted words, the greylisted words should be ignored: only the words that are not greylisted should be searched for. However, once the results are chosen, the presence of any greylisted words should cause a result to appear higher in the list.

For English, the greylist should be “app application package program programme suite tool”. The greylist should have a translation note: “Do not translate this list directly. Instead, provide a list of words in your language that people are likely to include in a search but that should normally be ignored in the search.”

Test case: (sc-011) From the home screen, search for “drawing ” (with a trailing space). Then search for “drawing program”. USC should return exactly the same results for both searches, though possibly in a different order.

Search results and behavior

If the search field contains text at the moment you navigate to any other view, that search should be added to the end of the Back/Forward navigation history, with the previous item being the same screen without any search text. (So clicking Back is one way to clear a search.)

Test case: (sc-010) Launch USC. Type Ctrl F; the search field should be focused. Type “fire” (without quotes or pressing Enter); the main pane should be replaced by search results, with Firefox first. Press the down arrow key once; Firefox should be selected in the results. Press Enter; USC should navigate to the software item screen for Firefox. Choose Back once; USC should return to the “fire” search results. Choose Back again; USC should return to the home screen.

search-results.png

If there are no results, the main pane should temporarily be replaced by a screen of this form:

  • No results for “google mail”

    No items in InternetChat match “google mail”. Suggestions:

    • Try the 2 items in Internet that match.

      • [Present only if there is a parent category that has any matches.]
    • Try the 1 item that matches in software not maintained by Canonical.

      • [Present only if you’re viewing “Canonical-Updated Software” and there are matches in “All Software”.]
    • Try using a different word. / Try using fewer words or different words.
      • [Text dependent on how many words are in the search string.]
    • Check the search is spelled correctly.

If there are any results, then at the top of the main pane should be a heading, “Search results”, opposite a menu (if there’s more than one result) for sorting the results “by Relevance” (the default), “by Rating”, or “by Name”. The rest of the main pane should contain search results for that scope. (For example, in a subcategory, the results should be limited in scope to that subcategory.)

In search results, a non-application item should be hidden by default:

  • from a subcategory screen, if that subcategory does not “Show non-application packages by default”;
  • from a category screen, if (a) it is in one subcategory of that category and that subcategory does not “Show non-application packages by default”, (b) it is in multiple subcategories of that category, and its primary subcategory does not “Show non-application packages by default”, or (c) it is not in any subcategories and the category itself does not “Show non-application packages by default”;

  • from the home screen, if its primary subcategory (or, if it has no subcategory, its primary category) does not “Show non-application packages by default”;
  • never, in any other screen (such as “History”).

If the search terms exactly match a package name, that package should be returned first in the results, even if the package was hidden by default.

Testers

You can help us improve the search function by testing it in successive versions.

Custom package lists

For ease of sharing lists of software, USC should allow “searches” that return ad-hoc package sets.

From the home screen, whenever a search string consists entirely of characters allowed in package names, interspersed with commas (and no spaces), and optionally followed by a comma:

  • The main pane should display an “All Software” list view of the software items corresponding to those package names. Unlike usual search results, this list should be sorted in exactly the same order as the search string. If any of the package names does not have a corresponding package in your current software sources, its item in the list should have a question mark as its icon, “Not found” as primary text, and the package name as secondary text; the icon and text should both be greyed out, and selecting the row should not expand it.

  • The bottom of the pane should have an action bar. At its leading end should be text of the form “{X} items”, where X = the number of recognized items (not including any “Not found” items). If any of the recognized items are not currently installed, its trailing end should have a button of the form “Install {X} Items”, where X = the number of items not currently installed (regardless of whether they are queued for installation).

Test case: (sc-016) On a machine that has Gobby and Gimp installed but neither 9base nor abcde, with “View” > “All Software” selected:

  1. Navigate to the home screen and enter “gobby,gimp” (without quotes) in the search field. The main pane should list “Gobby” and “GIMP Image Editor”, and the action bar should say “2 items”.
  2. Add “,9base” to the search text (“gobby,gimp,9base”). The list should change to “Gobby”, “GIMP Image Editor”, and “Plan 9 userland tools”, in that order; an action bar should appear offering to “Install 1 Item”; and the action bar should say “3 items”.
  3. Add a comma to the end of the string (“gobby,gimp,9base,”). Nothing should change.
  4. Add the letters “abcd” to the end of the string (“gobby,gimp,9base,abcd”). A greyed-out item should appear at the end of the list: “Not found”/“abcd”. The button should still say “Install 1 Item”, and the action bar should still say “3 items”.

    custom-list.png

  5. Finally, add the letter “e” to the search string (“gobby,gimp,9base,abcde”). The “Not found” item should change to “A Better CD Encoder”/“abcde”, and “Install 1 Item” should change to “Install 2 Items”.

Whenever you choose to copy a Web link for a package, USC should copy to the clipboard text of the form http://apt.ubuntu.com/p/package-name (without a leading or trailing line break).

Installing software

When you request to install a software item:

  1. The “Install” command should become unavailable for that item, and remain unavailable until the installation has been completed or cancelled.
  2. If the item is published through MyApps or the ARB, and either (a) you have never yet accepted the terms of use or (b) the terms have changed substantially since you last accepted them (bug 1107802), a “Terms of Use” dialog should open for you to accept or decline them. “Decline” should always be enabled, but “Accept” should be enabled only when the terms have loaded completely and successfully.
    purchase-terms.png

  3. If the item requires sign-in and/or filling in a purchase form, USC should navigate through those steps, then return to the previous screen (the listing or software item screen).
  4. If installing the software would involve removing ubuntu-desktop, the package should be treated as uninstallable (just as it is with software updates) (bug 1110188).

  5. If the relevant package cannot be installed, for that reason or any other, an error alert should appear, with primary text “Sorry, {title} can’t be installed at the moment. Try again in a day or two.”. A “Details” expander should reveal a text frame containing the dpkg error, or, depending on the problem, the text “Installing this software would remove critical Ubuntu components. If this problem persists, contact the software vendor.”.
    transaction-error-uninstallable.jpg

  6. If “View” > “New Applications in Launcher” is checked (as it should be by default), and the item is an application without NoDisplay=True (bug 1006483):

    1. If the Launcher was in auto-hide mode, it should temporarily reveal itself.
    2. A copy of the item’s icon shown in USC (in the software list view or software item screen, whichever was being used) should be hoisted from that spot to a space the Launcher has just freed for it, resizing as necessary as it moves. If the Launcher was in auto-hide mode, it should then hide again.
    3. For as long as the item is waiting for other package transactions, the Launcher should show it as a greyed-out icon, with the help tip “Waiting to install”. Trying to launch the item should do nothing.
    4. While the item is installing, the Launcher should show installation progress with an overlaid progress bar. Trying to launch the item should still do nothing.
  7. The item should be installed with the standard interface.

  8. The item should appear in the “Progress” section.
  9. If the item is queued waiting for another package manager to close, the status text for the item should be “Waiting for {Application Name} to exit” (bug 995149). Otherwise it should be the standard status text for the operation.

When installation completes, either successfully or unsuccessfully:

  1. If the item is present in the Launcher (that is, it was added and you didn’t remove it during the installation), then:
    • If installation was unsuccessful, the item should disappear from the Launcher.
    • If installation was successful, the launcher item should flash and become launchable.
  2. If installation was successful, the “installed” emblem should be applied to the item icon inside USC, and the status text should be set to “Installation complete”.
  3. Five seconds later, the item should disappear from the “Progress” section.

For an item being installed, 50 % of the progress bar length should be allocated to the downloading process, and 50 % to running the installation script.

Packagers (and testers)

Wait, what? Fifty percent? That’s not accurate! Perhaps not, but even a progress bar that varies a bit in speed is infinitely more accurate than one that fills up completely only to jump back to zero for the next step. And you can help us make it even better.

Removing software

The Remove function should be disabled by default, enabled only when one or more items are selected or you are at an individual software item.

When you request to remove a software item:

  1. The Remove function for that item should become disabled, and remain disabled until the removal has been completed or cancelled.
  2. USC should handle inconsistent package state if necessary.

  3. The package removal should be presented in the standard way.

  4. At the same time, the item should appear in the “Progress” section. If the item is queued waiting for another package manager to close, the status text for the item should be “Waiting for {Application Name} to exit”. If the item is queued waiting for any other activity to complete, the status text for the item should be “Waiting”.
  5. If at any point removal is blocked by a debconf question, the status text for the item should be set to “Waiting for your response…”

Add-on packages

add-ons.jpg

Package A should be treated as a recommended add-on of package X if either of these are true:

  • X Recommends A

  • X is the only known package that Depends (directly or indirectly) on some other package Y, and Y Recommends A.

Package A should be treated as a suggested add-on of package X if any of these are true:

  • X Suggests A

  • X is the only known package that Depends (directly or indirectly) on some other package Y, and Y Suggests A

  • A Enhances X (or Enhances a virtual package that X Provides), and A is not a language pack (i.e. does not match a name or pattern in /usr/share/language-selector/data/pkg_depends)

  • A Enhances some other package Y, where X is the only known package that Depends (directly or indirectly) on Y.

What about where X depends on a virtual package that A1 or A2 provide? Perhaps show a menu of the options? This applies not just to add-ons but to dependencies too. Also consider the possibility that installing A1 requires uninstalling something else, while installing A2 does not…

What if A Enhances X or X Suggests A, but another installed package Y Depends on A? Maybe checked and disabled?

What if A Enhances X or X Suggests A, but another installed package Y Recommends A? Maybe checked by default?

If a software item has any add-ons, it should have an “Add-ons” section in its software item screen. The list of add-ons for the item should be presented as a series of checkboxes. Recommended add-ons should be listed first alphabetically, then suggested add-ons alphabetically.

The add-on’s package name, in brackets, should follow the trailing end of the label for each checkbox. The package name should be a link that navigates to the software item screen for the package.

At the leading end of the label for each checkbox should be a text-sized version of the add-on’s icon. This should be followed by as much of the add-on’s title as fits in the rest of the window width (without obscuring the package name), ellipsized at the trailing end if necessary.

If the main package is not installed already, the checkboxes for recommended add-ons should be checked by default, while the checkboxes for suggested add-ons should be unchecked by default. If the main package is installed already, the checkboxes for add-ons that are currently installed should be checked by default, while those that are not should be unchecked by default. The “Total size:” text should update immediately whenever checking or unchecking a checkbox.

software-item-screen-state-changing-add-ons.jpg

If the main package is already installed, whenever the current checkbox values no longer match the add-ons currently installed, an add-ons state bar should appear immediately below the list of checkboxes. Initially, this bar should contain the total price of any newly-selected add-ons (e.g. “Free”) at its leading end, and “Cancel” and “Apply Changes” buttons at its trailing end.

Activating “Cancel” should reset the checkboxes to match the add-ons currently installed (and therefore cause the bar to disappear). Activating “Apply Changes” should install and/or remove the add-ons as specified, showing the status of this process in the add-ons state bar itself.

In the “Progress” section, when installing an item, installing any of its add-ons should be presented as part of the same task. But changing add-ons for an installed item should be presented as a separate task for each add-on.

ISV software

This includes software published through MyApps and the ARB.

Installing ISV software

software-item-screen-state-available-buy.jpg

For any software item that costs money and that (to USC’s knowledge) you have not already purchased:

  • When it is selected in a software list view, the text at the leading end should display the price instead button at the trailing end should be “Buy…” instead of “Install”.

  • Both when it is selected in a software list view, and when you are at its software item screen, “File” > “Install” should instead be “File” > “Buy…”.

If you choose the “Buy…” command by any of these routes:

  1. If necessary, an Ubuntu Single Sign-On/Registration dialog should appear.
  2. If you sign on successfully and USC realizes you have already purchased this item, it should return to the software item screen, which should now be showing the download and installation progress. Do we need to show more feedback?

  3. Otherwise, USC should navigate to a new screen that is blank initially except for a spinner and the text “Connecting to payment service…”.
    buy-connecting.png

  4. Once it has loaded completely, the main pane should display the Canonical Payment Service screen for buying the item.
    buy-screen.png

  5. Once you complete the payment, USC should return to the software item screen, which should now be showing the download and installation progress.

Need to handle the edge case where the price changes while you’re purchasing. Perhaps highlight the change and ask you to reconfirm.

Reinstalling previous purchases

software-item-screen-state-available-purchased.jpg

Whenever an item is not currently installed (or queued for installation) but USC knows that it has been previously purchased:

  • Its “Buy…” button in a software list view should instead be “Reinstall”.

  • When it is selected or navigated to, “File” > “Buy…” should instead be “Reinstall Purchase”.

  • The “Install” button at the trailing end of its installation state bar should be “Reinstall” instead.

previous-purchases-menu.jpg

To make it easier to find previous purchases, the “File” menu should contain a “Reinstall Previous Purchases…” item. This should navigate to the “Purchases” view of the “History” tab.

previous-purchases-authorize.jpg

Wherever it appears, “Reinstall” or “Reinstall Purchase” should end with an ellipsis if you are not currently signed into the account that was used to purchase it. In that case, choosing it should open a sign-on dialog that allows only sign-on, not registration, with primary text “To reinstall this item, sign in to the Ubuntu Single Sign-On account you used to pay for it.”.

If/once you are signed in, the item should install without any further interaction.

Ratings and reviews

Specification: SoftwareCenter/RatingsAndReviews

For the review guidelines see SoftwareCenter/RatingsAndReviewsGuidelines. For the moderation guidelines see SoftwareCenter/RatingsAndReviewsModerationGuidelines

Recommendations

Specification: SoftwareCenter/Recommendations

Support and problem reporting for ISV software

software-item-screen-web-links.png

software-item-report-problem.png

For any software item in “For Purchase” or “Independent”, its software item screen should include a “Report a Problem” link alongside the “Developer Web Site” link.

Activating this link should open a “Report a Problem” dialog with the icon and name of the application. It should ask you to “Please identify the type of problem:”, with radio buttons for the options: “Payment doesn’t work”, “Download doesn’t complete”, “Installation doesn’t work”, “Software installs but doesn’t run properly”, “Inappropriate/offensive” (only once maturity ratings are implemented), “Legal issue”, and “Other” (the default).

Regardless of reason, if you choose “Continue”, USC should open a Web browser to a URL with the package name and reason as query parameters. That URL should then redirect to the developer support site, or the Canonical Support form, depending on the reason.

Comparing and syncing installed software between computers

menu-file.png

The “File” menu should contain a “Sync Between Computers…” item. If syncing is not already set up, choosing it should:

  1. Navigate to the “Installed” section, if USC is not there already.
  2. If you are not signed in to Ubuntu SSO, open an SSO sign-on dialog with primary text “With multiple Ubuntu computers, you can publish their inventories online to compare the software installed on each.” and secondary text “No-one else will be able to see what you have installed.”
  3. Reveal a sidebar in the “Installed” screen, and focus it. This sidebar should remain visible whenever you view the “Installed” section subsequently.
  4. Begin publishing the name and source, for each package installed on this computer, to the OneConf server.

installed-sync-computers.png

If syncing is already set up, choosing “Sync Between Computers…” should just navigate to the “Installed” screen and focus its sidebar.

The sidebar should list all computers registered with this account, starting with “This Computer ({hostname})”, then a space, then any others sorted alphabetically. Whenever there are no others, the remaining space in the sidebar should instead contain horizontally and vertically centered text: ‘To sync with another computer, choose “Sync Between Computers” from that computer.’ Exactly one computer in the sidebar should be selected at any time.

Whenever “This Computer” is selected in the sidebar, the rest of the main pane should contain the usual contents of the main pane for a single computer.

Whenever any other computer is selected, and that computer has not yet finished pushing its list of software to the Ubuntu One account, the rest of the main pane should contain horizontally and vertically centered text: ‘“{name}” hasn’t finished publishing its inventory yet. Try again in a few minutes.’

Whenever the other computer has finished pushing its list of software, the rest of the main pane should consist of a software list view with three branches:

  1. ‘{number} items on “{name of other computer}” not on this computer’, with an “Install All” button at the trailing end, and each item inside having “More Info” and “Install” buttons when selected;
  2. ‘{number} items on this computer not on “{name of other computer}”’, with a “Remove All” button at the trailing end, and each item inside having “More Info” and “Remove” buttons when selected;
  3. ‘{number} items on both computers”, with no button at the trailing end, and each item inside having only a “More Info” button when selected.

The “Install All” and “Remove All” buttons should be the same width.

As with the normal list view, only one branch — or software item inside that branch — should be selected at any time, and whenever an item is selected it should expand to reveal a “More Info” button. In addition, a selected item inside the that-computer-but-not-this-one branch should have an “Install” button at the trailing end, and a selected item inside the this-computer-but-not-that-one branch should have a “Remove” button at the trailing end.

installed-sync-computers-stop.png

The menubutton at the bottom of the sidebar should contain one item, ‘Stop Syncing “{name of selected computer}”’. If the selected computer is the computer you are using right now, the “Installed” screen should return to single-computer mode, and stop publishing this computer’s inventory to the server. If the selected computer is any other computer (for example, one that has been lost or destroyed), “Stop Syncing” should remove that computer both from the sidebar, and from the set of computers that will be synced.

Help

The help should cover these topics:

  • What is the Ubuntu Software Center?
  • Why are all the programs free?
  • Installing a program
  • Using a program once it’s installed
  • Removing a program
  • Why is it asking me to remove several programs together?
  • “Provided by Ubuntu” — what’s that?
  • “Canonical-updated” — what’s that?
  • What if a program I want isn’t in Ubuntu Software Center?
  • Using software from multiple sources
  • What if a program doesn’t work?

There is also an online FAQ for issues with purchases. These are based on the questions most frequently asked by real customers:

Software Center purchase issues

About window

The About window should be a standard window (not a dialog) following the standard Gnome About window layout, using the appropriate application summary.

Features that were planned for future versions

Learning how to launch an application

(bug 761851)

Draft implementation plan: USC should calculate where on screen it is displaying the application’s icon, then issue a D-Bus call of the form “com.canonical.Unity.Launcher AddLauncherItemFromPosition (icon, title, icon_x, icon_y, icon_size, desktop_file, aptdaemon_task)”, where:

  • icon is the icon USC was displaying

  • title is the title of the item

  • icon_x and icon_y are the screen coordinates of the center of the icon inside the USC window

  • icon_size is the maximum of the width and height of the icon

  • desktop_file is the desktop file that the item will launch once the installation is complete

  • aptdaemon_task is the aptdaemon transaction ID.

The Launcher should handle the rest.

For alternative designs that were considered, see /LaunchingApplications.

Future work: On the screen for an already-installed application, show an invitation to add it to the launcher if it isn’t there already.

Deauthorizing your computer

previous-purchases-menu.jpg

So that you can be honest about using keeping purchased software only on your own computers, the “File” menu should contain a “Deauthorize Computer…” item. This item should be enabled only when you are already signed in or when any USC purchases are installed.

deauthorize-simple.jpg deauthorize-list.jpg

Activating the item should open a confirmation alert, which lists installed purchases only if there are any. Choosing “Deauthorize” should queue any purchased items for removal, and clear your Ubuntu SSO credentials from the computer.

Choosing between backport and non-backport versions

software-item-screen-state-versions.png

Whenever the Backports channel contains a version of any item that is greater than the version that would normally be installed, the installation state bar should contain a radio menu on the leading side of the Install/Remove button.

The menu should contain two items, the backport version and the version that would normally be installed, in ascending order. Both should start with “v {version number}”. If the backport version is higher, this should be followed by “(latest)”. And if the normally-installed version is from the Ubuntu archive, this should be followed by “(release)”. The default should be the release version, if it is one of the items, otherwise the highest version.

If the item is not currently installed at all, the adjacent button should be “Install”. If a version different from the selected item is installed, the button should be “Change”. And if the selected version is installed, the button should be “Remove”.

Region restrictions

For any item which you may not install in your region:

  • The Install command should not be available.
  • In the software item screen, the installation state bar should contain only the text “Sorry, this software is not available in your region.”

  • In the software item screen, screenshots should not be displayed. (A common reason for region restrictions is banning of particular logos or imagery.)

Features you can implement

These are mini-specifications for new features and other changes that anyone is welcome to implement. Some are more important than others; some are more difficult than others. If you would like to implement any of them, please do so in a branch and propose it for merging. Thanks! (Once a feature is implemented, the mini-specification here will similarly be merged into the main specification.)

“Go” menu and simplified navigation bar

Between the “Edit” and “View” menus should be a “Go” menu. This should replace the “Go Back” and “Go Forward” items, and the following separator, from the “View” menu.

_Go
===
  Back                        [
  Forward                     ]
---------------------------------
  All Software           Ctrl 1
  All From Source               >
  Installed              Ctrl 2
  Installed From Source         >
  History                Ctrl H
  Progress               Ctrl 0

The “All From Source” submenu should consist of an item, with icon, for each available software source. The “Installed From Source” submenu should consist of an item, with icon, for each installed software source.

Atop the screen for each individual software source should be a header containing the icon and name for the source. This should be followed by a software list view of all the items in that source, then centered text of the form “141 items”. In the “Provided by Ubuntu” screens, non-application packages should be hidden by default.

Once this is implemented, the dropdown menus should be removed from the “All Software” and “Installed” navigation bar buttons, simplifying the navigation bar (bug 1020521).

Installing from external media

(bug 449337)

If you insert a volume that consists of software packages, but is not installation media, Ubuntu Software Center should launch to (or navigate to) the screen for that volume as an individual source.

external-media.png

The usual header pane should have a checkbox at its trailing end, “Use as a software channel”, reflecting whether the volume is currently in your sources.list.

If a volume is added as a software channel, Ubuntu should cache all its package details so that you can request installation without having the media inserted. If you request to install an item from media that is not currently inserted, an “Insert Media” alert should appear using the volume’s icon, primary text “To insert {name of item}, you need to insert the volume “{name of volume}”, and “Cancel” and “Retry” buttons. If the media is detectably inserted, the alert should go away automatically.

“What’s Popular” overall

home.png

Erratum: “Most Popular” should be “What’s Popular”.

(bug 432525)

An item’s popularity should be determined by the proportion of people, who have opted in to recommendations, who have the item installed.

On the home screen, the “What’s Popular” area should use tiles to list, in descending order, the 12 most popular items that are not currently installed and that are not already shown in the “Top Rated” section. (This avoids repetition on the home screen, giving visibility to more items.)

Choosing “More” in the “What’s Popular” area should navigate to a separate “What’s Popular” screen that uses a software tile view to list, in descending order, the 60 most popular items overall — regardless of whether they are installed or whether they are also in any “Top Rated” listing.

Subcategories for “Tweaks & Themes”

(Implementing this will have no effect until Ubuntu archives contain debtags.)

Any package that is not already in another category, and matches any of these patterns, should appear in a subcategory of “Themes & Tweaks”.

Subcategory

Rule

Show non-application packages by default

Automation

debtag admin::automation

yes

Backup

debtag admin::backup

yes

Benchmarking

debtag admin::benchmarking

yes

Dash Search Plugins

package name unity-lens-* but not *-dbgsym

yes

Data Recovery

debtag admin::recovery

yes

Disk Utilities

debtag admin::filesystem or admin::forensics

yes

Package Management

debtag admin::package-management

yes

Themes

???

yes

The category should be renamed to “Tweaks & Themes” to reflect the shift in emphasis.

(unity-scope-* is not included in “Dash Search Plugins” because scopes are only useful inside, and already show up as add-ons for, individual lenses.)

Subcategories for “Sound & Video”

(This should not be implemented until Ubuntu archives contain debtags, otherwise there would be only one subcategory.)

Any package that is not already in another category, and matches any of these patterns, should appear in a subcategory of “Sound & Video”.

Subcategory

Rule

Examples

Show non-application packages by default

Amateur Radio (fixing bug 905894)

Section hamradio

ibp, morse, qrq, tk2, wsjt

yes

Audio Utilities

tags scope::utility + works-with::audio

aconnectgui, bitmeter, earcandy, gladish

no

Camera

tag hardware::camera

cameramonitor, camorama, cheese

no

CD/DVD Authoring

?

bombono, brasero, dvdstyler, devede, ogmrip

no

CD/DVD Ripping

?

asunder, audex, dvdrip, k9copy

no

Codecs & Converters

?

arista, gstreamer0.10-fluendo-plugins, transmageddon

no

Media Players

?

audacious, banshee, clementine, decibel, enna, fluendo-dvd

no

Music Notation

tag works-with::music-notation

canorus, denemo, frescobaldi

yes

Music Organization

cowbell, easytag, entagged, exfalso, tagtool

no

Radio

betaradio, kradio4, lastfm, pithos, radiotray

no

Sequencers & Synthesizers

?

aeolus, amsynth, djplay, drumpads, freemix

no

Sound Editors

?

brp-pacu, cecilia, easymp3gain-gtk, fillmore, freqtweak

no

Speech

?

daisy-player, espeak-gui, festival, gespeaker

no

Pitch Tuning

?

fmit, gxtuner, lingot, gtkguitune, solfege

no

TV

?

episoder, freeguide, gnome-dvb-client, me-tv, ubuntu-tv

no

Video Editing

?

avidemux, gnome-subtitles, gopchop

no

Encouraging use an archived version instead of a standlone .deb

When you open a standalone .deb package, if one of your repositories contains a package with the same name, regardless of version number, there should be an extra bar below the installation state bar. Its text should be whichever is appropriate of these:

  • Ubuntu has a newer version of this software.
  • “Other Repository Label” has a newer version of this software.
  • Ubuntu has a trusted version of this software.
  • “Other Repository Label” has a trusted version of this software.

The button at the trailing end of the bar should be labelled “Show” in any case.

Launching from multiple standalone .deb packages

(bug 1190469)

If you select multiple .deb packages in a file manager, and open them with Ubuntu Software Center, it should display a custom list for the packages.

Opening a standalone package from within USC

(bug 782617)

At the start of the “File” menu — before “Install”, “Remove” and other actions — should be an “Open Package…” item, with the keyboard equivalent Ctrl O, followed by a separator.

Choosing “Open Package…” should open an “Open Package” file picker that allows selection only of package files. If you choose one to open, USC should display a centered spinner with the caption “Opening package…” until the standalone package screen can be shown.

Dragging a software item

(bug 1088085)

A software item should be draggable, wherever in USC it appears — on the home screen, in any other tile view, in a list view, or (for its icon only) in the software item screen itself.

If you drag an item to the Launcher, then:

  1. If the item is an application without NoDisplay=True, the drag should cancel. Otherwise:

  2. If the item is already installed, and already in the Launcher, the Launcher item should move to the new location. Otherwise:
  3. If the item is already installed, and not already in the Launcher, it should be added to the Launcher at that location. Otherwise:

  4. The icon should appear as a greyed-out item in the Launcher until installation completes or fails.
  5. The item should install as usual, without a separate icon for the same item appearing in the Launcher, and remaining in the Launcher regardless of the “New Applications in Launcher” setting.

Dragging an item anywhere else, except the Launcher, should drop its icon as a graphic or its title as text.

Any “Developer Web Site” link should be draggable outside of USC. When dragged to a file manager, it should produce a shortcut with the name “{Title} (Developer Web Site)”; to a rich text document, a hyperlink with the text “{Title} (Developer Web Site)”; and to a plain text field, just the URL.

Being encouraged to submit a review

review-encourage.png

If you have installed an application, and used it at least three times in the past week, the end of the home screen should have a “Give Your Feedback” box with text of the form: “You’ve used {title} a lot recently. Would you like to review it?”. The link should begin the review process for that application.

Can we vary the “a lot” wording sensibly?

“Updates” section

Minimal implementation

updates.png

Whenever the Backports channel contains a version of any item that is newer than the version you have installed (or fewer than five seconds have passed since that stopped being true), an “Updates” item should appear last in the navigation bar (except for the “Progress” item, when present).

The “Updates” section should begin with a panel giving the number of updates at the leading side, and an “Update All” button on the trailing side. Each individual item should consist of its icon, title, and the new version number on the leading side, and an “Update” button on the trailing side.

Whenever an item is selected, Enter should activate its “Update” button. Whenever an update is installed or waiting to be installed, its “Update” button should be disabled.

Test case: Install an application for which Backports has a newer version. As soon as its installation finishes, “Updates” should appear in the navigation bar.

Enhancement: Navigation bar emblem

updates-badge.png

In the navigation bar, the icon for the “Updates” item should have a badge containing the number of updates.

Enhancement: Launcher item emblem

In the Unity launcher, the icon for Ubuntu Software Center should have a badge containing the number of updates, regardless of whether USC is running.

Enhancement: Install Ubuntu updates together with application updates

updates-ubuntu.png

The panel atop the “Updates” screen should contain an “Also install Ubuntu updates” checkbox. Whenever Ubuntu updates are not available, the checkbox should be both disabled (because changing it has no effect) and unchecked (because no Ubuntu updates will be installed when you update anything else). Whenever Ubuntu updates are available, the checkbox should be enabled, and default to whichever checked/unchecked state it was in last time it was enabled (checked by default).

Test case: (replaces previous test case) Install Ubuntu without installing updates. Install an application for which Backports has a newer version; as soon as its installation finishes, “Updates” should appear in the navigation bar. Navigate to the “Updates” screen; the “Also install Ubuntu updates” checkbox should be enabled and checked. Use Update Manager to install all updates; as soon as they finish, the “Also install Ubuntu updates” checkbox should become disabled and unchecked.

If you choose “Update All”, or “Update” for any individual item while the checkbox is checked, installation of Ubuntu updates should be queued ahead of whichever update or updates you chose with that action.

Enhancement: “Hide” function for updates

In the “Updates” screen, each individual update should have a “Hide” button on the leading side of its “Update” button. The “View” menu should have a corresponding “Hide This Update” item that is disabled except when you are in the “Updates” section and an update is selected. Activating this command should remove the update from the list indefinitely.

Below “Hide This Update” in the “View” menu should be a “Show Previously Hidden Updates” item, which is enabled whenever there are any, regardless of which screen you happen to be in. Selecting the item should navigate to the “Updates” screen if you are not there already, and indefinitely un-hide all updates.

Enhancement: Updates to other NotAutomatic channels

The “Updates” screen should show updates for not just Backports, but any NotAutomatic channel, for example “For Purchase”.

Enhancement: New Ubuntu versions shown in “Updates”

updates-upgrade.png

When a new version of Ubuntu is available, it should appear as the first row in the “Updates” screen, above the “Update All” panel. In this case the panel should say not “{N} updates available”, but “{N} other updates available”. The row itself should, instead of an “Update” button, have an “Upgrade…” button that opens the upgrade dialog.

Smarter ellipsis of software list view items

In a software list view, if the secondary text is wider than the space available, it should be ellipsized in the middle, not the trailing end (because unique parts of package names are often at the trailing end).

Copying software list view items to the clipboard

Whenever an item in a software list view is selected, “Edit” > “Copy” should be enabled. Choosing it should copy to the clipboard the item’s title and summary as plain text separated by one line break. If the item has a custom icon, it should also be copied as both a bitmap and as a vector image if available.

Pausing or cancelling all queued tasks

progress.png

At the bottom of the “Progress” section should be an action bar, with text of the form “2 items remaining” or “All items completed” (as appropriate) at the leading end, and “Pause” and “Cancel All” buttons at the trailing end. When “Pause” is clicked, it should change to “Resume”, the “Progress” navigation bar element should change to “Paused”, and all tasks (except for the current one, if it is no longer pauseable), even any you add after you clicked “Pause”, should be greyed out except for their cancel buttons. (bug 584687)

Once that’s implemented: The list of paused tasks should persist even if you close and reopen USC or restart the computer.

Finally: Whenever the computer is not connected to the Internet, USC should go into Paused mode automatically.

More informative text for waiting tasks

(bug 444330)

When you request to install an item and it is waiting for other tasks in the “In Progress” queue, its status text should be “Waiting to install”.

When you request to remove an item and it is waiting for other tasks in the “In Progress” queue, its status text should be “Waiting to remove”.

Downloading while waiting to install

(bug 438870)

When an item to be installed is waiting for other tasks, but the package is not yet downloaded, it should start downloading immediately. Or maybe when fewer than 3-ish items are already downloading?

Reordering queued tasks

(bug 465531)

For any task in the “Progress” screen that has not yet begun (or that, if parallel downloading has been implemented, has started downloading but not yet installing), mousing over the list item should produce a grabbing-hand cursor. If you drag the row up or down, the rows for other unstarted tasks should scoot out of the way to show where the dragged row would end up if dropped. As a keyboard equivalent, Ctrl Up and Ctrl Down should, when possible, make the selected task swap places with the previous or next task respectively.

Consistent progress bar for installations and removals

Regardless of whether you are installing a free item, installing a for-purchase item, or removing an item, the progress bar in the installation state bar should appear at exactly the same moment: immediately after USC knows that you are authenticated for the action.

Whenever an item is selected in the “In Progress” section, “Edit” > “Copy Web Link” should be enabled. Choosing it should copy a Web link for the selected package.

“Where Is It?” button

In the screen for a graphical application in the “Installed Software” section, there should be a “Where Is It?” button. Clicking the button should:

  1. over two seconds, draw a ring around the interface element (e.g. the Ubuntu button, or the “Applications” menu) in which the application resides

  2. wait for you to activate it
  3. instantly remove the previous ring
  4. over two seconds, draw a ring around the application, or around the submenu or section that contains the application
  5. wait for you to select the item or open the submenu
  6. instantly remove the previous ring, etc.

At any time, focusing another window or pressing any key should cancel the process and make any ring disappear.

“Reinstall” command

menu-file.png

In the “File” menu, immediately following the “Install” item should be a “Reinstall” item. This item should be enabled whenever you have selected or navigated to an installed software item.

Activating the command should reinstall the item (equivalent to apt-get reinstall). The progress feedback should be the same as for installation, using the same PolicyKit privilege, but with “Reinstalling…” as the text in the installation state bar.

The help should include a page on the “Reinstall” command.

“Remove Including Settings” command

(bug 1029008)

In the “File” menu, immediately following the “Remove” item should be a “Remove Including Settings” item. This item should be enabled whenever you have selected or navigated to an installed software item.

Activating the command should remove the package, its settings (equivalent to apt-get purge), and any cached package data. The progress feedback should be the same as for removal, using the same PolicyKit privilege, but with “Removing package and settings…” as the text in the installation state bar.

The help should include a page on the “Remove Including Settings” command.

Residual files

In the “File” menu, immediately following the “Remove Including Settings” item should be a “Show Residual Files” item. This item should always be enabled.

residual-settings.png

Activating the command should be the only way (other than subsequently using Back and Forward) of navigating to an “Installed Software” > “Residual Files” screen. This screen should be a software list view of all packages that have been removed from your computer but that have either left behind configuration files, or that have the package still cached (bug 684495). It should be different from a normal software list view in that:

  • At the trailing end of each row should be the size of the settings and cached package files, e.g. “11 KB”.

  • The secondary text for each item should be the date on which the package was uninstalled.
  • When an item is selected, at its trailing end should be a button labelled “Delete Files”, and the “File” > “Remove Including Settings” menu item should temporarily also become “Delete Files”.

Activating the “Delete Files” command should remove the package’s settings and/or the cached package. The progress feedback should be the same as for removal, using the same PolicyKit privilege, but with “Deleting residual files…” as the text in the installation state bar.

At the bottom of of the main pane should be an action bar containing a “Delete All” button, aligned with the “Delete Files” button for the selected item. Activating the “Delete All” button should remove residual settings for all packages displayed.

The help page on the “Remove Including Settings” command should be expanded to cover the “Show Residual Files” command too.

“Package Info” window

(bug 432879)

package-info-version.png package-info-related.png

In the “File” menu, following the package operation items should be a separator and a “Package Info” item with keyboard equivalent Ctrl I. It should be enabled whenever you are on a software item screen or a software item is selected. Choosing “Package Info” should open a normal window with the title ‘“{package name}” Info’, that persists until you close it regardless of what you do elsewhere in USC. Multiple package info windows may be open simultaneously.

The “Version” tab should show the package’s icon, name, version number, and “Software channel:”, each wrapping to multiple lines if necessary.

The “Related Packages” tab should have a tree with branches for “Depends on”, “Recommends”, “Suggests”, “Dependency of”, “Provides”, “Replaces”, “Conflicts”, and “Breaks” in that order. Inside each branch, individual packages should be shown as hyperlinks: choosing one should open a separate package info window for that package. If any branch contains no items, it should be expanded by default, so that you can see it is empty without having to expand it first.

The “Version” column should use “≥” or “=” before version numbers as appropriate. The “Installed” column should use a checkmark graphic plus the version number for an individual package, a checkmark graphic plus “{total}/{total}” for the “Depends on” branch as a whole, just “{total}/{total}” for the “Recommends” and “Suggests” branches as a whole, and just “{total}” for any other non-zero branches.

History enhancements

history.2.jpg

History rows should have the same layout and behavior as rows in a categorized software list view, except that:

  • They should use a text-sized icon instead of a double-sized one (because the icon is less important here, and the history is likely to be long).
  • They should use the software’s short name rather than its title.

  • For purchases, the short name should be followed by the price paid at that time, in the disabled text color.
  • At the trailing end of the first line should be the time at which the action occurred, again in the disabled text color. In the “All Changes” screen only, the time should be preceded by the type of action: “purchased”, “installed”, “reinstalled”, “updated”, “removed”, or “purged”. For example, a removal that happened at 4:52 PM should appear in “All Changes” as “removed 4:52 PM”, but in “Removals” just as “4:52 PM”.
  • Choosing “More Info” should navigate to the item’s screen in either “All Software” or “Installed Software”, depending on whether the item is currently installed.
  • If the row is for any action that would leave the item installed (such as an installation or an update), but the item is not currently installed, the text “(since removed)” should be at the trailing end of the second line in the disabled text color. Conversely, if the row is for any action that would leave the item uninstalled (such as a removal or a purge), but the item is currently installed, the text “(since reinstalled)” should be at the trailing end of the second line in the disabled text color.

Animation of the main pane

Whenever you navigate from within a category screen to a software item screen, over 0.5 seconds, the icon of that package that was visible in the category screen should simultaneously zoom and move linearly to become the icon of the software item visible in the software item screen. At the same time, the rest of the contents of the category screen should linearly crossfade into the rest of the contents of the software item screen. Both of these effects should also happen when navigating the reverse direction, from the package screen back to the category screen.

Wine integration

installed-software-wine.png

If there are any installed Windows applications that are automatically removable by Wine, the installed software sources list should include a “Windows Software” child item. This should be the last item except for “Other”, and should use the generic Windows icon (the same used in Ubuntu Light).

Selecting this item should display a “Windows Software” screen in the main pane, listing those Wine applications. At the bottom of of the main pane should be an action bar containing a “Remove All” button, aligned with the “Remove” button for the selected item.

These removable Windows applications should also show up when browsing or searching the top-level “Installed Software” list.

Do Windows applications have a title and a summary, or just a title?

For implementation details, see NattyWineSoftwareCenter.

Security information for the store

(bug 637649)

The “View” menu should contain a “Security Info” item that is disabled by default.

For every page in the sign-on and payment process, if the page is not encrypted — or if there is a problem with the site’s certificate — the page should not display at all. Instead, USC should show a centered error message: “Sorry, the store is not available right now. Try again later.”

security-navbar.png

Whenever the page is encrypted and the certificate is okay, at the trailing end of the navigation bar should be a padlock icon with the label “Secure”, and the “Security Info” item should be enabled. If you choose either of those, a “Security Info” window should open with text “The connection to the store is encrypted.” and information about the connection and certificate.

security-window.png

Future work: Abstract out this window so that it can be used by other applications that deal with certificates.

Access to your store account details

In the navigation bar, between “History” and “Progress” should be a new item, “Account”, with a wallet icon. The “Go” menu, if implemented, should have a corresponding “My Store Account” item.

_Go
===
  Back                        [
  Forward                     ]
---------------------------------
  All Software           Ctrl 1
  All From Source               >
  Installed              Ctrl 2
  Installed From Source         >
  History                Ctrl H
  My Store Account
  Progress               Ctrl 0

Selecting either should navigate to an online “Account” screen.

pay-account.png

Regardless of whether you are online, the screen should begin with a local banner showing the e-mail address, balance (if available), and a “Sign Out” button. Signing out should work even if you are offline.

If you have not been online since navigating to this screen, the rest of the screen should display horizontally and vertically centered text, “Connect to the Internet to see your purchase and account history.” If you have been online but the page did not load successfully, it should instead be centered text “The account service isn’t available right now. Try again in a few minutes.”, with a “Try Again” button below. Otherwise, it should be a page listing your USC payments, refunds, and other account activity.

Yet-to-be-specified features

  • codec search
  • font search [idea 15333]

  • scope control for search (All / Name / Description / Package Codename / Alternatives)
  • icon view as an alternative to list view
  • Melatie runs an accounting business that is far too small to have its own IT manager. She has a support contract for the Ubuntu software on the office PCs, and she knows that this doesn’t cover all the available software, so she wants to keep track of exactly what software is installed that isn’t covered.
  • Ladina works as a developer at a molecular biology lab where she is not a sysadmin. She is having a bit of trouble with Biopython, and wants an easy way of seeing which version of python-biopython is installed and where its files are.

  • Installing paid add-ons for free software (for example, filters for Inkscape)

Dragging installed applications from USC to a launcher

Launching via inserting an Ubuntu CD

USC needs to be able to tell whether a CD containing packages is:

  • for a previous version of Ubuntu
  • for the same version of Ubuntu
  • for a future version of Ubuntu
  • for a different OS altogether.

Launching via file of unknown type

USC needs to be able to display applications that handle a particular filetype, i.e. an equivalent to gnome-app-install --mime-type text/html. (Maybe distinguish between file viewers and editors?)

Nautilus then needs to be able to launch USC to this search.

License information

Developer tools

  • For a particular package, show which packages are required for development or debugging of that package.
  • Maybe treat -dev packages specially?

Eliminating the “{title} can’t be installed at the moment” alert

Instead of an impossible installation causing an alert saying “Sorry, {title}” can’t be installed at the moment. Try again in a day or two.”, the task should show its error status inline in the “In Progress” section somehow, and sit there across USC launches until you retry it or cancel it. The “In Progress” arrows would need to stop spinning for cases like this, because nothing is actually happening.

Others

  • make clear which packages are currently subject to CVE vulnerabilities
  • ensure double-clicking on a downloade .deb or .rpm gives an explanation that every user can understand. Perhaps also show an apt: -link as a suggestion for the better way of installing said package?
  • OpenPrinting: “To make installing printer drivers not provided by the Linux distributions easier for users, and to make providing printer drivers easier for the printer manufacturers, we have introduced a new concept of distribution-independent printer driver packages.”

  • While installing, the window should be reducible (or perhaps reduce by default) to show only install progress.
  • Make installation asyncronous (background process) and allow user to continue browsing the Software Center meanwhile
  • Replace the “These items must be removed as well” alert with a box embedded in the package screen when you click “Remove”?
  • “Also a permalink on the description page, would be pretty nice. You want to suggest a package to someone? You just have to copy paste the (apt url) application link into your IM or blog post.” [Stefano Forenza]

  • Martin Owens: apt-url and the whitelist

  • “FooBar is not available for this version of Ubuntu, but it is available for version X.Y…”

  • Smith Review Project: making package descriptions and debconf questions human-readable

  • Maybe the Firefox start page could contain an "Ubuntu software" link, that opens the Store, alongside its "Ubuntu help" link? [Vincenzo Ciancia]
  • SummerOfUsability mockup design iterations by Monica Maceli

  • Installing software locally when the user doesn't have administrator rights
  • If the user does not have admin rights then the program would offer to queue the program for the system admin. This is very useful when the user can just say check your install queue instead of remembering the exact packages that he needed. Especially when he is just clicking a link on the internet. Could also be useful for parents.
  • Multi-level undo.
  • Updates are aggregated by source package, with packages hidden inside an expander.
  • Recommendations and suggestions are shown as children of an item in the list (recommendations selected by default, suggestions not).
  • Incorporate PackageMaintainednessPresentation.

  • Add a “Date Installed” column to the “Installed Software” section.
  • Handle the “Extends” field for packages.
  • Provide an easy mechanism for applications such as Inkscape to select and install plug-ins.
  • Need to define the exact behavior when waiting for other package managers to quit.
  • Provide an optional "Donate" button for projects that need donations to keep going. The button could open up the donate page on their website. Or if non-free (as in beer) software is sold through the software store then the money could go through the site ... (The need was talked about in FLOSS Weekly 86 - Ardour).

    • Alternatively provide a way of a project displaying a web page instead of the package description. This allows the project to collect revenue via adverts, subscription or donation. It puts the handling of revenue into the hands of the project. If the web page data isn't available then it could revert by default back to the package description. This could also be a preference option.
  • Drag installed applications to gnome-panel or other launchers.

  • Saved searches (with an emblem if they contain new stuff since you last looked at them)
  • Add apt: URL syntaxes for category pages, and for search results.

  • Prioritize reviews from your contacts. [Matt Griffin]
  • Accessible names for other items that have no explicit label.
  • How can we integrate cross-platform add-on repositories, e.g. Firefox add-ons, Ruby Gems, CPAN, CTAN, CRAN, CEAN?

  • Log searches so that we can tweak metadata to suit them. [Randy Linnell]
  • Purge PPAs (i.e. offer to downgrade to the non-PPA versions of packages).

Definitions used in this specification

alert

A dialog that emits the standard alert sound (if any) when it opens, and requests attention if it opens in the background.

alphabetically

Following the Unicode Collation Algorithm for the user’s locale. For example, in an English locale, “Déjà Dup Backup Utility” should be sorted alphabetically between “Debian Documentation Browser” and “DeskScribe”. There are some existing bugs with categories not being sorted alphabetically.

dialog
A window that is modal to its parent (if it has one), only ever minimizes together with its parent (if it has one), and does not have any buttons in its title bar (except Minimize if it has no parent).

em
The height of the Gnome application font setting. For example, if the current Gnome application font setting works out to be 12 pixels, then 3 em = 36 pixels.

leading
Left whenever the system is using a left-to-right language. Right whenever the system is using a right-to-left language. (All mockups in this specification are of left-to-right layouts.)

software item

A package or an application. If app-install-data or an archive index refer to one and only one application in a package, the package itself should not be treated as a software item, because it is represented by the application instead. But if there are multiple applications in a package, or none at all, the package should be treated as a software item in itself.

trailing
Right whenever the system is using a left-to-right language. Left whenever the system is using a right-to-left language.

Roadmap

Ubuntu 9.10 (October 2009) shipped Ubuntu Software Center 1.0.2. This included:

  • a graphical main entrance, that invited searching or browsing software by category
  • fast search
  • attractive, informative, and easy-to-understand presentation of individual applications within the interface
  • the ability to continue browsing available software, and queue up installation/removal tasks, while other changes were being made
  • better security than Add/Remove Applications (i.e. use of PolicyKit instead of gksudo)

  • a redirector Web service (redirecting from http://apt.ubuntu.com/p/package-name to apt:package-name), to better cater for forums and other CMSes that do not allow direct apt: links.

Ubuntu 10.04 LTS (April 2010) included Ubuntu Software Center 2.0.2. This version:

  • presented non-application packages in an understandable way
  • helpfully subcategorized applications such as games, and also categorized non-application packages such as programming utilities, fonts, database software, and screensavers
  • offered distinct listings for PPAs and other third-party repositories.

Ubuntu 10.10 (October 2010) included Ubuntu Software Center 3.0.4. This version:

  • allowed software purchases from within USC
  • incorporated apt: URL handling (replacing apturl)

  • handled standalone .deb packages (replacing gdebi)

  • showed a history of past installations/removals/purchases, including the ability to undo specific changes
  • improved the presentation of category (then “department”) screens
  • improved search results.

Ubuntu 11.04 (April 2011) included Ubuntu Software Center 4.0, with ratings and reviews for software, and many performance improvements.

Ubuntu 11.10 (October 2011) included Ubuntu Software Center 5.0, with a simpler layout, and “Top Rated” sections to feature interesting software.

Ubuntu 12.04 (April 2012) included Ubuntu Software Center 5.2, with personalized recommendations, Unity launcher integration, system requirements disclosure, and access to backports.

Ubuntu 12.10 (October 2012) included Ubuntu Software Center 5.4, and Ubuntu 13.04 (April 2013) included Ubuntu Software Center 5.6.

Eventual scope

You should be able to:

  • find software by: [idea 18315]

    • name
    • purpose (e.g. “wireframe” → Dia)

    • category and subcategory (e.g. Games: Card Games) [idea 14857]

    • name of competitor (e.g. “excel” → OpenOffice.org Spreadsheet, Gnumeric, KSpread)

    • misspelling (e.g. “pigeon” → Pidgin)

    • needed right now (by MIME type, codec, font, etc)
    • vendor?
    • class (debug vs. non-debug, applications vs. not [idea 3144], etc)

    • recommendation [Andrew Sayers]
      • alternatives to programs you used in Windows (via Migration Assistant)
      • software to make use of your custom hardware
      • results previously returned by command-not-found

      • habit (people who installed X also installed Y) (suggested by Enrico Zini)

    • suite (software for Java developers, software for film makers)
    • what’s new [idea 13762]

    • whether it was recently installed or removed [idea 16953]

  • get information about software
    • what it does
    • what people think of it (ratings and reviews) [UserReviewsInSynaptic] [idea 18729]

    • what it looks like (screenshots or short videos) [idea 15774]

    • what the current version number is [idea 13036]

    • whether it is installed by default in Ubuntu
    • whether it’s installed right now [idea 19068]

      • if it’s installed, how to launch it [idea 16216]

      • if it’s not installed, how much there is to download, including dependencies [idea 4613]

    • whether it’s localized into your native language
    • what it costs
    • what its license is
    • who provides updates for it, and for how long
    • who provides tech support for it, and for how long
    • how many of your friends have it installed already
    • whether you have it installed already (and if so, how to find it)
    • … all in your native language
  • install software
    • purchasing commercial software [idea 18538]

    • quickly
      • unpack — and maybe even install — downloaded packages while downloading the rest
      • download a package only once when installing it over a LAN [idea 19265]

    • asynchronously (browse and select more stuff while other stuff is installing)
    • pausing if you need to use your bandwidth for something else [idea 16643]

    • downloading it once for multiple computers (subsuming APTonCD)
    • read about updates while they are installing
    • using PolicyKit to install/uninstall/etc, but not needing authorization to update package lists

  • get an overview of installed software
    • how much is maintained for how long
    • how much receives tech support from whom, and for how long
    • how much is under which license
    • even applications you installed from a .deb or compiled yourself [idea 18408]

  • upgrade to the next version of Ubuntu
    • know why you should upgrade
    • without breaking PPAs
    • insert an Ubuntu CD in Ubuntu and get an understandable result

Similar efforts

How you can help

We welcome useful contributions from anyone, regardless of age, gender, or experience. If your expertise is in one of these areas, search through this specification for the color-coded sections relevant to you:

Artists

Copy-editors

Interface designers

Librarians

Packagers

Otherwise, if you are a Python programmer, get the latest code and try fixing existing bugs, or implementing something for a future version. When you have something ready, propose it for merging.

If you are a tester, look through this specification and compare the behavior described, sentence by sentence, to the behavior you see in the trunk version. If something has been implemented but behaves differently from how the specification describes it, report a bug if it hasn’t been reported already.

Where to report bugs

Ubuntu Software Center relies on several lower-level components, presents data from various sources, and interacts with multiple server-side components that track their bugs separately. Here’s a quick guide:

Project/Package

Kinds of bugs that belong there

apt

Problems that also occur with apt-get

aptdaemon

Stuck tasks; Poor feedback for tasks in the “Progress” screen; Poor error messages when tasks fail

ubuntu-sso-client

The sign-in dialog for reinstalling purchases or submitting reviews

rnr-server

Bad ratings and reviews data (but not presentation)

ubuntu-recommender

Bad “Recommended For You” data (but not presentation)

app-install-data-ubuntu

Duplicate apps in search results; “There isn’t a software package” errors

individual packages

Other problems with icons, descriptions, and categories

canonical-identity-provider

The sign-in process during purchasing

ubuntu-webcatalog

The terms inside the “Terms of Use” dialog when purchasing

software-center-agent

The rest of the purchase process

ubuntu-webcatalog

apps.ubuntu.com

software-center

Anything else, or you aren’t sure

Unresolved issues

  • Popularity measurements are skewed by default installs. [Idea #16411: Do not rate the popularity of default apps]

  • Need to define keyboard navigation order.
  • How to expose the package names in application lists, for those people who want to see them? Perhaps an off-by-default column in the listing.
  • What USC should do differently when it is running in a live CD session.
  • What if the dependencies of something you choose to install conflict with the dependencies of something already waiting in the queue?
  • How should we present items that Recommend (but do not Depend on) an item that you are about to remove?
  • How should we present items that Recommend (but do not Depend on) an item that is about to be removed because of an item you are about to install?
  • How to prioritize toolkits?
    • For applications that have both GTK and Qt versions (e.g. GDebi, Jockey, Qalculate), we should display the GTK+ version more prominently than the Qt version.

    • To manage expectations, perhaps an application that uses a strange toolkit (e.g. Tk, Gnustep) should be indicated with some sort of warning that it will behave differently from most Ubuntu applications.

  • Handling broken packages.
  • Handling packages with recommended add-ons that aren’t installed. [Seeker]
  • We need keyboard equivalents for the common functions. This might include key combos for various sections (e.g. a key combo for “Get Software”). [Jorge Castro]

  • When a PPA maintainer changes the label of the PPA, when will USC update it?
  • How do we use font screenshots from http://fonts.debian.net/ instead of screenshots.debian?

  • How to provide better search results (facet search tags/categories on e.g. the left hand?)

SoftwareCenter (last edited 2019-04-28 16:57:10 by mpt)