SoftwareCenter

Differences between revisions 1 and 502 (spanning 501 versions)
Revision 1 as of 2005-08-29 20:24:16
Size: 2118
Editor: 200-171-140-32
Comment: braindump
Revision 502 as of 2011-07-04 16:47:27
Size: 135104
Editor: mpt
Comment: heading levels, derp
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
##(see the SpecSpec for an explanation)

 * Created: [[Date(2005-08-29T20:24:16Z)]] by MatthewPaulThomas
 * Priority: NeedsPriority
 * People: NeedsLead, MatthewPaulThomasSecond
 * Contributors: MatthewPaulThomas
 * Interested:
 * Status: BrainDump, DistroSpecification
 * Branch:
 * Malone bug:
 * Packages affected: `gnome-app-install`, `synaptic`
 * Depends:
 * Dependents:
 [[FullSearch(SoftwareManager) -SoftwareManager]]
 * BoF sessions: none yet

== Summary ==
## page was renamed from SoftwareStore
## page was renamed from AppCenter
## page was renamed from SoftwareLibrary
## page was renamed from SoftwareManager

''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]].''

 * Launchpad entry: UbuntuSpec:software-library
 * Created: <<Date(2005-08-29T20:24:16Z)>> by MatthewPaulThomas

Ubuntu Software Center is a utility for installing, removing, and purchasing software in Ubuntu. It replaces several other utilities, which makes the overall experience easier to understand, improves user safety, and frees space on the Ubuntu CD. The next version will be 5.0, featuring a new layout, more ways of featuring interesting software, and any features you contribute. Ubuntu Software Center is implemented using Python, GTK, and [[https://launchpad.net/aptdaemon|Aptdaemon]]. The project is [[https://launchpad.net/software-center|hosted in Launchpad]].

<<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:
||<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 5.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.

<<TableOfContents>>
Line 21: Line 29:
 * "How do I install programs?" is one of the most common questions on the Ubuntu forums. In Ubuntu you can use `gnome-app-install` '''or''' `synaptic` for installing and uninstalling programs that have a `.desktop` file, `synaptic` for installing and uninstalling programs that don't, and `update-manager` '''or''' `synaptic` for installing updates. This is a confusing multiplication of graphical interfaces.

 * Having an integrated, gorgeous tool for installing and uninstalling packages and installing security updates, and having it before any other distro, will give Ubuntu a usability advantage for the next few months.

 * "Synaptic" was an unfortunately obscure name anyway, and "gnome-app-install" is misleading when installing non-Gnome apps.

== Use cases ==

== Scope ==

== Design ==

 * Dynamically filtered view of programs or packages:
 {{{
Show: [programs you can install :^] Search: [______________]}}}

 * Menu choices are:

  * programs you can install (default when invoked manually)
  * programs already installed

  * packages available
  * packages installed

  * security updates (search field replaced by "Updates available" text)
  * all updates

 * Items in the list have iconic pull-down menus that look like menus, not checkboxes.
Early versions of Ubuntu shipped many graphical utilities 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”. Installing and removing other software required Synaptic. For installing updates, the usual route was Update Manager, but it deferred to Synaptic if it encountered conflicts. Configuring where all these utilities looked for software involved a separate utility, “Software Sources”. Installing installing official software via the Web involved yet another tool, `apturl`. Installing downloaded `.deb` packages used `gdebi`. And no-longer-needed software was removed by Computer Janitor.

This redundancy increased the amount of interface people had to learn, wasted space on the Ubuntu CD, and fragmented development effort. Having multiple sanctioned graphical methods of installing software also made people more likely to think that unsanctioned methods are just as safe, when they are not.

Ubuntu Software Center replaces all these with a single obvious mechanism for installing and removing software in Ubuntu, with a self-evident name and an interface anyone can use.

<<Anchor(latest)>><<Anchor(v5.0)>>
== Ubuntu Software Center 5.0 ==

 * Packages affected: `software-center`

<<Anchor(metadata)>><<Anchor(branding)>>
=== Branding ===

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 package name and executable name should both be `software-center`.

The application Comment should be “Lets you choose from thousands of free and paid applications available for Ubuntu” (without a period), and the summary in the About window should be “Lets you choose from thousands of free and paid 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.<<BR>><<BR>>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.

||{{attachment:softwarestore.svg}}||<:>{{attachment:icon-v2.jpg}}||
||<:>Versions 1 and 2||<:>Version 3||

=== Launching ===

If USC is launched by any means when it is already open, the existing instance should be focused.

==== 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|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 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.

===== of the form “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|“All 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, with the path button “All Software” > “{package name}”. 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.

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

===== of the form “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|“All 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`.

===== of the form “apt:package1,package2,…” =====

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

===== of the form “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 “All 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|“All Software” item screen]] for the package.

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

===== 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.

===== Replacing apturl =====

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

<<Anchor(gdebi)>>
==== from a .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:get-software-item-standalone.jpg}}

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.

For the [[#navigation-pane|navigation pane]], the screen should be located in the “Other” child of “All Software” (though “All Software” will not necessarily be expanded to show this). The [[#pathbutton|pathbutton]] should have two elements, “All Software” and the package name.

This software item screen should differ from the standard one in these ways:
 * 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 Ubuntu Software Center 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 “Use Newer Version” button should navigate to the software item screen for the newer version.

Once this feature is implemented, `software-center` should be marked as `Provides: gdebi` and `Replaces: gdebi`.

==== 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. 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.

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 other choices.
  {{attachment:navigation-bar-all-software.png}}

  a. The current individual software source, whenever you are looking at one.

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

  a. The current individual software source, whenever you are looking at one.

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

  a. (“Popular”, “Updates”, and/or “Account” sections may be added later.)

  a. “[[#in-progress|Progress]]”, appearing only when tasks are in progress.

 1. [[#search-field|The search field]], visible whenever you are not at a software item screen.

==== Navigation ====

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

Whenever USC navigates from one screen to another, whether directly (with mouse or keyboard) or indirectly, it should:
 1. immediately highlight the appropriate row in the navigation pane, if it has changed;
 1. begin displaying the corresponding screen in the main pane;
 1. if the corresponding screen has not displayed within 1 second, display a blank screen with a horizontally and vertically centered spinner, until the screen is available.

 '''Test case:''' On a slow computer, choose “View” > “All Software”, then “Provided by Ubuntu” on a slow computer. The spinner screen should appear until the full list is available.

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

The '''section navigation commands''' — “All Software”, “Installed”, and so on — should always navigate to the ''top level'' of that section. (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 Sources, 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 Sources, remove the PPA. Forward should no longer be available.
  4. In Software Sources, 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” ====

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 [[#category|categories]], [[#subcategory|subcategories]], search results, and individual software items.

In the navigation bar, “All Software” should be represented by the USC icon itself. It may have [[#broken-catalog|an emblem overlaid for a broken software catalog]].

Whenever you are in the “All Software” section, the “View” > “Software Maintained by Anyone” and “View” > “Software Maintained by Canonical” 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 “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 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(home)>><<Anchor(lobby)>>
===== Home screen =====

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

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

''In future, “Top Rated” and “Most Popular” might be moved to a separate screen.''

The padding between the edges of the home screen and its contents should be 1 em, both horizontally and vertically.

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

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

{{attachment:whats-new-header.jpg}}

The “Featured” and “What’s New” sections should have headers the same as the “Categories” section, except that the trailing end of the header should have an unobtrusive “All” link (with accessible labels “All featured items” and “All new items” respectively), and an icon-only Pause/Play button (with accessible label “Pause” or “Play” as appropriate). Both sections should display, as large icons with text below, as many items from those selections as fit in one row in the section width. The bottom of each section should have a row of paging dots, indicating how many sets of items there are, and which are currently being shown.

The “What’s New” collection should consist of the newest 20 items published in any of your software channels, excluding items that you have already installed.

When Ubuntu Software Center displays the home screen for the first time after launching, it should display a randomly chosen set of items from the “[[#featured|Featured]]” section (because they don’t change as long as this OS version is installed), and the first set of items from the “[[#whats-new|What’s New]]” section (because they do change). Each set of items should be displayed for ten seconds (including one second fading in at the beginning, and one second fading out at the end), except for the first set of “What’s New” items, which should be displayed for 15 seconds (so that the transitions of the two sections are staggered by default). Activating a paging dot should switch to that set of items immediately. Activating a section’s Pause button should pause its transitions. Activating its “All” link should navigate to the “Featured” or “What’s New” screen respectively.

Whenever Ubuntu Software Center is not displaying the home screen, it should temporarily pause the transitions, so that the same items are displayed when you return to the screen as when you left it.

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

||<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.

||<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, being removed, or 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(featured)>>
===== “Featured” screen =====

The “Featured” screen should list [[#def-alphabetically|alphabetically]] all items in the Featured collection (''where?''), as a [[#software-list-view|software list view]].

Whenever the “Featured” screen is being displayed:
 * The [[#path-button|path button]] should consist of the “All Software” element and a “Featured” element.
 * The [[#status-bar|status bar]] text should be of the form “19 items”.

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

{{attachment:whats-new.jpg}}

The “What’s New” screen should list [[#def-alphabetically|alphabetically]], as a [[#software-list-view|software list view]], up to the 20 most recent applications that appeared in any of your software sources less than 90 days before the computer’s software catalog was last updated. (For this purpose, an “application” is any package containing a `.desktop` file.)

Whenever the “What’s New” screen is being displayed:
 * The [[#path-button|path button]] should consist of the “All Software” element and a “What’s New” element.
 * The [[#status-bar|status bar]] should have no text.

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

If a category does not [[#Genre|have any subcategories]] that contain any items matching the current repositories and view options, the category screen should be an [[#def-alphabetically|alphabetically]] sorted [[#software-list-view|software list view]] of the software items in that category. 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]].

If the category ''does'' have any subcategories that contain any items matching the current repositories and view options, the category screen should instead be a screen similar to the [[#home|home screen]], with one section having the same name as the category (''e.g.'' “Games”), containing square-proportion buttons to present [[#def-alphabetically|alphabetically]] the relevant subcategories.

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

Either way, whenever a category screen is being displayed:
 * The [[#path-button|path button]] should consist of the “All Software” segment and a segment with the name of the category.
 * The [[#status-bar|status bar]] text should be of the form “19 items available”, counting all the items in that category, including all subcategories.

In the list of subcategories, the last item should always be a pseudo-subcategory with a name of the form “All 175”. Activating this item should navigate to a separate screen showing all items in the category [[#def-alphabetically|alphabetically]] in a [[#software-list-view|software list view]]. When this screen is displayed, the pathbutton should have an extra “All” element. The status bar text should be the same as for the main category screen.

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

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

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

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

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

When in the home screen, or in the screen for a category or subcategory, 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 category or subcategory, the results should be limited in scope to that category or subcategory.
 * The [[#status-bar|status bar]] text should be of the form “No matching items” or “37 matching items”.

'''Test case:''' (sc-010) 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}}

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

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

 When searching from a subcategory screen, a non-application item should be hidden by default if ''that'' subcategory 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:''' (sc-011) From the home screen, search for “drawing ” (with a trailing space). Then search for “drawing program”. The Center should return exactly the same results for both searches, though possibly in a different order.

||'''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 “All Software” =====

Whenever a [[#software-item-screen|software item screen]] is being displayed in the “All Software” section:
 * If the item was navigated to via a category/subcategory, the [[#path-button|path button]] should consist of elements for “All Software”, then that category, then the subcategory if any, then the [[#software-title|title]] of the item.
 * In any other case (for example, if the item is accessed from a search), the path button should consist of elements for “All Software”, then the primary category to which the item belongs, then the primary subcategory if any, then the 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”, USC should automatically navigate up to the subcategory screen; or, if the entire subcategory contains no Canonical-maintained items, up to the category screen; or, if the entire category contains no Canonical-maintained items, up to the [[#home|home screen]]).










=== Common interface components ===

==== Menus ====

{{{
_File
=====
  _Install
  _Remove
---------------------------------
  Reinstall _Previous Purchases…
  _Deauthorize Computer…
---------------------------------
  _Close Ctrl W
}}}

“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 advanced package operations.''

{{{
_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 Sources…
}}}

“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.

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

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

{{{
_View
=====
* Software Maintained by Anyone
  Software Maintained by Canonical
}}}

The “Software Maintained by Anyone” and “Software Maintained by Canonical” software items should be insensitive by default; their availability and behavior is defined elsewhere in this specification.

'''Test case:''' (sc-003) Start installing something in the Center. While it 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).''

{{{
_Help
=====
  Ubuntu Software Center _Help…
--------------------------------
  _About This Version
}}}

By default, “Ubuntu Software Center Help…” should open the help viewer to the front page of the help.

“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 category in the [[#home|home 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:''' (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.

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 categories in the “All Software” section.

Each item in an icon view features [[#software-icon|the software item’s icon]] and its [[#software-title|title]]. 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.

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).

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.

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)>>
==== Software list view ====

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 “All 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:''' (sc-005) Navigate to “All Software” > “Fonts”. Select “A Lee’s free Hangul True``Type fonts (ttf-alee)”. 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. Press Tab again; the selected item in [[#navigation-pane|the navigation pane]] should be focused.

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.

<<Anchor(software-list-view-disclosure)>>
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.

{{attachment:software-list-view-disclosure.jpg}}

<<Anchor(software-list-view-categorized)>>
==== Categorized list view screen ====

||<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 category]] (but not the subcategory) that they belong to. ''Only'' categories that actually contain items should be shown. The expanded or collapsed state of every category, for every categorized list view screen, should be remembered between sessions until that category 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 categories to expand of their own accord. However, categories 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 “All Software” and “Installed Software” sections, a '''software item screen''' should show information about an item, and let you [[#installing|install]] or [[#removing|remove]] it or change any [[#add-ons|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]].
 * <<Anchor(software-item-screen-copying)>>Whenever text is selected in the screen, the copy action (“Edit” > “Copy” and Ctrl C) 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.

''The stars and reference to reviews shown here should not be present until reviews are implemented.''

{{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.
 * An [[#software-item-screen-state-installed|installation 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”. If you activate the thumbnail (by clicking it, or pressing Enter when it is focused), a small determinate progress meter should appear centered on the thumbnail, showing download progress for the full-size screenshot, followed by a spinner for two seconds while the screenshot opens in your preferred image viewer.<<BR>>
 {{attachment:software-item-screen-screenshot-progress.jpg}}
 * 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.’, and a “Use This Source” button that adds the source and then updates the screen.
  * 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.”, and an “Update Now” button.
  * 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.
 * Text describing the “Total size:” of the item:
  * if it is not 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 installed, and you have not specified any changes to add-ons, “{Y} on disk”
  * if it is already installed, and you have specified changes to add-ons, “{``X} to download, {Y} on disk”.
 * Text of the form “Version: {package name} {version number}”.
 * 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)>><<Anchor(date-installed)>><<Anchor(self-awareness)>>
The '''installation state bar''' contents should depend on the item’s exact state.

 * If the item is not installed nor queued for installation, the price of the item (''e.g.'' “Free”) at the leading end (except for Ubuntu Software Center itself, which should say “Removed (close it and it’ll be gone)”), and an “Install” button at the trailing end.

 * If the item is installed and not queued for removal, the installed icon 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}}

The “All Software” section shows screens for both uninstalled and installed items, and these should share the overall “All 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 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(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(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.

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 category or subcategory.

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.

||<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 “All 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 categories or subcategories.)
 * 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.

<<Anchor(channels)>>
==== Individual software sources ====

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:

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

 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 the collection of purchasable items, with money as its icon, and the label “For Purchase”.
 1. Next should be the Independent repository for the current Ubuntu version, with ''(what?)'' as its icon, and the label “Independent”.
 1. Next should be any PPAs (not including those for purchased items), 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). In the “Provided by Ubuntu” screens, non-application packages should be [[#software-list-view-disclosure|hidden by default]].

'''Test case:''' (sc-013)
 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:''' (sc-014)
 1. Download and install the [[http://www.google.com/chat/video|Google voice and video plug-in]].
 1. Expand USC’s “Installed Software” section. It should have an “Other” child item that contains the “Google Talk Plugin”.
 1. Expand the “Get Software” section. It should ''not'' have an “Other” child item.

===== Software list view for individual software sources =====

When any individual software source inside “All 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(history)>>
==== History section ====

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

{{attachment:history.jpg}}

Below the navigation bar, a '''filter bar''' should have items for “All Changes”, “All Installations”, “Purchases”, and “Removals”. (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.

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:
  * “{[[#software-short-name|short name]]} installed”
  * “{short name} removed”
  * “{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(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 ===

For any [[#def-software-item|software item]] (a package, or an application with a `.desktop` file inside a package), USC presents information 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.

<<Anchor(software-icon)>>
==== 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 ====

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:''' (sc-015) Search for the “backintime-gnome” package. The item should have the title “Back In Time (backintime-gnome)”.

<<Anchor(software-short-name)>>
==== Short name ====

The '''short name''' should be the application Name, if there is one; otherwise the package name. (This is for use in more technical contexts than the Title; for example, in the [[#history|History section]].)

<<Anchor(software-summary)>>
==== 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 ====

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 subcategorys, 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 ||
|| '''Accessories''' || Utility, System || - || || - ||
|| '''Education''' || Education || - || || - ||
|| '''Fonts''' || - || - || `(t,o)tf-*` || yes ||
|| '''Games''' || Game, Sports || - || || - ||
|| - Board Games || Board``Game || - || || - ||
|| - Card Games || Card``Game || - || || - ||
|| - Puzzles || Logic``Game || - || || - ||
|| - Role-Playing || Role``Playing || - || || - ||
|| - Sports || Sports``Game || - || || - ||
|| '''Graphics''' || Graphics || - || || - ||
|| - 3D || 3DGraphics || - || || - ||
|| - Drawing || Vector``Graphics || - || || - ||
|| - Painting || Raster``Graphics || - || || - ||
|| - Photography || Photography || - || || - ||
|| - Publishing || Publishing || - || || - ||
|| - Scanning & OCR || Scanning, OCR || - || || - ||
|| - Viewers || Viewer || - || || - ||
|| '''Internet''' || Network || - || || - ||
|| - Chat || Instant``Messaging, IRCClient || - || || - ||
|| - File Sharing || File``Transfer || - || || - ||
|| - Mail || Email || - (''not'' mail) || || - ||
|| - Web Browsers || Web``Browser || - (''not'' web) || || - ||
|| '''Office''' || Office || - || || - ||
|| '''Science & Engineering''' || Science || science || || yes ||
|| - Astronomy || Astronomy || - || || - ||
|| - Biology || Biology || - || || - ||
|| - Chemistry || Chemistry || - || || - ||
|| - Computing & Robotics || Artificial``Intelligence, Computer``Science, Robotics || - || || - ||
|| - Electronics || Electronics || - || || - ||
|| - Engineering || Engineering || - || || - ||
|| - Geography || Geography || - || || - ||
|| - Geology || Geology, Geoscience || - || || - ||
|| - Mathematics || Data``Visualization, Math, Numerical``Analysis || math, gnu-r || || yes ||
|| - Medicine || Medical``Software|| || || - ||
|| - Physics || Electricity, Physics|| || || - ||
|| '''Sound & Video''' || Audio``Video, Audio, Video || - (''not'' sound or video) || || - ||
|| '''Themes & Tweaks''' || Settings || || || - ||
|| - Background Pictures || - || - || `*-backgrounds`, `*-wallpapers` || 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 || Revision``Control || vcs || || yes ||
|| - Web Development || Web``Development || - || || - ||
|| '''System''' || - || - || || yes ||

||<style="background:Plum">Librarians||
||For 3.0, we will be refining this new classification scheme for the Center. For example, what subcategories could the “Games” category 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 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.
  1. Stop.
 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.
  1. Stop.
 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.
  1. Stop.
 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.
  1. Stop.
 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.
  1. Stop.
 1. 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:`.

<<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(custom-list)>>
=== Custom package lists ===

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 [[#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 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|“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.

 * 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:''' (sc-016) On a machine that has Gobby and Orca installed but neither `9base` nor `abcde`, with “View” > “All Software” selected:
 1. Navigate to the home screen and enter “gobby,gnome-orca” (without quotes) in the search field. The path button should show “All 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,gnome-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,gnome-orca,9base,”). Nothing should change.
 1. Add the letters “abcd” to the end of the string (“gobby,gnome-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,gnome-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 USC detects that the apt cache of packages is currently broken and is not currently being rebuilt:

 * The “Installed Software” item in the navigation pane should have a /!\ icon at its trailing end, producing the pointing-hand cursor when moused over. When “Installed Software” is selected and focused, the /!\ icon should be next in the keyboard navigation cycle, and have an accessible label and a tooltip that both say “The software catalog needs rebuilding.”.

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

 When the icon is activated, it should open a Policy``Kit authentication alert with the primary text “The software catalog needs rebuilding. Once you authenticate, it will rebuild automatically.”.

 * Choosing “Install” or “Remove” for any item should automatically queue a rebuild task ahead of the installation or removal.

In “In Progress”, a software catalog rebuild task should have the Ubuntu Software Center icon as its icon, and the primary text “Rebuilding software catalog”. Unlike other tasks, it should not be possible to reorder it.
 
'''Test case:''' (sc-017)
 1. Break the cache using the command: `apt-get install 4g8 && dpkg --force-depends -r libnet1`
 1. Navigate to a different category or subcategory. The /!\ icon should appear next to “Installed Software”.
 1. Select “Installed Software”, press Tab, then press Space. The custom Policy``Kit alert should appear.
 1. Cancel the alert. The /!\ icon should persist.
 1. Start installing something. The /!\ icon should disappear.
 1. Switch to “In Progress”. The “Rebuilding software catalog” task should be underway.
 1. Once the test is complete, reset with `apt-get remove 4g8 libnet1`

<<Anchor(web-link-package)>>
=== Copying a Web link for a package ===

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).

<<Anchor(installing)>>
=== Installing software ===

When you request to install a software item:
 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.

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.

||<style="background:Peru">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 [[http://andrewtrumper.blogspot.com/2009/03/have-you-ever-seen-progress-bar-that.html|infinitely more accurate]] than one that fills up completely only to jump back to zero for the next step. And you can [[/SmoothProgress|help us make it even better]].||

<<Anchor(removing)>>
=== Removing software ===

When you request to remove a software item:

 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. 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…”

 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…''

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 [[#software-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 “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.

<<Anchor(commercial)>>
=== Commercial software ===

(This section covers the small subset of commercial use cases that involve Ubuntu Software Center specifically and are scheduled for 3.0.)

Human participants: Ubuntu user, software vendor
Software participants: Ubuntu Software Center, Ubuntu Single Sign-On, Launchpad, billing system

||'''Use case'''||'''Maverick alpha 2'''||'''Maverick alpha 3'''||'''10.10 beta'''||'''10.10 post-release'''||'''11.04'''||
||- [[#system-requirements|finds system requirements for software]]|| || ||
||- [[#commercial-price|sees up-to-date price for software]]|| || ||
||[[#commercial-buying|Ubuntu user buys software]]||data transfer||user interface||<-3>yes||
||[[#commercial-reinstalling|Ubuntu user who has purchased software reinstalls Ubuntu]]||-||<-4>yes||

<<Anchor(commercial-buying)>>
==== Buying 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. {{attachment:buy-connecting.jpg}}<<BR>>Otherwise, USC should navigate to a new screen, with its own “Buy” pathbutton element, that is blank initially except for a spinner and the text “Connecting to payment service…”.

 1. {{attachment:buy-screen.jpg}}<<BR>>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.

 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.''

''Maybe we should show a clickable padlock somewhere for reassurance.''

<<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.

Choosing “Reinstall” should [[#installing|install the item]] without any further interaction.

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

To make it easier to find previous purchases, the “File” menu should contain a “Reinstall Previous Purchases…” item.

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

If you are not already signed in, activating the item should open a sign-on dialog that allows only sign-on, not registration, with primary text “To reinstall previous purchases, sign in to the Ubuntu Single Sign-On account you used to pay for them.”.

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

Once you are successfully signed in, USC should navigate to an “All Software” > “Previous Purchases” screen, listing purchased items most recent first. Whenever this screen is displayed, the top-level “All Software” item should be selected in the navigation pane (as it is when viewing a category screen, for example). In addition to the “Reinstall” command for each individual item, the screen should have an action bar containing a “Reinstall All” button.

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

For the spec ''see'' SoftwareCenter/RatingsAndReviews.

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


<<Anchor(oneconf)>>
=== Comparing software across computers ===

Implemented as an optional extension: ''see'' OneConf.

=== 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-maintained” — what’s that?
 * What if a program I want isn’t in the Center?
 * Using software from multiple sources
 * What if a program doesn’t work?

=== About window ===

The About window should be a standard window (not a [[#def-dialog|dialog]]) following the standard Gnome About window layout, using [[#metadata|the appropriate application summary]].

<<Anchor(scheduled)>>
== Changes scheduled for 4.0 ==

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

When you request to install a software item, if the item is a graphically launchable application and Unity is running, at the same moment that the item is shown in the “In Progress” section, a panel should slide up from the bottom of the main pane.

{{attachment:launcher-prompt.png}}

If you choose “Not Now”, the prompt should slide back out.

If you choose “Add to Launcher”, then:
 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.
 1. 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 by proportionally filling the icon with color. Trying to launch the item should still do nothing.
 1. When installation is complete, the launcher item should flash and become usable.

'''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 [[#software-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.

''Future work: Test whether this is obvious enough. If not, maybe make the hoisting automatic, with a “New Applications in Launcher” menu item for toggling the behavior.''

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

<<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 sensitive 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.

=== Popularity ===

=== Dragging installed applications from USC to a launcher ===

<<Anchor(future)>><<Anchor(features)>>
== Features you can implement ==

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.)

<<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__?”.

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

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

An item’s '''Expected Lowest Rating''' (ELR) should be the sum, for each possible number of stars (1, 2, 3, 4, and 5), of that number of stars 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.

##'''Test cases:'''
##||<rowstyle="font-weight:bold">1-star ratings||2-star ratings||3-star ratings||4-star ratings||5-star ratings||Raw average||Expected Lowest Rating||
##||0||0||0||0|| 1||5||1.89||
##||0||0||0||0|| 2||5||2.75||
##||0||0||0||0|| 4||5||3.54||
##||0||0||0||0|| 8||5||4.15||
##||0||0||0||0||16||5||4.53||
##||0||0||0||0||2||5||
##||0||0||0||0||2||5||


 Calculate the expected lowest rating for an item that has two 5-star ratings and no other ratings. Then calculate the lowest expected rating for an item that has two 5-star ratings and one 2-star rating. Both answers should be less than 5, with the first answer being greater than the second.

The home screen should include a “Top Rated” section that lists, in descending order of ELR, the 12 items with the highest ELR. Where the “Featured” and “What’s New” sections have “All” links, the “Top Rated” section should instead have a “More” link that navigates to a separate “Top Rated” screen. This screen should list, in descending order of ELA, the 100 items with the highest ELR. (As usual, the number of stars shown for each item should represent the median rating, not the ELR itself.)

<<Anchor(top-rated-category)>>
=== “Top Rated” in each category ===

Whenever a category screen does not consist of just a listing, it should contain a “Top Rated” section that lists, in descending order of expected lowest rating, the 12 items in that category with the highest ELR.

<<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 intelligently?''

=== More helpful search screen for no results ===

When searching anywhere in “All Software”, if there are zero 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 ''are'' any matches in the parent category.]
   * Try the __1 item__ that matches in software not maintained by Canonical.
    [Present only if you’re viewing “Canonical-Maintained 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.

(The names of categories and subcategories should be greyer, so that they do not look ugly like they do here.)

=== Smarter ellipsis of software list view items ===

In a [[#software-list-view|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).

<<Anchor(software-list-view-copying)>>
=== Copying software list view items to the clipboard ===

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(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.

Maybe a “Pause” button would be even more useful in this bar.

=== More informative text for waiting tasks ===

(bug Bug:444330)

When you request to install an item and it is waiting for other tasks in [[#in-progress|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 [[#in-progress|the “In Progress” queue]], its status text should be “Waiting to remove”.

=== 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.

=== Copying a Web link for an “In Progress” package ===

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]].

<<Anchor(where-is-it)>>
=== “Where Is It?” button ===

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

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
 1. wait for you to activate it
 1. instantly remove the previous ring
 1. over two seconds, draw a ring around the application, or around the submenu or section that contains the application
 1. wait for you to select the item or open the submenu
 1. 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.

<<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 sensitive 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 ===

http://brainstorm.ubuntu.com/idea/24963/

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

Activating the command should remove the package and its settings (equivalent to `apt-get purge`). 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-settings)>>
=== Residual settings ===

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

{{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 Settings” 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 left behind configuration files. It should be different from a normal software list view in that:
 * At the trailing end of each row (where the rating stars would otherwise be) should be the size of the settings files, ''e.g.'' “11 KB”.
 * The secondary text for each item should be the date on which the package was removed.
 * When an item is selected, at its trailing end should be a button labelled “Remove Settings”, and “File” > “Remove Including Settings” should temporarily also become “Remove Settings”.

Activating the “Remove Settings” command should remove the package’s settings. The progress feedback should be the same as for [[#removing|removal]], using the same Policy``Kit privilege, but with “Removing settings…” as the text in the installation state bar.

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. Activating the “Remove 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 Settings” command too.

=== 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 [[#software-short-name|short name]] rather than its [[#software-title|title]].

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

 * At the trailing end of the first line should be the time at which the action occurred, again in the insensitive 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 insensitive 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 insensitive text color.

''To do: Work out a sensible way for the “Reinstall Previous Purchases” screen to coexist with the “Purchases” history.''

=== Animation of the main pane ===

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

Whenever you navigate from within the home screen to a category screen, over 0.5 seconds the left and right halves of the home 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 category screen underneath.

{{attachment:lobby-animation.jpg}}

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

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

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 “Installed Software” branch of the navigation pane should have a “Windows Software” child item. This should be the last child 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(grid-view)>>
=== Grid view ===

The “View” menu should contain two radio items, “as Icons” and “as List”. These items should be sensitive only when USC is displaying the applications in a subcategory (or in a category that has no subcategories). The selection should persist across categories and between USC sessions. When “as Icons“ is selected, the applications should be shown as a grid of large icons with titles underneath them.

== 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.

<<Anchor(system-requirements)>>
=== # Ubuntu user finds system requirements for software ===

=== 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 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.

=== 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

=== 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.

=== 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]]``]
 * 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.
Line 52: Line 1478:
 * Multi-level undo.

== Implementation ==

=== Code ===

=== Data preservation and migration ===

== Outstanding issues ==

== BoF agenda and discussion ==
 * ''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:
  * category 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]
 * [[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.edge.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.

== Roadmap ==

=== October 2009 ===

In Ubuntu 9.10, we 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.

=== April 2010 ===

In Ubuntu 10.04 LTS, we shipped 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.

=== October 2010 ===

In Ubuntu 10.10, we shipped Ubuntu Software Center 3.0.4. This version:
 * Let people buy software 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.

=== April 2011 ===

In Ubuntu 11.04, we shipped Ubuntu Software Center 4.0, with ratings and reviews for software and many performance improvements.

=== October 2011 ===

In Ubuntu 11.10, we plan to ship Ubuntu Software Center 5.0, with a new layout and new ways of featuring interesting software.

<<Anchor(Desired attributes)>>
== Eventual scope ==

You should be able to:

 * find software by: [``[[http://brainstorm.ubuntu.com/idea/18315/|idea 18315]]``]
  * name
  * purpose (''e.g.'' “wireframe” → Dia)
  * category and subcategory (''e.g.'' Games: Card Games) [``[[http://brainstorm.ubuntu.com/idea/14857/|idea 14857]]``]
  * name of competitor (''e.g.'' “excel” → Open``Office.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 [``[[http://brainstorm.ubuntu.com/idea/3144/|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) ([[http://www.enricozini.org/2006/debtags/debtags-interesting-times/|suggested by Enrico Zini]])
  * suite (software for Java developers, software for film makers)
  * what’s new [``[[http://brainstorm.ubuntu.com/idea/13762/|idea 13762]]``]
  * whether it was recently installed or removed [``[[http://brainstorm.ubuntu.com/idea/16953/|idea 16953]]``]

 * get information about software
  * what it does
  * what people think of it (ratings and reviews) [UserReviewsInSynaptic] [``[[http://brainstorm.ubuntu.com/idea/18729/|idea 18729]]``]
  * what it looks like (screenshots or short videos) [``[[http://brainstorm.ubuntu.com/idea/15774/|idea 15774]]``]
  * what the current version number is [``[[http://brainstorm.ubuntu.com/idea/13036/|idea 13036]]``]
  * whether it is installed by default in Ubuntu
  * whether it’s installed right now [``[[http://brainstorm.ubuntu.com/idea/19068/|idea 19068]]``]
   * if it’s installed, how to launch it [``[[http://brainstorm.ubuntu.com/idea/16216/|idea 16216]]``]
   * if it’s not installed, how much there is to download, including dependencies [``[[http://brainstorm.ubuntu.com/idea/4613/|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 [``[[http://brainstorm.ubuntu.com/idea/18538/|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 [``[[http://brainstorm.ubuntu.com/idea/19265/|idea 19265]]``]
  * asynchronously (browse and select more stuff while other stuff is installing)
  * pausing if you need to use your bandwidth for something else [``[[http://brainstorm.ubuntu.com/idea/16643/|idea 16643]]``]
  * downloading it once for multiple computers (subsuming APTonCD)
  * read about updates while they are installing
  * using Policy``Kit 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 [``[[http://brainstorm.ubuntu.com/idea/18408/|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 ==

 * [[http://catlingmindswipe.blogspot.com/2010/05/review-linux-mint-9-software-manager.html|Mint Software Manager]]
 * [[http://packagekit.org/pk-screenshots.html|PackageKit Gnome]]
 * [[http://www.getdeb.net|GetDeb.net]]
 * [[http://www.dotdeb.com|dotdeb.com]] (Ubuntu software)
 * [[http://appnr.com/|Appnr]]
 * [[http://allmyapps.com/|AllMyApps]]
 * [[http://www.playdeb.net|PlayDeb.net]]
 * [[http://apperi.com/|Apperi]]
 * [[http://appbodega.com/|Bodega]]
 * [[http://listaller.nlinux.org/|Listaller]]
 * [[http://ubuntu-tweak.com/|Ubuntu Tweak]]
 * [[http://en.djl-linux.org/?q=node/18|djl]] (games only)
 * [[http://en.opensuse.org/GameStore|Game Store]] (games only)
 * [[http://www.intel.com/consumer/products/appup.htm|Intel® AppUp℠ Center]]

== Unresolved issues ==

 * Popularity measurements are skewed by default installs. [``[[http://brainstorm.ubuntu.com/idea/16411/|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 the Center 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?)

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 software handling.

Ubuntu Software Center is a utility for installing, removing, and purchasing software in Ubuntu. It replaces several other utilities, which makes the overall experience easier to understand, improves user safety, and frees space on the Ubuntu CD. The next version will be 5.0, featuring a new layout, more ways of featuring interesting software, and any features you contribute. Ubuntu Software Center is implemented using Python, GTK, and Aptdaemon. The project is hosted in Launchpad.

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

GTK/Clutter hackers

Interface designers

Librarians

Packagers

Otherwise, if you are a Python programmer, get the latest code and try fixing existing bugs, or implementing something for version 5.0. 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.

Contents

  1. How you can help
  2. Rationale
  3. Ubuntu Software Center 5.0
    1. Branding
    2. Launching
      1. Directly
      2. from an apt: link
        1. of the form “apt:package-name”
        2. of the form “apt:package-name?minver=1.0”
        3. of the form “apt:package1,package2,…”
        4. of the form “apt:package-name?section=multiverse”
        5. of the form “apt:package-name?channel=lucid-partner”
        6. Replacing apturl
      3. from a .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”
        1. Home screen
        2. Software list view in “All Software”
        3. “Featured” screen
        4. “What’s New” screen
        5. Category screen
        6. Subcategory screen
        7. Searching in “All Software”
        8. Software item screen in “All Software”
    4. Common interface components
      1. Menus
      2. Location bar
        1. Path button
        2. Search field
      3. Searching in general
      4. Software icon view
      5. Software list view
      6. Categorized list view screen
      7. Software item screen
      8. Main pane
      9. “Installed Software” section
        1. Software list view in “Installed Software”
        2. Software item screen in “Installed Software” section
      10. Individual software sources
        1. Software list view for individual software sources
      11. History section
      12. “In Progress” section
      13. Status bar
    5. Determining software item information
      1. Icon
      2. Title
      3. Short name
      4. Summary
      5. Genre
      6. License label
    6. Custom package lists
    7. Handling a broken apt cache
    8. Copying a Web link for a package
    9. Installing software
    10. Removing software
    11. Add-on packages
    12. Commercial software
      1. Buying software
      2. Reinstalling previous purchases
    13. Ratings and reviews
    14. Comparing software across computers
    15. Help
    16. About window
  4. Changes scheduled for 4.0
    1. Learning how to launch an application
    2. Deauthorizing your computer
    3. Popularity
    4. Dragging installed applications from USC to a launcher
  5. Features you can implement
    1. Being encouraged to submit a review
    2. “Top Rated” overall
    3. “Top Rated” in each category
    4. Being encouraged to submit a review
    5. More helpful search screen for no results
    6. Smarter ellipsis of software list view items
    7. Copying software list view items to the clipboard
    8. Cancel bar in “In Progress” screen
    9. More informative text for waiting tasks
    10. Consistent progress bar for installations and removals
    11. Copying a Web link for an “In Progress” package
    12. “Where Is It?” button
    13. “Reinstall” command
    14. “Remove Including Settings” command
    15. Residual settings
    16. History enhancements
    17. Animation of the main pane
    18. Wine integration
    19. Grid view
  6. Yet-to-be-specified features
    1. # Ubuntu user finds system requirements for software
    2. Launching via inserting an Ubuntu CD
    3. Launching via file of unknown type
    4. Subcategories
    5. License information
    6. Developer tools
    7. Eliminating the “{title} can’t be installed at the moment” alert
    8. Others
  7. Definitions used in this specification
  8. Roadmap
    1. October 2009
    2. April 2010
    3. October 2010
    4. April 2011
    5. October 2011
  9. Eventual scope
  10. Similar efforts
  11. Unresolved issues

Rationale

Early versions of Ubuntu shipped many graphical utilities 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”. Installing and removing other software required Synaptic. For installing updates, the usual route was Update Manager, but it deferred to Synaptic if it encountered conflicts. Configuring where all these utilities looked for software involved a separate utility, “Software Sources”. Installing installing official software via the Web involved yet another tool, apturl. Installing downloaded .deb packages used gdebi. And no-longer-needed software was removed by Computer Janitor.

This redundancy increased the amount of interface people had to learn, wasted space on the Ubuntu CD, and fragmented development effort. Having multiple sanctioned graphical methods of installing software also made people more likely to think that unsanctioned methods are just as safe, when they are not.

Ubuntu Software Center replaces all these with a single obvious mechanism for installing and removing software in Ubuntu, with a self-evident name and an interface anyone can use.

Ubuntu Software Center 5.0

  • Packages affected: software-center

Branding

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 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 package name and executable name should both be software-center.

The application Comment should be “Lets you choose from thousands of free and paid applications available for Ubuntu” (without a period), and the summary in the About window should be “Lets you choose from thousands of free and paid 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 and 2

Version 3

Launching

If USC is launched by any means when it is already open, the existing instance should be focused.

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 the 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 installation status, as follows.

of the form “apt:package-name”
  • If the package is known and currently installed, the “Installed Software” item screen for the package.

  • If the package is known and not currently installed (even if it is currently being installed), the “All 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, with the path button “All Software” > “{package name}”. 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.

of the form “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 screen for the package. Otherwise, the “All 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.”

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

of the form “apt:package1,package2,…”

of the form “apt:package-name?section=multiverse”
  • If the package is known and currently installed, the “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 “All 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.

    • If/when the section is enabled, the “All Software” item screen for the package.

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

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.

Replacing apturl

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

from a .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

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.

For the navigation pane, the screen should be located in the “Other” child of “All Software” (though “All Software” will not necessarily be expanded to show this). The pathbutton should have two elements, “All Software” and the package name.

This software item screen should differ from the standard one in these ways:

  • 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 Ubuntu Software Center 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 “Use Newer Version” button should navigate to the software item screen for the newer version.

Once this feature is implemented, software-center should be marked as Provides: gdebi and Replaces: gdebi.

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. 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 other choices.

    2. The current individual software source, whenever you are looking at one.
    3. Installed software, defaulting to “All Installed” (appearing as “Installed” in the navigation bar), with a menubutton for other choices.

    4. The current individual software source, whenever you are looking at one.
    5. History

    6. (“Popular”, “Updates”, and/or “Account” sections may be added later.)
    7. Progress”, appearing only when tasks are in progress.

  3. The search field, visible whenever you are not at a software item screen.

Whenever USC navigates from one screen to another, whether directly (with mouse or keyboard) or indirectly, it should:

  1. immediately highlight the appropriate row in the navigation pane, if it has changed;
  2. begin displaying the corresponding screen in the main pane;
  3. if the corresponding screen has not displayed within 1 second, display a blank screen with a horizontally and vertically centered spinner, until the screen is available.

    Test case: On a slow computer, choose “View” > “All Software”, then “Provided by Ubuntu” on a slow computer. The spinner screen should appear until the full list is available.

Section navigation

The section navigation commands — “All Software”, “Installed”, and so on — should always navigate to the top level of that section. (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 Sources, 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 Sources, remove the PPA. Forward should no longer be available.
    4. In Software Sources, 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”

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 categories, subcategories, search results, and individual software items.

In the navigation bar, “All Software” should be represented by the USC icon itself. It may have an emblem overlaid for a broken software catalog.

Whenever you are in the “All Software” section, the “View” > “Software Maintained by Anyone” and “View” > “Software Maintained by Canonical” 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 “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 by being in a 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 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 remove the selected item.

Home screen

home.png

The home screen should contain of as many of these elements as have been implemented so far:

In future, “Top Rated” and “Most Popular” might be moved to a separate screen.

The padding between the edges of the home screen and its contents should be 1 em, both horizontally and vertically.

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

The “Categories” section of the home screen should list alphabetically all categories, as defined and sorted under “Genre”, which contain any items matching the current repositories and view options. The list should be presented in as many columns as fit in the window width.

The “Featured” and “What’s New” sections should have headers the same as the “Categories” section, except that the trailing end of the header should have an unobtrusive “All” link (with accessible labels “All featured items” and “All new items” respectively), and an icon-only Pause/Play button (with accessible label “Pause” or “Play” as appropriate). Both sections should display, as large icons with text below, as many items from those selections as fit in one row in the section width. The bottom of each section should have a row of paging dots, indicating how many sets of items there are, and which are currently being shown.

The “What’s New” collection should consist of the newest 20 items published in any of your software channels, excluding items that you have already installed.

When Ubuntu Software Center displays the home screen for the first time after launching, it should display a randomly chosen set of items from the “Featured” section (because they don’t change as long as this OS version is installed), and the first set of items from the “What’s New” section (because they do change). Each set of items should be displayed for ten seconds (including one second fading in at the beginning, and one second fading out at the end), except for the first set of “What’s New” items, which should be displayed for 15 seconds (so that the transitions of the two sections are staggered by default). Activating a paging dot should switch to that set of items immediately. Activating a section’s Pause button should pause its transitions. Activating its “All” link should navigate to the “Featured” or “What’s New” screen respectively.

Whenever Ubuntu Software Center is not displaying the home screen, it should temporarily pause the transitions, so that the same items are displayed when you return to the screen as when you left it.

Software list view in “All Software”

When (and only when) a row is selected, it should expand to reveal “More Info” and “Install” buttons.

The “More Info” button should have Enter as its access key. Activating it should navigate to 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 install the item.

When an item is being installed, being removed, or 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 summary.

“Featured” screen

The “Featured” screen should list alphabetically all items in the Featured collection (where?), as a software list view.

Whenever the “Featured” screen is being displayed:

  • The path button should consist of the “All Software” element and a “Featured” element.

  • The status bar text should be of the form “19 items”.

“What’s New” screen

The “What’s New” screen should list alphabetically, as a software list view, up to the 20 most recent applications that appeared in any of your software sources less than 90 days before the computer’s software catalog was last updated. (For this purpose, an “application” is any package containing a .desktop file.)

Whenever the “What’s New” screen is being displayed:

  • The path button should consist of the “All Software” element and a “What’s New” element.

  • The status bar should have no text.

Category screen

If a category does not have any subcategories that contain any items matching the current repositories and view options, the category screen should be an alphabetically sorted software list view of the software items in that category. If the category is not set to “Show non-applications by default”, non-application items should be hidden by default.

If the category does have any subcategories that contain any items matching the current repositories and view options, the category screen should instead be a screen similar to the home screen, with one section having the same name as the category (e.g. “Games”), containing square-proportion buttons to present alphabetically the relevant subcategories.

Either way, whenever a category screen is being displayed:

  • The path button should consist of the “All Software” segment and a segment with the name of the category.

  • The status bar text should be of the form “19 items available”, counting all the items in that category, including all subcategories.

In the list of subcategories, the last item should always be a pseudo-subcategory with a name of the form “All 175”. Activating this item should navigate to a separate screen showing all items in the category alphabetically in a software list view. When this screen is displayed, the pathbutton should have an extra “All” element. The status bar text should be the same as for the main category screen.

Subcategory screen

A subcategory screen should be an alphabetically sorted software list view of the software items in that subcategory. If the subcategory is not set to “Show non-applications by default”, non-application items should be hidden by default.

Whenever a subcategory screen is being displayed:

  • The path button should contain three segments — “All Software”, the category, and the subcategory.

  • The status bar text should be of the form “17 items available”, counting all the items in that subcategory.

Searching in “All Software”

When in the home screen, or in the screen for a category or subcategory, the location bar should contain a search field that searches within that scope. This should follow 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 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 the main pane should temporarily be replaced by a software list view of search results. If in a category or subcategory, the results should be limited in scope to that category or subcategory.

  • The status bar text should be of the form “No matching items” or “37 matching items”.

Test case: (sc-010) 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.

When searching from the home screen, a non-application item should be hidden by default if its primary subcategory (or, if it has no subcategory, its primary category) does not “Show non-application packages by default”.

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

  • When searching from a subcategory screen, a non-application item should be hidden by default if that subcategory 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: (sc-011) From the home screen, search for “drawing ” (with a trailing space). Then search for “drawing program”. The Center should return exactly the same results for both searches, though possibly in a different order.

Testers

You can help us improve the search function by testing it in successive versions.

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

Software item screen in “All Software”

Whenever a software item screen is being displayed in the “All Software” section:

  • If the item was navigated to via a category/subcategory, the path button should consist of elements for “All Software”, then that category, then the subcategory if any, then the title of the item.

  • In any other case (for example, if the item is accessed from a search), the path button should consist of elements for “All Software”, then the primary category to which the item belongs, then the primary subcategory if any, then the title of the item.
  • The location bar should not contain a search field.

  • If the relevant package is not maintained by Canonical and you then choose “View” > “Canonical-Maintained Software”, USC should automatically navigate up to the subcategory screen; or, if the entire subcategory contains no Canonical-maintained items, up to the category screen; or, if the entire category contains no Canonical-maintained items, up to the home screen).

Common interface components

_File
=====
  _Install
  _Remove
---------------------------------
  Reinstall _Previous Purchases…
  _Deauthorize Computer…
---------------------------------
  _Close    Ctrl W

“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 advanced package operations.

_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 Sources…

“Software Sources…” should open the Software Sources 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 insensitive by default; their availability and behavior is defined elsewhere in this specification.

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

The “Go Back” and “Go Forward” items should represent the Back and Forward actions.

_View
=====
* Software Maintained by Anyone
  Software Maintained by Canonical

The “Software Maintained by Anyone” and “Software Maintained by Canonical” software items should be insensitive by default; their availability and behavior is defined elsewhere in this specification.

Test case: (sc-003) Start installing something in the Center. While it 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).

_Help
=====
  Ubuntu Software Center _Help…
--------------------------------
  _About This Version

By default, “Ubuntu Software Center Help…” should open the help viewer to the front page of the help.

“About This Version” should open the About window, or focus it if it is already open.

Location bar

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. 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.

Path button

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.

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

Search field

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 category in the home screen, or the first result in any list of search results.

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

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: (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.

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.

Software icon view

A software icon view is used mainly to present software items, and currently also to display the list of categories in the “All Software” section.

Each item in an icon view features the software item’s icon and its title. 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.

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).

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.

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

Software list view

A software list view is used in several screens in the Center. 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.

Various extra elements are added to the software list view in the “All Software” section, in the “Installed Software” section, and in the “In Progress” section.

In any software list view, as with the 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 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: (sc-005) Navigate to “All Software” > “Fonts”. Select “A Lee’s free Hangul TrueType fonts (ttf-alee)”. 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. Press Tab again; the selected item in the navigation pane should be focused.

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

Categorized list view screen

A categorized list view screen should use a software list view, with the addition that all its software items should be child items of parent items for the category (but not the subcategory) that they belong to. Only categories that actually contain items should be shown. The expanded or collapsed state of every category, for every categorized list view screen, should be remembered between sessions until that category stops existing in that list view.

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

Searching from a categorized list view screen should not cause any categories to expand of their own accord. However, categories 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.

Software item screen

In both the “All Software” and “Installed Software” sections, a software item screen should show information about an item, and let you install or remove it or change any 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 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 remove the selected item.

  • Whenever text is selected in the screen, the copy action (“Edit” > “Copy” and Ctrl C) should be sensitive. Choosing it should copy the selected text to the clipboard.

  • “Edit” > “Copy Web Link” should be sensitive. Choosing it should copy a Web link for the relevant package.

  • The status bar should contain no text.

The stars and reference to reviews shown here should not be present until reviews are implemented.

software-item-screens.jpg

A software item screen should contain:

  • The icon for the item.

  • The title of the item.

  • The summary of the item.

  • An installation state bar.

  • A thumbnail of the screenshot of the item from screenshots.ubuntu.com, if there is one, or otherwise the centered greyed-out text “No screenshot available”. If you activate the thumbnail (by clicking it, or pressing Enter when it is focused), a small determinate progress meter should appear centered on the thumbnail, showing download progress for the full-size screenshot, followed by a spinner for two seconds while the screenshot opens in your preferred image viewer.
    software-item-screen-screenshot-progress.jpg

  • 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.’, and a “Use This Source” button that adds the source and then updates the screen.

    • 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.”, and an “Update Now” button.

    • 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 section.

  • Text describing the “Total size:” of the item:
    • if it is not 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 installed, and you have not specified any changes to add-ons, “{Y} on disk”
    • if it is already installed, and you have specified changes to add-ons, “{X} to download, {Y} on disk”.

  • Text of the form “Version: {package name} {version number}”.
  • The text “License:” followed by its license label.

  • The text “Updates:” followed by the maintenance status for the item.

The installation state bar contents should depend on the item’s exact state.

  • If the item is not installed nor queued for installation, the price of the item (e.g. “Free”) at the leading end (except for Ubuntu Software Center itself, which should say “Removed (close it and it’ll be gone)”), and an “Install” button at the trailing end.

  • If the item is installed and not queued for removal, the installed icon 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

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

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 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.

Main pane

Whenever the main pane contains a location bar with 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 the navigation pane

“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.

The “Installed Software” section should have its own home screen, and screens for individual software items. It should not include screens for each category or subcategory.

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 containing a path button.

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

The top level of the “Installed Software” section should show a 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”.

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.

The “More Info” button should have Enter as its access key. Activating it should navigate to 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 remove the software item.

As with the “All 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).

Software item screen in “Installed Software” section

Whenever a software item screen is being displayed in the “Installed Software” section:

  • The path button should consist of elements for “Installed Software”, then the title of the package. (There should not be elements for categories or subcategories.)

  • The location bar should not contain a search field.

  • “File” > “Remove” should be sensitive. Selecting it should remove the selected package.

  • “Edit” > “Copy Web Link” should be sensitive. Choosing it should 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.

Individual software sources

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:

navigation-pane-get-software.jpg

  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”.
  2. Next should be any sources represented by an X-AppInstall-Channel attribute in app-install-data, sorted 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.

  3. Next should be the collection of purchasable items, with money as its icon, and the label “For Purchase”.
  4. Next should be the Independent repository for the current Ubuntu version, with (what?) as its icon, and the label “Independent”.

  5. Next should be any PPAs (not including those for purchased items), sorted 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.

  6. Next should be any other network sources, sorted 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.)

  7. 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.

  8. 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 of all the items in that source. Whenever this screen is being displayed, the status bar text should be of the form “141 items” (as appropriate for the number of items in that source). In the “Provided by Ubuntu” screens, non-application packages should be hidden by default.

Test case: (sc-013)

  1. With “Get Software” collapsed and “Installed Software” expanded, close the Ubuntu Software Center and reopen it. The state should be remembered.
  2. 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.
  3. Install a package from that PPA. When it finishes installing, the PPA should appear immediately as a child item of “Installed Software” too.
  4. 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.
  5. 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: (sc-014)

  1. Download and install the Google voice and video plug-in.

  2. Expand USC’s “Installed Software” section. It should have an “Other” child item that contains the “Google Talk Plugin”.
  3. Expand the “Get Software” section. It should not have an “Other” child item.

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 a single-segment 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 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.

History section

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

Below the navigation bar, a filter bar should have items for “All Changes”, “All Installations”, “Purchases”, and “Removals”. (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.

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} 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.

“In Progress” section


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 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 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).

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.
  2. The Center should switch to displaying the “In Progress” section.
  3. When installation is completed or cancelled, the Center should close.

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

For any software item (a package, or an application with a .desktop file inside a package), USC presents information 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.

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.

Title

The title should be the application Name, if there is one; otherwise the package synopsis (the first line of 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 disambiguating account names in Ubuntu’s session menu.) Test case: (sc-015) Search for the “backintime-gnome” package. The item should have the title “Back In Time (backintime-gnome)”.

Short name

The short name should be the application Name, if there is one; otherwise the package name. (This is for use in more technical contexts than the Title; for example, in the History section.)

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

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 subcategorys, 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

-

-

Education

Education

-

-

Fonts

-

-

(t,o)tf-*

yes

Games

Game, Sports

-

-

- Board Games

BoardGame

-

-

- Card Games

CardGame

-

-

- Puzzles

LogicGame

-

-

- Role-Playing

RolePlaying

-

-

- 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

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

For 3.0, we will be refining this new classification scheme for the Center. For example, what subcategories could the “Games” category have? And how could the items in the “Internet” menu be redistributed? Tell us your ideas on the Classification page. Thanks!

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:.

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 DEP-5 implemented.

Custom package lists

For ease of sharing lists of software, and as a first step towards replacing apturl, the Center 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 last element in the path button should be “Custom List” rather than “Search Results” (though it should otherwise behave the same as a “Search Results” element).

  • The rest of the main pane should display a “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.

  • 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 install all those items.

  • The 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: (sc-016) On a machine that has Gobby and Orca installed but neither 9base nor abcde, with “View” > “All Software” selected:

  1. Navigate to the home screen and enter “gobby,gnome-orca” (without quotes) in the search field. The path button should show “All Software” > “Custom List”, the rest of the main pane should list “Gobby” and “Orca”, and the status bar should say “2 items”.

  2. Add “,9base” to the search text (“gobby,gnome-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”.
  3. Add a comma to the end of the string (“gobby,gnome-orca,9base,”). Nothing should change.
  4. Add the letters “abcd” to the end of the string (“gobby,gnome-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”.

  5. Finally, add the letter “e” to the search string (“gobby,gnome-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 individual software sources.

Handling a broken apt cache

Whenever USC detects that the apt cache of packages is currently broken and is not currently being rebuilt:

  • The “Installed Software” item in the navigation pane should have a Warning /!\ icon at its trailing end, producing the pointing-hand cursor when moused over. When “Installed Software” is selected and focused, the Warning /!\ icon should be next in the keyboard navigation cycle, and have an accessible label and a tooltip that both say “The software catalog needs rebuilding.”.

    catalog-broken-navigation-pane.jpg

    When the icon is activated, it should open a PolicyKit authentication alert with the primary text “The software catalog needs rebuilding. Once you authenticate, it will rebuild automatically.”.

  • Choosing “Install” or “Remove” for any item should automatically queue a rebuild task ahead of the installation or removal.

In “In Progress”, a software catalog rebuild task should have the Ubuntu Software Center icon as its icon, and the primary text “Rebuilding software catalog”. Unlike other tasks, it should not be possible to reorder it.

Test case: (sc-017)

  1. Break the cache using the command: apt-get install 4g8 && dpkg --force-depends -r libnet1

  2. Navigate to a different category or subcategory. The Warning /!\ icon should appear next to “Installed Software”.

  3. Select “Installed Software”, press Tab, then press Space. The custom PolicyKit alert should appear.

  4. Cancel the alert. The Warning /!\ icon should persist.

  5. Start installing something. The Warning /!\ icon should disappear.

  6. Switch to “In Progress”. The “Rebuilding software catalog” task should be underway.
  7. Once the test is complete, reset with apt-get remove 4g8 libnet1

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).

Installing software

When you request to install a software item:

  1. The “Install” button should be made insensitive for that item, and remain insensitive until the installation has been completed or cancelled.
  2. The Center should handle a broken apt cache if necessary.

  3. If the relevant package cannot be installed, an error alert should appear: transaction-error-uninstallable.jpg
    The alert should have the primary text “Sorry, {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.

  4. If necessary, a PolicyKit alert (with the USC window as its parent) should appear to enter authentication details.

  5. The Center should begin blocking session exit.
  6. 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”.
  7. While the download is taking place, the status text should be set to “Downloaded {X} of {Y}”.

  8. While the installation script is running, the status text for the item should be set to the normal text issued by dpkg.

  9. 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…”

  10. When installation completes, the Center should stop blocking session exit.
  11. The “installed” emblem should be applied to the item icon, and the status text should be set to “Installation complete”.
  12. Five seconds later, the item should disappear from the “In 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

When you request to remove a software item:

  1. The “Remove” button should be made insensitive for that item, and remain insensitive until the removal has been completed or cancelled.
  2. The Center should handle a broken apt cache if necessary.

  3. If the relevant package is part of the ubuntu-desktop metapackage, the Center should put up a confirmation alert: “{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.

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

  5. 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 alert: “To remove {title}, these items must be removed as well:” — with any affected applications, followed by any other affected packages, listed alphabetically in an inset 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.

  6. The Center should, if necessary, ask for authentication details in a PolicyKit alert with the USC window as its parent.

  7. The Center should begin blocking session exit.
  8. 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”.
  9. 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…”

  10. When removal completes, the Center should stop blocking session exit.

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…

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 “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.

Commercial software

(This section covers the small subset of commercial use cases that involve Ubuntu Software Center specifically and are scheduled for 3.0.)

Human participants: Ubuntu user, software vendor Software participants: Ubuntu Software Center, Ubuntu Single Sign-On, Launchpad, billing system

Use case

Maverick alpha 2

Maverick alpha 3

10.10 beta

10.10 post-release

11.04

- finds system requirements for software

- sees up-to-date price for software

Ubuntu user buys software

data transfer

user interface

yes

Ubuntu user who has purchased software reinstalls Ubuntu

-

yes

Buying 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. buy-connecting.jpg
    Otherwise, USC should navigate to a new screen, with its own “Buy” pathbutton element, that is blank initially except for a spinner and the text “Connecting to payment service…”.

  4. buy-screen.jpg
    Once it has loaded completely, the main pane should display the Canonical Payment Service screen for buying the item.

  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.

Maybe we should show a clickable padlock somewhere for reassurance.

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.

Choosing “Reinstall” should install the item without any further interaction.

previous-purchases-menu.jpg

To make it easier to find previous purchases, the “File” menu should contain a “Reinstall Previous Purchases…” item.

previous-purchases-authorize.jpg

If you are not already signed in, activating the item should open a sign-on dialog that allows only sign-on, not registration, with primary text “To reinstall previous purchases, sign in to the Ubuntu Single Sign-On account you used to pay for them.”.

previous-purchases-screen.jpg

Once you are successfully signed in, USC should navigate to an “All Software” > “Previous Purchases” screen, listing purchased items most recent first. Whenever this screen is displayed, the top-level “All Software” item should be selected in the navigation pane (as it is when viewing a category screen, for example). In addition to the “Reinstall” command for each individual item, the screen should have an action bar containing a “Reinstall All” button.

Ratings and reviews

For the spec see SoftwareCenter/RatingsAndReviews.

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

Comparing software across computers

Implemented as an optional extension: see OneConf.

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-maintained” — what’s that?
  • What if a program I want isn’t in the Center?
  • Using software from multiple sources
  • What if a program doesn’t work?

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.

Changes scheduled for 4.0

Learning how to launch an application

When you request to install a software item, if the item is a graphically launchable application and Unity is running, at the same moment that the item is shown in the “In Progress” section, a panel should slide up from the bottom of the main pane.

If you choose “Not Now”, the prompt should slide back out.

If you choose “Add to Launcher”, then:

  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.
  3. If the Launcher was in auto-hide mode, it should then hide again.
  4. 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.
  5. While the item is installing, the Launcher should show installation progress by proportionally filling the icon with color. Trying to launch the item should still do nothing.
  6. When installation is complete, the launcher item should flash and become usable.

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.

Future work: Test whether this is obvious enough. If not, maybe make the hoisting automatic, with a “New Applications in Launcher” menu item for toggling the behavior.

For alternative designs that were considered, see /LaunchingApplications.

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 sensitive 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.

Popularity

Dragging installed applications from USC to a launcher

Features you can implement

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 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.)

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?”.

Can we vary the “a lot” wording sensibly?

“Top Rated” overall

An item’s Expected Lowest Rating (ELR) should be the sum, for each possible number of stars (1, 2, 3, 4, and 5), of that number of stars 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.

  • Calculate the expected lowest rating for an item that has two 5-star ratings and no other ratings. Then calculate the lowest expected rating for an item that has two 5-star ratings and one 2-star rating. Both answers should be less than 5, with the first answer being greater than the second.

The home screen should include a “Top Rated” section that lists, in descending order of ELR, the 12 items with the highest ELR. Where the “Featured” and “What’s New” sections have “All” links, the “Top Rated” section should instead have a “More” link that navigates to a separate “Top Rated” screen. This screen should list, in descending order of ELA, the 100 items with the highest ELR. (As usual, the number of stars shown for each item should represent the median rating, not the ELR itself.)

“Top Rated” in each category

Whenever a category screen does not consist of just a listing, it should contain a “Top Rated” section that lists, in descending order of expected lowest rating, the 12 items in that category with the highest ELR.

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 intelligently?

More helpful search screen for no results

When searching anywhere in “All Software”, if there are zero 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 are any matches in the parent category.]

    • Try the 1 item that matches in software not maintained by Canonical.

      • [Present only if you’re viewing “Canonical-Maintained 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.

(The names of categories and subcategories should be greyer, so that they do not look ugly like they do here.)

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 sensitive. 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.

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, 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.

Maybe a “Pause” button would be even more useful in this bar.

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”.

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 sensitive. Choosing it should copy a Web link for the selected package.

“Where Is It?” button

GTK/Clutter hackers

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 sensitive 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

http://brainstorm.ubuntu.com/idea/24963/

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

Activating the command should remove the package and its settings (equivalent to apt-get purge). 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 settings

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

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 Settings” screen. This screen should be a software list view of all packages that have been removed from your computer but that have left behind configuration files. It should be different from a normal software list view in that:

  • At the trailing end of each row (where the rating stars would otherwise be) should be the size of the settings files, e.g. “11 KB”.

  • The secondary text for each item should be the date on which the package was removed.
  • When an item is selected, at its trailing end should be a button labelled “Remove Settings”, and “File” > “Remove Including Settings” should temporarily also become “Remove Settings”.

Activating the “Remove Settings” command should remove the package’s settings. The progress feedback should be the same as for removal, using the same PolicyKit privilege, but with “Removing settings…” as the text in the installation state bar.

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. Activating the “Remove 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 Settings” command too.

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 insensitive text color.
  • At the trailing end of the first line should be the time at which the action occurred, again in the insensitive 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 insensitive 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 insensitive text color.

To do: Work out a sensible way for the “Reinstall Previous Purchases” screen to coexist with the “Purchases” history.

Animation of the main pane

GTK/Clutter hackers

Whenever you navigate from within the home screen to a category screen, over 0.5 seconds the left and right halves of the home 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 category screen underneath.

lobby-animation.jpg

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

GTK/Clutter hackers

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” branch of the navigation pane should have a “Windows Software” child item. This should be the last child 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.

Grid view

The “View” menu should contain two radio items, “as Icons” and “as List”. These items should be sensitive only when USC is displaying the applications in a subcategory (or in a category that has no subcategories). The selection should persist across categories and between USC sessions. When “as Icons“ is selected, the applications should be shown as a grid of large icons with titles underneath them.

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.

# Ubuntu user finds system requirements for software

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 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.

Subcategories

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 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.

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]

  • DONE: 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".

  • Idea #19882: Problem With Restricted Software Installation Warning

  • Idea #17929: Its hard to know what are you installing

  • Idea #14025: Better distinction between installed/uninstalled apps in Add/Remove Applications

  • 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]
  • Ubuntu Brainstorm: Most popular ideas for Add/Remove

  • 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” 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 FLOSS Weekly 86 - Ardour). 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:

    • category 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. 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

October 2009

In Ubuntu 9.10, we 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.

April 2010

In Ubuntu 10.04 LTS, we shipped 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.

October 2010

In Ubuntu 10.10, we shipped Ubuntu Software Center 3.0.4. This version:

  • Let people buy software 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.

April 2011

In Ubuntu 11.04, we shipped Ubuntu Software Center 4.0, with ratings and reviews for software and many performance improvements.

October 2011

In Ubuntu 11.10, we plan to ship Ubuntu Software Center 5.0, with a new layout and new ways of featuring interesting software.

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

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 the Center 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)