From 959cff3ae22babbfa5acb22513581ffee4827317 Mon Sep 17 00:00:00 2001 From: YuviPanda Date: Mon, 4 Feb 2013 01:28:30 +0530 Subject: [PATCH] Show upload progress in my contributions Abandoned local broadcast based approach, and 'went with the flow'. Now have a 'transferred' column in sqlite database & the content provider --- commons/res/values/strings.xml | 3 +- .../org/wikimedia/commons/UploadService.java | 16 +------- .../commons/contributions/Contribution.java | 18 ++++++++- .../contributions/ContributionsActivity.java | 37 ++++++++----------- 4 files changed, 36 insertions(+), 38 deletions(-) diff --git a/commons/res/values/strings.xml b/commons/res/values/strings.xml index b9201bcca..18f7d8095 100644 --- a/commons/res/values/strings.xml +++ b/commons/res/values/strings.xml @@ -39,7 +39,8 @@ My Contributions Queued Failed - Uploading + %1$d%% complete + Uploading From Gallery Take Photo \ No newline at end of file diff --git a/commons/src/main/java/org/wikimedia/commons/UploadService.java b/commons/src/main/java/org/wikimedia/commons/UploadService.java index dfc0c68b2..16c6fb85f 100644 --- a/commons/src/main/java/org/wikimedia/commons/UploadService.java +++ b/commons/src/main/java/org/wikimedia/commons/UploadService.java @@ -4,7 +4,6 @@ import java.io.*; import java.text.*; import java.util.Date; -import android.support.v4.content.LocalBroadcastManager; import org.mediawiki.api.*; import org.wikimedia.commons.contributions.Contribution; import org.wikimedia.commons.contributions.ContributionsActivity; @@ -26,10 +25,6 @@ import android.net.*; public class UploadService extends IntentService { private static final String EXTRA_PREFIX = "org.wikimedia.commons.upload"; - public static final String INTENT_CONTRIBUTION_STATE_CHANGED = EXTRA_PREFIX + ".progress"; - public static final String EXTRA_CONTRIBUTION_ID = EXTRA_PREFIX + ".filename"; - public static final String EXTRA_TRANSFERRED_BYTES = EXTRA_PREFIX + ".progress.transferred"; - public static final String EXTRA_MEDIA_URI = EXTRA_PREFIX + ".uri"; public static final String EXTRA_TARGET_FILENAME = EXTRA_PREFIX + ".filename"; @@ -38,7 +33,6 @@ public class UploadService extends IntentService { public static final String EXTRA_MIMETYPE = EXTRA_PREFIX + ".mimetype"; private NotificationManager notificationManager; - private LocalBroadcastManager localBroadcastManager; private ContentProviderClient contributionsProviderClient; private CommonsApplication app; @@ -91,7 +85,6 @@ public class UploadService extends IntentService { } notificationTitleChanged = true; contribution.setState(Contribution.STATE_IN_PROGRESS); - contribution.save(); } if(transferred == total) { // Completed! @@ -100,12 +93,9 @@ public class UploadService extends IntentService { } else { 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_CONTRIBUTION_STATE_CHANGED); - // mediaUploadProgressIntent.putExtra(EXTRA_MEDIA contribution); - mediaUploadProgressIntent.putExtra(EXTRA_TRANSFERRED_BYTES, transferred); - localBroadcastManager.sendBroadcast(mediaUploadProgressIntent); } + contribution.setTransferred(transferred); + contribution.save(); } } @@ -121,7 +111,6 @@ public class UploadService extends IntentService { public void onCreate() { super.onCreate(); notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); - localBroadcastManager = LocalBroadcastManager.getInstance(this); app = (CommonsApplication) this.getApplicationContext(); contributionsProviderClient = this.getContentResolver().acquireContentProviderClient(ContributionsContentProvider.AUTHORITY); } @@ -184,7 +173,6 @@ public class UploadService extends IntentService { Intent mediaUploadQueuedIntent = new Intent(); mediaUploadQueuedIntent.putExtra("dummy-data", contribution); // FIXME: Move to separate handler, do not inherit from IntentService - localBroadcastManager.sendBroadcast(mediaUploadQueuedIntent); return super.onStartCommand(mediaUploadQueuedIntent, flags, startId); } diff --git a/commons/src/main/java/org/wikimedia/commons/contributions/Contribution.java b/commons/src/main/java/org/wikimedia/commons/contributions/Contribution.java index b28bfec21..e02ab22f1 100644 --- a/commons/src/main/java/org/wikimedia/commons/contributions/Contribution.java +++ b/commons/src/main/java/org/wikimedia/commons/contributions/Contribution.java @@ -21,10 +21,23 @@ public class Contribution extends Media { private ContentProviderClient client; private Uri contentUri; + public long getTransferred() { + return transferred; + } + + public void setTransferred(long transferred) { + this.transferred = transferred; + } + + private long transferred; + public String getEditSummary() { return editSummary; } + public Uri getContentUri() { + return contentUri; + } private String editSummary; public Date getTimestamp() { @@ -104,6 +117,7 @@ public class Contribution extends Media { cv.put(Table.COLUMN_LENGTH, getDataLength()); cv.put(Table.COLUMN_TIMESTAMP, getTimestamp().getTime()); cv.put(Table.COLUMN_STATE, getState()); + cv.put(Table.COLUMN_TRANSFERRED, transferred); return cv; } @@ -119,6 +133,7 @@ public class Contribution extends Media { public static final String COLUMN_STATE = "state"; public static final String COLUMN_LENGTH = "length"; public static final String COLUMN_UPLOADED = "uploaded"; + public static final String COLUMN_TRANSFERRED = "transferred"; // Currently transferred number of bytes private static final String CREATE_TABLE_STATEMENT = "CREATE TABLE " + TABLE_NAME + " (" @@ -129,7 +144,8 @@ public class Contribution extends Media { + "uploaded INTEGER," + "timestamp INTEGER," + "state INTEGER," - + "length INTEGER" + + "length INTEGER," + + "transferred INTEGER" + ");"; diff --git a/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java index 082976820..db8c28c6e 100644 --- a/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java +++ b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java @@ -7,7 +7,6 @@ import android.provider.MediaStore; import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; -import android.content.BroadcastReceiver; import android.content.*; import android.database.Cursor; import android.os.Bundle; @@ -50,6 +49,8 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load private final static int SELECT_FROM_GALLERY = 1; private final static int SELECT_FROM_CAMERA = 2; + private TextView progressUpdateTextView; + public ContributionsActivity() { super(WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE); } @@ -60,12 +61,17 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load private final int COLUMN_LOCALURI; private final int COLUMN_STATE; private final int COLUMN_UPLOADED; + private final int COLUMN_TRANSFERRED; + private final int COLUMN_LENGTH; + public ContributionAdapter(Context context, Cursor c, int flags) { super(context, c, flags); COLUMN_FILENAME = c.getColumnIndex(Contribution.Table.COLUMN_FILENAME); COLUMN_STATE = c.getColumnIndex(Contribution.Table.COLUMN_STATE); COLUMN_LOCALURI = c.getColumnIndex(Contribution.Table.COLUMN_LOCAL_URI); COLUMN_UPLOADED = c.getColumnIndex(Contribution.Table.COLUMN_UPLOADED); + COLUMN_LENGTH = c.getColumnIndex(Contribution.Table.COLUMN_LENGTH); + COLUMN_TRANSFERRED = c.getColumnIndex(Contribution.Table.COLUMN_TRANSFERRED); } @Override @@ -97,7 +103,11 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load stateView.setText(R.string.contribution_state_queued); break; case Contribution.STATE_IN_PROGRESS: - stateView.setText(R.string.contribution_state_in_progress); + stateView.setText(R.string.contribution_state_starting); + long total = cursor.getLong(COLUMN_LENGTH); + long transferred = cursor.getLong(COLUMN_TRANSFERRED); + String stateString = String.format(getString(R.string.contribution_state_in_progress), (int)(((double)transferred / (double)total) * 100)); + stateView.setText(stateString); break; case Contribution.STATE_FAILED: stateView.setText(R.string.contribution_state_failed); @@ -106,24 +116,20 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load } } - private LocalBroadcastManager localBroadcastManager; - private GridView contributionsList; private ContributionAdapter contributionsAdapter; private DisplayImageOptions contributionDisplayOptions; - private String[] broadcastsToReceive = { - UploadService.INTENT_CONTRIBUTION_STATE_CHANGED - }; - private String[] CONTRIBUTIONS_PROJECTION = { Contribution.Table.COLUMN_ID, Contribution.Table.COLUMN_FILENAME, Contribution.Table.COLUMN_LOCAL_URI, Contribution.Table.COLUMN_STATE, - Contribution.Table.COLUMN_UPLOADED + Contribution.Table.COLUMN_UPLOADED, + Contribution.Table.COLUMN_LENGTH, + Contribution.Table.COLUMN_TRANSFERRED }; private String CONTRIBUTION_SELECTION = ""; @@ -137,26 +143,14 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load */ private String CONTRIBUTION_SORT = Contribution.Table.COLUMN_STATE + " DESC, (" + Contribution.Table.COLUMN_TIMESTAMP + " * " + Contribution.Table.COLUMN_STATE + ")"; - private BroadcastReceiver messageReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - } - }; - @Override protected void onResume() { super.onResume(); - for(int i=0; i < broadcastsToReceive.length; i++) { - localBroadcastManager.registerReceiver(messageReceiver, new IntentFilter(broadcastsToReceive[i])); - } } @Override protected void onPause() { super.onPause(); - for(int i=0; i < broadcastsToReceive.length; i++) { - localBroadcastManager.unregisterReceiver(messageReceiver); - } } @Override @@ -177,7 +171,6 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTitle(R.string.title_activity_contributions); - localBroadcastManager = LocalBroadcastManager.getInstance(this); setContentView(R.layout.activity_contributions); contributionsList = (GridView)findViewById(R.id.contributionsList);