mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 20:33:53 +01:00
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
This commit is contained in:
parent
d1f0539bbe
commit
959cff3ae2
4 changed files with 36 additions and 38 deletions
|
|
@ -39,7 +39,8 @@
|
|||
<string name="title_activity_contributions">My Contributions</string>
|
||||
<string name="contribution_state_queued">Queued</string>
|
||||
<string name="contribution_state_failed">Failed</string>
|
||||
<string name="contribution_state_in_progress">Uploading</string>
|
||||
<string name="contribution_state_in_progress">%1$d%% complete</string>
|
||||
<string name="contribution_state_starting">Uploading</string>
|
||||
<string name="menu_from_gallery">From Gallery</string>
|
||||
<string name="menu_from_camera">Take Photo</string>
|
||||
</resources>
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
+ ");";
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue