Skip to content

Commit 05678fc

Browse files
Bug fix issue commons-app#2042
* Added a sticky snack bar in achievements activity which shows up when fetch api fails * Snackbar comes with an action button which on click retries fetch. This way user is never shown a blank screen and always has an option to retry fetches
1 parent c2addd9 commit 05678fc

File tree

2 files changed

+26
-12
lines changed

2 files changed

+26
-12
lines changed

app/src/main/java/fr/free/nrw/commons/achievements/AchievementsActivity.java

+25-12
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import android.graphics.drawable.Drawable;
1010
import android.net.Uri;
1111
import android.os.Bundle;
12+
import android.support.design.widget.Snackbar;
1213
import android.support.v4.content.res.ResourcesCompat;
1314
import android.support.v7.app.AlertDialog;
1415
import android.support.v7.widget.Toolbar;
@@ -23,19 +24,10 @@
2324
import android.widget.ProgressBar;
2425
import android.widget.RelativeLayout;
2526
import android.widget.TextView;
26-
27-
import com.dinuscxj.progressbar.CircleProgressBar;
28-
29-
import java.io.File;
30-
import java.io.FileOutputStream;
31-
import java.io.IOException;
32-
import java.util.Objects;
33-
34-
import javax.inject.Inject;
35-
3627
import butterknife.BindView;
3728
import butterknife.ButterKnife;
3829
import butterknife.OnClick;
30+
import com.dinuscxj.progressbar.CircleProgressBar;
3931
import fr.free.nrw.commons.R;
4032
import fr.free.nrw.commons.Utils;
4133
import fr.free.nrw.commons.auth.SessionManager;
@@ -45,6 +37,11 @@
4537
import io.reactivex.android.schedulers.AndroidSchedulers;
4638
import io.reactivex.disposables.CompositeDisposable;
4739
import io.reactivex.schedulers.Schedulers;
40+
import java.io.File;
41+
import java.io.FileOutputStream;
42+
import java.io.IOException;
43+
import java.util.Objects;
44+
import javax.inject.Inject;
4845
import timber.log.Timber;
4946

5047
/**
@@ -185,6 +182,7 @@ void shareScreen(Bitmap bitmap) {
185182
* which then calls parseJson when results are fetched
186183
*/
187184
private void setAchievements() {
185+
progressBar.setVisibility(View.VISIBLE);
188186
if (checkAccount()) {
189187
compositeDisposable.add(mediaWikiApi
190188
.getAchievements(Objects.requireNonNull(sessionManager.getCurrentAccount()).name)
@@ -195,17 +193,32 @@ private void setAchievements() {
195193
if (response != null) {
196194
setUploadCount(Achievements.from(response));
197195
} else {
198-
onError();
196+
showSnackBarWithRetry();
199197
}
200198
},
201199
t -> {
202200
Timber.e(t, "Fetching achievements statistics failed");
203-
onError();
201+
showSnackBarWithRetry();
204202
}
205203
));
206204
}
207205
}
208206

207+
/**
208+
* As there would be no other way to refresh data when api call fails, lets give him an option
209+
* to retry using the snackbar
210+
*/
211+
private void showSnackBarWithRetry() {
212+
progressBar.setVisibility(View.GONE);
213+
Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),
214+
getString(R.string.achievements_fetch_failed), Snackbar.LENGTH_INDEFINITE);
215+
snackbar.setAction(getString(R.string.retry), view -> {
216+
snackbar.dismiss();
217+
setAchievements();
218+
});
219+
snackbar.show();
220+
}
221+
209222
/**
210223
* Shows a generic error toast when error occurs while loading achievements or uploads
211224
*/

app/src/main/res/values/strings.xml

+1
Original file line numberDiff line numberDiff line change
@@ -431,5 +431,6 @@ Upload your first media by touching the camera or gallery icon above.</string>
431431
<string name="never_ask_again">Never ask this again</string>
432432
<string name="display_location_permission_title">Display location permission</string>
433433
<string name="display_location_permission_explanation">Ask for location permission when needed for nearby notification card view feature.</string>
434+
<string name="achievements_fetch_failed">Something went wrong, we could not fetch your achievements</string>
434435

435436
</resources>

0 commit comments

Comments
 (0)