Gaia/Email: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
No edit summary
Line 7: Line 7:
* [https://wiki.mozilla.org/images/5/5a/Mail-folders.pdf Email Application Accounts and Folders selection]
* [https://wiki.mozilla.org/images/5/5a/Mail-folders.pdf Email Application Accounts and Folders selection]
* [https://wiki.mozilla.org/images/a/a8/Mail-settings.pdf Email Application Setting]
* [https://wiki.mozilla.org/images/a/a8/Mail-settings.pdf Email Application Setting]
* [https://wiki.mozilla.org/images/e/ec/B2g-mail-DRAFTv3.pdf Email Application Wireframes and Flows v3 DRAFT]
* [https://wiki.mozilla.org/images/0/06/Mail-main.pdf Email Application]


==== Interaction ====
==== Interaction ====
Old:
Old:
* [https://wiki.mozilla.org/images/e/ec/B2g-mail-DRAFTv3.pdf Email Application Wireframes and Flows v3 DRAFT]
* [https://wiki.mozilla.org/images/c/ce/B2g-mail-DRAFTv2.pdf Email Application Wireframes and Flows v2 DRAFT]
* [https://wiki.mozilla.org/images/c/ce/B2g-mail-DRAFTv2.pdf Email Application Wireframes and Flows v2 DRAFT]
* [https://wiki.mozilla.org/images/f/f7/B2g-mail-DRAFTv1.pdf Email Application Wireframes v1 DRAFT]
* [https://wiki.mozilla.org/images/f/f7/B2g-mail-DRAFTv1.pdf Email Application Wireframes v1 DRAFT]
Line 16: Line 17:
==== Visual ====
==== Visual ====
* [https://www.dropbox.com/sh/2tmvc7qyxmxba07/otjHdKf0kM Dropbox]
* [https://www.dropbox.com/sh/2tmvc7qyxmxba07/otjHdKf0kM Dropbox]


== Use Cases ==
== Use Cases ==

Revision as of 06:11, 27 August 2012

Status & Team

See: Project tracking spreadsheet


Design Specs

Interaction

Old:

Visual

Use Cases

  • Tom sees email just as critical as his ability to make/receive phone calls and text messages
  • Tom is a Hotmail user (~40% share in Brazil) and often checks his email on his desktop computer, but wants to stay connect to his family/friends so an email client is very important to him
  • Tom has the ability to check if he received new messages
  • Tom wants to be able to compose a new email directly from the Email app or from other Core Apps like the Contacts app
  • Tom wants to be able to reply/replay all to messages as well as forward messages to his friends
  • Tom uses ActiveSync with his Hotmail service, and the setup was extremely easy because all he had to do was enter his Hotmail email address and password and the Email app did all the setup for him
  • Tom has the ability to mark messages as read/unread
  • With ActiveSync, Tom has access to all his folders and messages moved and deleted between folders are automatically synced regardless of what client he accesses his inbox from
  • Because Tom loves staying connected, he also has a 2nd email address that he has setup through his work - Tom's work supports Exchange and because the Email app also supports this protocol, by entering just his work email address and password, he is able to easily setup his account
  • Tom's Email app support multiple accounts and offers his a unified inbox view of all messages from all accounts

nb: The above example used to say IMAP, but hotmail doesn't support IMAP, just POP and ActiveSync. We are aiming for ActiveSync support.


Requirements

Gaia v1
  • The Email app here offers key functionality that users would expect from existing email apps in the smartphone market today
  • In the setup flow, the user has the ability to select from some of the largest global email providers/enterprise support:
    • Hotmail
    • Yahoo! Mail
    • Gmail (Google Mail)
    • Exchange (ActiveSync) support
  • The user is offered the ability to just enter their email address and password and the Email app should automatically configure their settings
    • The Email app should default to IMAP if the service supports it and POP3 as a back-up
    • For Exchange users, the Email app should automatically detect the incoming/outgoing server settings
  • The user has the ability to check their messages in their inbox and folders
    • We offer 4 intervals for pulling messages - 15 mins, 30 mins, 1 hr, 4 hrs
  • When composing messages, the user has the ability to compose directly from:
    • The Email app by auto-filtering names from the Contacts list or by manually entering in a name
    • Another Core App such as the Contacts app when selecting an email address (this is defined in the Contacts app requirements)
  • In the compose view, the user has the ability to compose to the :
    • 'To:' field
    • 'Cc:' field
    • 'Bcc:' field
  • The user has the ability to reply/reply all to messages:
    • Original format preserved with the reply text above the message body
  • The user has the ability to forward messages
    • Original format preserved with the forwarded text above the message body
  • The user has the ability to delete messages
  • The user has the ability to mark messages read/unread
  • The user has the ability to select multiple messages at one and perform the following actions:
    • Move messages to a specific folder
    • Delete messages
    • Mark messages read/unread
  • Email messages should appear in HTML and rich text if messages are sent in that format
    • Plain text messages should default to a core font that is available in Gaia
  • The user has the ability to pinch-to-zoom in on messages to improve readability
  • Message body initial download should be <250kb with the option to 'download the rest of the message'
  • Search
    • Filters (search by)
      • To
      • From
      • Subject
      • All
    • Search local folders
    • Extend search onto server (IMAP)


Gaia v2
  • The user has the option to push email messages to their email account
  • The user has the ability to select multiple messages and "forward as an attachment"
  • Selecting text, copy, paste support for email messages
  • The user has the ability attach photos from their Gallery app to draft email (new/reply/forward)
  • Settings
    • Search Sub-folders
    • Search Sent folders
    • Search Deleted
    • Search on server

Development


Dependencies

https://wiki.mozilla.org/Gaia/Email/ActiveSync


Milestones

An attempt to break the v1 functionality into smaller milestones:

UI Pages

What? Prototype / Stub? Final-ish?
Magic account autoconfig yes
Manual account config / autoconfig fallback
Settings Main Page yes
Settings Accounts List (add/change/remove) yes (add/remove), no (change)
Settings Signature Editor
Account List (for folder nav) yes
Folder List yes
Message List yes
Message Reader yes
Compose yes

Core Functionality

milestone details est. effort status
Network
Connection loss recovery We need tests for connection loss during various points and the logic that makes those tests pass. Sync, mutation (no mutations dispatched), mutation (mutations dispatched). 2 days
Adaptive sync improvements, no tests Be smarter about how many days we ask for at a time, don't try and look for messages before the internet was invented, etc. No automated tests for time reasons, but manual verification run and dogfooding will make failures obvious. 0.75 days done
Adaptive sync unit tests Unit tests for the prior deal. 1.25 days done w/tests
Optimize re-opening previously synced folders, tests Add heuristics to reduce the time re-opening a folder takes while also minimizing visual churn. 3 days done w/tests
External / Inter-app
Notifications Simple ones... 2 days
Composition via web activity mailto links and the like 2 days
Accounts
account probing Ability to test logins for IMAP and SMTP. done w/tests
account creation Create an account as part of the initial setup process. done, w/back-end tests
account persistence and loading (backend) If you shutdown and start back up again, do the accounts show up? This has overlap with message persistence. 1 day done w/tests
account maintenance - simple list/add/delete account definitions from the setup screen. UI and tests. 1 day done w/tests
bad password detection and UI detect when the server is angry because our password is now wrong, have the account stop bothering the server, prompt the user, update the account password, and re-establish/verify the connection 1 day done (no tests)
account maintenance - more Change display name, username, password, identity info. 1 day
periodic background sync cron-like initiation of sync 2 days
option: Hard-coded auto-config database Less work than Thunderbird's autoconfig database lookup. Just type in the popular options. This should be a fallback or stop-gap. 0.5 day
option: Full manual setup (provide username, hosts, ports, crypto) Part of Thunderbird's autoconfig process/fallback, let the user actually enter all the relevant details rather than trying to infer them. 0.5 day
Thunderbird-ish autoconfiguration Use Thunderbird's autoconfig database and MX lookup support to port (as much as possible) Thunderbird's autoconfig. 3 days
Folders
folder tree list - simple just Inbox / Sent for the accounts, no labels/data. done w/back-end tests
folder tree list - complex Need UX definition, but probably more hierarchical and with some message counts. UI and tests 2 days
Messages
core live query logic - IMAP no CONDSTORE no combined inbox, no persistence
  • issue time-bounded queries to get ranges of messages, and fill-in the key message attributes: sender, flags, attachment, first line of summary without quoting magic. text/plain bodies only.
  • viewslice-ish model anchored from 'NOW'
done w/back-end tests
cached/persisted/syncable query logic - IMAP stash our chunked results in the DB done w/back-end tests
on-demand syncing/scrolling: UI, back-end, tests Have scrolling or button pressing extend our time horizon when we haven't fully synchronized the folder. Unit tests are a lot of this. 3 days done w/tests
data eviction from cache: back-end, tests Mark data as discardable and discard it. UIprovided by settings. 1 day
message flag mutation (starred, read/unread), no offline persistence, no undo, no UI done w/back-end tests
message flag mutation w/persistence, offline persisted, undo, no UI, tests 2 days done
message flag mutation UI hookup single and batch mutations from the message list, single mutation from the reader. 1.5 days 90% (list single/multiple done, not message page (easy))
message moves (same account) and deletion: offline persisted, undo, no UI, tests move, delete (varying by server/account: gmail just wants delete/expunge to end up in all mail, everyone else probably wants a move to a trash folder) 1.5 days
message moves and deletion UI hookup Hook the move button up to the folder picker UI, and the deletion button to its logic. 1 day
message moves (different accounts): offline persisted, undo, no UI moving a message across accounts is basically a download from A and append to B type thing, which is different from a normal move and so its own item. 1.5 days
Local search: back-end, tests Perform a local regexp search of the local contents of the folder. 1.5 days
Local search: UI, UI tests 1 day
IMAP search on server: back-end, tests, UI upgraded from local search 2 days
Unified Folders Stitch together the contents of multiple folders 3 days
Message Contents
Censor and display HTML bodies Implement sanitization logic with cid URL transformation using bleach.js 3 days in progress
message quoting detection (plaintext): back-end, tests, UI Quote detection logic for message display and useful summary lines. Start from Thunderbird gloda and Thunderbird Conversations logic. 3 days done w/tests
attachment downloads click to download attachments and do really trivial opening via activity. Some of this is going to have to happen for HTML message display. 2 days
Composition / Sending
trivial message composition/sending, no contact integration to/cc/bcc are just text fields, message not placed in the sent folder done w/test
compose puts messages in sent folder probably just APPEND into sent, text/plain. 0.5 days
reply performs quoting: back-end, tests Top-post reply, greater-than insertion. 1.5 days done w/tests
forward quoting logic Reproduce original message, inject header information 1.5 days 60%, some tests (we are not injecting headers)
attach files from device use file-picker or gallery or some other web activity to provide us a file to attach. 1.5 days
ActiveSync see https://wiki.mozilla.org/Gaia/Email/ActiveSync for details
Phase 1: WBXML Parser
Phase 2: ActiveSync core protocol
Phase 3: Simple e-mail application protocol support
Phase 3.5: Autodiscovery/autoconfig support
Phase 4: High level sync

Extended Functionality

Improvements that can be made to the core functionality. Order does not matter, although like things are clustered. These are all great things to help out with.

milestone details effort / status
contact auto-completion in composition Auto-complete contacts when composing e-mails.
initiate mail composition from the contacts UI Is this a WebIntent, or an actual WebAPI?
easy signup using Thunderbird's autoconfiguration Port the Thunderbird logic: https://developer.mozilla.org/en/Thunderbird/Autoconfiguration
HTML composition Allow sending HTML messages
file attachments Allow attaching things from whatever filesystem B2G has?
take and attach picture Trigger the camera app to take a picture and immediately attach it.
mail signatures / signature editor
show in conversation view (when server-supported) In cases where the server can provide conversation information for cheap, for example on gmail, leverage it to be able to go from a message to its context in the list of messages in the conversation.

Mail server/service compatibility

Mail services:

Provider Protocols Supported IMAP capability strings
Hotmail POP, ActiveSync
Yahoo Mail, desktop access (free, outside Asia?) none
Yahoo Mail, desktop access (free, in Asia?) POP
Yahoo Mail Plus, desktop access ($19.99 US, £11.99 UK, ...) POP
Yahoo Mail, mobile access (free) IMAP
pre-login
CAPABILITY IMAP4rev1 ID NAMESPACE X-ID-ACLID UIDPLUS LITERAL+ CHILDREN XAPPLEPUSHSERVICE XYMHIGHESTMODSEQ AUTH=PLAIN AUTH=LOGIN AUTH=XYMCOOKIE AUTH=XYMECOOKIE AUTH=XYMCOOKIEB64 AUTH=XYMPKI
post-login
CAPABILITY IMAP4rev1 ID NAMESPACE X-ID-ACLID UIDPLUS LITERAL+ XAPPLEPUSHSERVICE XYMHIGHESTMODSEQ MOVE
Google Mail/gmail IMAP (custom mapping w/custom extensions)
pre-login
CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH
fastmail.fm IMAP (Cyrus)
pre-login
CAPABILITY IMAP4 IMAP4rev1 LITERAL+ COMPRESS=DEFLATE ACL RIGHTS=kxte QUOTA MAILBOX-REFERRALS NAMESPACE UIDPLUS NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY SORT SORT=MODSEQ THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE CATENATE CONDSTORE LIST-EXTENDED WITHIN QRESYNC SCAN XLIST SPECIAL-USE CREATE-SPECIAL-USE DIGEST=SHA1 IDLE SASL-IR AUTH=PLAIN