Wikimedia Apps/Commons

Rationale
Mobile phones have overtaken point and shoots as the most used cameras, yet there is no easy way to upload a picture from a mobile directly (and properly!) into Commons. This app aims to fix that.

We are also working on uploads from the mobile web interface - see Mobile design/Uploads.

Use Case #1: Simple Upload for experienced Commons user
Galadriel is an experienced Commons user who already has uploaded many files to Commons using the UploadWizard. She is taking a nice evening stroll when she comes across a scene that would make a wonderful addition to Commons. She has a phone with a nice camera, so takes a picture with the inbuilt camera app. Instead of going home, remembering to transfer the image, and then uploading it, she wants to be able to upload it then and there - and then move on. She is a good Commons citizen, so wants to make sure that the title is descriptive and appropriate categories are added.

Features
End Goal: Have an app that experienced commons users can use to easily upload Media

Each commons app will at the least have the following features. Additional features will be platform specific.


 * Login
 * Account Creation
 * Tracking
 * Discovery/Browse (to give users a reason to use app)
 * Single upload
 * Multiple upload
 * My contributions
 * Queues
 * Campaigns

from: Mobile Strategy: Jan-Mar 2013 by hfung

Acceptance Criteria

 * 1) Able to upload any image from the Phone to Commons (via Android 'Share')
 * 2) Easily add a title & description
 * 3) Easily add as many categories as needed, with autocomplete wo make adding accurate categories faster
 * 4) Shows progress of upload and a notification when upload is complete
 * 5) Taking and uploading a photo to commons should be as fast as uploading a picture to Instagram

Iteration 1
Date: 1/28/13 - 2/08/13

Android

 * Nightly build
 * https://github.com/Wikimedia/android-commons
 * https://github.com/Wikimedia/java-mwapi
 * https://github.com/wikimedia/android-mwlogin

Tasks

 * 1) Persistant Secure Login ✅
 * 2) Upload a photo to commons (only via share intents - no launchers) (background uploads!) ✅
 * 3) Be able to set title, description, select categories ✅
 * 4) Able to queue and upload multiple files (shouldn't have to wait for one to finish uploading before next one can be queued) ✅
 * 5) Feedback on what is happening via Notifications (not too spammy!)  ✅
 * 6) Resume uploads appropriately (never have to type in info for an upload twice) ✅
 * 7) Tag mobile uploads appropriately, to enable tracking ✅
 * 8) My uploads (queued, currently uploading, previous) ✅
 * 9) Compatibility with Android 2.3 Moved to next iteration

Plumbing

 * 1) Setup Maven for http-fluent ✅, java-mwapi ✅, android-mwlogin ✅ and commons app ✅

Design Assets Needed

 * 1) Variant of the logo for Nightly releases
 * 2) Icons for the notification bar (Strictly to guidelines, appropriate to both 2.3 and 4.x) - see
 * 3) Background to indicate that an image is 'loading'



iOS

 * Source: https://github.com/Wikimedia/Commons-iOS
 * Screen shots and workflows: /iOS/Workflows

Tasks

 * 1) Persistant Secure Login (use iOS Keychain services for storage) ✅
 * 2) Select photos from gallery or take photo in app ✅
 * 3) Upload a photo to commons (upload while app is foreground; no background uploads yet?) ✅
 * 4) Upload using async i/o ✅
 * 5) Be able to set title, description ✅
 * 6) Retry when upload fails (I should never have to type title, description, etc more than once) ✅
 * 7) Able to queue and upload multiple files (shouldn't have to wait for one to finish downloading before next starts) ✅
 * 8) show queue in the app ✅
 * 9) allow canceling ✅
 * 10) link to your already-uploaded images on mobile web ✅
 * 11) + Allow receiving files from other apps ✅

Focus Areas

 * 1) Compatibility with iOS 5.0 and later ✅
 * 2) Appropriate retry functionality ✅ - can restart manually after failure, without reinputting.
 * 3) Does not 'fail silently' -- good error messages everywhere ✅
 * 4) Clean progress bar, backgrounded i/o ✅

Needs Design (in priority order)

 * Upload (non intent or gallery based)
 * Account creation
 * My Contributions
 * Discovery/Browse
 * Upload Later
 * single contribution view along with image usage
 * assets (icons - action bar, status bar etc) for ios and android

Iteration 2
Date: 2/11/13 - 2/22/13

iOS

 * Visual Polish
 * need details from Shankar
 * Account creation Holding off till we have the Upload Wizard Tutorial ported to Mobile
 * Event tracking (Account creation, sign in, upload failure causes)
 * i18n
 * Push beta

Android

 * Visual Polish
 * need details from Shankar
 * Account creation Holding off till we have the Upload Wizard Tutorial ported to Mobile
 * Event tracking (Account creation, sign in, upload failure causes)
 * Android 2.3 compatibility (ran into very nasty bug in iteration 1, so moved to this)
 * i18n
 * Push beta

Server-side

 * Account creation API update for captcha (brion)

Backlog

 * Campaign Support
 * Discovery/Browse
 * Upload later
 * License selection
 * Sync Options (use whatever options the user has picked in his preferences in commons)
 * Upload similar
 * Notifications
 * modification of your file?
 * use of your file
 * deletion of your file
 * Acceptable use tutorial (adapt File:Licensing_tutorial_en.svg to small screen)
 * Add categories before upload (and after?)
 * Show globalusage entries on detail page

EventLogging / Reports
We'll be using EventLogging to collect data to help improve the product. We should collect enough data to produce the following reports:


 * 1) Details of uploads failing for non-network reasons (Title blacklist, etc).
 * 2) Time taken for particular action sequences / flows:
 * 3) Average time taken for typing in upload title / description (aka page from staring at the 'enter details!' screen to hitting 'upload')
 * 4) add more here? Remember we can measure accurate timings for most things :)
 * 5) Usage of 'From camera' vs 'From Gallery' vs 'via Intent' (for Android only)
 * 6) Average time per file upload
 * 7) General failure stats for Login and Account creation (once we have those)
 * 8) Detailed info on how users interact with the commons tutorial