add contributor info to FAQ

This commit is contained in:
Phillip Thelen 2023-05-10 15:41:06 +02:00
parent dcca5f9918
commit 18750829b9
14 changed files with 81 additions and 13 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 987 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 695 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -4,5 +4,5 @@
<stroke
android:width="1dp"
android:color="@color/offset_background"/>
<corners android:radius="6dp" />
<corners android:radius="8dp" />
</shape>

View file

@ -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"/>
<View
android:layout_width="0dp"
@ -149,4 +149,4 @@
android:drawablePadding="@dimen/spacing_small"/>
</com.google.android.flexbox.FlexboxLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>

View file

@ -98,7 +98,17 @@
android:layout_marginEnd="@dimen/spacing_medium"
android:layout_marginBottom="@dimen/spacing_medium"
app:description="@string/stat_description"/>
<com.habitrpg.android.habitica.ui.views.SupportCollapsibleSection
android:id="@+id/contrib_tier_section"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:subtitle="Habitica helpers"
app:title="@string/contributor_tiers"
app:titleColor="@color/text_teal"
android:layout_marginStart="@dimen/spacing_medium"
android:layout_marginEnd="@dimen/spacing_medium"
android:layout_marginBottom="@dimen/spacing_medium"
app:description="@string/contrib_tier_description"/>
<TextView
android:layout_width="wrap_content"
@ -139,4 +149,4 @@
android:gravity="center"/>
</LinearLayout>
</LinearLayout>
</ScrollView>
</ScrollView>

View file

@ -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())
}

View file

@ -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)

View file

@ -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<FragmentFaqOverviewBinding>() {
HabiticaIconsHelper.imageOfStats()
)
binding?.contribTierSection?.findViewById<ImageView>(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<FragmentFaqOverviewBinding>() {
}
}
}
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()
}
}

View file

@ -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
}
}
}
}

View file

@ -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,

View file

@ -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)
)
}

View file

@ -1,2 +1,2 @@
NAME=4.2
CODE=6021
CODE=6031