From 18750829b9f0f7fbb372b3889fd29a55438aef1e Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Wed, 10 May 2023 15:41:06 +0200 Subject: [PATCH] add contributor info to FAQ --- .../res/drawable-hdpi/contributor_icon.png | Bin 0 -> 987 bytes .../res/drawable-mdpi/contributor_icon.png | Bin 0 -> 695 bytes .../res/drawable-xxhdpi/contributor_icon.png | Bin 0 -> 1246 bytes .../res/drawable-xxxhdpi/contributor_icon.png | Bin 0 -> 1706 bytes Habitica/res/drawable/rounded_border.xml | 2 +- Habitica/res/layout/chat_item.xml | 4 +- Habitica/res/layout/fragment_faq_overview.xml | 14 ++++++- .../extensions/Resources-Extensions.kt | 4 ++ .../habitica/ui/activities/MainActivity.kt | 6 +++ .../fragments/support/FAQOverviewFragment.kt | 38 ++++++++++++++++++ .../ui/views/SupportCollapsibleSection.kt | 17 +++++--- .../habitica/ui/views/UsernameLabel.kt | 6 ++- .../common/habitica/models/PlayerTier.kt | 1 - version.properties | 2 +- 14 files changed, 81 insertions(+), 13 deletions(-) create mode 100644 Habitica/res/drawable-hdpi/contributor_icon.png create mode 100644 Habitica/res/drawable-mdpi/contributor_icon.png create mode 100644 Habitica/res/drawable-xxhdpi/contributor_icon.png create mode 100644 Habitica/res/drawable-xxxhdpi/contributor_icon.png diff --git a/Habitica/res/drawable-hdpi/contributor_icon.png b/Habitica/res/drawable-hdpi/contributor_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a7b6892e79bf1587e35add2734866a776a735573 GIT binary patch literal 987 zcmV<110?*3P)yySOMLEZ4|MoN$m>srRgK4NuMFD z6l2nq7JtJ0+|zSLAX6Pi2?$NYmki9@ISgOU+*vubfvq|U?rMZPQ zuk*rrP+rePrN9jBPWgO3Fin%2i$Z~whl#`v+z)0qTyS&;O^+CEy;v}LAbAJ!0oCKNoiq$y8Ej5KvVB6ibCzQoAI|FMbMe6Li8| zB3RFKw~%10ayG;D>#{7N1%~uxa1-qZoJ~MTayHd^lKk{;cLB<(ecnOeL^+#$7sD6s z5+75$hNx$p?R^nFN+hN@o5PN5Hihb0MG&!X@x^Gf9r}Q2iTA2YHXE=g3#*9D3S*1b z41+#wd0w1GyB*glT-==l$PJbpp@Btl(MDFeJf(G-fqqo0c5!zT<#Pj(*=n#8O2PFb+A`mOCRsJBGqaO*# zQ`?(Ii;4C#Fkrxd0RsjM7|JvWZ&25yp!N{>H*@JP$d+TR}ZsSpnNJU5QHDai(2vOVjgS4mza z+Y{02N_xrmMAXprB7JKSr3IF*U+XiH7mo?Fb}H`kTm0@}D5Ko7ZMPeNMvv!XIsA5$r~1e%$~7002ov JPDHLkV1lakvCaSh literal 0 HcmV?d00001 diff --git a/Habitica/res/drawable-mdpi/contributor_icon.png b/Habitica/res/drawable-mdpi/contributor_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3c0559b9f2c39cb5b6ddb1512ef5db76d070bce0 GIT binary patch literal 695 zcmV;o0!aOdP)8?l|?39MaKH{}Ur(OQ1$G&}+H3GfZ7PXNvoi$iC41Xdh(II>3|Tf+?YwX!!mlYS zPLaKcPE_k}mQvo&GE^ajQBep)c0S_xwj!H^jEbI+huYt|U2t4?>f+yn0rdKP-o~ss zi%et}0kn7tFU4;0IYca+W-^a1w#AVpF;>(GiEI20MRz(bZBV59d_R7gMcCQdt@8#< zUUd$aHO9HON+na4)q;e$M;Yc;pQjtJV8Ma~v-0dib8q|Pb15hm`sYc=fJx;DAy$wS zztpzaRSP`WK1P^RMwagY@)!1~*8^u@munjjbN)Hrt37sC4_u)0-G=MR1j^Eq7(}Mv zOG7DXkjzI&WlbNKHxwatAt5R1C7F+G7{GsylBtuA@lb@vkJl_`ICy=|pV_}K$AMw@ zM;DlzsBWycL+escYWJt4zKoBF+LLwfLmuk3n3M*|1YXhS>Bd>4Tko6T+V)dX#!1c*)JXsU002ovPDHLkV1g0qFUzp+CS0w{^-kJ|1^;jm}j!#zvxfR$P`z*Y@c0KEd1E1>*a01yur(f*`;4^n0DyxYRgiL(+-lM?x9@Ovp3u#4{d8Pyl~aD$6m8c7zb+Rx0_^ z(yLbuQh<7KwIoS1o*(QT4?9=$+j;hLHGjHSJ<=^Yltej8$~W z+zNB9@NS$O9%d3Z%`KMNwBJYwnoB0>w%sPvvYgWlO&5jFR#pu9A3%CSid~eYkn7J5 zD&?T_UBR>c>Xv0$n6jRey<`?&^eCm+#Er07)TLmB2{2_m9@1pjghlriLV9S6O=#UMmD9S zi&hJpfhoEd8Kf3Q4xlkI+!)DtoF;`uUAw2GVlj$wf(iZ%PKw-ZAM8aMjexfcj}xRv zl1eBqctXey8W_cJPYybWfwA>~3&a<5E^Odm2YL*0kgTK;({q*|7f+OJvj^VP~tKL$2;fF+DhkXE{5l>mH*K;K>1v3-6$w3P{gApN9;;!QU19tI===?qT#ylg_WN zsnzMwIIstG!80pnk*AAcag&x}!%2~Qfmr9Su7TM}#QqzTutUV;ff{+)=bREjuwni-==W()RQ3R*q>5oPPWI5aS*_ z0qk+?n?FRQNxS@y@}AuWcjxVAYb#}%A_6;jeZR^#mvV!<N%8)duSZ&c|Kgip$JPt(%Ox^d5_rhM zYqOopOR{?QQf6S1$|m@b91!>sLN*&JN%yJ7=ZmxS7)~#mG%kYV9306(l8)qml2k6i zFmeuIl2l6YF>(&WB$W~T5IKh+No52vLvhBrL^=~%&cT*Ur=3lE#)E<~f;yS}oKhMn zxBqUCy!-KAC~!XN4YmxtA4EXk-;2DSJI?H!ed<+HyFb>-FWV0^SeDl)A`# zh-8o)P;QubjN~vmpyW&@jAR%&pzKsFNHVM(Q2K7dSJE^?%K>*TI?lP}DB!~v-_;5h zX-6!TYh9cVjtrLrQ*lS{O|riyoE(_4HJKXEQ1o34;$h^#KV5jBC{i?N5C8xG07*qo IM6N<$f(i^mw*UYD literal 0 HcmV?d00001 diff --git a/Habitica/res/drawable-xxxhdpi/contributor_icon.png b/Habitica/res/drawable-xxxhdpi/contributor_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e124ef7c279e0f61656172e23f22b9ec981f83e8 GIT binary patch literal 1706 zcmV;b237fqP)(xXvV)!$tFVRM!`ovH0gcHmGgP3(qm%93&4-v@djiD;y($xl272;1 zD_6h*l?cT=*^|jGu;^O^LZW=TLI{L=dP*N$HiJ^}V}|X!@_24$6&?U*)3G6)77}&7 zvK*zQ9Ev#*^Q2Dcicw}L7=*!S6e7L7b!8&>-Dhkc+}8+>b+WaScnJAbhr%*nR@rd| zRF$t{8d$b67CGJ8jZ@R~#%cYCMI@izqTuv@_x`;x4RDfA=VynZ3o%FMM=UT1lX{-b zR`#JP9euX5BXn+1j509_qbyH;5{X!riC~_^XvHyb*}xEVDU=r1_;SeSgB}*0LH4^F zq7)R3tci|SbJT-%rmh`uj8FUfq1(AFljsCrj~IfeKM<%aV;S{!dVUN9s1e#IPuiiK zV|9w#BK{VPPSx-``|)J#s}?~jr9!#1Wnu4DcoC1w_{WdbNpZN12Zm^|?@6Ip#2ceC zY>G~fVv15i$r}D_v#~uX6pMHsooa*V+Bf|*_ zC|PJ0rJfUNF5*MJ)(y81E1^V-eNPF+=wxS?7+*J*My)VLGIrjMXJ<$1?dK_>^@?~= zM2mgT2yIrxiy~6&dq!xpB3=}cV!uWx>kvV^Xy;f?5h>zDX;tjk2>tK!veYaZ6*hE|uVC9Pl}^JyOh%ns94*Ng3h?ggsx*c%LJ5#VxF@U>@uD;< z_Dfrjw|8R-%LmldX2Y&gAM1P`_d z?3h#4TW ze=gQ-nl*;?1*?b-@GnqTxdFKBWQOMGL z-=u4DpQvMCXTM=~e#>qntAuWt(*W<}W4<(kc~YaW`uxY4L+Aodf0#co)}0>$CiAf6 z>8??Jt-z*tDNoMNu7d=G>IX~%#iEY+b-}ou<;~Um&Xe7SrGkv-R|UxDM1`N-_^_Bn zB9TZW5{X12kw_#Gi9{liNF)-8L?V$$B$Do>`(McX08AVuqWf7j6$ik?or?3%RFNTx5`SJ{VZ8ssi6 zfa>M9U@T65&qSz*OoZS+ad8l-o)9W3ljB5c%}YB^KJJBfaC&|N-GWt_94@so{i{-& zPJdTNs9l*HJCW*Ip-yFTtV(sI(00k>Sdr>Fq3xE*5tZsHp`DV+5s~UDq5kakLCxi4 zZ>ViDIaR6U>y@(9=|7H!aMfK?UN0`O1FXE&r{!~{E1z~#%w}0BRlUHZI=tTddNhg4 zt`fTc?dTh3aGXmmT}GxZ+A6h>PD3$$U0J6TetG%LmodKXx|32TrM8lZxUy{Ogj5lk zh-(Y`c1jhMiMaaGvmH{c$V6Piaq&ks_ zc - + diff --git a/Habitica/res/layout/chat_item.xml b/Habitica/res/layout/chat_item.xml index a2ebcb868..7e6c368cf 100644 --- a/Habitica/res/layout/chat_item.xml +++ b/Habitica/res/layout/chat_item.xml @@ -60,7 +60,7 @@ android:textSize="12sp" android:textColor="@color/white" style="@style/Pill.Purple" - tools:text="Moderator" + tools:text="Staff" android:layout_marginStart="@dimen/spacing_small"/> - \ No newline at end of file + diff --git a/Habitica/res/layout/fragment_faq_overview.xml b/Habitica/res/layout/fragment_faq_overview.xml index 38a92a57c..032f1802b 100644 --- a/Habitica/res/layout/fragment_faq_overview.xml +++ b/Habitica/res/layout/fragment_faq_overview.xml @@ -98,7 +98,17 @@ android:layout_marginEnd="@dimen/spacing_medium" android:layout_marginBottom="@dimen/spacing_medium" app:description="@string/stat_description"/> - + - \ No newline at end of file + diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Resources-Extensions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Resources-Extensions.kt index ddfca8bd1..54e9b3081 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Resources-Extensions.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Resources-Extensions.kt @@ -3,6 +3,8 @@ package com.habitrpg.android.habitica.extensions import android.content.res.Configuration import android.content.res.Resources import android.os.Build +import com.google.firebase.crashlytics.ktx.crashlytics +import com.google.firebase.ktx.Firebase import com.habitrpg.android.habitica.ui.activities.BaseActivity import java.util.Locale @@ -14,4 +16,6 @@ fun Resources.forceLocale(activity: BaseActivity, locale: Locale) { activity.createConfigurationContext(configuration) } updateConfiguration(configuration, displayMetrics) + + Firebase.crashlytics.setCustomKey("language", locale.toLanguageTag()) } 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 51a813b93..f7c928b09 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 @@ -28,6 +28,8 @@ import androidx.navigation.NavDestination import androidx.navigation.findNavController import androidx.navigation.fragment.NavHostFragment import com.google.android.gms.wearable.Wearable +import com.google.firebase.crashlytics.ktx.crashlytics +import com.google.firebase.ktx.Firebase import com.google.firebase.perf.FirebasePerformance import com.habitrpg.android.habitica.BuildConfig import com.habitrpg.android.habitica.R @@ -476,6 +478,10 @@ open class MainActivity : BaseActivity(), SnackbarActivity { } preferences?.sound?.let { soundManager.soundTheme = it } + val crashlytics = Firebase.crashlytics + crashlytics.setCustomKey("day_start", user.preferences?.dayStart ?: 0) + crashlytics.setCustomKey("timezone_offset", user.preferences?.timezoneOffset ?: 0) + displayDeathDialogIfNeeded() YesterdailyDialog.showDialogIfNeeded(this, user.id, userRepository, taskRepository) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQOverviewFragment.kt index 90cce8a47..8ffcd86a9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQOverviewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQOverviewFragment.kt @@ -2,10 +2,14 @@ package com.habitrpg.android.habitica.ui.fragments.support import android.os.Bundle import android.text.method.LinkMovementMethod +import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.FrameLayout import android.widget.ImageView +import android.widget.LinearLayout +import androidx.core.content.ContextCompat import androidx.core.os.bundleOf import androidx.core.view.isVisible import androidx.lifecycle.lifecycleScope @@ -17,9 +21,12 @@ import com.habitrpg.android.habitica.helpers.AppConfigManager import com.habitrpg.android.habitica.helpers.MainNavigationController import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper +import com.habitrpg.android.habitica.ui.views.UsernameLabel +import com.habitrpg.common.habitica.extensions.dpToPx import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.common.habitica.helpers.launchCatching import com.habitrpg.common.habitica.helpers.setMarkdown +import com.habitrpg.common.habitica.models.PlayerTier import dagger.hilt.android.AndroidEntryPoint import javax.inject.Inject @@ -77,6 +84,9 @@ class FAQOverviewFragment : BaseMainFragment() { HabiticaIconsHelper.imageOfStats() ) + binding?.contribTierSection?.findViewById(R.id.icon_view)?.setImageResource(R.drawable.contributor_icon) + addPlayerTiers() + binding?.moreHelpTextView?.setMarkdown(context?.getString(R.string.need_help_header_description, "[Habitica Help Guild](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)")) binding?.moreHelpTextView?.setOnClickListener { MainNavigationController.navigate(R.id.guildFragment, bundleOf("groupID" to "5481ccf3-5d2d-48a9-a871-70a7380cee5a")) } binding?.moreHelpTextView?.movementMethod = LinkMovementMethod.getInstance() @@ -111,4 +121,32 @@ class FAQOverviewFragment : BaseMainFragment() { } } } + + private fun addPlayerTiers() { + val tiers = PlayerTier.getTiers() + for (tier in tiers) { + context?.let { + val container = FrameLayout(it) + container.background = ContextCompat.getDrawable(it, R.drawable.rounded_border) + container.background.setTint(PlayerTier.getColorForTier(it, tier.id)) + container.background.alpha = 50 + val label = UsernameLabel(it, null) + label.tier = tier.id + label.username = tier.title + val params = FrameLayout.LayoutParams( + FrameLayout.LayoutParams.WRAP_CONTENT, + FrameLayout.LayoutParams.WRAP_CONTENT, + Gravity.CENTER + ) + container.addView(label, params) + container.isVisible = false + binding?.contribTierSection?.addView(container) + val containerParams = container.layoutParams as LinearLayout.LayoutParams + containerParams.setMargins(12.dpToPx(context), 0, 12.dpToPx(context), if (tiers.last() == tier) 12.dpToPx(context) else 6.dpToPx(context)) + val padding = context?.resources?.getDimension(R.dimen.spacing_medium)?.toInt() ?: 0 + container.setPadding(0, padding, 0, padding) + } + } + (binding?.contribTierSection?.parent as? ViewGroup)?.invalidate() + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/SupportCollapsibleSection.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/SupportCollapsibleSection.kt index a3b8ebbe4..d417da68f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/SupportCollapsibleSection.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/SupportCollapsibleSection.kt @@ -5,6 +5,8 @@ import android.util.AttributeSet import android.view.View import android.widget.LinearLayout import androidx.core.content.ContextCompat +import androidx.core.view.children +import androidx.core.view.isVisible import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.SupportCollapsibleSectionBinding import com.habitrpg.common.habitica.extensions.layoutInflater @@ -41,12 +43,17 @@ class SupportCollapsibleSection : LinearLayout { a.recycle() setOnClickListener { - binding.descriptionView.visibility = if (binding.descriptionView.visibility == View.VISIBLE) { - binding.caretView.setImageResource(R.drawable.ic_keyboard_arrow_down_black_24dp) - View.GONE - } else { + val shouldBeVisible = binding.descriptionView.visibility != View.VISIBLE + if (shouldBeVisible) { binding.caretView.setImageResource(R.drawable.ic_keyboard_arrow_up_black_24dp) - View.VISIBLE + } else { + binding.caretView.setImageResource(R.drawable.ic_keyboard_arrow_down_black_24dp) + } + val descriptionIndex = children.indexOf(binding.descriptionView) + children.forEachIndexed { index, view -> + if (index >= descriptionIndex) { + view.isVisible = shouldBeVisible + } } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UsernameLabel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UsernameLabel.kt index e49cd80f6..07ecfba0e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UsernameLabel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UsernameLabel.kt @@ -1,6 +1,8 @@ package com.habitrpg.android.habitica.ui.views import android.content.Context +import android.graphics.Typeface +import android.os.Build import android.util.AttributeSet import android.util.TypedValue import android.view.Gravity @@ -75,6 +77,9 @@ class UsernameLabel @JvmOverloads constructor( val padding = context.resources.getDimension(R.dimen.spacing_small).toInt() textView.setPadding(0, 0, padding, 0) textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + textView.typeface = Typeface.create(null,600,false) + } val iconViewParams = LayoutParams( FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT @@ -84,7 +89,6 @@ class UsernameLabel @JvmOverloads constructor( } } - @Composable fun ComposableUsernameLabel( username: String, diff --git a/common/src/main/java/com/habitrpg/common/habitica/models/PlayerTier.kt b/common/src/main/java/com/habitrpg/common/habitica/models/PlayerTier.kt index 30b0f5d5f..ec1ef11b3 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/models/PlayerTier.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/models/PlayerTier.kt @@ -16,7 +16,6 @@ class PlayerTier(val title: String, val id: Int) { PlayerTier("Tier 5 (Champion)", 5), PlayerTier("Tier 6 (Champion)", 6), PlayerTier("Tier 7 (Legendary)", 7), - PlayerTier("Moderator (Guardian)", 8), PlayerTier("Staff (Heroic)", 9) ) } diff --git a/version.properties b/version.properties index 921bf236d..051399735 100644 --- a/version.properties +++ b/version.properties @@ -1,2 +1,2 @@ NAME=4.2 -CODE=6021 \ No newline at end of file +CODE=6031 \ No newline at end of file