| assets-source | ||
| commons | ||
| design | ||
| lib | ||
| update-license-info | ||
| .gitignore | ||
| .gitreview | ||
| CHANGELOG.md | ||
| COPYING | ||
| CREDITS | ||
| disable-campaigns.patch | ||
| find-broken-strings-variables.sh | ||
| pom.xml | ||
| README.md | ||
| RELEASE-CHECKLIST.md | ||
| sign.sh | ||
| upload-to-commons.patch | ||
Upload to Commons
Upload pictures from your Android phone/tablet to Wikimedia Commons.
Initially started by the Wikimedia Foundation, this app is now maintained by volunteers. Anyone is welcome to improve it, just choose among the open issues and send us a pull request :-)
Build Requirements
- Android SDK (Level 23)
- Maven
Build Instructions
- Set the environment variable
ANDROID_HOMEto be the path to your Android SDK - Run
mvn installto build - Run
cd commons && mvn android:deployto deploy to a device
Note: Currently uses a bunch of dependencies that are staged at yuvi.in/blog/maven. Will be migrated to either Maven Central or a Wikimedia staging server soon.
Set Up IntelliJ or Android Studio for Commons Android App Development
Import and Compile Commons Android App
Download IntelliJ or Download Android Studio 1.5.2. (Note: The steps below currently only work on Android Studio 1.5.2 and below)
-
Clone the repository.
-
Open IntelliJ/Android Studio. Tick the box for the Maven Integration plugin by selecting:
File>Settings>Plugins>Maven Integration
or
(From Quick Start menu):Configure>Plugins>Maven Integration -
Import Project:
File>Import Project
or
(From Quick Start menu):Import Project (Eclipse ADT, Gradle, etc.) -
Navigate to the folder with the cloned repository (named apps-android-commons). Select
OK. -
Select
Import Project from external model>Maven. SelectNext. -
Tick the boxes
Search for projects recursivelyandImport Maven projects automatically. SelectNext. -
Select
Next. -
Select
Next. -
Click
Maven Android API 23 PlatformorAndroid API 23 Platformin the sidebar. Make sure theAndroid SDK home pathpoints to the/Android/Sdkfolder. Make sure theJava SDKis set to 1.8 or higher.
If there are no options for theJava SDK, click the+button above the sidebar and select 'JDK'. Navigate to your JDK folder, select it, and hitOK, and then select the newly added JDK.
SelectNext. -
Select
Next. -
Select
Finish. -
Set the Module SDKs.
Select theDependenciestab on the right pane.
Set the modules as follows:Name Module SDK commons Project SDK (Android API 23 Platform) commons-parent Project SDK (Android API 23 Platform) ~apklib-com.actionbarsherlock_actionbarsherlock_4.4.0 Maven Android API 14 Platform ~apklib-com.viewpagerindicator_library_2.4.1 Maven Android API 16 Platform If certain modules are not available, install the correct API levels through the SDK manager. To do this do the following:
- Click
Cancel. Navigate toFile>Settings>Appearance & Behaviour>System Settings>Android SDK. - Tick the boxes for API levels
14,16, and23(or Android4.0,4.1.2and6.0). - Then click
OK, and allow it to download the new APIs. Once it has finished, clickFile>Project Structure>Project Settings>Modules, and repeat step 15.
- Click
-
Select
commons. Click the green+button on the right. SelectJARs or directories.... Choose theapps-android-commons/libfolder. SelectOK. -
Select
OKto save your changes to the project structre settings. -
To test it worked, check if it builds (Select
commonson the projects panel. SelectBuild>Make Module 'commons'). If there are no errors (warnings are OK) you're set!
License
This software is licensed under the Apache License.
Bugs
Please report any bug on Github.
Code Structure
Key breakdowns:
Activities started within the UI:
- ContributionsActivity (ContributionsListFragment, MediaDetailPagerFragment, MediaDetailFragment) - main "my uploads" list and detail view
- LoginActivity - login screen when setting up an account
- SettingsActivity - settings screen
- AboutActivity - about screen
Activities receiving intents:
- ShareActivity (SingleUploadFragment, CategorizationFragment) - handles receiving a file from another app, accepting a title/desc, and slating it for upload
- MultipleShareActivity (MultipleUploadListFragment, CategorizationFragment) - handles receiving a batch of multiple files from another app, accepting a title/desc, and slating them for upload
Services:
- WikiAccountAuthenticatorService - authentication service
- UploadService - performs actual file uploads in background
- ContributionsSyncService - polls for updated contributions list from server
- ModificationsSyncService - pushes category additions up to server
Content providers:
- ContributionsContentProvider - private storage for local copy of user's contribution list
- ModificationsContentProvider - private storage for pending category and template modifications
- CategoryContentProvider - private storage for recently used categories
On-Device Storage
Account credentials are encapsulated in an account provider. Currently only one Wikimedia Commons account is supported at a time. (Question: what is the actual storage for credentials?)
Preferences are stored in Android's SharedPreferences.
Information about past and pending uploads is stored in the Contributions content provider, which uses an SQLite database on the backend.
A list of recently-used categories is stored in the Categories content provider, which uses an SQLite database on the backend.
Captured files are not currently stored within the app, but are passed by content: or file: URI from other apps.
Thumbnail images are not currently cached. (?)