Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Description: Patron borrows an audio book

Actor: Patron

Preconditions: Patron logs in with an active library account and navigates to an audio book they have not yet borrowed

Postconditions: Patron successfully borrows audio book

Main Flow

Step
Actor
Action
Result
iOS Design
Android Design
Alternate Flow
1patronBrowses or searches for an audio book

Audio books display in search results with:

  • 'Get' button if available for download
  • 'Reserve' button if not available for immediate download
   
2patronclicks 'Get'
  • System checks out book
  • System displays:
    • 'Listen' button
    • Number of days left displays
    • If user clicks 'Get' from detail view, then 'Return Now' button appears in UI

(From a User perspective flow should be identical to borrowing ebooks.)

  

If wifi drops, show inactive/loading version of the listen button.

Supporting the web app is out of scope for the October release, but for a later release: need to implement an alternate flow for the web app. so that it displays a message to go to SimplyE to listen. This would be the same downloading most ebooks. Need a design.

3patronviews 'my books' page after borrowing an audio book

Borrowed audiobooks display:

  • cover image
  • title
  • audio badge/icon
  • 'Listen' button
  • number of days left

Question for UX: does this page display like the "All" tab with both ebooks and audiobooks shown and icons indicating content type? or is there a tabbed interface in my books?

   

2b. Patron views detail page for an audiobook  


Description: Patron views details page for an audiobook

Actor: Patron

Preconditions: Patron logs in with an active library account and navigates to an audio book details page

Postconditions: Details page displays

Main Flow

Step
Actor
Action
Result
iOS Design
Android Design
Alternate Flow
1patronclicks on a title that has NOT been borrowed or reserved

System displays details page for an audiobook:

  • cover image
  • title
  • audio badge/icon
  • 'Get' OR 'Reserve' button
  • Message shows: "This book is available to borrow." (with Get button) OR "All licenses of this book are currently checked out." (with Reserve button)
  • Description
  • Information about audiobook including:
    • Published: (date)
    • Publisher: (name of publisher)
    • Category: (mystery, horror, romance, etc...)
    • Distributed by: (distributor)
    • Narrated by: (name of narrator, if available)
  • Recommended audiobooks (Feed does not display unless one or more audiobooks are found)
    • Books by the same author
    • Recommended
   
1patronclicks on the title to view 'Details' page for an audiobook that IS borrowed OR reserved

System displays details page for a borrowed audiobook:

  • cover image
  • title
  • audio badge/icon
  • 'Listen' button (if borrowed) 'Remove' button (if reserved)
  • Message shows: number of days left (if borrowed) OR 'Available for checkout in less than 5 weeks. #__ in line for __ copies." (if reserved)
  • Description
  • Information about audiobook including:
    • Published: (date)
    • Publisher: (name of publisher)
    • Category: (mystery, horror, romance, etc...)
    • Distributed by: (distributor)
    • Narrated by: (name of narrator, if available)
  • Recommended audiobooks (Feed does not display unless one or more audiobooks are found)
    • Books by the same author
    • Recommended
 

*What happens if the connection is lost? or if the download is lost?

Jack will give us a download state on the player view.

 

2c. Patron reserves an audio book in SimplyE  


Description: Patron reserves an audio book

Actor: Patron

Preconditions: Patron logs in with an active library account and navigates to an audio book that is not available for borrowing, but is available to be reserved.

Postconditions: Patron successfully reserves audio book and views reservation in "Reservations" 

Main Flow

Step
Actor
Action
Result
iOS Design
Android Design
Alternate Flow
1patronviews an audio book that is available to be reserved

Audio books displays with

  • 'Reserve' button active
   
2patronclicks 'Reserve'

System reserves book

System displays 'Remove' button

   
3patronviews 'Reservations' page after reserving an audio book

Reserved audio books display:

  • cover image
  • title
  • audio badge/icon
  • 'Remove' button
   

 

3. Patron listens to an audio book in SimplyE

Description: Patron listens to the audio book they have borrowed

Actor: Patron

Preconditions: Patron has borrowed an audio book

Postconditions: audio book plays on patron's device

Main Flow

Step
Actor
Action
Result
iOS Design
Android Design
Alternate Flow
1patrontaps 'Listen'

System displays audio player with:

  • Top or bottom nav with icons for: TOC, speed, sleep
  • Title and cover image
  • Scrubber bar showing progress through book
  • Play button

Note: user must tap the play button to begin playing book. UX feedback is that the book should not begin playing automatically.

Might want to use the same styling for the progress bar for both e-books and audio books.

  
2patrontaps 'Play' button

System plays audio book

