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