Improve shop locked item display

This commit is contained in:
Phillip Thelen 2020-02-06 18:06:44 +01:00
parent 8e2041923b
commit ffa8f8e1ce
7 changed files with 56 additions and 21 deletions

View file

@ -126,10 +126,10 @@ dependencies {
implementation 'com.nex3z:flow-layout:1.2.2'
implementation 'androidx.core:core-ktx:1.1.0'
implementation "androidx.lifecycle:lifecycle-extensions:2.1.0"
implementation "androidx.lifecycle:lifecycle-common-java8:2.1.0"
implementation 'androidx.navigation:navigation-fragment-ktx:2.1.0'
implementation 'androidx.navigation:navigation-ui-ktx:2.1.0'
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
implementation "androidx.lifecycle:lifecycle-common-java8:2.2.0"
implementation 'androidx.navigation:navigation-fragment-ktx:2.2.1'
implementation 'androidx.navigation:navigation-ui-ktx:2.2.1'
implementation "androidx.paging:paging-runtime-ktx:2.1.1"
implementation 'com.plattysoft.leonids:LeonidsLib:1.3.2'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3'

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/gray_600" />
<corners android:radius="8dp"/>
<padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" />
</shape>

View file

@ -336,9 +336,11 @@
<string name="empty_inbox">You don\'t have any messages. You can send a user a new message from their public chat messages!</string>
<string name="party_invite">Unlock by inviting friends</string>
<string name="login_incentive">Unlock by logging into Habitica regularly</string>
<string name="login_incentive_count">Unlock by checking into Habitica %d times.</string>
<string name="create_account">Unlock by creating an account</string>
<string name="party_invite_short">Invite Friends</string>
<string name="login_incentive_short">login into Habitica regularly</string>
<string name="login_incentive_short_count">%d Checkins</string>
<string name="create_account_short">create an account</string>
<string name="successful_purchase">Purchased %1$s</string>
<string name="gold_plural">gold</string>
@ -946,6 +948,8 @@
<string name="preference_email_onboarding">Guidance with setting up your Habitica Account</string>
<string name="skill_unlocks_at">Skill unlocks at level %d</string>
<string name="locked">Locked</string>
<string name="unlock_previous">Finish Quest %d</string>
<string name="unlock_level">Level %d</string>
<string name="unlock_previous">Unlock by finishing Quest %d</string>
<string name="unlock_level">Unlock by reaching level %d</string>
<string name="unlock_previous_short">Finish Quest %d</string>
<string name="unlock_level_short">Level %d</string>
</resources>

View file

@ -90,7 +90,27 @@ open class ShopItem : RealmObject() {
fun lockedReason(context: Context): String? {
return when {
unlockCondition != null -> {
unlockCondition?.shortReadableUnlockConditionId()?.let { context.getString(it) }
unlockCondition?.readableUnlockCondition(context)
}
previous != null -> {
try {
val thisNumber = Character.getNumericValue(key.last())
context.getString(R.string.unlock_previous_short, thisNumber - 1)
} catch (e: NumberFormatException) {
null
}
}
level != null -> {
context.getString(R.string.unlock_level_short, level ?: 0)
}
else -> null
}
}
fun shortLockedReason(context: Context): String? {
return when {
unlockCondition != null -> {
unlockCondition?.shortReadableUnlockCondition(context)
}
previous != null -> {
try {

View file

@ -1,5 +1,6 @@
package com.habitrpg.android.habitica.models.shops
import android.content.Context
import com.habitrpg.android.habitica.R
import io.realm.RealmObject
@ -10,18 +11,19 @@ open class ShopItemUnlockCondition : RealmObject() {
@PrimaryKey
var questKey: String? = null
private var condition: String? = null
var incentiveThreshold: Int? = null
fun readableUnlockConditionId(): Int = when (this.condition) {
"party invite" -> R.string.party_invite
"login incentive" -> R.string.login_incentive
"create account" -> R.string.create_account
else -> R.string.empty
fun readableUnlockCondition(context: Context): String = when (this.condition) {
"party invite" -> context.getString(R.string.party_invite)
"login reward" -> if (incentiveThreshold != null) context.getString(R.string.login_incentive_count, incentiveThreshold) else context.getString(R.string.login_incentive)
"create account" -> context.getString(R.string.create_account)
else -> ""
}
fun shortReadableUnlockConditionId(): Int = when (this.condition) {
"party invite" -> R.string.party_invite_short
"login incentive" -> R.string.login_incentive_short
"create account" -> R.string.create_account_short
else -> R.string.empty
fun shortReadableUnlockCondition(context: Context): String = when (this.condition) {
"party invite" -> context.getString(R.string.party_invite_short)
"login reward" -> if (incentiveThreshold != null) context.getString(R.string.login_incentive_short_count, incentiveThreshold) else context.getString(R.string.login_incentive_short)
"create account" -> context.getString(R.string.create_account_short)
else -> ""
}
}

View file

@ -67,7 +67,7 @@ class ShopItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), Vi
itemDetailIndicator.text = null
itemDetailIndicator.visibility = View.GONE
val lockedReason = item.lockedReason(context)
val lockedReason = item.shortLockedReason(context)
if (!item.locked) {
priceLabel.text = item.value.toString()
priceLabel.currency = item.currency

View file

@ -7,6 +7,7 @@ import android.view.View
import android.widget.Button
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.toDrawable
import androidx.core.os.bundleOf
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.UserComponent
@ -82,6 +83,8 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop
setBuyButtonEnabled(false)
buyLabel.text = context.getString(R.string.locked)
limitedTextView.visibility = View.VISIBLE
limitedTextView.background = ContextCompat.getColor(context, R.color.gray_600).toDrawable()
limitedTextView.setTextColor(ContextCompat.getColor(context, R.color.gray_100))
}
priceLabel.isLocked = shopItem.locked || shopItem.lockedReason(context) != null
@ -186,9 +189,9 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop
priceLabel.setTextColor(ContextCompat.getColor(context, R.color.white))
buyLabel.setTextColor(ContextCompat.getColor(context, R.color.white))
} else {
buyButton.background = context.getDrawable(R.drawable.button_background_gray_700)
priceLabel.setTextColor(ContextCompat.getColor(context, R.color.gray_200))
buyLabel.setTextColor(ContextCompat.getColor(context, R.color.gray_200))
buyButton.background = context.getDrawable(R.drawable.button_background_gray_600)
priceLabel.setTextColor(ContextCompat.getColor(context, R.color.gray_100))
buyLabel.setTextColor(ContextCompat.getColor(context, R.color.gray_100))
}
if (shopItem.isTypeGear) {