Improved the deletion feature

This commit is contained in:
Kanahia 2024-06-21 12:09:59 +05:30
parent 517e0ca503
commit c3b8f6ade3
6 changed files with 102 additions and 37 deletions

View file

@ -1,5 +1,6 @@
package fr.free.nrw.commons.upload
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
@ -7,13 +8,17 @@ import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.paging.PagedList
import androidx.recyclerview.widget.LinearLayoutManager
import fr.free.nrw.commons.R
import fr.free.nrw.commons.auth.SessionManager
import fr.free.nrw.commons.contributions.Contribution
import fr.free.nrw.commons.databinding.FragmentFailedUploadsBinding
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment
import fr.free.nrw.commons.media.MediaClient
import fr.free.nrw.commons.profile.ProfileActivity
import fr.free.nrw.commons.utils.DialogUtil
import fr.free.nrw.commons.utils.ViewUtil
import org.apache.commons.lang3.StringUtils
import java.util.Locale
import javax.inject.Inject
/**
@ -22,7 +27,6 @@ import javax.inject.Inject
* create an instance of this fragment.
*/
class FailedUploadsFragment : CommonsDaggerSupportFragment(),PendingUploadsContract.View {
// TODO: Rename and change types of parameters
private var param1: String? = null
private var param2: String? = null
private val ARG_PARAM1 = "param1"
@ -43,6 +47,15 @@ class FailedUploadsFragment : CommonsDaggerSupportFragment(),PendingUploadsContr
var contributionsList = ArrayList<Contribution>()
private lateinit var uploadProgressActivity: UploadProgressActivity
override fun onAttach(context: Context) {
super.onAttach(context)
if (context is UploadProgressActivity) {
uploadProgressActivity = context
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
@ -82,7 +95,7 @@ class FailedUploadsFragment : CommonsDaggerSupportFragment(),PendingUploadsContr
) { list: PagedList<Contribution?> ->
contributionsList = ArrayList()
list.forEach {
if (it != null){
if (it != null) {
if (it.state == Contribution.STATE_FAILED) {
contributionsList.add(it)
}
@ -101,15 +114,6 @@ class FailedUploadsFragment : CommonsDaggerSupportFragment(),PendingUploadsContr
}
companion object {
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment FailedUploadsFragment.
*/
// TODO: Rename and change types and number of parameters
@JvmStatic
fun newInstance(param1: String, param2: String) =
FailedUploadsFragment().apply {
@ -121,8 +125,40 @@ class FailedUploadsFragment : CommonsDaggerSupportFragment(),PendingUploadsContr
}
fun restartUploads() {
if (contributionsList != null){
pendingUploadsPresenter.restartUploads(contributionsList, 0 , this.requireContext().applicationContext)
if (contributionsList != null) {
pendingUploadsPresenter.restartUploads(
contributionsList,
0,
this.requireContext().applicationContext
)
}
}
fun deleteUploads() {
if (contributionsList != null) {
DialogUtil.showAlertDialog(
requireActivity(),
String.format(
Locale.getDefault(),
getString(R.string.cancelling_all_the_uploads)
),
String.format(
Locale.getDefault(),
getString(R.string.are_you_sure_that_you_want_cancel_all_the_uploads)
),
String.format(Locale.getDefault(), getString(R.string.yes)),
String.format(Locale.getDefault(), getString(R.string.no)),
{
ViewUtil.showShortToast(context, R.string.cancelling_upload)
uploadProgressActivity.hidePendingIcons()
pendingUploadsPresenter.deleteUploads(
contributionsList,
0,
this.requireContext().applicationContext
)
},
{}
)
}
}
}

View file

@ -6,8 +6,7 @@ import fr.free.nrw.commons.contributions.Contribution;
public class PendingUploadsContract {
public interface View {
}
public interface View { }
public interface UserActionListener extends
BasePresenter<fr.free.nrw.commons.upload.PendingUploadsContract.View> {

View file

@ -20,7 +20,6 @@ import fr.free.nrw.commons.profile.ProfileActivity
import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog
import fr.free.nrw.commons.utils.ViewUtil
import org.apache.commons.lang3.StringUtils
import timber.log.Timber
import java.util.Locale
import javax.inject.Inject
@ -32,9 +31,6 @@ import javax.inject.Inject
*/
class PendingUploadsFragment : CommonsDaggerSupportFragment(), PendingUploadsContract.View,
PendingUploadsAdapter.Callback{
var isPendingIconsVisible = false
// TODO: Rename and change types of parameters
private var param1: String? = null
private var param2: String? = null
private val ARG_PARAM1 = "param1"
@ -111,8 +107,8 @@ class PendingUploadsFragment : CommonsDaggerSupportFragment(), PendingUploadsCon
) { list: PagedList<Contribution?> ->
contributionsSize = list.size
contributionsList = ArrayList()
var x = 0;
var y = 0;
var pausedOrQueuedUploads = 0
var failedUploads = 0
list.forEach {
if (it != null){
if (it.state == Contribution.STATE_PAUSED
@ -124,14 +120,14 @@ class PendingUploadsFragment : CommonsDaggerSupportFragment(), PendingUploadsCon
if (it.state == Contribution.STATE_PAUSED
|| it.state == Contribution.STATE_QUEUED
) {
x++
pausedOrQueuedUploads++
}
if (it.state == Contribution.STATE_FAILED){
y++
failedUploads++
}
}
}
if (y == 0){
if (failedUploads == 0){
uploadProgressActivity.setErrorIconsVisibility(false)
}else{
uploadProgressActivity.setErrorIconsVisibility(true)
@ -169,7 +165,7 @@ class PendingUploadsFragment : CommonsDaggerSupportFragment(), PendingUploadsCon
binding.pendingUploadsRecyclerView.setAdapter(adapter)
binding.progressTextView.setText((totalUploads-contributionsList.size).toString() + "/" + totalUploads + " uploaded")
binding.progressBarPending.progress = totalUploads-contributionsList.size
if (x == contributionsList.size) {
if (pausedOrQueuedUploads == contributionsList.size) {
uploadProgressActivity.setPausedIcon(true)
}else{
uploadProgressActivity.setPausedIcon(false)
@ -201,15 +197,6 @@ class PendingUploadsFragment : CommonsDaggerSupportFragment(), PendingUploadsCon
}
companion object {
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment PendingUploadsFragment.
*/
// TODO: Rename and change types and number of parameters
@JvmStatic
fun newInstance(param1: String, param2: String) =
PendingUploadsFragment().apply {
@ -232,5 +219,27 @@ class PendingUploadsFragment : CommonsDaggerSupportFragment(), PendingUploadsCon
}
}
fun deleteUploads(){
if (contributionsList != null){
showAlertDialog(
requireActivity(),
String.format(
Locale.getDefault(),
"Cancelling all the uploads..."
),
String.format(
Locale.getDefault(),
"Are you sure that you want cancel all the uploads?"
),
String.format(Locale.getDefault(), getString(R.string.yes)),
String.format(Locale.getDefault(), getString(R.string.no)),
{
ViewUtil.showShortToast(context, R.string.cancelling_upload)
uploadProgressActivity.hidePendingIcons()
pendingUploadsPresenter.deleteUploads(contributionsList, 0, this.requireContext().applicationContext)
},
{}
)
}
}
}

View file

@ -139,6 +139,25 @@ public class PendingUploadsPresenter implements UserActionListener {
));
}
public void deleteUploads(List<Contribution> l, int index, Context context) {
if (index >= l.size()) {
return;
}
Contribution it = l.get(index);
compositeDisposable.add(repository
.deleteContributionFromDB(it)
.subscribeOn(ioThreadScheduler)
.doOnComplete(() -> {
CommonsApplication.cancelledUploads.add(it.getPageId());
deleteUploads(l, index + 1, context);
}
)
.subscribe(() ->
WorkRequestHelper.Companion.makeOneTimeWorkRequest(
context, ExistingWorkPolicy.KEEP)
));
}
public void restartUploads(List<Contribution> l, int index, Context context) {
if (index >= l.size()) {
return;

View file

@ -100,7 +100,7 @@ class UploadProgressActivity : BaseActivity() {
if (menu!!.findItem(R.id.cancel_icon) == null) {
menu!!.add(Menu.NONE, R.id.cancel_icon, Menu.NONE, "Cancel")
.setIcon(android.R.drawable.ic_menu_close_clear_cancel).setOnMenuItemClickListener {
hidePendingIcons()
pendingUploadsFragment!!.deleteUploads()
true
}
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)
@ -130,7 +130,7 @@ class UploadProgressActivity : BaseActivity() {
if (menu!!.findItem(R.id.cancel_icon) == null) {
menu!!.add(Menu.NONE, R.id.cancel_icon, Menu.NONE, "Cancel")
.setIcon(android.R.drawable.ic_menu_close_clear_cancel).setOnMenuItemClickListener {
hidePendingIcons()
failedUploadsFragment!!.deleteUploads()
true
}
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)

View file

@ -821,4 +821,6 @@ Upload your first media by tapping on the add button.</string>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string>
<string name="feedback_destination_note">Your feedback gets posted to the following wiki page: <![CDATA[ <a href="https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback">Commons:Mobile app/Feedback</a> ]]></string>
<string name="are_you_sure_that_you_want_cancel_all_the_uploads">Are you sure that you want cancel all the uploads?</string>
<string name="cancelling_all_the_uploads">Cancelling all the uploads...</string>
</resources>