From bdb18575ec9ee07c7e3cef8dd2b02d6a2fdc09ec Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Fri, 25 May 2018 14:59:54 +0530 Subject: [PATCH 01/22] Render thanks , images used in articles on screen --- app/build.gradle | 2 +- .../commons/achievements/Achievements.java | 78 +++++++++++++++++++ .../achievements/AchievementsActivity.java | 27 ++++++- .../main/res/layout/activity_achievements.xml | 4 + app/src/main/res/values/strings.xml | 2 +- 5 files changed, 110 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 25853684b..778ed52a5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,7 +68,7 @@ dependencies { testImplementation 'org.robolectric:robolectric:3.7.1' testImplementation 'com.nhaarman:mockito-kotlin:1.5.0' testImplementation 'com.squareup.okhttp3:mockwebserver:3.8.1' - compile 'com.dinuscxj:circleprogressbar:1.1.1' + implementation 'com.dinuscxj:circleprogressbar:1.1.1' androidTestImplementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" androidTestImplementation 'com.squareup.okhttp3:mockwebserver:3.8.1' diff --git a/app/src/main/java/fr/free/nrw/commons/achievements/Achievements.java b/app/src/main/java/fr/free/nrw/commons/achievements/Achievements.java index ea934c19b..f17bb582c 100644 --- a/app/src/main/java/fr/free/nrw/commons/achievements/Achievements.java +++ b/app/src/main/java/fr/free/nrw/commons/achievements/Achievements.java @@ -1,5 +1,83 @@ package fr.free.nrw.commons.achievements; +/** + * represnts Achievements + */ public class Achievements { + private int uniqueUsedImages; + private int articlesUsingImages; + private int thanksReceived; + private int imagesEditedBySomeoneElse; + /** + * Sets the unique images used + * + * @param uniqueUsedImages + */ + public void setUniqueUsedImages(int uniqueUsedImages) { + this.uniqueUsedImages = uniqueUsedImages; + } + + /** + * returns the unique images used + * + * @return + */ + public int getUniqueUsedImages() { + return uniqueUsedImages; + } + + /** + * sets the number of articles using images + * + * @param articlesUsingImages + */ + public void setArticlesUsingImages(int articlesUsingImages) { + this.articlesUsingImages = articlesUsingImages; + } + + /** + * returns the number of articles using images + * + * @return + */ + public int getArticlesUsingImages() { + return articlesUsingImages; + } + + /** + * sets the no of thanks received by user + * + * @param thanksReceived + */ + public void setThanksReceived(int thanksReceived) { + this.thanksReceived = thanksReceived; + } + + /** + * return the no of thanks received by user + * + * @return + */ + public int getThanksReceived() { + return thanksReceived; + } + + /** + * sets the no of images edited by someone else + * + * @param imagesEditedBySomeoneElse + */ + public void setImagesEditedBySomeoneElse(int imagesEditedBySomeoneElse) { + this.imagesEditedBySomeoneElse = imagesEditedBySomeoneElse; + } + + /** + * returns the no of images edited by someone else + * + * @return + */ + public int getImagesEditedBySomeoneElse() { + return imagesEditedBySomeoneElse; + } } 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 57187be51..7c3a6b73b 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 @@ -15,7 +15,10 @@ import android.view.View; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; +import com.dinuscxj.progressbar.CircleProgressBar; + +import org.json.JSONException; import org.json.JSONObject; import java.io.File; @@ -49,6 +52,12 @@ public class AchievementsActivity extends NavigationBaseActivity { TextView textView; @BindView(R.id.toolbar) Toolbar toolbar; + @BindView(R.id.thanks_received) + TextView thanksReceived; + @BindView(R.id.images_uploaded_progressbar) + CircleProgressBar imagesUploadedProgressbar; + @BindView(R.id.images_used_by_wiki_progressbar) + CircleProgressBar imagesUsedByWikiProgessbar; @Inject SessionManager sessionManager; @Inject @@ -153,7 +162,23 @@ public class AchievementsActivity extends NavigationBaseActivity { * @param object */ private void parseJson(JSONObject object) { - Log.i("json", object.toString()); + Achievements achievements = new Achievements(); + try { + achievements.setUniqueUsedImages(object.getInt("uniqueUsedImages")); + achievements.setArticlesUsingImages(object.getInt("articlesUsingImages")); + achievements.setThanksReceived(object.getInt("thanksReceived")); + achievements.setImagesEditedBySomeoneElse(object.getInt("imagesEditedBySomeoneElse")); + + } catch (JSONException e) { + e.printStackTrace(); + } + inflateAchievements(achievements); + } + + private void inflateAchievements( Achievements achievements){ + thanksReceived.setText(Integer.toString(achievements.getThanksReceived())); + imagesUsedByWikiProgessbar.setProgress(100*achievements.getUniqueUsedImages()/25); + imagesUsedByWikiProgessbar.setProgressTextFormatPattern(achievements.getUniqueUsedImages() + "/25"); } /** diff --git a/app/src/main/res/layout/activity_achievements.xml b/app/src/main/res/layout/activity_achievements.xml index 99e1d28c1..808343df9 100644 --- a/app/src/main/res/layout/activity_achievements.xml +++ b/app/src/main/res/layout/activity_achievements.xml @@ -78,6 +78,7 @@ android:layout_height="35dp" android:layout_alignParentRight="true" android:layout_marginRight="32dp" + android:id="@+id/images_uploaded_progressbar" android:progress="50" app:progress_end_color="#8C8B98" app:progress_start_color="#3A3381" @@ -112,6 +113,7 @@ android:layout_alignParentRight="true" android:layout_marginRight="32dp" android:progress="50" + android:id="@+id/image_reverts_progressbar" app:progress_end_color="#8C8B98" app:progress_start_color="#3A3381" app:progress_stroke_width="3dp" @@ -146,6 +148,7 @@ android:layout_alignParentRight="true" android:layout_marginRight="32dp" android:progress="50" + android:id="@+id/images_used_by_wiki_progressbar" app:progress_end_color="#8C8B98" app:progress_start_color="#3A3381" app:progress_stroke_width="2.5dp" @@ -242,6 +245,7 @@ android:layout_marginStart="@dimen/activity_margin_horizontal" android:layout_marginLeft="@dimen/activity_margin_horizontal" android:text="2" + android:id="@+id/thanks_received" android:layout_marginRight="44dp" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 60080d208..3bd14ba03 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,6 +1,6 @@ - AppearanceAppearance General Feedback Location From 4d942a86c0cc8aeeeb94bd63aef985216d13d4e1 Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Fri, 25 May 2018 15:22:15 +0530 Subject: [PATCH 02/22] fetch and rendered the upload count --- .../achievements/AchievementsActivity.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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 7c3a6b73b..6f9800b05 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 @@ -37,6 +37,7 @@ import fr.free.nrw.commons.theme.NavigationBaseActivity; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.schedulers.Schedulers; +import timber.log.Timber; /** * activity for sharing feedback on uploaded activity @@ -97,6 +98,7 @@ public class AchievementsActivity extends NavigationBaseActivity { setSupportActionBar(toolbar); setAchievements(); + setUploadCount(); initDrawer(); } @@ -156,6 +158,22 @@ public class AchievementsActivity extends NavigationBaseActivity { )); } + private void setUploadCount() { + compositeDisposable.add(mediaWikiApi + .getUploadCount(sessionManager.getCurrentAccount().name) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + uploadCount -> setUploadProgress(uploadCount), + t -> Timber.e(t, "Fetching upload count failed") + )); + } + + private void setUploadProgress( int uploadCount){ + imagesUploadedProgressbar.setProgress(100*uploadCount/25); + imagesUploadedProgressbar.setProgressTextFormatPattern(uploadCount +"/25" ); + } + /** * used to parse the JSONObject containing results * From 5f45401d49e183ae309fd9cbd1a79b325097f0bb Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Fri, 25 May 2018 15:37:24 +0530 Subject: [PATCH 03/22] FeaturedImages statistics rendered and Javadocs added --- .../commons/achievements/Achievements.java | 17 +++++++++++++++ .../achievements/AchievementsActivity.java | 21 ++++++++++++++++++- .../main/res/layout/activity_achievements.xml | 1 + 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/achievements/Achievements.java b/app/src/main/java/fr/free/nrw/commons/achievements/Achievements.java index f17bb582c..f4ac8d4de 100644 --- a/app/src/main/java/fr/free/nrw/commons/achievements/Achievements.java +++ b/app/src/main/java/fr/free/nrw/commons/achievements/Achievements.java @@ -8,6 +8,7 @@ public class Achievements { private int articlesUsingImages; private int thanksReceived; private int imagesEditedBySomeoneElse; + private int featuredImages; /** * Sets the unique images used @@ -80,4 +81,20 @@ public class Achievements { public int getImagesEditedBySomeoneElse() { return imagesEditedBySomeoneElse; } + + /** + * sets the total of images featured + * @param featuredImages + */ + public void setFeaturedImages(int featuredImages) { + this.featuredImages = featuredImages; + } + + /** + * returns the total count of images featured + * @return + */ + public int getFeaturedImages() { + return featuredImages; + } } 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 6f9800b05..f9a8b3e82 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 @@ -15,8 +15,8 @@ import android.view.View; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; -import com.dinuscxj.progressbar.CircleProgressBar; +import com.dinuscxj.progressbar.CircleProgressBar; import org.json.JSONException; import org.json.JSONObject; @@ -59,6 +59,8 @@ public class AchievementsActivity extends NavigationBaseActivity { CircleProgressBar imagesUploadedProgressbar; @BindView(R.id.images_used_by_wiki_progressbar) CircleProgressBar imagesUsedByWikiProgessbar; + @BindView(R.id.image_featured) + TextView imagesFeatured; @Inject SessionManager sessionManager; @Inject @@ -158,6 +160,9 @@ public class AchievementsActivity extends NavigationBaseActivity { )); } + /** + * used to the count of images uploaded by user + */ private void setUploadCount() { compositeDisposable.add(mediaWikiApi .getUploadCount(sessionManager.getCurrentAccount().name) @@ -169,7 +174,12 @@ public class AchievementsActivity extends NavigationBaseActivity { )); } + /** + * used to the uploaded images progressbar + * @param uploadCount + */ private void setUploadProgress( int uploadCount){ + Log.i("uploadCount",Integer.toString(uploadCount)); imagesUploadedProgressbar.setProgress(100*uploadCount/25); imagesUploadedProgressbar.setProgressTextFormatPattern(uploadCount +"/25" ); } @@ -186,6 +196,10 @@ public class AchievementsActivity extends NavigationBaseActivity { achievements.setArticlesUsingImages(object.getInt("articlesUsingImages")); achievements.setThanksReceived(object.getInt("thanksReceived")); achievements.setImagesEditedBySomeoneElse(object.getInt("imagesEditedBySomeoneElse")); + JSONObject featuredImages = object.getJSONObject("featuredImages"); + achievements.setFeaturedImages + (featuredImages.getInt("Quality_images") + + featuredImages.getInt("Featured_pictures_on_Wikimedia_Commons")); } catch (JSONException e) { e.printStackTrace(); @@ -193,10 +207,15 @@ public class AchievementsActivity extends NavigationBaseActivity { inflateAchievements(achievements); } + /** + * Used the inflate the fetched statistics of the images uploaded by user + * @param achievements + */ private void inflateAchievements( Achievements achievements){ thanksReceived.setText(Integer.toString(achievements.getThanksReceived())); imagesUsedByWikiProgessbar.setProgress(100*achievements.getUniqueUsedImages()/25); imagesUsedByWikiProgessbar.setProgressTextFormatPattern(achievements.getUniqueUsedImages() + "/25"); + imagesFeatured.setText(Integer.toString(achievements.getFeaturedImages())); } /** diff --git a/app/src/main/res/layout/activity_achievements.xml b/app/src/main/res/layout/activity_achievements.xml index 808343df9..56a285eca 100644 --- a/app/src/main/res/layout/activity_achievements.xml +++ b/app/src/main/res/layout/activity_achievements.xml @@ -205,6 +205,7 @@ android:layout_marginTop="@dimen/activity_margin_horizontal" android:layout_marginStart="@dimen/activity_margin_horizontal" android:text="2" + android:id="@+id/image_featured" android:layout_marginLeft="@dimen/activity_margin_horizontal" android:layout_marginRight="44dp" /> From 9174dbd8c7125ba94f1d6de544afe3d94f517800 Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Sat, 26 May 2018 23:40:15 +0530 Subject: [PATCH 04/22] added ProgressBar --- .../achievements/AchievementsActivity.java | 45 +++++++++++++++++++ .../main/res/layout/activity_achievements.xml | 8 ++++ 2 files changed, 53 insertions(+) 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 f9a8b3e82..231b3ed8d 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 @@ -13,6 +13,8 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; @@ -46,6 +48,8 @@ public class AchievementsActivity extends NavigationBaseActivity { private static final double BADGE_IMAGE_WIDTH_RATIO = 0.4; private static final double BADGE_IMAGE_HEIGHT_RATIO = 0.3; + private Boolean isUploadFetched = false; + private Boolean isStatisticsFetched = false; @BindView(R.id.achievement_badge) ImageView imageView; @@ -61,6 +65,16 @@ public class AchievementsActivity extends NavigationBaseActivity { CircleProgressBar imagesUsedByWikiProgessbar; @BindView(R.id.image_featured) TextView imagesFeatured; + @BindView(R.id.progressBar) + ProgressBar progressBar; + @BindView(R.id.layout_image_uploaded) + RelativeLayout layoutImageUploaded; + @BindView(R.id.layout_image_reverts) + RelativeLayout layoutImageReverts; + @BindView(R.id.layout_image_used_by_wiki) + RelativeLayout layoutImageUsedByWiki; + @BindView(R.id.layout_statistics) + LinearLayout layoutStatistics; @Inject SessionManager sessionManager; @Inject @@ -99,6 +113,8 @@ public class AchievementsActivity extends NavigationBaseActivity { imageView.requestLayout(); setSupportActionBar(toolbar); + progressBar.setVisibility(View.VISIBLE); + hideLayouts(); setAchievements(); setUploadCount(); initDrawer(); @@ -182,6 +198,8 @@ public class AchievementsActivity extends NavigationBaseActivity { Log.i("uploadCount",Integer.toString(uploadCount)); imagesUploadedProgressbar.setProgress(100*uploadCount/25); imagesUploadedProgressbar.setProgressTextFormatPattern(uploadCount +"/25" ); + isUploadFetched = true; + hideProgressBar(); } /** @@ -216,6 +234,8 @@ public class AchievementsActivity extends NavigationBaseActivity { imagesUsedByWikiProgessbar.setProgress(100*achievements.getUniqueUsedImages()/25); imagesUsedByWikiProgessbar.setProgressTextFormatPattern(achievements.getUniqueUsedImages() + "/25"); imagesFeatured.setText(Integer.toString(achievements.getFeaturedImages())); + isStatisticsFetched = true; + hideProgressBar(); } /** @@ -230,4 +250,29 @@ public class AchievementsActivity extends NavigationBaseActivity { context.startActivity(intent); } + /** + * to hide progressbar + */ + private void hideProgressBar() { + if (progressBar != null && isUploadFetched && isStatisticsFetched) { + progressBar.setVisibility(View.GONE); + layoutImageReverts.setVisibility(View.VISIBLE); + layoutImageUploaded.setVisibility(View.VISIBLE); + layoutImageUsedByWiki.setVisibility(View.VISIBLE); + layoutStatistics.setVisibility(View.VISIBLE); + imageView.setVisibility(View.VISIBLE); + } + } + + /** + * used to hide the layouts while fetching results from api + */ + private void hideLayouts(){ + layoutImageUsedByWiki.setVisibility(View.INVISIBLE); + layoutImageUploaded.setVisibility(View.INVISIBLE); + layoutImageReverts.setVisibility(View.INVISIBLE); + layoutStatistics.setVisibility(View.INVISIBLE); + imageView.setVisibility(View.INVISIBLE); + } + } diff --git a/app/src/main/res/layout/activity_achievements.xml b/app/src/main/res/layout/activity_achievements.xml index 56a285eca..af776a4f6 100644 --- a/app/src/main/res/layout/activity_achievements.xml +++ b/app/src/main/res/layout/activity_achievements.xml @@ -156,11 +156,19 @@ app:style="solid_line" /> + + + Date: Mon, 28 May 2018 13:10:39 +0530 Subject: [PATCH 05/22] Added Class for calculating level --- .../commons/achievements/Achievements.java | 17 ++++++++++ .../achievements/AchievementsActivity.java | 9 ++++-- .../commons/achievements/LevelController.java | 32 +++++++++++++++++++ 3 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java diff --git a/app/src/main/java/fr/free/nrw/commons/achievements/Achievements.java b/app/src/main/java/fr/free/nrw/commons/achievements/Achievements.java index f4ac8d4de..53b0f5332 100644 --- a/app/src/main/java/fr/free/nrw/commons/achievements/Achievements.java +++ b/app/src/main/java/fr/free/nrw/commons/achievements/Achievements.java @@ -9,6 +9,7 @@ public class Achievements { private int thanksReceived; private int imagesEditedBySomeoneElse; private int featuredImages; + private int imagesUploaded; /** * Sets the unique images used @@ -97,4 +98,20 @@ public class Achievements { public int getFeaturedImages() { return featuredImages; } + + /** + * to set the total number of images uploaded + * @param imagesUploaded + */ + public void setImagesUploaded(int imagesUploaded) { + this.imagesUploaded = imagesUploaded; + } + + /** + * to get the total number of uploads + * @return + */ + public int getImagesUploaded() { + return imagesUploaded; + } } 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 231b3ed8d..392eb1ffa 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 @@ -50,6 +50,8 @@ public class AchievementsActivity extends NavigationBaseActivity { private static final double BADGE_IMAGE_HEIGHT_RATIO = 0.3; private Boolean isUploadFetched = false; private Boolean isStatisticsFetched = false; + private Achievements achievements = new Achievements(); + private LevelController level = new LevelController(); @BindView(R.id.achievement_badge) ImageView imageView; @@ -168,7 +170,7 @@ public class AchievementsActivity extends NavigationBaseActivity { */ private void setAchievements() { compositeDisposable.add(mediaWikiApi - .getAchievements(sessionManager.getCurrentAccount().name) + .getAchievements("Martin_Urbanec") .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( @@ -181,7 +183,7 @@ public class AchievementsActivity extends NavigationBaseActivity { */ private void setUploadCount() { compositeDisposable.add(mediaWikiApi - .getUploadCount(sessionManager.getCurrentAccount().name) + .getUploadCount("Martin_Urbanec") .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( @@ -195,6 +197,7 @@ public class AchievementsActivity extends NavigationBaseActivity { * @param uploadCount */ private void setUploadProgress( int uploadCount){ + achievements.setImagesUploaded(uploadCount); Log.i("uploadCount",Integer.toString(uploadCount)); imagesUploadedProgressbar.setProgress(100*uploadCount/25); imagesUploadedProgressbar.setProgressTextFormatPattern(uploadCount +"/25" ); @@ -208,7 +211,6 @@ public class AchievementsActivity extends NavigationBaseActivity { * @param object */ private void parseJson(JSONObject object) { - Achievements achievements = new Achievements(); try { achievements.setUniqueUsedImages(object.getInt("uniqueUsedImages")); achievements.setArticlesUsingImages(object.getInt("articlesUsingImages")); @@ -255,6 +257,7 @@ public class AchievementsActivity extends NavigationBaseActivity { */ private void hideProgressBar() { if (progressBar != null && isUploadFetched && isStatisticsFetched) { + Log.i("level", Integer.toString(level.calculateLevelUp(achievements))); progressBar.setVisibility(View.GONE); layoutImageReverts.setVisibility(View.VISIBLE); layoutImageUploaded.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java b/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java new file mode 100644 index 000000000..0c927f431 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java @@ -0,0 +1,32 @@ +package fr.free.nrw.commons.achievements; + +/** + * calculates the level of the user + */ +public class LevelController { + + int calculateLevelUp( Achievements achievements){ + int level = 1; + if(achievements.getImagesUploaded() >= 100 && achievements.getUniqueUsedImages() >= 45){ + level = 10; + } else if (achievements.getImagesUploaded() >= 90 && achievements.getUniqueUsedImages() >= 40){ + level = 9; + } else if (achievements.getImagesUploaded() >= 80 && achievements.getUniqueUsedImages() >= 35){ + level = 8; + } else if (achievements.getImagesUploaded() >= 70 && achievements.getUniqueUsedImages() >= 30){ + level = 7; + } else if (achievements.getImagesUploaded() >= 60 && achievements.getUniqueUsedImages() >= 25 ){ + level = 6; + } else if (achievements.getImagesUploaded() >= 50 && achievements.getUniqueUsedImages() >= 20 ){ + level = 5; + } else if (achievements.getImagesUploaded() >= 40 && achievements.getUniqueUsedImages() >= 15 ){ + level = 4; + } else if (achievements.getImagesUploaded() >= 30 && achievements.getUniqueUsedImages() >= 10 ){ + level = 3; + } else if (achievements.getImagesUploaded() >= 20 && achievements.getUniqueUsedImages() >= 5 ){ + level = 2; + } + + return level; + } +} From deca1771511f05546e13f261923b365616cbc000 Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Mon, 28 May 2018 15:18:18 +0530 Subject: [PATCH 06/22] added level info and returned level info --- .../achievements/AchievementsActivity.java | 2 +- .../free/nrw/commons/achievements/Level.java | 35 ++++++++++++++++ .../commons/achievements/LevelController.java | 41 ++++++++++++++----- 3 files changed, 66 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/fr/free/nrw/commons/achievements/Level.java 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 392eb1ffa..4a7572c06 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 @@ -257,7 +257,7 @@ public class AchievementsActivity extends NavigationBaseActivity { */ private void hideProgressBar() { if (progressBar != null && isUploadFetched && isStatisticsFetched) { - Log.i("level", Integer.toString(level.calculateLevelUp(achievements))); + Log.i("level", Integer.toString(level.calculateLevelUp(achievements).getMaximumUniqueImagesUsed())); progressBar.setVisibility(View.GONE); layoutImageReverts.setVisibility(View.VISIBLE); layoutImageUploaded.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/fr/free/nrw/commons/achievements/Level.java b/app/src/main/java/fr/free/nrw/commons/achievements/Level.java new file mode 100644 index 000000000..c72c42b4f --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/achievements/Level.java @@ -0,0 +1,35 @@ +package fr.free.nrw.commons.achievements; + +/** + * Contains information about the levels + */ +public class Level { + private int maximumUploadCount; + private int maximumUniqueImagesUsed; + private int revertRate; + private int level; + + public int getMaximumUniqueImagesUsed() { + return maximumUniqueImagesUsed; + } + + public int getMaximumUploadCount() { + return maximumUploadCount; + } + + public void setMaximumUploadCount(int maximumUploadCount) { + this.maximumUploadCount = maximumUploadCount; + } + + public void setMaximumUniqueImagesUsed(int maximumUniqueImagesUsed) { + this.maximumUniqueImagesUsed = maximumUniqueImagesUsed; + } + + public int getLevel() { + return level; + } + + public void setLevel(int level) { + this.level = level; + } +} diff --git a/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java b/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java index 0c927f431..fb8054fd9 100644 --- a/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java +++ b/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java @@ -5,26 +5,45 @@ package fr.free.nrw.commons.achievements; */ public class LevelController { - int calculateLevelUp( Achievements achievements){ - int level = 1; + Level calculateLevelUp( Achievements achievements){ + Level level = new Level (); + level.setLevel(1); + level.setMaximumUploadCount(20); + level.setMaximumUniqueImagesUsed(5); if(achievements.getImagesUploaded() >= 100 && achievements.getUniqueUsedImages() >= 45){ - level = 10; + level.setLevel(10); } else if (achievements.getImagesUploaded() >= 90 && achievements.getUniqueUsedImages() >= 40){ - level = 9; + level.setLevel(9); + level.setMaximumUniqueImagesUsed(45); + level.setMaximumUploadCount(100); } else if (achievements.getImagesUploaded() >= 80 && achievements.getUniqueUsedImages() >= 35){ - level = 8; + level.setLevel(8); + level.setMaximumUniqueImagesUsed(40); + level.setMaximumUploadCount(90); } else if (achievements.getImagesUploaded() >= 70 && achievements.getUniqueUsedImages() >= 30){ - level = 7; + level.setLevel(7); + level.setMaximumUniqueImagesUsed(35); + level.setMaximumUploadCount(80); } else if (achievements.getImagesUploaded() >= 60 && achievements.getUniqueUsedImages() >= 25 ){ - level = 6; + level.setLevel(6); + level.setMaximumUniqueImagesUsed(30); + level.setMaximumUploadCount(70); } else if (achievements.getImagesUploaded() >= 50 && achievements.getUniqueUsedImages() >= 20 ){ - level = 5; + level.setLevel(5); + level.setMaximumUniqueImagesUsed(25); + level.setMaximumUploadCount(60); } else if (achievements.getImagesUploaded() >= 40 && achievements.getUniqueUsedImages() >= 15 ){ - level = 4; + level.setLevel(4); + level.setMaximumUniqueImagesUsed(20); + level.setMaximumUploadCount(50); } else if (achievements.getImagesUploaded() >= 30 && achievements.getUniqueUsedImages() >= 10 ){ - level = 3; + level.setLevel(3); + level.setMaximumUniqueImagesUsed(15); + level.setMaximumUploadCount(40); } else if (achievements.getImagesUploaded() >= 20 && achievements.getUniqueUsedImages() >= 5 ){ - level = 2; + level.setLevel(2); + level.setMaximumUniqueImagesUsed(10); + level.setMaximumUploadCount(30); } return level; From ac8af3528c78b9c02c1d5cbda5b69ee7035a7fef Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Mon, 28 May 2018 15:34:15 +0530 Subject: [PATCH 07/22] level up info rendered on achievement activity --- .../achievements/AchievementsActivity.java | 37 +++++++++++-------- .../commons/achievements/LevelController.java | 5 +++ 2 files changed, 26 insertions(+), 16 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 4a7572c06..362f204d6 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 @@ -52,6 +52,7 @@ public class AchievementsActivity extends NavigationBaseActivity { private Boolean isStatisticsFetched = false; private Achievements achievements = new Achievements(); private LevelController level = new LevelController(); + private Level levelInfo; @BindView(R.id.achievement_badge) ImageView imageView; @@ -170,7 +171,7 @@ public class AchievementsActivity extends NavigationBaseActivity { */ private void setAchievements() { compositeDisposable.add(mediaWikiApi - .getAchievements("Martin_Urbanec") + .getAchievements(sessionManager.getCurrentAccount().name) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( @@ -183,13 +184,15 @@ public class AchievementsActivity extends NavigationBaseActivity { */ private void setUploadCount() { compositeDisposable.add(mediaWikiApi - .getUploadCount("Martin_Urbanec") + .getUploadCount(sessionManager.getCurrentAccount().name) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( - uploadCount -> setUploadProgress(uploadCount), + uploadCount -> achievements.setImagesUploaded(uploadCount), t -> Timber.e(t, "Fetching upload count failed") )); + isUploadFetched = true; + hideProgressBar(); } /** @@ -197,12 +200,11 @@ public class AchievementsActivity extends NavigationBaseActivity { * @param uploadCount */ private void setUploadProgress( int uploadCount){ - achievements.setImagesUploaded(uploadCount); - Log.i("uploadCount",Integer.toString(uploadCount)); - imagesUploadedProgressbar.setProgress(100*uploadCount/25); - imagesUploadedProgressbar.setProgressTextFormatPattern(uploadCount +"/25" ); - isUploadFetched = true; - hideProgressBar(); + + imagesUploadedProgressbar.setProgress + (100*uploadCount/levelInfo.getMaximumUploadCount()); + imagesUploadedProgressbar.setProgressTextFormatPattern + (uploadCount +"/" + levelInfo.getMaximumUploadCount() ); } /** @@ -224,20 +226,21 @@ public class AchievementsActivity extends NavigationBaseActivity { } catch (JSONException e) { e.printStackTrace(); } - inflateAchievements(achievements); + isStatisticsFetched = true; + hideProgressBar(); } /** * Used the inflate the fetched statistics of the images uploaded by user * @param achievements */ - private void inflateAchievements( Achievements achievements){ + private void inflateAchievements( Achievements achievements ){ thanksReceived.setText(Integer.toString(achievements.getThanksReceived())); - imagesUsedByWikiProgessbar.setProgress(100*achievements.getUniqueUsedImages()/25); - imagesUsedByWikiProgessbar.setProgressTextFormatPattern(achievements.getUniqueUsedImages() + "/25"); + imagesUsedByWikiProgessbar.setProgress + (100*achievements.getUniqueUsedImages()/levelInfo.getMaximumUniqueImagesUsed()); + imagesUsedByWikiProgessbar.setProgressTextFormatPattern + (achievements.getUniqueUsedImages() + "/" + levelInfo.getMaximumUniqueImagesUsed()); imagesFeatured.setText(Integer.toString(achievements.getFeaturedImages())); - isStatisticsFetched = true; - hideProgressBar(); } /** @@ -257,7 +260,9 @@ public class AchievementsActivity extends NavigationBaseActivity { */ private void hideProgressBar() { if (progressBar != null && isUploadFetched && isStatisticsFetched) { - Log.i("level", Integer.toString(level.calculateLevelUp(achievements).getMaximumUniqueImagesUsed())); + levelInfo = level.calculateLevelUp(achievements); + inflateAchievements(achievements); + setUploadProgress(achievements.getImagesUploaded()); progressBar.setVisibility(View.GONE); layoutImageReverts.setVisibility(View.VISIBLE); layoutImageUploaded.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java b/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java index fb8054fd9..941a7b234 100644 --- a/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java +++ b/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java @@ -5,6 +5,11 @@ package fr.free.nrw.commons.achievements; */ public class LevelController { + /** + * calculated the level of user and return the level information + * @param achievements + * @return + */ Level calculateLevelUp( Achievements achievements){ Level level = new Level (); level.setLevel(1); From 7bd6394234d578069460aacc8eac38892764c63c Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Mon, 28 May 2018 15:45:15 +0530 Subject: [PATCH 08/22] Inflated Level Number --- .../free/nrw/commons/achievements/AchievementsActivity.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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 362f204d6..9ee55fb47 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 @@ -57,7 +57,7 @@ public class AchievementsActivity extends NavigationBaseActivity { @BindView(R.id.achievement_badge) ImageView imageView; @BindView(R.id.achievement_level) - TextView textView; + TextView levelNumber; @BindView(R.id.toolbar) Toolbar toolbar; @BindView(R.id.thanks_received) @@ -241,6 +241,8 @@ public class AchievementsActivity extends NavigationBaseActivity { imagesUsedByWikiProgessbar.setProgressTextFormatPattern (achievements.getUniqueUsedImages() + "/" + levelInfo.getMaximumUniqueImagesUsed()); imagesFeatured.setText(Integer.toString(achievements.getFeaturedImages())); + levelNumber.setText(R.string.level); + levelNumber.append( " " + Integer.toString(levelInfo.getLevel())); } /** @@ -269,6 +271,7 @@ public class AchievementsActivity extends NavigationBaseActivity { layoutImageUsedByWiki.setVisibility(View.VISIBLE); layoutStatistics.setVisibility(View.VISIBLE); imageView.setVisibility(View.VISIBLE); + levelNumber.setVisibility(View.VISIBLE); } } @@ -281,6 +284,7 @@ public class AchievementsActivity extends NavigationBaseActivity { layoutImageReverts.setVisibility(View.INVISIBLE); layoutStatistics.setVisibility(View.INVISIBLE); imageView.setVisibility(View.INVISIBLE); + levelNumber.setVisibility(View.INVISIBLE); } } From e0969c2ba44060340ac703568fd852c05b3276bb Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Fri, 1 Jun 2018 00:08:21 +0530 Subject: [PATCH 09/22] Added the structure for badge --- .../achievements/AchievementsActivity.java | 2 +- app/src/main/res/drawable-mdpi/badge.xml | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/drawable-mdpi/badge.xml 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 9ee55fb47..ac77d4e83 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 @@ -112,7 +112,7 @@ public class AchievementsActivity extends NavigationBaseActivity { imageView.getLayoutParams(); params.height = (int) (height * BADGE_IMAGE_HEIGHT_RATIO); params.width = (int) (width * BADGE_IMAGE_WIDTH_RATIO); - imageView.setImageResource(R.drawable.featured); + imageView.setImageResource(R.drawable.badge); imageView.requestLayout(); setSupportActionBar(toolbar); diff --git a/app/src/main/res/drawable-mdpi/badge.xml b/app/src/main/res/drawable-mdpi/badge.xml new file mode 100644 index 000000000..394fe1767 --- /dev/null +++ b/app/src/main/res/drawable-mdpi/badge.xml @@ -0,0 +1,33 @@ + + + + + + + From da46ddcee15478dbb47347a847780ecd1a24da16 Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Fri, 1 Jun 2018 01:16:47 +0530 Subject: [PATCH 10/22] Added LevelUpInfo Programmetically on Drawable --- .../achievements/AchievementsActivity.java | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) 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 ac77d4e83..f1d1d398d 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 @@ -4,8 +4,16 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; +import android.support.v4.content.res.ResourcesCompat; import android.support.v7.widget.Toolbar; import android.util.DisplayMetrics; import android.util.Log; @@ -112,7 +120,10 @@ public class AchievementsActivity extends NavigationBaseActivity { imageView.getLayoutParams(); params.height = (int) (height * BADGE_IMAGE_HEIGHT_RATIO); params.width = (int) (width * BADGE_IMAGE_WIDTH_RATIO); - imageView.setImageResource(R.drawable.badge); + Drawable drawable = getResources().getDrawable(R.drawable.badge); + Bitmap bitmap = drawableToBitmap(drawable); + BitmapDrawable bitmapImage = writeOnDrawable(bitmap, "LEVEL 1"); + imageView.setImageDrawable(bitmapImage); imageView.requestLayout(); setSupportActionBar(toolbar); @@ -287,4 +298,34 @@ public class AchievementsActivity extends NavigationBaseActivity { levelNumber.setVisibility(View.INVISIBLE); } + public BitmapDrawable writeOnDrawable(Bitmap bm, String text){ + Bitmap.Config config = bm.getConfig(); + if(config == null){ + config = Bitmap.Config.ARGB_8888; + } + Bitmap bitmap = Bitmap.createBitmap(bm.getWidth(),bm.getHeight(),config); + Canvas canvas = new Canvas(bitmap); + canvas.drawBitmap(bm, 0, 0, null); + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setStyle(Paint.Style.FILL); + paint.setColor(Color.BLUE); + paint.setTextSize(100); + Rect rectText = new Rect(); + paint.getTextBounds(text,0, text.length(),rectText); + canvas.drawText(text, 0, rectText.height(), paint); + return new BitmapDrawable(getResources(), bitmap); + } + + public static Bitmap drawableToBitmap (Drawable drawable) { + if (drawable instanceof BitmapDrawable) { + return ((BitmapDrawable)drawable).getBitmap(); + } + Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); + drawable.draw(canvas); + + return bitmap; + } + } From 6514ff5ceda1c74eab9d804defda5193d1dd6114 Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Fri, 1 Jun 2018 01:59:21 +0530 Subject: [PATCH 11/22] aligned the text --- .../achievements/AchievementsActivity.java | 33 ++++++++++++++----- 1 file changed, 24 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 f1d1d398d..2b83d3b33 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 @@ -120,10 +120,7 @@ public class AchievementsActivity extends NavigationBaseActivity { imageView.getLayoutParams(); params.height = (int) (height * BADGE_IMAGE_HEIGHT_RATIO); params.width = (int) (width * BADGE_IMAGE_WIDTH_RATIO); - Drawable drawable = getResources().getDrawable(R.drawable.badge); - Bitmap bitmap = drawableToBitmap(drawable); - BitmapDrawable bitmapImage = writeOnDrawable(bitmap, "LEVEL 1"); - imageView.setImageDrawable(bitmapImage); + imageView.setImageResource(R.drawable.badge); imageView.requestLayout(); setSupportActionBar(toolbar); @@ -243,6 +240,7 @@ public class AchievementsActivity extends NavigationBaseActivity { /** * Used the inflate the fetched statistics of the images uploaded by user + * and assign badge and level * @param achievements */ private void inflateAchievements( Achievements achievements ){ @@ -252,8 +250,13 @@ public class AchievementsActivity extends NavigationBaseActivity { imagesUsedByWikiProgessbar.setProgressTextFormatPattern (achievements.getUniqueUsedImages() + "/" + levelInfo.getMaximumUniqueImagesUsed()); imagesFeatured.setText(Integer.toString(achievements.getFeaturedImages())); - levelNumber.setText(R.string.level); - levelNumber.append( " " + Integer.toString(levelInfo.getLevel())); + String levelUpInfoString = getString(R.string.level); + levelUpInfoString += " " + Integer.toString(levelInfo.getLevel()); + levelNumber.setText(levelUpInfoString); + Drawable drawable = getResources().getDrawable(R.drawable.badge); + Bitmap bitmap = drawableToBitmap(drawable); + BitmapDrawable bitmapImage = writeOnDrawable(bitmap, levelUpInfoString); + imageView.setImageDrawable(bitmapImage); } /** @@ -298,6 +301,12 @@ public class AchievementsActivity extends NavigationBaseActivity { levelNumber.setVisibility(View.INVISIBLE); } + /** + * write level Number on the badge + * @param bm + * @param text + * @return + */ public BitmapDrawable writeOnDrawable(Bitmap bm, String text){ Bitmap.Config config = bm.getConfig(); if(config == null){ @@ -308,14 +317,20 @@ public class AchievementsActivity extends NavigationBaseActivity { canvas.drawBitmap(bm, 0, 0, null); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setStyle(Paint.Style.FILL); - paint.setColor(Color.BLUE); - paint.setTextSize(100); + paint.setColor(Color.WHITE); + paint.setTextSize(300); + paint.setTextAlign(Paint.Align.CENTER); Rect rectText = new Rect(); paint.getTextBounds(text,0, text.length(),rectText); - canvas.drawText(text, 0, rectText.height(), paint); + canvas.drawText(text, Math.round(canvas.getWidth()/2),Math.round(canvas.getHeight()/1.75), paint); return new BitmapDrawable(getResources(), bitmap); } + /** + * Convert Drawable to bitmap + * @param drawable + * @return + */ public static Bitmap drawableToBitmap (Drawable drawable) { if (drawable instanceof BitmapDrawable) { return ((BitmapDrawable)drawable).getBitmap(); From b47b2968c2bf4efa190e1e8db9d4db7e4b175167 Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Fri, 1 Jun 2018 02:12:31 +0530 Subject: [PATCH 12/22] changed the text --- .../free/nrw/commons/achievements/AchievementsActivity.java | 6 +++--- 1 file changed, 3 insertions(+), 3 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 2b83d3b33..6980212a9 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 @@ -255,7 +255,7 @@ public class AchievementsActivity extends NavigationBaseActivity { levelNumber.setText(levelUpInfoString); Drawable drawable = getResources().getDrawable(R.drawable.badge); Bitmap bitmap = drawableToBitmap(drawable); - BitmapDrawable bitmapImage = writeOnDrawable(bitmap, levelUpInfoString); + BitmapDrawable bitmapImage = writeOnDrawable(bitmap, Integer.toString(levelInfo.getLevel())); imageView.setImageDrawable(bitmapImage); } @@ -318,11 +318,11 @@ public class AchievementsActivity extends NavigationBaseActivity { Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setStyle(Paint.Style.FILL); paint.setColor(Color.WHITE); - paint.setTextSize(300); + paint.setTextSize(Math.round(canvas.getHeight()/2)); paint.setTextAlign(Paint.Align.CENTER); Rect rectText = new Rect(); paint.getTextBounds(text,0, text.length(),rectText); - canvas.drawText(text, Math.round(canvas.getWidth()/2),Math.round(canvas.getHeight()/1.75), paint); + canvas.drawText(text, Math.round(canvas.getWidth()/2),Math.round(canvas.getHeight()/1.35), paint); return new BitmapDrawable(getResources(), bitmap); } From e28e4471b8b85724d00461335e560a06983c2be0 Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Fri, 1 Jun 2018 02:50:26 +0530 Subject: [PATCH 13/22] Implemented the structure for changing colour of drawable --- .../nrw/commons/achievements/AchievementsActivity.java | 4 +++- app/src/main/res/drawable-mdpi/badge.xml | 10 +++++----- app/src/main/res/values/attrs.xml | 6 ++++++ app/src/main/res/values/styles.xml | 6 ++++++ 4 files changed, 20 insertions(+), 6 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 6980212a9..bd3c5e61b 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 @@ -17,6 +17,7 @@ import android.support.v4.content.res.ResourcesCompat; import android.support.v7.widget.Toolbar; import android.util.DisplayMetrics; import android.util.Log; +import android.view.ContextThemeWrapper; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -253,7 +254,8 @@ public class AchievementsActivity extends NavigationBaseActivity { String levelUpInfoString = getString(R.string.level); levelUpInfoString += " " + Integer.toString(levelInfo.getLevel()); levelNumber.setText(levelUpInfoString); - Drawable drawable = getResources().getDrawable(R.drawable.badge); + final ContextThemeWrapper wrapper = new ContextThemeWrapper(this, R.style.LevelOne); + Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.badge, wrapper.getTheme()); Bitmap bitmap = drawableToBitmap(drawable); BitmapDrawable bitmapImage = writeOnDrawable(bitmap, Integer.toString(levelInfo.getLevel())); imageView.setImageDrawable(bitmapImage); diff --git a/app/src/main/res/drawable-mdpi/badge.xml b/app/src/main/res/drawable-mdpi/badge.xml index 394fe1767..3792e33cf 100644 --- a/app/src/main/res/drawable-mdpi/badge.xml +++ b/app/src/main/res/drawable-mdpi/badge.xml @@ -8,26 +8,26 @@ diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 8d125aa61..a4c9ef716 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -23,4 +23,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index a8eb1d849..637f79009 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -57,4 +57,10 @@ @android:color/transparent + + \ No newline at end of file From c65df3756e8e9a4bce78beffdbcf76f6ab6a8f21 Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Fri, 1 Jun 2018 03:44:49 +0530 Subject: [PATCH 14/22] Added functionality to change colours of badge during runtime --- .../achievements/AchievementsActivity.java | 2 +- .../free/nrw/commons/achievements/Level.java | 10 ++++++++ .../commons/achievements/LevelController.java | 12 ++++++++++ app/src/main/res/values/styles.xml | 24 +++++++++++++++++++ 4 files changed, 47 insertions(+), 1 deletion(-) 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 bd3c5e61b..34e08c551 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 @@ -254,7 +254,7 @@ public class AchievementsActivity extends NavigationBaseActivity { String levelUpInfoString = getString(R.string.level); levelUpInfoString += " " + Integer.toString(levelInfo.getLevel()); levelNumber.setText(levelUpInfoString); - final ContextThemeWrapper wrapper = new ContextThemeWrapper(this, R.style.LevelOne); + final ContextThemeWrapper wrapper = new ContextThemeWrapper(this, levelInfo.getLevelStyle()); Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.badge, wrapper.getTheme()); Bitmap bitmap = drawableToBitmap(drawable); BitmapDrawable bitmapImage = writeOnDrawable(bitmap, Integer.toString(levelInfo.getLevel())); diff --git a/app/src/main/java/fr/free/nrw/commons/achievements/Level.java b/app/src/main/java/fr/free/nrw/commons/achievements/Level.java index c72c42b4f..692354fd4 100644 --- a/app/src/main/java/fr/free/nrw/commons/achievements/Level.java +++ b/app/src/main/java/fr/free/nrw/commons/achievements/Level.java @@ -8,6 +8,7 @@ public class Level { private int maximumUniqueImagesUsed; private int revertRate; private int level; + private int levelStyle; public int getMaximumUniqueImagesUsed() { return maximumUniqueImagesUsed; @@ -32,4 +33,13 @@ public class Level { public void setLevel(int level) { this.level = level; } + + public void setLevelStyle(int levelStyle) { + this.levelStyle = levelStyle; + } + + public int getLevelStyle() { + return levelStyle; + } + } diff --git a/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java b/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java index 941a7b234..9edcbc354 100644 --- a/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java +++ b/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java @@ -1,5 +1,7 @@ package fr.free.nrw.commons.achievements; +import fr.free.nrw.commons.R; + /** * calculates the level of the user */ @@ -13,42 +15,52 @@ public class LevelController { Level calculateLevelUp( Achievements achievements){ Level level = new Level (); level.setLevel(1); + level.setLevelStyle(R.style.LevelOne); level.setMaximumUploadCount(20); level.setMaximumUniqueImagesUsed(5); if(achievements.getImagesUploaded() >= 100 && achievements.getUniqueUsedImages() >= 45){ level.setLevel(10); + level.setLevelStyle(R.style.LevelFive); } else if (achievements.getImagesUploaded() >= 90 && achievements.getUniqueUsedImages() >= 40){ level.setLevel(9); level.setMaximumUniqueImagesUsed(45); level.setMaximumUploadCount(100); + level.setLevelStyle(R.style.LevelFour); } else if (achievements.getImagesUploaded() >= 80 && achievements.getUniqueUsedImages() >= 35){ level.setLevel(8); level.setMaximumUniqueImagesUsed(40); level.setMaximumUploadCount(90); + level.setLevelStyle(R.style.LevelThree); } else if (achievements.getImagesUploaded() >= 70 && achievements.getUniqueUsedImages() >= 30){ level.setLevel(7); level.setMaximumUniqueImagesUsed(35); level.setMaximumUploadCount(80); + level.setLevelStyle(R.style.LevelTwo); } else if (achievements.getImagesUploaded() >= 60 && achievements.getUniqueUsedImages() >= 25 ){ level.setLevel(6); level.setMaximumUniqueImagesUsed(30); level.setMaximumUploadCount(70); + level.setLevelStyle(R.style.LevelOne); } else if (achievements.getImagesUploaded() >= 50 && achievements.getUniqueUsedImages() >= 20 ){ level.setLevel(5); level.setMaximumUniqueImagesUsed(25); level.setMaximumUploadCount(60); + level.setLevelStyle(R.style.LevelFive); } else if (achievements.getImagesUploaded() >= 40 && achievements.getUniqueUsedImages() >= 15 ){ level.setLevel(4); level.setMaximumUniqueImagesUsed(20); level.setMaximumUploadCount(50); + level.setLevelStyle(R.style.LevelFour); } else if (achievements.getImagesUploaded() >= 30 && achievements.getUniqueUsedImages() >= 10 ){ level.setLevel(3); level.setMaximumUniqueImagesUsed(15); level.setMaximumUploadCount(40); + level.setLevelStyle(R.style.LevelThree); } else if (achievements.getImagesUploaded() >= 20 && achievements.getUniqueUsedImages() >= 5 ){ level.setLevel(2); level.setMaximumUniqueImagesUsed(10); level.setMaximumUploadCount(30); + level.setLevelStyle(R.style.LevelTwo); } return level; diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 637f79009..26d9c357b 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -63,4 +63,28 @@ #bc6853 + + + + + + + + \ No newline at end of file From 5a5f7c4b92a4a5bfbf3781cf5543796731d7fe56 Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Tue, 5 Jun 2018 14:10:18 +0530 Subject: [PATCH 15/22] Added custom alert for share option --- .../achievements/AchievementsActivity.java | 32 ++++++++++++++++++- .../main/res/layout/image_alert_layout.xml | 21 ++++++++++++ app/src/main/res/values/strings.xml | 1 + 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/layout/image_alert_layout.xml 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 34e08c551..95e37c4b1 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 @@ -2,6 +2,7 @@ package fr.free.nrw.commons.achievements; import android.annotation.SuppressLint; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -14,10 +15,12 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.support.v4.content.res.ResourcesCompat; +import android.support.v7.app.AlertDialog; import android.support.v7.widget.Toolbar; import android.util.DisplayMetrics; import android.util.Log; import android.view.ContextThemeWrapper; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -145,7 +148,7 @@ public class AchievementsActivity extends NavigationBaseActivity { if (id == R.id.share_app_icon) { View rootView = getWindow().getDecorView().findViewById(android.R.id.content); Bitmap screenShot = Utils.getScreenShot(rootView); - shareScreen(screenShot); + showAlert(screenShot); } return super.onOptionsItemSelected(item); @@ -345,4 +348,31 @@ public class AchievementsActivity extends NavigationBaseActivity { return bitmap; } + /** + * It display the alertDialog with Image of screenshot + * @param screenshot + */ + public void showAlert(Bitmap screenshot){ + AlertDialog.Builder alertadd = new AlertDialog.Builder(AchievementsActivity.this); + LayoutInflater factory = LayoutInflater.from(AchievementsActivity.this); + final View view = factory.inflate(R.layout.image_alert_layout, null); + ImageView screenShotImage = (ImageView) view.findViewById(R.id.alert_image); + screenShotImage.setImageBitmap(screenshot); + TextView shareMessage = (TextView) view.findViewById(R.id.alert_text); + shareMessage.setText(R.string.achievements_share_message); + alertadd.setView(view); + alertadd.setPositiveButton("Proceed", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + shareScreen(screenshot); + } + }); + alertadd.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.cancel(); + } + }); + alertadd.show(); + } + } diff --git a/app/src/main/res/layout/image_alert_layout.xml b/app/src/main/res/layout/image_alert_layout.xml new file mode 100644 index 000000000..37b2c5b67 --- /dev/null +++ b/app/src/main/res/layout/image_alert_layout.xml @@ -0,0 +1,21 @@ + + + + + + + + \ 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 3bd14ba03..0454f22b1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -292,4 +292,5 @@ Images Uploaded Images Not Reverted Images Used By Wiki + Proceed to Share the Screenshot of Achievements From 0b68fdb6b60e2d1691118a4e1a7c91220dd20b16 Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Tue, 5 Jun 2018 16:27:10 +0530 Subject: [PATCH 16/22] Improved the UI of screen --- .../main/res/layout/activity_achievements.xml | 18 ++++++++++++------ app/src/main/res/values/dimens.xml | 1 + 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/layout/activity_achievements.xml b/app/src/main/res/layout/activity_achievements.xml index af776a4f6..c982ac23e 100644 --- a/app/src/main/res/layout/activity_achievements.xml +++ b/app/src/main/res/layout/activity_achievements.xml @@ -71,11 +71,12 @@ android:layout_height="wrap_content" android:layout_marginLeft="@dimen/activity_margin_horizontal" android:layout_marginStart="@dimen/activity_margin_horizontal" + android:layout_marginTop="@dimen/achievements_activity_margin_vertical" android:text="@string/images_uploaded" /> @@ -104,12 +106,13 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/activity_margin_horizontal" + android:layout_marginTop="@dimen/achievements_activity_margin_vertical" android:layout_marginStart="@dimen/activity_margin_horizontal" android:text="@string/image_reverts" /> @@ -140,11 +144,12 @@ android:layout_height="wrap_content" android:layout_marginLeft="@dimen/activity_margin_horizontal" android:layout_marginStart="@dimen/activity_margin_horizontal" + android:layout_marginTop="@dimen/achievements_activity_margin_vertical" android:text="@string/images_used_by_wiki" /> diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 7eaf97880..a5847f704 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -4,6 +4,7 @@ 16dp 16dp + 8dp 48dp From 53d274ba3b9eb0a92b737f33ab9ecc34dbe642ee Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Wed, 6 Jun 2018 01:36:22 +0530 Subject: [PATCH 17/22] Added the alertDialog for info button --- .../achievements/AchievementsActivity.java | 16 ++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 2 files changed, 17 insertions(+) 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 95e37c4b1..78aa38807 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 @@ -43,6 +43,7 @@ import javax.inject.Inject; import butterknife.BindView; import butterknife.ButterKnife; +import butterknife.OnClick; import fr.free.nrw.commons.R; import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.auth.SessionManager; @@ -135,6 +136,21 @@ public class AchievementsActivity extends NavigationBaseActivity { initDrawer(); } + /** + * to invoke the AlertDialog on clicking info button + */ + @OnClick(R.id.achievement_info) + public void showInfoDialog(){ + new AlertDialog.Builder(AchievementsActivity.this) + .setTitle(R.string.Achievements) + .setMessage(R.string.achievements_info_message) + .setCancelable(true) + .setNeutralButton(android.R.string.ok, (dialog, id) -> dialog.cancel()) + .create() + .show(); + + } + @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0454f22b1..095fe7ea7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -293,4 +293,5 @@ Images Not Reverted Images Used By Wiki Proceed to Share the Screenshot of Achievements + The Quality as well as the Quantity of images uploaded makes up the criterion for determining the levels. For Each level there are certain requirements in terms of number of images uploaded, revert rate and images used by Wiki that needs to be met. From 3cf7080d40e7bcfc71b7ada568eae2c65595d558 Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Thu, 14 Jun 2018 21:48:54 +0530 Subject: [PATCH 18/22] Improved the quality of PR --- .../achievements/AchievementsActivity.java | 47 +--------------- .../nrw/commons/achievements/BitmapUtils.java | 54 +++++++++++++++++++ .../commons/achievements/LevelController.java | 2 + .../main/res/layout/activity_achievements.xml | 5 +- 4 files changed, 62 insertions(+), 46 deletions(-) create mode 100644 app/src/main/java/fr/free/nrw/commons/achievements/BitmapUtils.java 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 78aa38807..95690af9d 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 @@ -250,7 +250,6 @@ public class AchievementsActivity extends NavigationBaseActivity { achievements.setFeaturedImages (featuredImages.getInt("Quality_images") + featuredImages.getInt("Featured_pictures_on_Wikimedia_Commons")); - } catch (JSONException e) { e.printStackTrace(); } @@ -275,8 +274,8 @@ public class AchievementsActivity extends NavigationBaseActivity { levelNumber.setText(levelUpInfoString); final ContextThemeWrapper wrapper = new ContextThemeWrapper(this, levelInfo.getLevelStyle()); Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.badge, wrapper.getTheme()); - Bitmap bitmap = drawableToBitmap(drawable); - BitmapDrawable bitmapImage = writeOnDrawable(bitmap, Integer.toString(levelInfo.getLevel())); + Bitmap bitmap = BitmapUtils.drawableToBitmap(drawable); + BitmapDrawable bitmapImage = BitmapUtils.writeOnDrawable(bitmap, Integer.toString(levelInfo.getLevel()),this); imageView.setImageDrawable(bitmapImage); } @@ -322,48 +321,6 @@ public class AchievementsActivity extends NavigationBaseActivity { levelNumber.setVisibility(View.INVISIBLE); } - /** - * write level Number on the badge - * @param bm - * @param text - * @return - */ - public BitmapDrawable writeOnDrawable(Bitmap bm, String text){ - Bitmap.Config config = bm.getConfig(); - if(config == null){ - config = Bitmap.Config.ARGB_8888; - } - Bitmap bitmap = Bitmap.createBitmap(bm.getWidth(),bm.getHeight(),config); - Canvas canvas = new Canvas(bitmap); - canvas.drawBitmap(bm, 0, 0, null); - Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setStyle(Paint.Style.FILL); - paint.setColor(Color.WHITE); - paint.setTextSize(Math.round(canvas.getHeight()/2)); - paint.setTextAlign(Paint.Align.CENTER); - Rect rectText = new Rect(); - paint.getTextBounds(text,0, text.length(),rectText); - canvas.drawText(text, Math.round(canvas.getWidth()/2),Math.round(canvas.getHeight()/1.35), paint); - return new BitmapDrawable(getResources(), bitmap); - } - - /** - * Convert Drawable to bitmap - * @param drawable - * @return - */ - public static Bitmap drawableToBitmap (Drawable drawable) { - if (drawable instanceof BitmapDrawable) { - return ((BitmapDrawable)drawable).getBitmap(); - } - Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(bitmap); - drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); - drawable.draw(canvas); - - return bitmap; - } - /** * It display the alertDialog with Image of screenshot * @param screenshot diff --git a/app/src/main/java/fr/free/nrw/commons/achievements/BitmapUtils.java b/app/src/main/java/fr/free/nrw/commons/achievements/BitmapUtils.java new file mode 100644 index 000000000..b7400117d --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/achievements/BitmapUtils.java @@ -0,0 +1,54 @@ +package fr.free.nrw.commons.achievements; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; + +public class BitmapUtils { + + /** + * write level Number on the badge + * @param bm + * @param text + * @return + */ + public static BitmapDrawable writeOnDrawable(Bitmap bm, String text, Context context){ + Bitmap.Config config = bm.getConfig(); + if(config == null){ + config = Bitmap.Config.ARGB_8888; + } + Bitmap bitmap = Bitmap.createBitmap(bm.getWidth(),bm.getHeight(),config); + Canvas canvas = new Canvas(bitmap); + canvas.drawBitmap(bm, 0, 0, null); + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setStyle(Paint.Style.FILL); + paint.setColor(Color.WHITE); + paint.setTextSize(Math.round(canvas.getHeight()/2)); + paint.setTextAlign(Paint.Align.CENTER); + Rect rectText = new Rect(); + paint.getTextBounds(text,0, text.length(),rectText); + canvas.drawText(text, Math.round(canvas.getWidth()/2),Math.round(canvas.getHeight()/1.35), paint); + return new BitmapDrawable(context.getResources(), bitmap); + } + + /** + * Convert Drawable to bitmap + * @param drawable + * @return + */ + public static Bitmap drawableToBitmap (Drawable drawable) { + if (drawable instanceof BitmapDrawable) { + return ((BitmapDrawable)drawable).getBitmap(); + } + Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); + drawable.draw(canvas); + return bitmap; + } +} diff --git a/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java b/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java index 9edcbc354..c23fafd4f 100644 --- a/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java +++ b/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java @@ -20,6 +20,8 @@ public class LevelController { level.setMaximumUniqueImagesUsed(5); if(achievements.getImagesUploaded() >= 100 && achievements.getUniqueUsedImages() >= 45){ level.setLevel(10); + level.setMaximumUniqueImagesUsed(50); + level.setMaximumUploadCount(110); level.setLevelStyle(R.style.LevelFive); } else if (achievements.getImagesUploaded() >= 90 && achievements.getUniqueUsedImages() >= 40){ level.setLevel(9); diff --git a/app/src/main/res/layout/activity_achievements.xml b/app/src/main/res/layout/activity_achievements.xml index c982ac23e..90c0b52c5 100644 --- a/app/src/main/res/layout/activity_achievements.xml +++ b/app/src/main/res/layout/activity_achievements.xml @@ -81,10 +81,11 @@ android:layout_marginRight="32dp" android:id="@+id/images_uploaded_progressbar" android:progress="50" + app:progress_text_size="9dp" app:progress_end_color="#8C8B98" app:progress_start_color="#3A3381" app:progress_stroke_width="3dp" - app:progress_text_format_pattern="12/24" + app:progress_text_format_pattern="573/110" app:progress_text_color="@color/secondaryColor" app:style="solid_line" /> @@ -119,6 +120,7 @@ android:id="@+id/image_reverts_progressbar" app:progress_end_color="#8C8B98" app:progress_start_color="#3A3381" + app:progress_text_size="9dp" app:progress_stroke_width="3dp" app:progress_text_format_pattern="12/24" app:progress_text_color="@color/secondaryColor" @@ -153,6 +155,7 @@ android:layout_alignParentRight="true" android:layout_marginRight="32dp" android:progress="50" + app:progress_text_size="9dp" android:id="@+id/images_used_by_wiki_progressbar" app:progress_end_color="#8C8B98" app:progress_start_color="#3A3381" From c8771e0b58ce7af5f93a2cecbc046a44940a2feb Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Fri, 15 Jun 2018 00:30:47 +0530 Subject: [PATCH 19/22] Added Builder model --- .../commons/achievements/Achievements.java | 184 +++++++++--------- 1 file changed, 97 insertions(+), 87 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/achievements/Achievements.java b/app/src/main/java/fr/free/nrw/commons/achievements/Achievements.java index 53b0f5332..0cadcba64 100644 --- a/app/src/main/java/fr/free/nrw/commons/achievements/Achievements.java +++ b/app/src/main/java/fr/free/nrw/commons/achievements/Achievements.java @@ -11,107 +11,117 @@ public class Achievements { private int featuredImages; private int imagesUploaded; - /** - * Sets the unique images used - * - * @param uniqueUsedImages - */ - public void setUniqueUsedImages(int uniqueUsedImages) { + public Achievements(){ + + } + + public Achievements(int uniqueUsedImages, + int articlesUsingImages, + int thanksReceived, + int imagesEditedBySomeoneElse, + int featuredImages, + int imagesUploaded) { this.uniqueUsedImages = uniqueUsedImages; - } - - /** - * returns the unique images used - * - * @return - */ - public int getUniqueUsedImages() { - return uniqueUsedImages; - } - - /** - * sets the number of articles using images - * - * @param articlesUsingImages - */ - public void setArticlesUsingImages(int articlesUsingImages) { this.articlesUsingImages = articlesUsingImages; - } - - /** - * returns the number of articles using images - * - * @return - */ - public int getArticlesUsingImages() { - return articlesUsingImages; - } - - /** - * sets the no of thanks received by user - * - * @param thanksReceived - */ - public void setThanksReceived(int thanksReceived) { this.thanksReceived = thanksReceived; - } - - /** - * return the no of thanks received by user - * - * @return - */ - public int getThanksReceived() { - return thanksReceived; - } - - /** - * sets the no of images edited by someone else - * - * @param imagesEditedBySomeoneElse - */ - public void setImagesEditedBySomeoneElse(int imagesEditedBySomeoneElse) { this.imagesEditedBySomeoneElse = imagesEditedBySomeoneElse; - } - - /** - * returns the no of images edited by someone else - * - * @return - */ - public int getImagesEditedBySomeoneElse() { - return imagesEditedBySomeoneElse; - } - - /** - * sets the total of images featured - * @param featuredImages - */ - public void setFeaturedImages(int featuredImages) { this.featuredImages = featuredImages; + this.imagesUploaded = imagesUploaded; + } + public class AchievementsBuilder { + private int nestedUniqueUsedImages; + private int nestedArticlesUsingImages; + private int nestedThanksReceived; + private int nestedImagesEditedBySomeoneElse; + private int nestedFeaturedImages; + private int nestedImagesUploaded; + + public AchievementsBuilder setUniqueUsedImages(int uniqueUsedImages) { + this.nestedUniqueUsedImages = uniqueUsedImages; + return this; + } + + public AchievementsBuilder setArticlesUsingImages(int articlesUsingImages) { + this.nestedArticlesUsingImages = articlesUsingImages; + return this; + } + + public AchievementsBuilder setThanksReceived(int thanksReceived) { + this.nestedThanksReceived = thanksReceived; + return this; + } + + public AchievementsBuilder setImagesEditedBySomeoneElse(int imagesEditedBySomeoneElse) { + this.nestedImagesEditedBySomeoneElse = imagesEditedBySomeoneElse; + return this; + } + + public AchievementsBuilder setFeaturedImages(int featuredImages) { + this.nestedFeaturedImages = featuredImages; + return this; + } + + public AchievementsBuilder setImagesUploaded(int imagesUploaded) { + this.nestedImagesUploaded = imagesUploaded; + return this; + } + + public Achievements createAchievements(){ + return new Achievements(nestedUniqueUsedImages, + nestedArticlesUsingImages, + nestedThanksReceived, + nestedImagesEditedBySomeoneElse, + nestedFeaturedImages, + nestedImagesUploaded); + } + + } + + public int getImagesUploaded() { + return imagesUploaded; } - /** - * returns the total count of images featured - * @return - */ public int getFeaturedImages() { return featuredImages; } - /** - * to set the total number of images uploaded - * @param imagesUploaded - */ + public int getImagesEditedBySomeoneElse() { + return imagesEditedBySomeoneElse; + } + + public int getThanksReceived() { + return thanksReceived; + } + + public int getArticlesUsingImages() { + return articlesUsingImages; + } + + public int getUniqueUsedImages() { + return uniqueUsedImages; + } + public void setImagesUploaded(int imagesUploaded) { this.imagesUploaded = imagesUploaded; } - /** - * to get the total number of uploads - * @return - */ - public int getImagesUploaded() { - return imagesUploaded; + public void setFeaturedImages(int featuredImages) { + this.featuredImages = featuredImages; + } + + public void setImagesEditedBySomeoneElse(int imagesEditedBySomeoneElse) { + this.imagesEditedBySomeoneElse = imagesEditedBySomeoneElse; + } + + public void setThanksReceived(int thanksReceived) { + this.thanksReceived = thanksReceived; + } + + public void setArticlesUsingImages(int articlesUsingImages) { + this.articlesUsingImages = articlesUsingImages; + } + + public void setUniqueUsedImages(int uniqueUsedImages) { + this.uniqueUsedImages = uniqueUsedImages; } } From e2a0e6969d793ff896c9ff95eb33992c6af4bb64 Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Fri, 15 Jun 2018 01:53:25 +0530 Subject: [PATCH 20/22] Added Enum Model and increased levels to 15 --- .../achievements/AchievementsActivity.java | 18 +-- .../commons/achievements/LevelController.java | 117 +++++++++--------- 2 files changed, 69 insertions(+), 66 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 95690af9d..ec9cbf6ad 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 @@ -64,8 +64,8 @@ public class AchievementsActivity extends NavigationBaseActivity { private Boolean isUploadFetched = false; private Boolean isStatisticsFetched = false; private Achievements achievements = new Achievements(); - private LevelController level = new LevelController(); - private Level levelInfo; + private LevelController level; + private LevelController.LevelInfo levelInfo; @BindView(R.id.achievement_badge) ImageView imageView; @@ -230,9 +230,9 @@ public class AchievementsActivity extends NavigationBaseActivity { private void setUploadProgress( int uploadCount){ imagesUploadedProgressbar.setProgress - (100*uploadCount/levelInfo.getMaximumUploadCount()); + (100*uploadCount/levelInfo.getMaxUploadCount()); imagesUploadedProgressbar.setProgressTextFormatPattern - (uploadCount +"/" + levelInfo.getMaximumUploadCount() ); + (uploadCount +"/" + levelInfo.getMaxUploadCount() ); } /** @@ -265,17 +265,17 @@ public class AchievementsActivity extends NavigationBaseActivity { private void inflateAchievements( Achievements achievements ){ thanksReceived.setText(Integer.toString(achievements.getThanksReceived())); imagesUsedByWikiProgessbar.setProgress - (100*achievements.getUniqueUsedImages()/levelInfo.getMaximumUniqueImagesUsed()); + (100*achievements.getUniqueUsedImages()/levelInfo.getMaxUniqueImages() ); imagesUsedByWikiProgessbar.setProgressTextFormatPattern - (achievements.getUniqueUsedImages() + "/" + levelInfo.getMaximumUniqueImagesUsed()); + (achievements.getUniqueUsedImages() + "/" + levelInfo.getMaxUniqueImages()); imagesFeatured.setText(Integer.toString(achievements.getFeaturedImages())); String levelUpInfoString = getString(R.string.level); - levelUpInfoString += " " + Integer.toString(levelInfo.getLevel()); + levelUpInfoString += " " + Integer.toString(levelInfo.getLevelNumber()); levelNumber.setText(levelUpInfoString); final ContextThemeWrapper wrapper = new ContextThemeWrapper(this, levelInfo.getLevelStyle()); Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.badge, wrapper.getTheme()); Bitmap bitmap = BitmapUtils.drawableToBitmap(drawable); - BitmapDrawable bitmapImage = BitmapUtils.writeOnDrawable(bitmap, Integer.toString(levelInfo.getLevel()),this); + BitmapDrawable bitmapImage = BitmapUtils.writeOnDrawable(bitmap, Integer.toString(levelInfo.getLevelNumber()),this); imageView.setImageDrawable(bitmapImage); } @@ -296,7 +296,7 @@ public class AchievementsActivity extends NavigationBaseActivity { */ private void hideProgressBar() { if (progressBar != null && isUploadFetched && isStatisticsFetched) { - levelInfo = level.calculateLevelUp(achievements); + levelInfo = LevelController.LevelInfo.from(achievements.getImagesUploaded(),achievements.getUniqueUsedImages()); inflateAchievements(achievements); setUploadProgress(achievements.getImagesUploaded()); progressBar.setVisibility(View.GONE); diff --git a/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java b/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java index c23fafd4f..20176759d 100644 --- a/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java +++ b/app/src/main/java/fr/free/nrw/commons/achievements/LevelController.java @@ -7,64 +7,67 @@ import fr.free.nrw.commons.R; */ public class LevelController { - /** - * calculated the level of user and return the level information - * @param achievements - * @return - */ - Level calculateLevelUp( Achievements achievements){ - Level level = new Level (); - level.setLevel(1); - level.setLevelStyle(R.style.LevelOne); - level.setMaximumUploadCount(20); - level.setMaximumUniqueImagesUsed(5); - if(achievements.getImagesUploaded() >= 100 && achievements.getUniqueUsedImages() >= 45){ - level.setLevel(10); - level.setMaximumUniqueImagesUsed(50); - level.setMaximumUploadCount(110); - level.setLevelStyle(R.style.LevelFive); - } else if (achievements.getImagesUploaded() >= 90 && achievements.getUniqueUsedImages() >= 40){ - level.setLevel(9); - level.setMaximumUniqueImagesUsed(45); - level.setMaximumUploadCount(100); - level.setLevelStyle(R.style.LevelFour); - } else if (achievements.getImagesUploaded() >= 80 && achievements.getUniqueUsedImages() >= 35){ - level.setLevel(8); - level.setMaximumUniqueImagesUsed(40); - level.setMaximumUploadCount(90); - level.setLevelStyle(R.style.LevelThree); - } else if (achievements.getImagesUploaded() >= 70 && achievements.getUniqueUsedImages() >= 30){ - level.setLevel(7); - level.setMaximumUniqueImagesUsed(35); - level.setMaximumUploadCount(80); - level.setLevelStyle(R.style.LevelTwo); - } else if (achievements.getImagesUploaded() >= 60 && achievements.getUniqueUsedImages() >= 25 ){ - level.setLevel(6); - level.setMaximumUniqueImagesUsed(30); - level.setMaximumUploadCount(70); - level.setLevelStyle(R.style.LevelOne); - } else if (achievements.getImagesUploaded() >= 50 && achievements.getUniqueUsedImages() >= 20 ){ - level.setLevel(5); - level.setMaximumUniqueImagesUsed(25); - level.setMaximumUploadCount(60); - level.setLevelStyle(R.style.LevelFive); - } else if (achievements.getImagesUploaded() >= 40 && achievements.getUniqueUsedImages() >= 15 ){ - level.setLevel(4); - level.setMaximumUniqueImagesUsed(20); - level.setMaximumUploadCount(50); - level.setLevelStyle(R.style.LevelFour); - } else if (achievements.getImagesUploaded() >= 30 && achievements.getUniqueUsedImages() >= 10 ){ - level.setLevel(3); - level.setMaximumUniqueImagesUsed(15); - level.setMaximumUploadCount(40); - level.setLevelStyle(R.style.LevelThree); - } else if (achievements.getImagesUploaded() >= 20 && achievements.getUniqueUsedImages() >= 5 ){ - level.setLevel(2); - level.setMaximumUniqueImagesUsed(10); - level.setMaximumUploadCount(30); - level.setLevelStyle(R.style.LevelTwo); + public LevelInfo level; + public enum LevelInfo{ + LEVEL_15(15,R.style.LevelFive, 80, 160), + LEVEL_14(14,R.style.LevelFour, 75 , 150), + LEVEL_13(13,R.style.LevelThree, 70, 140), + LEVEL_12(12,R.style.LevelTwo,65 , 130), + LEVEL_11(11,R.style.LevelOne, 60, 120), + LEVEL_10(10, R.style.LevelFive, 55, 110), + LEVEL_9(9, R.style.LevelFour, 50, 100), + LEVEL_8(8, R.style.LevelThree, 45, 90), + LEVEL_7(7, R.style.LevelTwo, 40, 80), + LEVEL_6(6,R.style.LevelOne,30,70), + LEVEL_5(5, R.style.LevelFive, 25, 60), + LEVEL_4(4, R.style.LevelFour,20,50), + LEVEL_3(3, R.style.LevelThree, 15,40), + LEVEL_2(2, R.style.LevelTwo, 10, 30), + LEVEL_1(1, R.style.LevelOne, 5, 20 ); + + private int levelNumber; + private int levelStyle; + private int maxUniqueImages; + private int maxUploadCount; + + LevelInfo(int levelNumber, int levelStyle, int maxUniqueImages, int maxUploadCount) { + this.levelNumber = levelNumber; + this.levelStyle = levelStyle; + this.maxUniqueImages = maxUniqueImages; + this.maxUploadCount = maxUploadCount; } - return level; + public static LevelInfo from(int imagesUploaded, int uniqueImagesUsed) { + LevelInfo level = LEVEL_1; + + for (LevelInfo levelInfo : LevelInfo.values()) { + if (imagesUploaded > levelInfo.maxUploadCount && uniqueImagesUsed > levelInfo.maxUniqueImages) { + level = levelInfo; + return level; + } + } + return level; + } + + public int getLevelStyle() { + return levelStyle; + } + + public int getLevelNumber() { + return levelNumber; + } + + public void setLevelStyle(int levelStyle) { + this.levelStyle = levelStyle; + } + + public int getMaxUniqueImages() { + return maxUniqueImages; + } + + public int getMaxUploadCount() { + return maxUploadCount; + } } + } From 9ab36091c2b0502c303888eee33c5ae8bad155c7 Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Fri, 15 Jun 2018 02:02:47 +0530 Subject: [PATCH 21/22] removed redundant class --- .../free/nrw/commons/achievements/Level.java | 45 ------------------- 1 file changed, 45 deletions(-) delete mode 100644 app/src/main/java/fr/free/nrw/commons/achievements/Level.java diff --git a/app/src/main/java/fr/free/nrw/commons/achievements/Level.java b/app/src/main/java/fr/free/nrw/commons/achievements/Level.java deleted file mode 100644 index 692354fd4..000000000 --- a/app/src/main/java/fr/free/nrw/commons/achievements/Level.java +++ /dev/null @@ -1,45 +0,0 @@ -package fr.free.nrw.commons.achievements; - -/** - * Contains information about the levels - */ -public class Level { - private int maximumUploadCount; - private int maximumUniqueImagesUsed; - private int revertRate; - private int level; - private int levelStyle; - - public int getMaximumUniqueImagesUsed() { - return maximumUniqueImagesUsed; - } - - public int getMaximumUploadCount() { - return maximumUploadCount; - } - - public void setMaximumUploadCount(int maximumUploadCount) { - this.maximumUploadCount = maximumUploadCount; - } - - public void setMaximumUniqueImagesUsed(int maximumUniqueImagesUsed) { - this.maximumUniqueImagesUsed = maximumUniqueImagesUsed; - } - - public int getLevel() { - return level; - } - - public void setLevel(int level) { - this.level = level; - } - - public void setLevelStyle(int levelStyle) { - this.levelStyle = levelStyle; - } - - public int getLevelStyle() { - return levelStyle; - } - -} From a1caedce3d7aad73ead7d949ca02dfab17808d74 Mon Sep 17 00:00:00 2001 From: tanvidadu Date: Fri, 15 Jun 2018 02:36:09 +0530 Subject: [PATCH 22/22] Changed strings and added subtext --- app/src/main/res/layout/activity_achievements.xml | 13 +++++++++++-- app/src/main/res/values/strings.xml | 4 ++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/layout/activity_achievements.xml b/app/src/main/res/layout/activity_achievements.xml index 90c0b52c5..f289eafe8 100644 --- a/app/src/main/res/layout/activity_achievements.xml +++ b/app/src/main/res/layout/activity_achievements.xml @@ -107,10 +107,19 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/activity_margin_horizontal" - android:layout_marginTop="@dimen/achievements_activity_margin_vertical" + android:id="@+id/images_reverted_text" android:layout_marginStart="@dimen/activity_margin_horizontal" android:text="@string/image_reverts" /> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 095fe7ea7..4645f1790 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -292,6 +292,6 @@ Images Uploaded Images Not Reverted Images Used By Wiki - Proceed to Share the Screenshot of Achievements - The Quality as well as the Quantity of images uploaded makes up the criterion for determining the levels. For Each level there are certain requirements in terms of number of images uploaded, revert rate and images used by Wiki that needs to be met. + Share your achievements with your friends! + Your level increases as you meet these requirements. Items in the "statistics" section do not count towards your level.