InstallingAnApp

../../Personas/Mike learns about a new app, and wants to install it.

Primary story

  1. ../../Personas/Mike opens the Dash to search, and enters the first part of the app's name, "foo". The Dash is already showing a list of results, which includes the app that ../../Personas/Mike is looking for.

    • The Dash queries the package index using ../../Interfaces/ClickPackageIndex. Query results include URLs for icons, but icons are fetched separately.

      • Are package descriptions actually needed in these results?

  2. ../../Personas/Mike taps the app to preview it, displaying a larger preview, some descriptive text, and installation size.

    • The Dash fetches package details using ../../Interfaces/ClickPackageIndex, which inludes the sames information as query results.

    • Ratings and reviews are fetched from using ../../Interfaces/RatingsAndReviews

    • The graphical installer will query the Click packaging system to determine disk space cost of installing a new application or version. For instance, if it's just an upgrade on a single user system space used would be: sizeof(new) - sizeof(old). But if there is another user that has the same version it is: sizeof(new). If it's upgrading to a version already installed by another user and this user is the last user for the selected version it is: -1 * sizeof(old).
  3. Seeing that it is well-rated, free, and not too big, ../../Personas/Mike taps the Install button.

    • The Dash gives the package name to the package downloader (how?).

  4. While the app is downloaded and installed to the device, the screen updates to show progress, then finally an Open button.
    • The downloader fetches the package in the background and then installs it.
    • Upon installation of the package there will be a set of hooks run. There are two types of hooks, system hooks and user hooks. An example of a system hook would be one that builds the apparmor profile and installs it. An example of a user hook would be one that takes the desktop file template and puts it in ~/.local/share/applications with paths that can be resolved to the user selected installed version of the app.
    • When the security hook runs it will create an AppArmor profile according to ../../Interfaces/AppArmorProfile

    • The Dash monitors download and installation progress how?

  5. ../../Personas/Mike is not asked to grant permissions to the app at this time.

Instead of searching in the Dash, Mike sees an interesting app recommended to him in the App Lense.

Variation: Paid app

The app costs money, but the amount is reasonable. ../../Personas/Mike taps the Install button, and then what?

Variation: Double-tap from results, free app

The screen updates to show progress and completion, but no open button in the current view.

Variation: Double-tap from results, paid app

What happens?

Variation: 3rd-party app

../../Personas/Mike downloads or copies a click-package to his device, and then....

Variation: App with multiple launchers

Variation: A user installs an app already installed by another user

During installation, only the user-hooks are run, in the context of the new user; the system-hooks are not run.

Variation: A user install a paid app already installed by another user

The new user is billed the sames as if the app were not installed (i.e. apps are billed per-user).

Variation: Not enough space to install

AppStore/Stories/InstallingAnApp (last edited 2013-07-24 13:53:45 by dsowen)