diff --git a/commons/AndroidManifest.xml b/commons/AndroidManifest.xml
index 2d0e2f628..971e9238d 100644
--- a/commons/AndroidManifest.xml
+++ b/commons/AndroidManifest.xml
@@ -63,6 +63,11 @@
android:name="android.accounts.AccountAuthenticator"
android:resource="@xml/authenticator" />
+
+
diff --git a/commons/src/main/java/org/wikimedia/commons/CommonsApplication.java b/commons/src/main/java/org/wikimedia/commons/CommonsApplication.java
index af261b791..edd8429b2 100644
--- a/commons/src/main/java/org/wikimedia/commons/CommonsApplication.java
+++ b/commons/src/main/java/org/wikimedia/commons/CommonsApplication.java
@@ -17,9 +17,12 @@ import org.apache.http.HttpVersion;
import org.apache.http.conn.ConnectionKeepAliveStrategy;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreProtocolPNames;
+import org.wikimedia.commons.data.DBOpenHelper;
public class CommonsApplication extends Application {
+ private DBOpenHelper dbOpenHelper;
+
private MWApi api;
private Account currentAccount = null; // Unlike a savings account...
public static final String API_URL = "http://test.wikipedia.org/w/api.php";
@@ -28,7 +31,15 @@ public class CommonsApplication extends Application {
DefaultHttpClient client = new DefaultHttpClient();
return new MWApi(API_URL, client);
}
-
+
+ public DBOpenHelper getDbOpenHelper() {
+ if(dbOpenHelper == null) {
+ dbOpenHelper = new DBOpenHelper(this);
+ }
+ return dbOpenHelper;
+ }
+
+
@Override
public void onCreate() {
// TODO Auto-generated method stub
diff --git a/commons/src/main/java/org/wikimedia/commons/ContributionsActivity.java b/commons/src/main/java/org/wikimedia/commons/ContributionsActivity.java
index 2ac22ed67..7f2a8d2ff 100644
--- a/commons/src/main/java/org/wikimedia/commons/ContributionsActivity.java
+++ b/commons/src/main/java/org/wikimedia/commons/ContributionsActivity.java
@@ -6,7 +6,7 @@ import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;
import com.actionbarsherlock.app.SherlockActivity;
-import org.wikimedia.commons.media.Media;
+import org.wikimedia.commons.contributions.Contribution;
public class ContributionsActivity extends SherlockActivity {
@@ -22,8 +22,8 @@ public class ContributionsActivity extends SherlockActivity {
private BroadcastReceiver messageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
- Media media = (Media)intent.getParcelableExtra(UploadService.EXTRA_MEDIA);
- Log.d("Commons", "Completed " + intent.getAction() +" of " + media.getFileName());
+ Contribution contribution = (Contribution)intent.getParcelableExtra(UploadService.EXTRA_MEDIA);
+ Log.d("Commons", "Completed " + intent.getAction() +" of " + contribution.getFilename());
}
};
diff --git a/commons/src/main/java/org/wikimedia/commons/Media.java b/commons/src/main/java/org/wikimedia/commons/Media.java
new file mode 100644
index 000000000..a06f82afb
--- /dev/null
+++ b/commons/src/main/java/org/wikimedia/commons/Media.java
@@ -0,0 +1,71 @@
+package org.wikimedia.commons;
+
+import android.net.Uri;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class Media implements Serializable {
+
+ public Uri getLocalUri() {
+ return localUri;
+ }
+
+ public Uri getRemoteUri() {
+ return remoteUri;
+ }
+
+ public String getFilename() {
+ return filename;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public String getCommonsURL() {
+ return commonsURL;
+ }
+
+ public long getDataLength() {
+ return dataLength;
+ }
+
+ public Date getDateCreated() {
+ return dateCreated;
+ }
+
+ public Date getDateUploaded() {
+ return dateUploaded;
+ }
+
+ public String getCreator() {
+ return creator;
+ }
+
+
+ protected Uri localUri;
+ protected Uri remoteUri;
+ protected String filename;
+ protected String description;
+ protected String commonsURL;
+ protected long dataLength;
+ protected Date dateCreated;
+ protected Date dateUploaded;
+
+
+ protected String creator;
+
+
+ public Media(Uri localUri, Uri remoteUri, String filename, String description, String commonsURL, long dataLength, Date dateCreated, Date dateUploaded, String creator) {
+ this.localUri = localUri;
+ this.remoteUri = remoteUri;
+ this.filename = filename;
+ this.description = description;
+ this.commonsURL = commonsURL;
+ this.dataLength = dataLength;
+ this.dateCreated = dateCreated;
+ this.dateUploaded = dateUploaded;
+ this.creator = creator;
+ }
+}
diff --git a/commons/src/main/java/org/wikimedia/commons/ShareActivity.java b/commons/src/main/java/org/wikimedia/commons/ShareActivity.java
index c3d1585f0..f290b9d05 100644
--- a/commons/src/main/java/org/wikimedia/commons/ShareActivity.java
+++ b/commons/src/main/java/org/wikimedia/commons/ShareActivity.java
@@ -1,16 +1,12 @@
package org.wikimedia.commons;
-import java.io.*;
-
import org.wikimedia.commons.auth.AuthenticatedActivity;
import org.wikimedia.commons.auth.WikiAccountAuthenticator;
import android.net.Uri;
-import android.os.AsyncTask;
import android.os.Bundle;
import android.content.Context;
import android.content.Intent;
-import android.util.Log;
import android.widget.ImageView;
import android.support.v4.app.NavUtils;
import com.actionbarsherlock.view.Menu;
@@ -18,7 +14,7 @@ import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.Window;
import android.widget.*;
import android.view.*;
-import org.wikimedia.commons.media.Media;
+import org.wikimedia.commons.contributions.Contribution;
public class ShareActivity extends AuthenticatedActivity {
@@ -57,11 +53,11 @@ public class ShareActivity extends AuthenticatedActivity {
@Override
public void onClick(View v) {
Intent uploadIntent = new Intent(getApplicationContext(), UploadService.class);
- uploadIntent.putExtra(Media.EXTRA_MEDIA_URI, mediaUri);
- uploadIntent.putExtra(Media.EXTRA_TARGET_FILENAME, titleEdit.getText().toString());
- uploadIntent.putExtra(Media.EXTRA_DESCRIPTION, descEdit.getText().toString());
- uploadIntent.putExtra(Media.EXTRA_MIMETYPE, mimeType);
- uploadIntent.putExtra(Media.EXTRA_EDIT_SUMMARY, "Mobile upload from Wikimedia Commons Android app");
+ uploadIntent.putExtra(UploadService.EXTRA_MEDIA_URI, mediaUri);
+ uploadIntent.putExtra(UploadService.EXTRA_TARGET_FILENAME, titleEdit.getText().toString());
+ uploadIntent.putExtra(UploadService.EXTRA_DESCRIPTION, descEdit.getText().toString());
+ uploadIntent.putExtra(UploadService.EXTRA_MIMETYPE, mimeType);
+ uploadIntent.putExtra(UploadService.EXTRA_EDIT_SUMMARY, "Mobile upload from Wikimedia Commons Android app");
startService(uploadIntent);
Toast startingToast = Toast.makeText(that, R.string.uploading_started, Toast.LENGTH_LONG);
startingToast.show();
diff --git a/commons/src/main/java/org/wikimedia/commons/UploadService.java b/commons/src/main/java/org/wikimedia/commons/UploadService.java
index bbf2a2169..3f500677c 100644
--- a/commons/src/main/java/org/wikimedia/commons/UploadService.java
+++ b/commons/src/main/java/org/wikimedia/commons/UploadService.java
@@ -5,7 +5,8 @@ import java.util.Date;
import android.support.v4.content.LocalBroadcastManager;
import org.mediawiki.api.*;
-import org.wikimedia.commons.media.Media;
+import org.wikimedia.commons.contributions.Contribution;
+import org.wikimedia.commons.contributions.ContributionsContentProvider;
import in.yuvi.http.fluent.ProgressListener;
@@ -15,9 +16,7 @@ import android.database.Cursor;
import android.os.*;
import android.provider.MediaStore;
import android.support.v4.app.NotificationCompat;
-import android.text.method.DateTimeKeyListener;
import android.util.Log;
-import android.view.View;
import android.widget.RemoteViews;
import android.widget.Toast;
import android.net.*;
@@ -32,8 +31,16 @@ public class UploadService extends IntentService {
public static final String EXTRA_MEDIA = ".media";
public static final String EXTRA_TRANSFERRED_BYTES = ".progress.transferred";
+
+ public static final String EXTRA_MEDIA_URI = EXTRA_PREFIX + ".uri";
+ public static final String EXTRA_TARGET_FILENAME = EXTRA_PREFIX + ".filename";
+ public static final String EXTRA_DESCRIPTION = EXTRA_PREFIX + ".description";
+ public static final String EXTRA_EDIT_SUMMARY = EXTRA_PREFIX + ".summary";
+ public static final String EXTRA_MIMETYPE = EXTRA_PREFIX + ".mimetype";
+
private NotificationManager notificationManager;
private LocalBroadcastManager localBroadcastManager;
+ private ContentProviderClient contributionsProviderClient;
private CommonsApplication app;
private Notification curProgressNotification;
@@ -59,17 +66,17 @@ public class UploadService extends IntentService {
Notification curNotification;
String notificationTag;
boolean notificationTitleChanged;
- Media media;
+ Contribution contribution;
String notificationProgressTitle;
String notificationFinishingTitle;
- public NotificationUpdateProgressListener(Notification curNotification, String notificationTag, String notificationProgressTitle, String notificationFinishingTitle, Media media) {
+ public NotificationUpdateProgressListener(Notification curNotification, String notificationTag, String notificationProgressTitle, String notificationFinishingTitle, Contribution contribution) {
this.curNotification = curNotification;
this.notificationTag = notificationTag;
this.notificationProgressTitle = notificationProgressTitle;
this.notificationFinishingTitle = notificationFinishingTitle;
- this.media = media;
+ this.contribution = contribution;
}
@Override
public void onProgress(long transferred, long total) {
@@ -83,7 +90,7 @@ public class UploadService extends IntentService {
}
notificationTitleChanged = true;
Intent mediaUploadStartedEvent = new Intent(INTENT_UPLOAD_STARTED);
- mediaUploadStartedEvent.putExtra(EXTRA_MEDIA, media);
+ // mediaUploadStartedEvent.putExtra(EXTRA_MEDIA, contribution);
localBroadcastManager.sendBroadcast(mediaUploadStartedEvent);
}
if(transferred == total) {
@@ -94,7 +101,7 @@ public class UploadService extends IntentService {
curNotification.contentView.setProgressBar(R.id.uploadNotificationProgress, 100, (int)(((double)transferred / (double)total) * 100), false);
notificationManager.notify(NOTIFICATION_DOWNLOAD_IN_PROGRESS, curNotification);
Intent mediaUploadProgressIntent = new Intent(INTENT_UPLOAD_PROGRESS);
- mediaUploadProgressIntent.putExtra(EXTRA_MEDIA, media);
+ // mediaUploadProgressIntent.putExtra(EXTRA_MEDIA, contribution);
mediaUploadProgressIntent.putExtra(EXTRA_TRANSFERRED_BYTES, transferred);
localBroadcastManager.sendBroadcast(mediaUploadProgressIntent);
}
@@ -104,6 +111,7 @@ public class UploadService extends IntentService {
@Override
public void onDestroy() {
super.onDestroy();
+ contributionsProviderClient.release();
Log.d("Commons", "ZOMG I AM BEING KILLED HALP!");
}
@@ -113,6 +121,7 @@ public class UploadService extends IntentService {
notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
localBroadcastManager = LocalBroadcastManager.getInstance(this);
app = (CommonsApplication)this.getApplicationContext();
+ contributionsProviderClient = this.getContentResolver().acquireContentProviderClient(ContributionsContentProvider.AUTHORITY);
}
private String getRealPathFromURI(Uri contentUri) {
@@ -124,13 +133,13 @@ public class UploadService extends IntentService {
return cursor.getString(column_index);
}
- private Media mediaFromIntent(Intent intent) {
+ private Contribution mediaFromIntent(Intent intent) {
Bundle extras = intent.getExtras();
- Uri mediaUri = (Uri)extras.getParcelable(Media.EXTRA_MEDIA_URI);
- String filename = intent.getStringExtra(Media.EXTRA_TARGET_FILENAME);
- String description = intent.getStringExtra(Media.EXTRA_DESCRIPTION);
- String editSummary = intent.getStringExtra(Media.EXTRA_EDIT_SUMMARY);
- String mimeType = intent.getStringExtra(Media.EXTRA_MIMETYPE);
+ Uri mediaUri = (Uri)extras.getParcelable(EXTRA_MEDIA_URI);
+ String filename = intent.getStringExtra(EXTRA_TARGET_FILENAME);
+ String description = intent.getStringExtra(EXTRA_DESCRIPTION);
+ String editSummary = intent.getStringExtra(EXTRA_EDIT_SUMMARY);
+ String mimeType = intent.getStringExtra(EXTRA_MIMETYPE);
Date dateCreated = null;
Long length = null;
@@ -152,8 +161,8 @@ public class UploadService extends IntentService {
} /* else if (mimeType.startsWith("audio/")) {
Removed Audio implementationf or now
} */
- Media media = new Media(mediaUri, filename, description, editSummary, app.getCurrentAccount().name, dateCreated, length);
- return media;
+ Contribution contribution = new Contribution(mediaUri, null, filename, description, null, length, dateCreated, null, app.getCurrentAccount().name, editSummary);
+ return contribution;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
@@ -164,10 +173,16 @@ public class UploadService extends IntentService {
notificationManager.notify(NOTIFICATION_DOWNLOAD_IN_PROGRESS, curProgressNotification);
}
- Media media = mediaFromIntent(intent);
+ Contribution contribution = mediaFromIntent(intent);
+
+ try {
+ contributionsProviderClient.insert(ContributionsContentProvider.BASE_URI, contribution.toContentValues());
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
Intent mediaUploadQueuedIntent = new Intent(INTENT_UPLOAD_QUEUED);
- mediaUploadQueuedIntent.putExtra(EXTRA_MEDIA, media);
+ mediaUploadQueuedIntent.putExtra(EXTRA_MEDIA, contribution);
localBroadcastManager.sendBroadcast(mediaUploadQueuedIntent);
return super.onStartCommand(mediaUploadQueuedIntent, flags, startId);
}
@@ -178,21 +193,21 @@ public class UploadService extends IntentService {
ApiResult result;
RemoteViews notificationView;
- Media media;
+ Contribution contribution;
InputStream file = null;
- media = (Media)intent.getParcelableExtra(EXTRA_MEDIA);
+ contribution = (Contribution)intent.getSerializableExtra(EXTRA_MEDIA);
- String notificationTag = media.getMediaUri().toString();
+ String notificationTag = contribution.getLocalUri().toString();
try {
- file = this.getContentResolver().openInputStream(media.getMediaUri());
+ file = this.getContentResolver().openInputStream(contribution.getLocalUri());
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
notificationView = new RemoteViews(getPackageName(), R.layout.layout_upload_progress);
- notificationView.setTextViewText(R.id.uploadNotificationTitle, String.format(getString(R.string.upload_progress_notification_title_start), media.getFileName()));
+ notificationView.setTextViewText(R.id.uploadNotificationTitle, String.format(getString(R.string.upload_progress_notification_title_start), contribution.getFilename()));
notificationView.setProgressBar(R.id.uploadNotificationProgress, 100, 0, false);
Log.d("Commons", "Before execution!");
@@ -202,7 +217,7 @@ public class UploadService extends IntentService {
.setContent(notificationView)
.setOngoing(true)
.setContentIntent(PendingIntent.getActivity(getApplicationContext(), 0, new Intent(), 0))
- .setTicker(String.format(getString(R.string.upload_progress_notification_title_in_progress), media.getFileName()))
+ .setTicker(String.format(getString(R.string.upload_progress_notification_title_in_progress), contribution.getFilename()))
.getNotification();
this.startForeground(NOTIFICATION_DOWNLOAD_IN_PROGRESS, curProgressNotification);
@@ -224,11 +239,11 @@ public class UploadService extends IntentService {
}
}
NotificationUpdateProgressListener notificationUpdater = new NotificationUpdateProgressListener(curProgressNotification, notificationTag,
- String.format(getString(R.string.upload_progress_notification_title_in_progress), media.getFileName()),
- String.format(getString(R.string.upload_progress_notification_title_finishing), media.getFileName()),
- media
+ String.format(getString(R.string.upload_progress_notification_title_in_progress), contribution.getFilename()),
+ String.format(getString(R.string.upload_progress_notification_title_finishing), contribution.getFilename()),
+ contribution
);
- result = api.upload(media.getFileName(), file, media.getLength(), media.getPageContents(), media.getEditSummary(), notificationUpdater);
+ result = api.upload(contribution.getFilename(), file, contribution.getDataLength(), contribution.getPageContents(), contribution.getEditSummary(), notificationUpdater);
} catch (IOException e) {
Log.d("Commons", "I have a network fuckup");
stopForeground(true);
@@ -236,8 +251,8 @@ public class UploadService extends IntentService {
.setSmallIcon(R.drawable.ic_launcher)
.setAutoCancel(true)
.setContentIntent(PendingIntent.getService(getApplicationContext(), 0, intent, 0))
- .setTicker(String.format(getString(R.string.upload_failed_notification_title), media.getFileName()))
- .setContentTitle(String.format(getString(R.string.upload_failed_notification_title), media.getFileName()))
+ .setTicker(String.format(getString(R.string.upload_failed_notification_title), contribution.getFilename()))
+ .setContentTitle(String.format(getString(R.string.upload_failed_notification_title), contribution.getFilename()))
.setContentText(getString(R.string.upload_failed_notification_subtitle))
.getNotification();
notificationManager.notify(NOTIFICATION_UPLOAD_FAILED, failureNotification);
@@ -256,16 +271,16 @@ public class UploadService extends IntentService {
Notification doneNotification = new NotificationCompat.Builder(this)
.setAutoCancel(true)
.setSmallIcon(R.drawable.ic_launcher)
- .setContentTitle(String.format(getString(R.string.upload_completed_notification_title), media.getFileName()))
+ .setContentTitle(String.format(getString(R.string.upload_completed_notification_title), contribution.getFilename()))
.setContentText(getString(R.string.upload_completed_notification_text))
- .setTicker(String.format(getString(R.string.upload_completed_notification_title), media.getFileName()))
+ .setTicker(String.format(getString(R.string.upload_completed_notification_title), contribution.getFilename()))
.setContentIntent(PendingIntent.getActivity(this, 0, openUploadedPageIntent, 0))
.getNotification();
notificationManager.notify(notificationTag, NOTIFICATION_DOWNLOAD_COMPLETE, doneNotification);
Intent mediaUploadedIntent = new Intent(INTENT_UPLOAD_COMPLETE);
- mediaUploadedIntent.putExtra(EXTRA_MEDIA, media);
+ //mediaUploadedIntent.putExtra(EXTRA_MEDIA, contribution);
localBroadcastManager.sendBroadcast(mediaUploadedIntent);
}
}
diff --git a/commons/src/main/java/org/wikimedia/commons/contributions/Contribution.java b/commons/src/main/java/org/wikimedia/commons/contributions/Contribution.java
new file mode 100644
index 000000000..9a58bdc98
--- /dev/null
+++ b/commons/src/main/java/org/wikimedia/commons/contributions/Contribution.java
@@ -0,0 +1,117 @@
+package org.wikimedia.commons.contributions;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import android.content.ContentValues;
+import android.database.sqlite.SQLiteDatabase;
+import android.net.*;
+import org.wikimedia.commons.Media;
+
+public class Contribution extends Media {
+
+
+ public String getEditSummary() {
+ return editSummary;
+ }
+
+ private String editSummary;
+
+ public Date getTimestamp() {
+ return timestamp;
+ }
+
+ private Date timestamp;
+ private int state;
+
+ public Contribution(Uri localUri, Uri remoteUri, String filename, String description, String commonsURL, long dataLength, Date dateCreated, Date dateUploaded, String creator, String editSummary) {
+ super(localUri, remoteUri, filename, description, commonsURL, dataLength, dateCreated, dateUploaded, creator);
+ this.editSummary = editSummary;
+ timestamp = new Date(System.currentTimeMillis());
+ }
+
+ public int getState() {
+ return state;
+ }
+
+ public void setState(int state) {
+ this.state = state;
+ }
+
+ public String getPageContents() {
+ StringBuffer buffer = new StringBuffer();
+ SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd");
+ buffer
+ .append("== {{int:filedesc}} ==\n")
+ .append("{{Information")
+ .append("|Description=").append(description)
+ .append("|source=").append("{{own}}")
+ .append("|author=[[User:").append(creator).append("]]");
+ if(dateCreated != null) {
+ buffer
+ .append("|date={{According to EXIF data|").append(isoFormat.format(dateCreated)).append("}}");
+ }
+ buffer
+ .append("}}").append("\n")
+ .append("== {{int:license-header}} ==\n")
+ .append("{{self|cc-by-sa-3.0}}")
+ ;
+ return buffer.toString();
+ }
+
+ public ContentValues toContentValues() {
+ ContentValues cv = new ContentValues();
+ cv.put(Table.COLUMN_FILENAME, getFilename());
+ if(getLocalUri() != null) {
+ cv.put(Table.COLUMN_LOCAL_URI, getLocalUri().toString());
+ }
+ if(getRemoteUri() != null) {
+ cv.put(Table.COLUMN_REMOTE_URI, getRemoteUri().toString());
+ }
+ cv.put(Table.COLUMN_LENGTH, getDataLength());
+ cv.put(Table.COLUMN_TIMESTAMP, getTimestamp().getTime());
+ cv.put(Table.COLUMN_STATE, getState());
+ return cv;
+ }
+
+
+ public static class Table {
+ public static final String TABLE_NAME = "contributions";
+
+ public static final String COLUMN_ID = "_id";
+ public static final String COLUMN_FILENAME = "filename";
+ public static final String COLUMN_LOCAL_URI = "local_uri";
+ public static final String COLUMN_REMOTE_URI = "remote_uri";
+ public static final String COLUMN_TIMESTAMP = "timestamp";
+ public static final String COLUMN_STATE = "state";
+ public static final String COLUMN_LENGTH = "length";
+
+ // No need to be bitwise - they're mutually exclusive
+ public static final int STATE_COMPLETED = 0;
+ public static final int STATE_QUEUED = 1;
+ public static final int STATE_IN_PROGRESS = 2;
+
+
+ private static final String CREATE_TABLE_STATEMENT = "CREATE TABLE " + TABLE_NAME + " ("
+ + "_id INTEGER PRIMARY KEY,"
+ + "filename STRING,"
+ + "local_uri STRING,"
+ + "remote_uri STRING,"
+ + "timestamp INTEGER,"
+ + "state INTEGER,"
+ + "length INTEGER"
+ + ");";
+
+
+ public static void onCreate(SQLiteDatabase db) {
+ db.execSQL(CREATE_TABLE_STATEMENT);
+ }
+
+ public static void onUpdate(SQLiteDatabase db) {
+ // Drop everything and recreate stuff
+ // FIXME: Understatement
+ db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
+ onCreate(db);
+ }
+ }
+}
diff --git a/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsContentProvider.java b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsContentProvider.java
new file mode 100644
index 000000000..febd0a003
--- /dev/null
+++ b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsContentProvider.java
@@ -0,0 +1,88 @@
+package org.wikimedia.commons.contributions;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.content.UriMatcher;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteQueryBuilder;
+import android.net.Uri;
+import org.wikimedia.commons.CommonsApplication;
+import org.wikimedia.commons.data.DBOpenHelper;
+
+public class ContributionsContentProvider extends ContentProvider{
+
+ private static final int CONTRIBUTIONS = 1;
+
+ public static final String AUTHORITY = "org.wikimedia.commons.contributions.contentprovider";
+ private static final String BASE_PATH = "contributions";
+
+ public static final Uri BASE_URI = Uri.parse("content://" + AUTHORITY + "/" + BASE_PATH);
+
+ private static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
+ static {
+ uriMatcher.addURI(AUTHORITY, BASE_PATH, CONTRIBUTIONS);
+ }
+
+
+ private DBOpenHelper dbOpenHelper;
+ @Override
+ public boolean onCreate() {
+ dbOpenHelper = ((CommonsApplication)this.getContext().getApplicationContext()).getDbOpenHelper();
+ return false;
+ }
+
+ @Override
+ public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
+ SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
+ queryBuilder.setTables(Contribution.Table.TABLE_NAME);
+
+ int uriType = uriMatcher.match(uri);
+
+ switch(uriType) {
+ case CONTRIBUTIONS:
+ break;
+ default:
+ throw new IllegalArgumentException("Unknown URI" + uri);
+ }
+
+ SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
+
+ Cursor cursor = queryBuilder.query(db, projection, selection, selectionArgs, null, null, sortOrder);
+ cursor.setNotificationUri(getContext().getContentResolver(), uri);
+
+ return cursor;
+ }
+
+ @Override
+ public String getType(Uri uri) {
+ return null;
+ }
+
+ @Override
+ public Uri insert(Uri uri, ContentValues contentValues) {
+ int uriType = uriMatcher.match(uri);
+ SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase();
+ int rowsDeleted = 0;
+ long id = 0;
+ switch (uriType) {
+ case CONTRIBUTIONS:
+ id = sqlDB.insert(Contribution.Table.TABLE_NAME, null, contentValues);
+ break;
+ default:
+ throw new IllegalArgumentException("Unknown URI: " + uri);
+ }
+ getContext().getContentResolver().notifyChange(uri, null);
+ return Uri.parse(BASE_PATH + "/" + id);
+ }
+
+ @Override
+ public int delete(Uri uri, String s, String[] strings) {
+ return 0;
+ }
+
+ @Override
+ public int update(Uri uri, ContentValues contentValues, String s, String[] strings) {
+ return 0;
+ }
+}
diff --git a/commons/src/main/java/org/wikimedia/commons/media/Media.java b/commons/src/main/java/org/wikimedia/commons/media/Media.java
deleted file mode 100644
index e492e6f8c..000000000
--- a/commons/src/main/java/org/wikimedia/commons/media/Media.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package org.wikimedia.commons.media;
-
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.*;
-
-import android.net.*;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-public class Media implements Parcelable {
-
- private static final String EXTRA_PREFIX = "org.wikimedia.commons.media";
- public static final String EXTRA_MEDIA_URI = EXTRA_PREFIX + ".uri";
- public static final String EXTRA_TARGET_FILENAME = EXTRA_PREFIX + ".filename";
- public static final String EXTRA_DESCRIPTION = EXTRA_PREFIX + ".description";
- public static final String EXTRA_EDIT_SUMMARY = EXTRA_PREFIX + ".summary";
- public static final String EXTRA_MIMETYPE = EXTRA_PREFIX + ".mimetype";
-
- private Uri mediaUri;
- private String fileName;
- private String editSummary;
- private String mimeType;
- private String description;
- private String userName;
- private Date dateCreated;
- private long length;
- private Date dateUploaded;
-
- public Media(Uri mediaUri, String fileName, String description, String editSummary, String userName, Date dateCreated, long length) {
- this.mediaUri = mediaUri;
- this.fileName = fileName;
- this.description = description;
- this.editSummary = editSummary;
- this.userName = userName;
- this.dateCreated = dateCreated;
- this.length = length;
- }
-
- public long getLength() {
- return length;
- }
- public Uri getMediaUri() {
- return mediaUri;
- }
-
- public String getFileName() {
- return fileName;
- }
-
- public String getEditSummary() {
- return editSummary;
- }
-
- public String getPageContents() {
- StringBuffer buffer = new StringBuffer();
- SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd");
- buffer
- .append("== {{int:filedesc}} ==\n")
- .append("{{Information")
- .append("|Description=").append(description)
- .append("|source=").append("{{own}}")
- .append("|author=[[User:").append(userName).append("]]");
- if(dateCreated != null) {
- buffer
- .append("|date={{According to EXIF data|").append(isoFormat.format(dateCreated)).append("}}");
- }
- buffer
- .append("}}").append("\n")
- .append("== {{int:license-header}} ==\n")
- .append("{{self|cc-by-sa-3.0}}")
- ;
- return buffer.toString();
- }
-
- public String getMimeType() {
- return mimeType;
- }
-
- public int describeContents() {
- return 0;
- }
-
- public void writeToParcel(Parcel parcel, int flags) {
- parcel.writeParcelable(mediaUri, flags);
- parcel.writeString(fileName);
- parcel.writeString(description);
- parcel.writeString(editSummary);
- parcel.writeString(userName);
- parcel.writeLong(length);
- parcel.writeSerializable(dateCreated);
- }
-
- public static Media fromParcel(Parcel parcel) {
- Uri mediaUri = parcel.readParcelable(Uri.class.getClassLoader());
- String fileName = parcel.readString();
- String description = parcel.readString();
- String editSummary = parcel.readString();
- String userName = parcel.readString();
- Long length = parcel.readLong();
- Date dateCreated = (Date)parcel.readSerializable();
- return new Media(mediaUri, fileName, description, editSummary, userName, dateCreated, length);
- }
-
- public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
-
- public Media createFromParcel(Parcel in) {
- return fromParcel(in);
- }
-
- public Media[] newArray(int size) {
- return new Media[size];
- }
- };
-}