diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionViewHolder.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionViewHolder.java index 43a2af725..df50b9cb8 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionViewHolder.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionViewHolder.java @@ -17,6 +17,7 @@ class ContributionViewHolder { final ProgressBar progressView; final ImageButton retryButton; final ImageButton cancelButton; + int position; ContributionViewHolder(View parent) { imageView = parent.findViewById(R.id.contributionImage); @@ -26,5 +27,6 @@ class ContributionViewHolder { progressView = parent.findViewById(R.id.contributionProgress); retryButton = parent.findViewById(R.id.retryButton); cancelButton = parent.findViewById(R.id.cancelButton); + position = 0; } } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java index c8f140575..568dcc649 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java @@ -291,6 +291,8 @@ public class ContributionsFragment contributionsListFragment.clearSyncMessage(); notifyAndMigrateDataSetObservers(); + + ((ContributionsListAdapter)contributionsListFragment.getAdapter()).setUploadService(allContributions, uploadService); } } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListAdapter.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListAdapter.java index eec0ab201..268dda208 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListAdapter.java @@ -9,16 +9,27 @@ import android.view.View; import android.view.ViewGroup; import fr.free.nrw.commons.R; +import fr.free.nrw.commons.upload.UploadService; +import timber.log.Timber; + +import static fr.free.nrw.commons.contributions.Contribution.STATE_FAILED; class ContributionsListAdapter extends CursorAdapter { private final ContributionDao contributionDao; + private Cursor allContributions; + private UploadService uploadService; public ContributionsListAdapter(Context context, Cursor c, int flags, ContributionDao contributionDao) { super(context, c, flags); this.contributionDao = contributionDao; } + public void setUploadService(Cursor allContributions, UploadService uploadService) { + this.allContributions = allContributions; + this.uploadService = uploadService; + } + @Override public View newView(Context context, Cursor cursor, ViewGroup viewGroup) { View parent = LayoutInflater.from(context) @@ -37,20 +48,8 @@ class ContributionsListAdapter extends CursorAdapter { views.seqNumView.setText(String.valueOf(cursor.getPosition() + 1)); views.seqNumView.setVisibility(View.VISIBLE); + views.position = cursor.getPosition(); - views.retryButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Log.d("deneme","Retry button is clicked"); - } - }); - - views.cancelButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Log.d("deneme","Cancel button is clicked"); - } - }); switch (contribution.getState()) { case Contribution.STATE_COMPLETED: @@ -86,7 +85,45 @@ class ContributionsListAdapter extends CursorAdapter { views.progressView.setVisibility(View.GONE); views.retryButton.setVisibility(View.VISIBLE); views.cancelButton.setVisibility(View.VISIBLE); + + views.retryButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Log.d("deneme","contex:"+context); + Log.d("deneme","Retry button is clicked"); + retryUpload(cursor); + } + }); + + views.cancelButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Log.d("deneme","Cancel button is clicked"); + } + }); + + break; } } + + /** + * Retry upload when it is failed + * @param cursor position of upload which will be retried + */ + public void retryUpload(Cursor cursor) { + // TODO: first check for internet connection, if not display a message and do nothing. + Log.d("deneme","Retrying i:"+cursor.getColumnName(1)); + Contribution c = contributionDao.fromCursor(cursor); + if (c.getState() == STATE_FAILED) { + uploadService.queue(UploadService.ACTION_UPLOAD_FILE, c); + Timber.d("Restarting for %s", c.toString()); + Log.d("deneme","Restarting for %s"+ c.getFilename()); + + } else { + Timber.d("Skipping re-upload for non-failed %s", c.toString()); + Log.d("deneme","Skipping re-upload for non-failed %s"+ c.getFilename()); + + } + } } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java index 0873d46d8..1ea8bc4ed 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java @@ -10,6 +10,7 @@ import android.content.Intent; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.v4.app.NotificationCompat; +import android.util.Log; import android.webkit.MimeTypeMap; import android.widget.Toast; @@ -330,6 +331,7 @@ public class UploadService extends HandlerService { contribution.setState(Contribution.STATE_FAILED); contributionDao.save(contribution); + Log.d("deneme","failed and contrib saved, contribution name is"+contribution.getFilename()); } private String findUniqueFilename(String fileName) throws IOException {