From 9431e3770cb4c31dcca61666694e863f7d0d8db5 Mon Sep 17 00:00:00 2001 From: Arin Modi Date: Sat, 26 Feb 2022 05:11:14 +0530 Subject: [PATCH] Fixed #4836 & #4840 Added the functionality of cancel upload and also solved the small bug of pausing upload (#4843) * Fixed #4836 & #4840 * Added Pausing PopUp * Closing Pausing PopUp exactly when pause button disappears * Managed to display the Pausing Upload * Added the Pausing Dialog Using Progress Bar * Added the Pausing Dialog Using Progress Bar * Added Required Changes * Added Required Changes-wording change * Added Required Changes-wording change --- .../free/nrw/commons/CommonsApplication.java | 3 +- .../contributions/ContributionViewHolder.java | 28 +++++++++++++++---- .../ContributionsListFragment.java | 14 ++++++++-- app/src/main/res/layout/progress_dialog.xml | 23 +++++++++++++++ app/src/main/res/values/strings.xml | 3 ++ 5 files changed, 62 insertions(+), 9 deletions(-) create mode 100644 app/src/main/res/layout/progress_dialog.xml 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.