From 7450b44ab771f9ff8fdf88b78340076259aa9043 Mon Sep 17 00:00:00 2001
From: Kshitij Bhardwaj <44129798+kbhardwaj123@users.noreply.github.com>
Date: Sun, 8 Mar 2020 13:09:38 -0400
Subject: [PATCH] Fixes #3295: Ultimate achievement: Too many contributions
(#3378)
---
.../achievements/AchievementsActivity.java | 45 +++++++++++++++----
app/src/main/res/values/strings.xml | 1 +
2 files changed, 37 insertions(+), 9 deletions(-)
diff --git a/app/src/main/java/fr/free/nrw/commons/achievements/AchievementsActivity.java b/app/src/main/java/fr/free/nrw/commons/achievements/AchievementsActivity.java
index 93a93e3488..d12ec942eb 100644
--- a/app/src/main/java/fr/free/nrw/commons/achievements/AchievementsActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/achievements/AchievementsActivity.java
@@ -110,6 +110,9 @@ public class AchievementsActivity extends NavigationBaseActivity {
private CompositeDisposable compositeDisposable = new CompositeDisposable();
+ // To keep track of the number of wiki edits made by a user
+ private int numberOfEdits = 0;
+
/**
* This method helps in the creation Achievement screen and
* dynamically set the size of imageView
@@ -140,8 +143,8 @@ protected void onCreate(Bundle savedInstanceState) {
progressBar.setVisibility(View.VISIBLE);
hideLayouts();
- setAchievements();
setWikidataEditCount();
+ setAchievements();
initDrawer();
}
@@ -230,12 +233,24 @@ private void setAchievements() {
Timber.d("success");
layoutImageReverts.setVisibility(View.INVISIBLE);
imageView.setVisibility(View.INVISIBLE);
- showSnackBarWithRetry();
+ // If the number of edits made by the user are more than 150,000
+ // in some cases such high number of wiki edit counts cause the
+ // achievements calculator to fail in some cases, for more details
+ // refer Issue: #3295
+ if (numberOfEdits <= 150000) {
+ showSnackBarWithRetry(false);
+ } else {
+ showSnackBarWithRetry(true);
+ }
}
},
t -> {
Timber.e(t, "Fetching achievements statistics failed");
- showSnackBarWithRetry();
+ if (numberOfEdits <= 150000) {
+ showSnackBarWithRetry(false);
+ } else {
+ showSnackBarWithRetry(true);
+ }
}
));
}
@@ -259,7 +274,10 @@ private void setWikidataEditCount() {
.getWikidataEdits(userName)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
- .subscribe(edits -> wikidataEditsText.setText(String.valueOf(edits)), e -> {
+ .subscribe(edits -> {
+ numberOfEdits = edits;
+ wikidataEditsText.setText(String.valueOf(edits));
+ }, e -> {
Timber.e("Error:" + e);
}));
}
@@ -267,11 +285,20 @@ private void setWikidataEditCount() {
/**
* Shows a snack bar which has an action button which on click dismisses the snackbar and invokes the
* listener passed
+ * @param tooManyAchievements if this value is true it means that the number of achievements of the
+ * user are so high that it wrecks havoc with the Achievements calculator due to which request may time
+ * out. Well this is the Ultimate Achievement
*/
- private void showSnackBarWithRetry() {
- progressBar.setVisibility(View.GONE);
- ViewUtil.showDismissibleSnackBar(findViewById(android.R.id.content),
- R.string.achievements_fetch_failed, R.string.retry, view -> setAchievements());
+ private void showSnackBarWithRetry(boolean tooManyAchievements) {
+ if (tooManyAchievements) {
+ progressBar.setVisibility(View.GONE);
+ ViewUtil.showDismissibleSnackBar(findViewById(android.R.id.content),
+ R.string.achievements_fetch_failed_ultimate_achievement, R.string.retry, view -> setAchievements());
+ } else {
+ progressBar.setVisibility(View.GONE);
+ ViewUtil.showDismissibleSnackBar(findViewById(android.R.id.content),
+ R.string.achievements_fetch_failed, R.string.retry, view -> setAchievements());
+ }
}
/**
@@ -504,4 +531,4 @@ private boolean checkAccount(){
return true;
}
-}
+}
\ 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 da88ede6f0..b2f987c798 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -458,6 +458,7 @@ Upload your first media by tapping on the add button.
Display location permission
Ask for location permission when needed for nearby notification card view feature.
Something went wrong, We could not fetch your achievements
+ You\'ve made so many contributions our achievements calculation system can\'t cope. This is the ultimate achievement.
Ends on:
Display campaigns
See the ongoing campaigns