diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index a26ad3f7a..2e4bada1b 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 0a385f743..adb4cdc53 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -18,5 +18,6 @@
More witty text here!
Upload succeeded!
Upload failed!
+ Upload started!
\ No newline at end of file
diff --git a/src/org/wikimedia/commons/ShareActivity.java b/src/org/wikimedia/commons/ShareActivity.java
index 53deb45a3..948cd8f84 100644
--- a/src/org/wikimedia/commons/ShareActivity.java
+++ b/src/org/wikimedia/commons/ShareActivity.java
@@ -4,13 +4,17 @@ import java.io.*;
import org.mediawiki.api.ApiResult;
import org.mediawiki.api.MWApi;
+import org.wikimedia.commons.UploadService.UploadBinder;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
+import android.os.IBinder;
import android.app.*;
+import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.ServiceConnection;
import android.util.Log;
import android.view.*;
import android.widget.*;
@@ -27,84 +31,6 @@ public class ShareActivity extends Activity {
private Uri imageUri;
- class UploadImageTask extends AsyncTask {
- MWApi api;
- Activity context;
- ProgressDialog dialog;
-
- @Override
- protected String doInBackground(String... params) {
- Uri imageUri = Uri.parse(params[0]);
- String filename = params[1];
- String text = params[2];
- String comment = params[3];
-
- InputStream file;
-
- try {
- file = context.getContentResolver().openInputStream(imageUri);
- } catch (FileNotFoundException e) {
- throw new RuntimeException(e);
- }
-
- Log.d("Commons", "isLoggedIn? " + api.isLoggedIn);
-
- try {
- ApiResult result = api.upload(filename, file, text, comment);
-// Document document = (Document)result.getDocument();
-// StringWriter wr = new StringWriter();
-// try {
-// Transformer trans = TransformerFactory.newInstance().newTransformer();
-// trans.transform(new DOMSource(result.getDocument()), new StreamResult(wr));
-// String res = wr.toString();
-// return res;
-// } catch (Exception e) {
-// e.printStackTrace();
-// //FUCK YOU YOU SON OF A LEMON PARTY
-// }
-
-// DOMImplementationLS domImplLS = (DOMImplementationLS) document
-// .getImplementation();
-// LSSerializer serializer = domImplLS.createLSSerializer();
-// String str = serializer.writeToString(result.getDocument());
-// return str;
- return result.getString("/api/upload/@result");
- } catch (IOException e) {
- e.printStackTrace();
- return "Failure";
- }
- }
-
- UploadImageTask(MWApi api, Activity context) {
- this.api = api;
- this.context = context;
- }
-
- @Override
- protected void onPostExecute(String result) {
- super.onPostExecute(result);
- if(result.equals("Success")) {
- dialog.hide();
- Toast successToast = Toast.makeText(context, R.string.uploading_success, Toast.LENGTH_LONG);
- successToast.show();
- context.finish();
- } else {
- dialog.hide();
- Toast failureToast = Toast.makeText(context, R.string.uploading_failed, Toast.LENGTH_LONG);
- failureToast.show();
- }
- }
-
- @Override
- protected void onPreExecute() {
- super.onPreExecute();
- dialog = new ProgressDialog(context);
- dialog.setTitle(R.string.uploading_title);
- dialog.setMessage(getString(R.string.uploading_message));
- dialog.show();
- }
- }
-
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -134,9 +60,24 @@ public class ShareActivity extends Activity {
uploadButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- UploadImageTask uploadImage = new UploadImageTask(app.getApi(), that);
Log.d("Commons", "Starting upload, yo!");
- uploadImage.execute(imageUri.toString(), titleEdit.getText().toString(), descEdit.getText().toString(), "Mobile Upload represent!");
+ ServiceConnection connection = new ServiceConnection() {
+
+ @Override
+ public void onServiceDisconnected(ComponentName name) {
+ }
+
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder service) {
+ Log.d("Commons", "Service connected!");
+ UploadService uploadService = ((UploadService.UploadBinder)service).getService();
+ uploadService.doUpload(app.getApi(), imageUri, titleEdit.getText().toString(),
+ descEdit.getText().toString(), "Mobile Upload represent!" );
+ that.finish();
+ }
+ };
+ that.bindService(new Intent(that, UploadService.class), connection, Context.BIND_AUTO_CREATE);
+ Log.d("Commons", "Service requeseted");
}
});
}
diff --git a/src/org/wikimedia/commons/UploadService.java b/src/org/wikimedia/commons/UploadService.java
new file mode 100644
index 000000000..52fb7efec
--- /dev/null
+++ b/src/org/wikimedia/commons/UploadService.java
@@ -0,0 +1,121 @@
+package org.wikimedia.commons;
+
+import java.io.*;
+
+import org.mediawiki.api.*;
+
+import android.app.*;
+import android.content.*;
+import android.os.*;
+import android.support.v4.app.NotificationCompat;
+import android.util.Log;
+import android.widget.Toast;
+import android.net.*;
+
+public class UploadService extends Service {
+
+ public static final int NOTIFICATION_DOWNLOAD_IN_PROGRESS = 1;
+
+ class UploadImageTask extends AsyncTask {
+ MWApi api;
+ Context context;
+ NotificationManager notificationsManager;
+
+ private Notification curNotification;
+
+ @Override
+ protected String doInBackground(String... params) {
+ Uri imageUri = Uri.parse(params[0]);
+ String filename = params[1];
+ String text = params[2];
+ String comment = params[3];
+
+ InputStream file;
+
+ try {
+ file = context.getContentResolver().openInputStream(imageUri);
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+
+ try {
+ ApiResult result = api.upload(filename, file, text, comment);
+
+// Document document = (Document)result.getDocument();
+// StringWriter wr = new StringWriter();
+// try {
+// Transformer trans = TransformerFactory.newInstance().newTransformer();
+// trans.transform(new DOMSource(result.getDocument()), new StreamResult(wr));
+// String res = wr.toString();
+// return res;
+// } catch (Exception e) {
+// e.printStackTrace();
+// //FUCK YOU YOU SON OF A LEMON PARTY
+// }
+
+ return result.getString("/api/upload/@result");
+ } catch (IOException e) {
+ e.printStackTrace();
+ return "Failure";
+ }
+ }
+
+ UploadImageTask(MWApi api, Context context, NotificationManager notificationManager) {
+ this.api = api;
+ this.context = context;
+ this.notificationsManager = notificationManager;
+ }
+
+ @Override
+ protected void onPostExecute(String result) {
+ Log.d("Commons", "Done!");
+ super.onPostExecute(result);
+ if(result.equals("Success")) {
+ Toast successToast = Toast.makeText(context, R.string.uploading_success, Toast.LENGTH_LONG);
+ successToast.show();
+ } else {
+ Toast failureToast = Toast.makeText(context, R.string.uploading_failed, Toast.LENGTH_LONG);
+ failureToast.show();
+ }
+ }
+
+ @Override
+ protected void onPreExecute() {
+ super.onPreExecute();
+ Toast startingToast = Toast.makeText(context, R.string.uploading_started, Toast.LENGTH_LONG);
+ startingToast.show();
+ Log.d("Commons", "Before execution!");
+// curNotification = new NotificationCompat.Builder(context).setAutoCancel(true)
+// .setContentTitle("Starting Upload!")
+// .setContentText("Uploading!")
+// .setSmallIcon(R.drawable.ic_launcher)
+// .setAutoCancel(true)
+// .getNotification();
+//
+// notificationsManager.notify(NOTIFICATION_DOWNLOAD_IN_PROGRESS, curNotification);
+ }
+
+
+ }
+ public class UploadBinder extends Binder {
+ UploadService getService() {
+ return UploadService.this;
+ }
+ }
+
+ final UploadBinder uploadBinder = new UploadBinder();
+ @Override
+ public IBinder onBind(Intent intent) {
+ return uploadBinder;
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ return Service.START_NOT_STICKY;
+ }
+
+ public void doUpload(MWApi api, Uri imageUri, String filename, String description, String editSummary) {
+ UploadImageTask uploadImage = new UploadImageTask(api, this, (NotificationManager)getSystemService(NOTIFICATION_SERVICE));
+ uploadImage.execute(imageUri.toString(), filename, description, editSummary);
+ }
+}