From 56d6a8995b1dfbab9b1a88c4ade4b5e073d4c636 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Fri, 5 Jun 2020 16:55:54 +0200 Subject: [PATCH] Add adventure guide iindicator to drawer icon --- Habitica/res/drawable-hdpi/star.png | Bin 0 -> 347 bytes Habitica/res/drawable-mdpi/star.png | Bin 0 -> 220 bytes Habitica/res/drawable-xhdpi/star.png | Bin 0 -> 402 bytes Habitica/res/drawable-xxhdpi/star.png | Bin 0 -> 618 bytes Habitica/res/drawable-xxxhdpi/star.png | Bin 0 -> 816 bytes Habitica/res/values/strings.xml | 1 + .../habitica/ui/activities/MainActivity.kt | 12 +++-- .../AdventureGuideDrawerArrowDrawable.kt | 47 ++++++++++++++++++ .../AdventureGuideMenuBanner.kt | 2 +- .../utils/AchievementListDeserializer.kt | 2 +- 10 files changed, 58 insertions(+), 6 deletions(-) create mode 100644 Habitica/res/drawable-hdpi/star.png create mode 100644 Habitica/res/drawable-mdpi/star.png create mode 100644 Habitica/res/drawable-xhdpi/star.png create mode 100644 Habitica/res/drawable-xxhdpi/star.png create mode 100644 Habitica/res/drawable-xxxhdpi/star.png create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AdventureGuideDrawerArrowDrawable.kt diff --git a/Habitica/res/drawable-hdpi/star.png b/Habitica/res/drawable-hdpi/star.png new file mode 100644 index 0000000000000000000000000000000000000000..07691492fbd75e6c845396f231b3074ea3ad83fe GIT binary patch literal 347 zcmV-h0i^zkP)Px$6-h)vR5%fpl09z1KoEuPh`0&@HwhGo4hc#clw2TJNtq+$CR8~@N)C`N;sO*v z2NDIMu=yU^L2G6GH`1q>o%d#JuN*}+k>~kB)Y$4}mVAqPXN7|WL%2AG71rpXN<{mB zM~CY6!CNG-2Mg6n*`|&!VC-`qzze*?Ggzqp!t+Dk!!C~FgNYHs1peR*Z9_Afo!k~u z%wY>{Lo@UHTdANihBY(|dB=q%c0fpB)nJo6sm&?J{y{Z{E=iYI_G@HlJudo0zDLMB zMGf_BNZQN}mO}$?CRXHsp3tIKZ^4oJ)1lhJ_gJr(xuXqaumt^>w@~eR(l*u)W(*_v th0-TVbDmLfiJBOmAoRI~8F}ROn^z_kYfpG(sZjs`002ovPDHLkV1h(~lJEck literal 0 HcmV?d00001 diff --git a/Habitica/res/drawable-mdpi/star.png b/Habitica/res/drawable-mdpi/star.png new file mode 100644 index 0000000000000000000000000000000000000000..23af96a4707b8104189fcc08ab4056a21822e412 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CN!3HF~3v%Lt6k~CayA#8@b22Z1oN1mejv*SN zt-X7Bn+*iqR%Wa`$zZ@F!jknYne9f4>x;!AnTt%G)t*q>RN6FoUd{KvCnD2&iq{FY zrFyrdC+_a_+R!q8xzC&bo(med)HoK$Mir`AR#hCntMS>UOGkE(p46vZpT%`KOmo~k zqhwnTH*S<_HT`kX+n{~DeoaNITa;XDslv9RnXGbhZ)aW8>XC5H@@O`EVePBVzIjbR Rx-Za$44$rjF6*2UngBsPx$Oi4sRR7ef2l(A03Fcd|Ts;EmBgetZDgU$>{d`BmS?)?qM4&4zmzktLSl%cS) zQdnR>%pjp~E;!h6>eQxr(vhE^@4GLtqGVY@6h(0&5?a!vm|uysu1Gb;Blt9oBHOY~ ztPtHC4h+iM3!b_MuTX~aUTYIDo0ZPaI%{*l+A%KEbBNc@BOikxbwb+6sB;&23N^!d(j!8GB<8~ZtQ49Zn=W12ExX*$1HFW|^;R?VDAqgeWy;2!ZU wtYF(uuF@xs(XJ{7p$+03&a{R!e!Z#Z8)J?I2)>Z>^8f$<07*qoM6N<$f{~xGU;qFB literal 0 HcmV?d00001 diff --git a/Habitica/res/drawable-xxhdpi/star.png b/Habitica/res/drawable-xxhdpi/star.png new file mode 100644 index 0000000000000000000000000000000000000000..d3f087bf72a0049ceb9adcd1137d60f79c3a87a5 GIT binary patch literal 618 zcmV-w0+s!VP)Px%BuPX;R9Fecmp@D7P!z?J#l=M!w-I+m<^x#GZnL6OTUuFI2x6<%d;-PV)^KWRb)ZP40uW~Q;{zERF#1KP4GE^{N{{R83#AOnEdg^6fu0=D6x*~O$zE;LX6vQ zL=e-vMuFql9l0n(96E%U(BVi0F?AL^o9T|DaECXUqO-mC;10lC%DP@w{aW~h@~t}hVKyl1F>MMe%4el$5Qg7QgNBPjL17Ga;5dH%_ zlkD)%MZF;_^b>+2F|XwJ6Ufgqafqv$u|mCq$Nhxd$Gb&7P%O`S)zr`p^O1x7ir88n zxpF`?Sv$(>368^fVXh4d8S7WP2_TssI2007*qoM6N<$ Eg3GubbpQYW literal 0 HcmV?d00001 diff --git a/Habitica/res/drawable-xxxhdpi/star.png b/Habitica/res/drawable-xxxhdpi/star.png new file mode 100644 index 0000000000000000000000000000000000000000..ac8b6f5ca65e5008f712e940627c2b291bae4a52 GIT binary patch literal 816 zcmV-01JC@4P)Px%>PbXFRA>d&nZ0WiK^VsG{73>Srcg9Th?TYJGzQX$rU=+r2o@>QSqChIG-8oI zBBT%k(b7VZbg5FL37A3)k!ZNePy9g7-xFuUa+#Ui*_%0bUwGKbyze~E^UmJxZT1?C zgwg4Au7RrwCDKx3{)v!QB@sKu$G|Uxu|zVBW2uPYy$?nvl!2&)+*fqF2}*|%&q09+<43;V&6t} zyFB4Bs9ZH~sqE|sXj^u@drCDUo+g7*G0(s~l+P7VSB+|`73}JE_f~uU-ma8;jLvw> zx>7SSnrQk+P(DunJh%WZ8ra4Ypo!Ho=E^?jME$qW7%#;ce7e|qJ)wRAr^@V@XU#WqXL&?$K6%>K zmN^4gAc}2X-oz>HpeWP8RFFbgaWHq82Cj#B3aSp~u6+YR7cm#G-t+GT?P+*%iwpTf z(Pg1$AmlUp9us#BG%gw;8bvw(*Kr1x3w(k7q~;Mgyi;jx=9KFd%VDkps!`tTq5how zWf!G#KsCPDbgl1e9!34?^24G0hWXn?1yl>(I=G|}|JNKyr!0csnR^I=-*sw@Su2k2 zh<_cRu-K*YjK41x-E~);IDokFvFNHVJrDc3QFzT!FT$dRIDxno>ru%?2I($%0QA#o uk`TAi*o`V+h+9!fJ!I&$r0FR+O#K7I^n+=U%PD{W0000Task list display Onboarding Tasks Complete to earn 100 Gold! + Delete... diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt index 396cf53d3..646512896 100755 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt @@ -56,6 +56,7 @@ import com.habitrpg.android.habitica.ui.TutorialView import com.habitrpg.android.habitica.ui.fragments.NavigationDrawerFragment import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.viewmodels.NotificationsViewModel +import com.habitrpg.android.habitica.ui.views.AdventureGuideDrawerArrowDrawable import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType @@ -81,6 +82,8 @@ import java.util.* import javax.inject.Inject open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { + private lateinit var drawerIcon: AdventureGuideDrawerArrowDrawable + @Inject internal lateinit var apiClient: ApiClient @Inject @@ -191,10 +194,9 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { findViewById(R.id.drawer_layout), /* DrawerLayout object */ R.string.navigation_drawer_open, /* "open drawer" description */ R.string.navigation_drawer_close /* "close drawer" description */ - ) { - - } - + ) {} + drawerIcon = AdventureGuideDrawerArrowDrawable(supportActionBar?.themedContext) + drawerToggle?.drawerArrowDrawable = drawerIcon // Set the drawer toggle as the DrawerListener drawerToggle?.let { drawerLayout.addDrawerListener(it) } @@ -359,6 +361,8 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { userRepository.updateUser(user, "party.quest.completed", "").subscribe(Consumer {}, RxErrorHandler.handleEmptyError()) }) } + + drawerIcon.setEnabled(user?.hasCompletedOnboarding == false) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AdventureGuideDrawerArrowDrawable.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AdventureGuideDrawerArrowDrawable.kt new file mode 100644 index 000000000..380395c93 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AdventureGuideDrawerArrowDrawable.kt @@ -0,0 +1,47 @@ +package com.habitrpg.android.habitica.ui.views + +import android.content.Context +import android.graphics.* +import androidx.appcompat.graphics.drawable.DrawerArrowDrawable +import androidx.core.content.ContextCompat +import com.habitrpg.android.habitica.R + + +class AdventureGuideDrawerArrowDrawable(context: Context?) : DrawerArrowDrawable(context) { + private val backgroundPaint: Paint = Paint() + private val icon: Bitmap = BitmapFactory.decodeResource(context?.resources, R.drawable.star) + private var enabled = true + override fun draw(canvas: Canvas) { + super.draw(canvas) + if (!enabled) { + return + } + val bounds = bounds + val x = bounds.width() - HALF_SIZE + val y = 10f + canvas.drawCircle(x, y, SIZE, backgroundPaint) + canvas.drawBitmap(icon, x - 16, y - 16, null) + } + + fun setEnabled(enabled: Boolean) { + if (this.enabled != enabled) { + this.enabled = enabled + invalidateSelf() + } + } + + fun isEnabled(): Boolean { + return enabled + } + + companion object { + // Fraction of the drawable's intrinsic size we want the badge to be. + private const val SIZE = 24f + private const val HALF_SIZE = SIZE / 2 + } + + init { + context?.let { backgroundPaint.color = ContextCompat.getColor(it, R.color.yellow_10) } + backgroundPaint.isAntiAlias = true + } +} \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/adventureGuide/AdventureGuideMenuBanner.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/adventureGuide/AdventureGuideMenuBanner.kt index 69072c0ac..9c2808305 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/adventureGuide/AdventureGuideMenuBanner.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/adventureGuide/AdventureGuideMenuBanner.kt @@ -24,7 +24,7 @@ class AdventureGuideMenuBanner @JvmOverloads constructor( val achievements = user.onboardingAchievements val completed = achievements.count { it.earned } binding.progressBar.max = achievements.size - binding.progressBar.progress = completed / achievements.size + binding.progressBar.progress = completed binding.countView.text = "${completed} / ${achievements.size}" } } \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/AchievementListDeserializer.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/AchievementListDeserializer.kt index 5a6f35e1a..c6929d7f0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/AchievementListDeserializer.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/AchievementListDeserializer.kt @@ -14,7 +14,7 @@ class AchievementListDeserializer: JsonDeserializer> { for (categoryEntry in json?.asJsonObject?.entrySet() ?: emptySet()) { val categoryIdentifier = categoryEntry.key for (entry in categoryEntry.value.asJsonObject.getAsJsonObject("achievements").entrySet()) { - var obj = entry.value.asJsonObject + val obj = entry.value.asJsonObject val achievement = Achievement() achievement.key = entry.key achievement.category = categoryIdentifier