diff --git a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java
index 6968d1a48..e95196bbb 100644
--- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java
+++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java
@@ -18,6 +18,7 @@ import android.os.Build;
import android.os.Process;
import android.util.Log;
import androidx.annotation.NonNull;
+import androidx.multidex.BuildConfig;
import androidx.multidex.MultiDexApplication;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.imagepipeline.core.ImagePipeline;
@@ -135,7 +136,7 @@ public class CommonsApplication extends MultiDexApplication {
ContributionDao contributionDao;
/**
- * In memory list of contributios whose uploads ahve been paused by the user
+ * In-memory list of contributions whose uploads have been paused by the user
*/
public static Map pauseUploads = new HashMap<>();
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 aa737cbaf..1c69eceab 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
@@ -8,6 +8,8 @@ import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AlertDialog.Builder;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.ButterKnife;
@@ -54,13 +56,23 @@ public class ContributionViewHolder extends RecyclerView.ViewHolder {
private final CompositeDisposable compositeDisposable = new CompositeDisposable();
private final MediaClient mediaClient;
private boolean isWikipediaButtonDisplayed;
+ private AlertDialog pausingPopUp;
+ private View parent;
ContributionViewHolder(final View parent, final Callback callback,
final MediaClient mediaClient) {
super(parent);
+ this.parent = parent;
this.mediaClient = mediaClient;
ButterKnife.bind(this, parent);
this.callback = callback;
+
+ /* Set a dialog indicating that the upload is being paused. This is needed because pausing
+ an upload might take a dozen seconds. */
+ AlertDialog.Builder builder = new Builder(parent.getContext());
+ builder.setCancelable(false);
+ builder.setView(R.layout.progress_dialog);
+ pausingPopUp = builder.create();
}
public void init(final int position, final Contribution contribution) {
@@ -105,8 +117,8 @@ public class ContributionViewHolder extends RecyclerView.ViewHolder {
break;
case Contribution.STATE_QUEUED:
case Contribution.STATE_QUEUED_LIMITED_CONNECTION_MODE:
- stateView.setVisibility(View.VISIBLE);
progressView.setVisibility(View.GONE);
+ stateView.setVisibility(View.VISIBLE);
stateView.setText(R.string.contribution_state_queued);
imageOptions.setVisibility(View.GONE);
break;
@@ -128,14 +140,17 @@ public class ContributionViewHolder extends RecyclerView.ViewHolder {
}
break;
case Contribution.STATE_PAUSED:
+ progressView.setVisibility(View.GONE);
stateView.setVisibility(View.VISIBLE);
stateView.setText(R.string.paused);
- setResume();
- progressView.setVisibility(View.GONE);
- cancelButton.setVisibility(View.GONE);
+ cancelButton.setVisibility(View.VISIBLE);
retryButton.setVisibility(View.GONE);
pauseResumeButton.setVisibility(View.VISIBLE);
imageOptions.setVisibility(View.VISIBLE);
+ setResume();
+ if(pausingPopUp.isShowing()){
+ pausingPopUp.hide();
+ }
break;
case Contribution.STATE_FAILED:
stateView.setVisibility(View.VISIBLE);
@@ -245,6 +260,7 @@ public class ContributionViewHolder extends RecyclerView.ViewHolder {
}
private void pause() {
+ pausingPopUp.show();
callback.pauseUpload(contribution);
setResume();
}
@@ -254,7 +270,7 @@ public class ContributionViewHolder extends RecyclerView.ViewHolder {
*/
private void setPaused() {
pauseResumeButton.setImageResource(R.drawable.pause_icon);
- pauseResumeButton.setTag(R.string.pause);
+ pauseResumeButton.setTag(parent.getContext().getString(R.string.pause));
}
/**
@@ -262,6 +278,6 @@ public class ContributionViewHolder extends RecyclerView.ViewHolder {
*/
private void setResume() {
pauseResumeButton.setImageResource(R.drawable.play_icon);
- pauseResumeButton.setTag(R.string.resume);
+ pauseResumeButton.setTag(parent.getContext().getString(R.string.resume));
}
}
diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java
index cf76cf2d5..3137c9b58 100644
--- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java
+++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java
@@ -115,7 +115,6 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl
private int contributionsSize;
String userName;
-
@Override
public void onCreate(@Nullable @org.jetbrains.annotations.Nullable final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -389,7 +388,18 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl
@Override
public void deleteUpload(final Contribution contribution) {
- contributionsListPresenter.deleteUpload(contribution);
+ DialogUtil.showAlertDialog(getActivity(),
+ String.format(getString(R.string.cancelling_upload),
+ Locale.getDefault().getDisplayLanguage()),
+ String.format(getString(R.string.cancel_upload_dialog),
+ Locale.getDefault().getDisplayLanguage()),
+ "YES", "NO",
+ () -> {
+ ViewUtil.showShortToast(getContext(), R.string.cancelling_upload);
+ contributionsListPresenter.deleteUpload(contribution);
+ }, () -> {
+ // Do nothing
+ });
}
@Override
diff --git a/app/src/main/res/layout/progress_dialog.xml b/app/src/main/res/layout/progress_dialog.xml
new file mode 100644
index 000000000..dba9c62ff
--- /dev/null
+++ b/app/src/main/res/layout/progress_dialog.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1196d27e9..f07f3079d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -330,6 +330,7 @@
Error fetching nearby monuments.
No recent searches
Are you sure you want to clear your search history?
+ Are you sure you want to cancel this upload?
Do you want to delete this search?
Search history deleted
@@ -625,6 +626,8 @@ Upload your first media by tapping on the add button.
Quality images are diagrams or photographs that meet certain quality standards (which are mostly technical in nature) and are valuable for Wikimedia projects
Resuming upload…
Pausing upload…
+ Cancelling upload…
+ Cancel Upload
You have enabled limited connection mode. All uploads are paused and will resume once you disable this mode.
Limited connection mode is on.