System displays:

  • 'Pause' button replaces 'Play' button
  • Scrubber bar moves as book plays
   
3patrondrags scrubber barThe audio plays accordingly and the playhead displays the location appropriately   
4patrontaps 'pause'
  • System stops playing audiobook
  • Scrubber bar becomes inactive (is this right? or can you drag the scrubber to start the audiobook playing again?)
  • 'Play' button replaces 'Pause'
   
5patronnavigates away from the player

when patron gets a phone call, or starts using another app, behavior should be as it is for any app, but need to describe it here.
Question: does it pause for all apps or does it let you listen while you are doing other things. How are we controlling this?

When audio is playing and user navigates away from the player to another page within the app, a mini player can be shown so that user can continue listening while browsing another content. (UI TBD)

  

 

  skips forward or backwardQuestion: A skip feature is described in the acceptance criteria, but is not shown in the designs. Is this a feature that we will offer?   


4. Patron adjusts settings on audio books in SimplyE


Description: Patron adjusts the settings on an audio book

Actor: Patron

Preconditions: Patron has borrowed an audio book

Postconditions: Settings for speed, sleep, device are adjusted

Main Flow

*These are placeholder designs. The player functionality in the app will determine UI.

Step
Actor
Action
Result
iOS Design
Android Design
Alternate Flow
2patrontaps 'Listen' for an audio book they have borrowed

System displays audio player with:

  • icons for: TOC, speed, and sleep settings
  • Title and cover image
  • Scrubber bar showing progress through book
  • Play button
 
3patrontaps speed setting icon

System displays:

  • speed icon in selected state
  • menu with speed-of-play options
  • UI indicates currently-selected setting

Note: UI will be as per iOS and Android players

  
4patronselects different speed setting
  • System recognizes new setting
  • Menu disappears, and player is displayed
  • New selection displays in UI
   
5patrontaps Table of Contents icon

System displays:

  • Header: Table of Contents
  • menu showing title of chapter, section, or sub-section
    • if chapter has finished downloading, length of track displays
    • if chapter is still downloading, progress wheel displays
  • UI indicates track/chapter that is currently selected or playing

Note: Chapters still downloading can't be selected

 

  
6patronselects a different chapter/track from the TOC menu
  • System recognizes new selection
  • Menu disappears, and player is displayed
  • Scrubber for new chapter displays
  • Selection begins playing

Question: should the chapter begin playing as soon as it is selected or does the listener have to click the "play" button?

   
7patrontaps 'Sleep' icon

System displays:

  • sleep icon in selected state
  • menu with sleep timer options
  • UI indicates currently-selected setting

Note: UI will be as per iOS and Android players

Out of scope for initial release: Would be nice to be able to turn off the timer if user changes their mind (or can't go to sleep and wants to listen longer)

Out of scope for initial release: Would be nice to display the sleep timer on the UI when it is active.

  
8patronselects different sleep setting
  • System recognizes new setting
  • Menu disappears, and player is displayed
  • New selection displays in UI
   
9patronlistens until sleep timer goes off
  • System recognizes that sleep timer has gone off
  • System puts the device into a "sleep" state:
    • Player stops
    • Player is grayed out
    • Sleep icon displays 'sleeping' state
  • Note: A true "sleep state" is probably not what's desired.
    This basically turns the phone off, which most people don't do overnight.
    Confirm with Greg or Winnie that this is how the feature should work.

 

 

 

USer 

Open Questions

1. If the user opens an audio book player, opens the table of contents, starts one or more parts downloading, closes the table of contents, closes the player... Are the parts still downloading? If the parts are downloading, this implies that there are one or more instances of the `AudioBookType` that is living somewhere globally in the app, independently of any particular activity, and that parts of the app can get references to them to control them.
2. If book parts are allowed to continue downloading in the background, how is error reporting actually implemented? Do we just pop up a dialog box anywhere the user happens to be, whenever a book part publishes an error event? That's awkward to implement on Android.
3. How do we implement tabs in the catalog? Last time i looked, the catalog was activity based instead of fragment based... How does this work with tabs?
4. The requirements talk about being able to "close" the player view and still have the book playing, possibly with a small player view that appears in the catalog. How can this be achieved? If the player instance (not the view) is instantiated in an activity (and the activity "owns" the player), then we lose the reference to that player instance when the activity is closed. References to players are not serializable and can't be passed between activities.
5. When the user borrows an audio book, it's necessary to fetch the book manifest so that an `AudioBookType` instance can be instantiated from it. When exactly is this manifest fetched? Manifests appear to be able to expire (Findaway books in particular have session IDs), so fetching them eagerly and saving them to disk might not be a good idea. Are manifests saved on disk?