diff --git a/Habitica/res/drawable-hdpi/contributor_icon.png b/Habitica/res/drawable-hdpi/contributor_icon.png
new file mode 100644
index 000000000..a7b6892e7
Binary files /dev/null and b/Habitica/res/drawable-hdpi/contributor_icon.png differ
diff --git a/Habitica/res/drawable-mdpi/contributor_icon.png b/Habitica/res/drawable-mdpi/contributor_icon.png
new file mode 100644
index 000000000..3c0559b9f
Binary files /dev/null and b/Habitica/res/drawable-mdpi/contributor_icon.png differ
diff --git a/Habitica/res/drawable-xxhdpi/contributor_icon.png b/Habitica/res/drawable-xxhdpi/contributor_icon.png
new file mode 100644
index 000000000..01aa3b052
Binary files /dev/null and b/Habitica/res/drawable-xxhdpi/contributor_icon.png differ
diff --git a/Habitica/res/drawable-xxxhdpi/contributor_icon.png b/Habitica/res/drawable-xxxhdpi/contributor_icon.png
new file mode 100644
index 000000000..e124ef7c2
Binary files /dev/null and b/Habitica/res/drawable-xxxhdpi/contributor_icon.png differ
diff --git a/Habitica/res/drawable/rounded_border.xml b/Habitica/res/drawable/rounded_border.xml
index d239815b8..1f3d1ff5e 100644
--- a/Habitica/res/drawable/rounded_border.xml
+++ b/Habitica/res/drawable/rounded_border.xml
@@ -4,5 +4,5 @@
-
+
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