diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionDao.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionDao.java index 5fb002319..2452fd4ce 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionDao.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionDao.java @@ -23,6 +23,11 @@ public abstract class ContributionDao { @Query("SELECT * FROM contribution WHERE state = -1 ORDER BY media_dateUploaded DESC") abstract DataSource.Factory fetchContributionsWithStateCompleted(); + @Query("SELECT * FROM contribution WHERE state IN (2, 3, 4) ORDER BY media_dateUploaded DESC") + abstract DataSource.Factory fetchContributionsWithStateInProgress(); + + @Query("SELECT * FROM contribution WHERE state = 1 ORDER BY media_dateUploaded DESC") + abstract DataSource.Factory fetchContributionsWithStateFailed(); @Insert(onConflict = OnConflictStrategy.REPLACE) public abstract void saveSynchronous(Contribution contribution); 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 a36aa5b87..b6295f897 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 @@ -686,7 +686,7 @@ public class ContributionsFragment } @Override - public void updateUploadsIcon(int pendingCount, int errorCount) { + public void updatePendingIcon(int pendingCount) { if (pendingUploadsCountTextView != null){ if (pendingCount != 0){ pendingUploadsCountTextView.setVisibility(View.VISIBLE); @@ -694,14 +694,18 @@ public class ContributionsFragment }else { pendingUploadsCountTextView.setVisibility(View.INVISIBLE); } + } + } + @Override + public void updateErrorIcon(int errorCount) { + if (uploadsErrorTextView != null){ if (errorCount != 0){ uploadsErrorTextView.setVisibility(View.VISIBLE); uploadsErrorTextView.setText(String.valueOf(errorCount)); }else { - uploadsErrorTextView.setVisibility(View.GONE); + uploadsErrorTextView.setVisibility(View.INVISIBLE); } - } } 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 1cca24c98..2dd9b7671 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 @@ -30,7 +30,6 @@ import androidx.recyclerview.widget.RecyclerView.AdapterDataObserver; import androidx.recyclerview.widget.RecyclerView.ItemAnimator; import androidx.recyclerview.widget.RecyclerView.OnItemTouchListener; import androidx.recyclerview.widget.SimpleItemAnimator; -import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.Media; import fr.free.nrw.commons.R; import fr.free.nrw.commons.Utils; @@ -43,14 +42,12 @@ import fr.free.nrw.commons.profile.ProfileActivity; import fr.free.nrw.commons.utils.DialogUtil; import fr.free.nrw.commons.utils.SystemThemeUtils; import fr.free.nrw.commons.utils.ViewUtil; -import java.util.Locale; import java.util.Map; import java.util.Objects; import javax.inject.Inject; import javax.inject.Named; import org.apache.commons.lang3.StringUtils; import fr.free.nrw.commons.wikidata.model.WikiSite; -import timber.log.Timber; /** @@ -217,22 +214,15 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl contributionsListPresenter.setup(userName, Objects.equals(sessionManager.getUserName(), userName)); - contributionsListPresenter.getTotalContribution(userName); - contributionsListPresenter.totalContributionList.observe(getViewLifecycleOwner(), list -> { - uploadErrorCount = 0; - pendingUploadsCount = 0; - for (int i = 0; i< list.size(); i++){ - if (list.get(i) != null){ - if (list.get(i).getState() != Contribution.STATE_COMPLETED){ - if (list.get(i).getState() == Contribution.STATE_FAILED){ - uploadErrorCount++; - }else { - pendingUploadsCount++; - } - } - } - } - callback.updateUploadsIcon(pendingUploadsCount, uploadErrorCount); + contributionsListPresenter.getPendingContributions(userName); + contributionsListPresenter.pendingContributionList.observe(getViewLifecycleOwner(), list -> { + pendingUploadsCount = list.size(); + callback.updatePendingIcon(pendingUploadsCount); + }); + contributionsListPresenter.getFailedContributions(userName); + contributionsListPresenter.failedContributionList.observe(getViewLifecycleOwner(), list -> { + uploadErrorCount = list.size(); + callback.updateErrorIcon(uploadErrorCount); }); contributionsListPresenter.contributionList.observe(getViewLifecycleOwner(), list -> { contributionsSize = list.size(); @@ -515,6 +505,8 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl // Notify the viewpager that number of items have changed. void viewPagerNotifyDataSetChanged(); - void updateUploadsIcon(int pendingCount, int errorCount); + void updatePendingIcon(int pendingCount); + + void updateErrorIcon(int errorCount); } } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListPresenter.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListPresenter.java index c74ec5a33..9daa79709 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListPresenter.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListPresenter.java @@ -26,7 +26,8 @@ public class ContributionsListPresenter implements UserActionListener { private final ContributionsRemoteDataSource contributionsRemoteDataSource; LiveData> contributionList; - LiveData> totalContributionList; + LiveData> pendingContributionList; + LiveData> failedContributionList; @Inject ContributionsListPresenter( @@ -90,7 +91,7 @@ public class ContributionsListPresenter implements UserActionListener { contributionBoundaryCallback.dispose(); } - void getTotalContribution(String userName) { + void getPendingContributions(String userName) { final PagedList.Config pagedListConfig = (new PagedList.Config.Builder()) .setPrefetchDistance(50) @@ -99,13 +100,31 @@ public class ContributionsListPresenter implements UserActionListener { boolean shouldSetBoundaryCallback; contributionBoundaryCallback.setUserName(userName); shouldSetBoundaryCallback = true; - factory = repository.fetchContributions(); + factory = repository.fetchInProgressContributions(); LivePagedListBuilder livePagedListBuilder = new LivePagedListBuilder(factory, pagedListConfig); if (shouldSetBoundaryCallback) { livePagedListBuilder.setBoundaryCallback(contributionBoundaryCallback); } - totalContributionList = livePagedListBuilder.build(); + pendingContributionList = livePagedListBuilder.build(); + } + + void getFailedContributions(String userName) { + final PagedList.Config pagedListConfig = + (new PagedList.Config.Builder()) + .setPrefetchDistance(50) + .setPageSize(10).build(); + Factory factory; + boolean shouldSetBoundaryCallback; + contributionBoundaryCallback.setUserName(userName); + shouldSetBoundaryCallback = true; + factory = repository.fetchFailedContributions(); + LivePagedListBuilder livePagedListBuilder = new LivePagedListBuilder(factory, + pagedListConfig); + if (shouldSetBoundaryCallback) { + livePagedListBuilder.setBoundaryCallback(contributionBoundaryCallback); + } + failedContributionList = livePagedListBuilder.build(); } } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsLocalDataSource.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsLocalDataSource.java index 56a525c50..86182ef80 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsLocalDataSource.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsLocalDataSource.java @@ -71,6 +71,14 @@ class ContributionsLocalDataSource { return contributionDao.fetchContributionsWithStateCompleted(); } + public Factory getInProgressContributions() { + return contributionDao.fetchContributionsWithStateInProgress(); + } + + public Factory getFailedContributions() { + return contributionDao.fetchContributionsWithStateFailed(); + } + public Single> saveContributions(final List contributions) { final List contributionList = new ArrayList<>(); for(final Contribution contribution: contributions) { diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsRepository.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsRepository.java index 63c65084e..83a8dab6a 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsRepository.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsRepository.java @@ -53,6 +53,14 @@ public class ContributionsRepository { return localDataSource.getCompletedContributions(); } + public Factory fetchInProgressContributions() { + return localDataSource.getInProgressContributions(); + } + + public Factory fetchFailedContributions() { + return localDataSource.getFailedContributions(); + } + public Single> save(List contributions) { return localDataSource.saveContributions(contributions); } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/FailedUploadsFragment.kt b/app/src/main/java/fr/free/nrw/commons/upload/FailedUploadsFragment.kt index 94e16649d..089487f6d 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/FailedUploadsFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/FailedUploadsFragment.kt @@ -87,25 +87,22 @@ class FailedUploadsFragment : CommonsDaggerSupportFragment(),PendingUploadsContr fun initRecyclerView() { binding.failedUploadsRecyclerView.setLayoutManager(LinearLayoutManager(this.context)) - pendingUploadsPresenter!!.setup( - userName, - sessionManager!!.userName == userName - ) - pendingUploadsPresenter!!.totalContributionList.observe( + pendingUploadsPresenter!!.getFailedContributions(userName) + pendingUploadsPresenter!!.failedContributionList.observe( viewLifecycleOwner ) { list: PagedList -> contributionsList = ArrayList() list.forEach { if (it != null) { - if (it.state == Contribution.STATE_FAILED) { - contributionsList.add(it) - } + contributionsList.add(it) } } - if (contributionsList.size == 0) { + if (list.size == 0) { + uploadProgressActivity.setErrorIconsVisibility(false) binding.nofailedTextView.visibility = View.VISIBLE binding.failedUplaodsLl.visibility = View.GONE } else { + uploadProgressActivity.setErrorIconsVisibility(true) binding.nofailedTextView.visibility = View.GONE binding.failedUplaodsLl.visibility = View.VISIBLE val adapter = FailedUploadsAdapter(contributionsList, this) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsFragment.kt b/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsFragment.kt index c42486d67..c8c03b6de 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsFragment.kt @@ -131,18 +131,13 @@ class PendingUploadsFragment : CommonsDaggerSupportFragment(), PendingUploadsCon } } } - if (failedUploads == 0){ - uploadProgressActivity.setErrorIconsVisibility(false) - }else{ - uploadProgressActivity.setErrorIconsVisibility(true) - } - if (contributionsList.size == 0) { + if (contributionsSize == 0) { binding.nopendingTextView.visibility = View.VISIBLE binding.pendingUplaodsLl.visibility = View.GONE uploadProgressActivity.hidePendingIcons() } else { if (totalUploads == 0){ - totalUploads = contributionsList.size + totalUploads = contributionsSize binding.progressBarPending.max = totalUploads } binding.nopendingTextView.visibility = View.GONE @@ -167,9 +162,9 @@ class PendingUploadsFragment : CommonsDaggerSupportFragment(), PendingUploadsCon newContributionList.addAll(listOfRemoved) val adapter = PendingUploadsAdapter(newContributionList, this) binding.pendingUploadsRecyclerView.setAdapter(adapter) - binding.progressTextView.setText((totalUploads-contributionsList.size).toString() + "/" + totalUploads + " uploaded") - binding.progressBarPending.progress = totalUploads-contributionsList.size - if (pausedOrQueuedUploads == contributionsList.size) { + binding.progressTextView.setText((totalUploads-contributionsSize).toString() + "/" + totalUploads + " uploaded") + binding.progressBarPending.progress = totalUploads-contributionsSize + if (pausedOrQueuedUploads == contributionsSize) { uploadProgressActivity.setPausedIcon(true) }else{ uploadProgressActivity.setPausedIcon(false) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsPresenter.java b/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsPresenter.java index 3c5fa9689..de0056f30 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsPresenter.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsPresenter.java @@ -39,6 +39,7 @@ public class PendingUploadsPresenter implements UserActionListener { private final ContributionsRemoteDataSource contributionsRemoteDataSource; LiveData> totalContributionList; + LiveData> failedContributionList; @Inject PendingUploadsPresenter( @@ -81,7 +82,7 @@ public class PendingUploadsPresenter implements UserActionListener { } else { contributionBoundaryCallback.setUserName(userName); shouldSetBoundaryCallback = true; - factory = repository.fetchContributions(); + factory = repository.fetchInProgressContributions(); } LivePagedListBuilder livePagedListBuilder = new LivePagedListBuilder(factory, pagedListConfig); @@ -92,6 +93,24 @@ public class PendingUploadsPresenter implements UserActionListener { totalContributionList = livePagedListBuilder.build(); } + void getFailedContributions(String userName) { + final PagedList.Config pagedListConfig = + (new PagedList.Config.Builder()) + .setPrefetchDistance(50) + .setPageSize(10).build(); + Factory factory; + boolean shouldSetBoundaryCallback; + contributionBoundaryCallback.setUserName(userName); + shouldSetBoundaryCallback = true; + factory = repository.fetchFailedContributions(); + LivePagedListBuilder livePagedListBuilder = new LivePagedListBuilder(factory, + pagedListConfig); + if (shouldSetBoundaryCallback) { + livePagedListBuilder.setBoundaryCallback(contributionBoundaryCallback); + } + failedContributionList = livePagedListBuilder.build(); + } + @Override public void onAttachView(@NonNull View view) {