| 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 22)
- 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. (Note: The steps below currently only work on Android Studio 1.5 and below)
- Clone the repository.
- Open IntelliJ/Android Studio. Ensure Maven integration plugin is enabled (File > Settings > Plugins > Maven integration).
- Import Project:
File -> Import Project
or
Select 'Import Project' from the Quick Start menu - Navigate to the folder with the cloned repository and press 'OK'.
- Select 'Import Project from external model' -> 'Maven' and press 'Next'.
- Make sure 'Search for projects recursively' and 'Import Maven projects automatically' are checked. Select 'Next'.
- This section needs no modification. Select 'Next'.
- This section needs no modification. Select 'Next'.
- Make sure the 'Android SDK home path' points to the 'android-sdk' folder. If the dropdown next to 'Java SDK' is empty, hit the '+' button avobe the sidebar and select 'JDK'. Navigate to your jdk folder, select it, and hit 'OK'. Now select the newly added JDK and hit 'Next'.
- This section needs no modifications. Select 'Next'.
- Select 'Finish'.
- After the program opens select 'Make project' - there should be errors.
- Near the top of the file that is opened up, one of the offending lines should be "import android.support.v4.app.FragmentActivity;" - put your cursor on that line and hit 'alt'/'option'+'enter' to bring up the AutoFix dialog. Select the 'compatibility' option.
- File -> Project Structure -> Project and ensure the Project SDK is set to at least API 23. This is required for DocumentsContract to work.
- File -> Project Structure -> Modules and select 'commons'. Select the 'Dependencies' tab and click the green '+' button. Select 'JARs or directories' and navigate to the 'lib' folder. Select all the .jars in that folder and click 'OK'. This imports the QuadTree and GSON libraries.
- Select 'Make project' again. It should compile successfully.
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. (?)