fixed issue #2154 for achievements activity (#2087)

* fixed issue #2065 for achievements activity

* updates for issue #2154

* removed unwanted comments and undo gradle changes

* added strings to strings.xml

* changes made after reviews

* review changes

* build issues resolved

* Undo changes in gradle properties
This commit is contained in:
vanshikaarora 2019-01-03 21:25:13 +05:30 committed by Vivek Maskara
parent 10e57bd8d0
commit e69c03cf83
3 changed files with 82 additions and 26 deletions

View file

@ -3,6 +3,7 @@ package fr.free.nrw.commons.achievements;
import android.accounts.Account; import android.accounts.Account;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.BitmapDrawable;
@ -26,6 +27,8 @@ import android.widget.TextView;
import com.dinuscxj.progressbar.CircleProgressBar; import com.dinuscxj.progressbar.CircleProgressBar;
import org.w3c.dom.Text;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
@ -42,11 +45,14 @@ import fr.free.nrw.commons.auth.SessionManager;
import fr.free.nrw.commons.mwapi.MediaWikiApi; import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.theme.NavigationBaseActivity; import fr.free.nrw.commons.theme.NavigationBaseActivity;
import fr.free.nrw.commons.utils.ViewUtil; import fr.free.nrw.commons.utils.ViewUtil;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import timber.log.Timber; import timber.log.Timber;
/** /**
* activity for sharing feedback on uploaded activity * activity for sharing feedback on uploaded activity
*/ */
@ -85,6 +91,12 @@ public class AchievementsActivity extends NavigationBaseActivity {
RelativeLayout layoutImageUsedByWiki; RelativeLayout layoutImageUsedByWiki;
@BindView(R.id.layout_statistics) @BindView(R.id.layout_statistics)
LinearLayout layoutStatistics; LinearLayout layoutStatistics;
@BindView(R.id.images_used_by_wiki_text)
TextView imageByWikiText;
@BindView(R.id.images_reverted_text)
TextView imageRevertedText;
@BindView(R.id.images_upload_text_param)
TextView imageUploadedText;
@Inject @Inject
SessionManager sessionManager; SessionManager sessionManager;
@Inject @Inject
@ -183,30 +195,39 @@ public class AchievementsActivity extends NavigationBaseActivity {
private void setAchievements() { private void setAchievements() {
progressBar.setVisibility(View.VISIBLE); progressBar.setVisibility(View.VISIBLE);
if (checkAccount()) { if (checkAccount()) {
compositeDisposable.add(mediaWikiApi try{
.getAchievements(Objects.requireNonNull(sessionManager.getCurrentAccount()).name)
.subscribeOn(Schedulers.io()) compositeDisposable.add(mediaWikiApi
.observeOn(AndroidSchedulers.mainThread()) .getAchievements(Objects.requireNonNull(sessionManager.getCurrentAccount()).name)
.subscribe( .subscribeOn(Schedulers.io())
response -> { .observeOn(AndroidSchedulers.mainThread())
if (response != null) { .subscribe(
setUploadCount(Achievements.from(response)); response -> {
} else { if (response != null) {
setUploadCount(Achievements.from(response));
} else {
Timber.d("success");
layoutImageReverts.setVisibility(View.INVISIBLE);
imageView.setVisibility(View.INVISIBLE);
showSnackBarWithRetry();
}
},
t -> {
Timber.e(t, "Fetching achievements statistics failed");
showSnackBarWithRetry(); showSnackBarWithRetry();
} }
}, ));
t -> { }
Timber.e(t, "Fetching achievements statistics failed"); catch (Exception e){
showSnackBarWithRetry(); Timber.d(e+"success");
} }
));
} }
} }
private void showSnackBarWithRetry() { private void showSnackBarWithRetry() {
progressBar.setVisibility(View.GONE); progressBar.setVisibility(View.GONE);
ViewUtil.showDismissibleSnackBar(findViewById(android.R.id.content), ViewUtil.showDismissibleSnackBar(findViewById(android.R.id.content),
R.string.achievements_fetch_failed, R.string.retry, view -> setAchievements()); R.string.achievements_fetch_failed, R.string.retry, view -> setAchievements());
} }
/** /**
@ -250,10 +271,34 @@ public class AchievementsActivity extends NavigationBaseActivity {
* @param uploadCount * @param uploadCount
*/ */
private void setUploadProgress(int uploadCount){ private void setUploadProgress(int uploadCount){
imagesUploadedProgressbar.setProgress if (uploadCount==0){
(100*uploadCount/levelInfo.getMaxUploadCount()); setZeroAchievements();
imagesUploadedProgressbar.setProgressTextFormatPattern }else {
(uploadCount +"/" + levelInfo.getMaxUploadCount() );
imagesUploadedProgressbar.setProgress
(100*uploadCount/levelInfo.getMaxUploadCount());
imagesUploadedProgressbar.setProgressTextFormatPattern
(uploadCount +"/" + levelInfo.getMaxUploadCount() );
}
}
private void setZeroAchievements() {
AlertDialog.Builder builder=new AlertDialog.Builder(this)
.setMessage("You haven't made any contributions yet")
.setPositiveButton("Ok", (dialog, which) -> {
});
AlertDialog dialog = builder.create();
dialog.show();
imagesUploadedProgressbar.setVisibility(View.INVISIBLE);
imageRevertsProgressbar.setVisibility(View.INVISIBLE);
imagesUsedByWikiProgressBar.setVisibility(View.INVISIBLE);
imageView.setVisibility(View.INVISIBLE);
imageByWikiText.setText(R.string.no_image);
imageRevertedText.setText(R.string.no_image_reverted);
imageUploadedText.setText(R.string.no_image_uploaded);
imageView.setVisibility(View.INVISIBLE);
} }
/** /**
@ -391,10 +436,10 @@ public class AchievementsActivity extends NavigationBaseActivity {
private boolean checkAccount(){ private boolean checkAccount(){
Account currentAccount = sessionManager.getCurrentAccount(); Account currentAccount = sessionManager.getCurrentAccount();
if (currentAccount == null) { if (currentAccount == null) {
Timber.d("Current account is null"); Timber.d("Current account is null");
ViewUtil.showLongToast(this, getResources().getString(R.string.user_not_logged_in)); ViewUtil.showLongToast(this, getResources().getString(R.string.user_not_logged_in));
sessionManager.forceLogin(this); sessionManager.forceLogin(this);
return false; return false;
} }
return true; return true;
} }

View file

@ -45,6 +45,7 @@ import java.util.concurrent.Callable;
import fr.free.nrw.commons.BuildConfig; import fr.free.nrw.commons.BuildConfig;
import fr.free.nrw.commons.Media; import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.PageTitle; import fr.free.nrw.commons.PageTitle;
import fr.free.nrw.commons.achievements.FeaturedImages;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.achievements.FeedbackResponse; import fr.free.nrw.commons.achievements.FeedbackResponse;
import fr.free.nrw.commons.auth.AccountUtil; import fr.free.nrw.commons.auth.AccountUtil;
@ -63,7 +64,6 @@ import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
import okhttp3.Response; import okhttp3.Response;
import timber.log.Timber; import timber.log.Timber;
import static fr.free.nrw.commons.utils.ContinueUtils.getQueryContinue; import static fr.free.nrw.commons.utils.ContinueUtils.getQueryContinue;
/** /**
@ -1002,7 +1002,15 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi {
if (json == null) { if (json == null) {
return null; return null;
} }
return gson.fromJson(json, FeedbackResponse.class); Timber.d(json);
try {
return gson.fromJson(String.valueOf(response.body()), FeedbackResponse.class);
}
catch (Exception e){
return new FeedbackResponse("",0,0,0,new FeaturedImages(0,0),0,"",0);
}
} }
return null; return null;
}); });

View file

@ -456,4 +456,7 @@ Upload your first media by touching the camera or gallery icon above.</string>
<item quantity="other">Receiving shared content. Processing the images might take some time depending on the size of the images and your device</item> <item quantity="other">Receiving shared content. Processing the images might take some time depending on the size of the images and your device</item>
</plurals> </plurals>
<string name="no_image">No images used</string>
<string name="no_image_reverted">No images reverted</string>
<string name="no_image_uploaded">No images uploaded</string>
</resources> </resources>