quest design update

This commit is contained in:
Phillip Thelen 2023-09-04 11:22:57 +02:00
parent 52592324ff
commit 114fabd939
48 changed files with 191 additions and 123 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View file

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

View file

@ -64,8 +64,8 @@
android:layout_marginVertical="@dimen/spacing_medium"
android:gravity="center"
android:lineSpacingExtra="4dp"
android:textColor="@color/text_primary"
android:textSize="20sp"
android:textColor="@color/text_secondary"
android:textSize="16sp"
android:paddingHorizontal="12dp" />
<TextView
@ -100,14 +100,19 @@
app:textColor="@color/text_primary"
android:layout_marginHorizontal="24dp" />
<FrameLayout
<LinearLayout
android:id="@+id/revive_subscriber_wrapper"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/spacing_large">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="65dp"
android:paddingStart="24dp"
android:paddingEnd="18dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="@dimen/spacing_large">
android:layout_marginBottom="8dp">
<TextView
android:id="@+id/revive_subscriber_button"
android:layout_width="match_parent"
@ -133,7 +138,16 @@
android:layout_gravity="top|end"
android:text="@string/sub_perk"/>
</FrameLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/faint_subscriber_description"
android:layout_marginHorizontal="42dp"
android:gravity="center"
android:textColor="@color/text_teal"
style="@style/Body1"
/>
</LinearLayout>
<TextView
android:id="@+id/subscriber_benefit_used_view"

View file

@ -77,13 +77,14 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="The Wail of the Whale"
android:textColor="@color/text_primary"
/>
<TextView
android:id="@+id/quest_participation_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="3 Participants"
android:textColor="@color/text_quad" />
android:textColor="@color/text_ternary" />
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
@ -111,6 +112,7 @@
android:layout_gravity="center_horizontal"/>
<com.habitrpg.android.habitica.ui.views.social.OldQuestProgressView
android:visibility="gone"
tools:visibility="visible"
android:id="@+id/quest_progress_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
@ -125,11 +127,13 @@
android:textColor="@color/green_1"
tools:text="Pending Items"
android:background="@color/green_100"
android:minHeight="28dp"
android:visibility="gone"/>
<TextView
android:id="@+id/quest_pending_damage_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="28dp"
android:textSize="13sp"
style="@style/Caption2"
android:paddingVertical="3dp"
@ -146,7 +150,7 @@
android:layout_height="wrap_content"
style="@style/Widget.Material3.Button.TextButton"
android:text="@string/quest_mechanics"
android:textColor="?colorAccent" />
android:textColor="@color/brand_button" />
<LinearLayout
android:id="@+id/quest_participant_response_wrapper"

View file

@ -29,7 +29,7 @@
android:fadingEdge="horizontal"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/text_red"
android:textColor="@color/maroon100_red100"
tools:text="Title"/>
<TextView
@ -48,4 +48,4 @@
android:gravity="center_vertical"
android:orientation="vertical"
android:paddingStart="16dp" />
</LinearLayout>
</LinearLayout>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -12,7 +11,7 @@
android:id="@+id/icon_view"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_margin="8dp" />
android:layout_marginEnd="16dp" />
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
@ -22,7 +21,8 @@
android:id="@+id/name_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
style="@style/SubHeader1"
android:textColor="@color/text_primary"
tools:text="item to collect"
android:layout_marginBottom="@dimen/spacing_small"/>
<com.habitrpg.common.habitica.views.ValueBar
@ -30,6 +30,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:lightBackground="true"
app:barForegroundColor="@color/green_100"/>
app:barBackgroundColor="@color/offset_background"
app:barForegroundColor="@color/green_100"
app:valueTextColor="@color/text_ternary"/>
</LinearLayout>
</LinearLayout>

View file

@ -53,6 +53,7 @@
android:layout_height="wrap_content"
android:text="@string/quest_mechanics_damage_description"
style="@style/ArmoireDescriptionTextView"
android:layout_marginBottom="12dp"
/>
<TextView
@ -66,6 +67,7 @@
android:layout_height="wrap_content"
android:text="@string/quest_mechanics_pausing_description"
style="@style/ArmoireDescriptionTextView"
android:layout_marginBottom="12dp"
/>
<TextView

View file

@ -6,40 +6,83 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/bossNameView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="Quest Boss"
style="@style/Body1"
android:layout_marginBottom="@dimen/spacing_medium"/>
<com.habitrpg.common.habitica.views.ValueBar
android:id="@+id/bossHealthView"
<LinearLayout
android:id="@+id/boss_health_wrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:barForegroundColor="@color/red_100"
app:barPendingColor="@color/yellow_50"
app:lightBackground="true"
app:valueTextColor="@color/red_100"
app:labelSpacing="@dimen/spacing_medium"
app:descriptionTextColor="@color/yellow_5"/>
<com.habitrpg.common.habitica.views.ValueBar
android:id="@+id/bossRageView"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginEnd="16dp"
android:src="@drawable/icon_boss_health"/>
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/bossNameView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/SubHeader1"
tools:text="item to collect"
android:textColor="@color/text_primary"
android:layout_marginBottom="@dimen/spacing_small"/>
<com.habitrpg.common.habitica.views.ValueBar
android:id="@+id/bossHealthView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:barForegroundColor="@color/red_100"
app:barBackgroundColor="@color/offset_background"
app:barPendingColor="@color/yellow_50"
app:lightBackground="true"
app:valueTextColor="@color/text_ternary"
app:labelSpacing="@dimen/spacing_small"
app:descriptionTextColor="@color/yellow_5"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/boss_rage_wrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:barForegroundColor="@color/orange_100"
app:lightBackground="true"
app:valueTextColor="@color/orange_100"
app:labelSpacing="@dimen/spacing_medium" />
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginEnd="16dp"
android:src="@drawable/icon_boss_rage"/>
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/boss_rage_name_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/SubHeader1"
android:textColor="@color/text_primary"
android:text=""
android:layout_marginBottom="@dimen/spacing_small"/>
<com.habitrpg.common.habitica.views.ValueBar
android:id="@+id/bossRageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:barBackgroundColor="@color/offset_background"
app:barForegroundColor="@color/orange_100"
app:lightBackground="true"
app:valueTextColor="@color/text_ternary"
app:labelSpacing="@dimen/spacing_small" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/collectionContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"/>
<TextView
android:id="@+id/collectedItemsNumberView"
android:layout_width="match_parent"
android:gravity="end"
android:layout_height="wrap_content"
tools:text="+N items found"/>
</merge>
</merge>

View file

@ -89,6 +89,5 @@
android:layout_gravity="end"
android:visibility="gone"
android:layout_alignEnd="@id/container"
android:layout_marginEnd="-4dp"
style="@style/CountLabel"/>
</RelativeLayout>

View file

@ -1123,7 +1123,7 @@ Die Quest-Schriftrolle wird an den Quest-Besitzer zurückgegeben.</string>
<string name="open_shop">Offener Laden</string>
<string name="survey_menu_description">Fülle diese 5 Minuten Umfrage aus, um uns beim Wachsen zu helfen und eine Errungenschaft zu erhalten!</string>
<string name="empty_equipment_description">Du hast noch keine Ausrüstung für diesen Typen. Du kannst Ausrüstung vom Markt mit dem Gold, das du verdient hast, kaufen.</string>
<string name="damage_pending">ausstehend %.01f dmg</string>
<string name="damage_pending">%s Schaden ausstehend</string>
<string name="x_remaining">%s verbleibend</string>
<string name="reset_counter">Zähler zurücksetzen</string>
<string name="adjust_counter">Zähler anpassen</string>

View file

@ -1116,7 +1116,7 @@
<string name="user_is_blocked_explanation">Un usuario bloqueado no puede enviarte mensajes privados pero seguirás viendo sus comentarios en la Taberna o los Gremios.</string>
<string name="one_month_one_time">Suscripción única de 1 mes</string>
<string name="g1g1_promo_info_instructions">Pulsa sobre \"Regala una Suscripción\" y escribe el usuario de la cuenta a la que quieres regalársela. Luego, elige la duración de la suscripción que quieres regalar y realizar el pago. Tu cuenta será premiada automáticamente con una suscripción igual que la que acabas de regalar.</string>
<string name="damage_pending">%.01f de daño restante</string>
<string name="damage_pending">%s de daño restante</string>
<string name="hatch">Eclosiona</string>
<string name="invitation_title_no_leader">Has sido invitado a unirte a un equipo</string>
<string name="survey_title">Formulario para usuarios de Habitica</string>

View file

@ -1121,7 +1121,7 @@
<string name="terms_of_service">Conditions d\'utilisation</string>
<string name="privacy_policy">Politique de Confidentialité</string>
<string name="all_tasks_completed">Vous avez fini toutes vos tâches. Bravo !</string>
<string name="damage_pending">%.01f dégâts en cours</string>
<string name="damage_pending">%s dégâts en cours</string>
<string name="reset_counter">Réinitialiser le compteur</string>
<string name="adjust_counter">Ajuster le compteur</string>
<string name="x_remaining">%s restant</string>

View file

@ -1082,7 +1082,7 @@
<string name="g1g1_promo_info_limitations">Ovo je vremenski ograničeno događanje koje počinje %s (13:00 UTC) i završava %s (01:00 UTC). Ova promocija se samo primjenjuje kada poklanjaš drugom Habiticanu. Ako ti ili tvoj primatelj poklona već imate pretplatu, poklonjena pretplata će dodati mjesece kredita koji će biti iskorišteni samo nakon što je trenutna pretplata otkazana ili kad istekne.</string>
<string name="empty_equipment_description">Još nemaš ovakvu opremu. Možeš kupiti opremu iz dućana koristeći zlato koje si zaradio/la.</string>
<string name="empty_challenge_list">Nisi član nikakvih Izazova.</string>
<string name="damage_pending">%.01f štete čeka</string>
<string name="damage_pending">%s štete čeka</string>
<string name="one_month_one_time">Jednokratna pretplata od 1 mjesec</string>
<string name="empty_guilds_list">Nisi član nikakvih Cehova.</string>
<string name="sale_ends_in">Rasprodaja završava za %s</string>

View file

@ -1130,7 +1130,7 @@
<string name="added_social_auth">Aggiunta autenticazione %s</string>
<string name="copied_to_clipboard">%s copiato negli appunti</string>
<string name="sale_ends_in">La vendita termina fra %s</string>
<string name="damage_pending">%.01f danno in sospeso</string>
<string name="damage_pending">%s danno in sospeso</string>
<string name="discard">Scarta</string>
<string name="class_confirmation_price">Vuoi cambiare la tua classe in %s per %d gemme\?</string>
<string name="adventure_guide_description_new">Completa questi obbiettivi e guadagnerai &lt;b&gt;5 Medaglie&lt;/b&gt; e &lt;font color=#EE9109&gt;&lt;b&gt;100 Ori&lt;/b&gt;&lt;/font&gt; quando avrai finito!</string>

View file

@ -1121,7 +1121,7 @@
<string name="terms_of_service">利用規約</string>
<string name="privacy_policy">プライバシーポリシー</string>
<string name="all_tasks_completed">すべてのタスクを完了しました。すばらしい!</string>
<string name="damage_pending">%.01f ダメージを保留中</string>
<string name="damage_pending">%s ダメージを保留中</string>
<string name="adjust_counter">回数を修正</string>
<string name="reset_counter">カウンターをリセット</string>
<string name="x_remaining">残り%s</string>

View file

@ -1143,7 +1143,7 @@
<string name="empty_discover_description">탐색 탭으로 이동하여 참여할만한 것을 찾아보세요!</string>
<string name="all_tasks_completed">모든 과제를 완료하셨습니다. 잘하셨어요!</string>
<string name="privacy_policy">개인정보보호정책</string>
<string name="damage_pending">%.01f피해 대기 중</string>
<string name="damage_pending">%s피해 대기 중</string>
<string name="login_methods">로그인 방법</string>
<string name="add_password">비밀번호 추가</string>
<string name="connect">연결</string>

View file

@ -64,5 +64,6 @@
<color name="gray200_gray400">@color/gray_400</color>
<color name="gray700_gray10">@color/gray_10</color>
<color name="maroon100_red100">@color/red_100</color>
<color name="brand_button">@color/brand_600</color>
</resources>

View file

@ -1100,7 +1100,7 @@
<string name="theme_color">Tema Colorido</string>
<string name="terms_of_service">Termos de Serviço</string>
<string name="empty_title">Nada aqui ainda</string>
<string name="damage_pending">%.01f de dano pendente</string>
<string name="damage_pending">%s de dano pendente</string>
<string name="privacy_policy">Política de Privacidade</string>
<string name="open_shop">Loja Aberta</string>
<string name="avatar_style">Estilo</string>

View file

@ -1120,7 +1120,7 @@
<string name="terms_of_service">Условия Использования</string>
<string name="privacy_policy">Политика Конфиденциальности</string>
<string name="all_tasks_completed">Вы завершили все ваши задания. Отлично!</string>
<string name="damage_pending">%.01f ожидаемого урона</string>
<string name="damage_pending">%s ожидаемого урона</string>
<string name="reset_counter">Сбросить счётчик</string>
<string name="adjust_counter">Настроить счётчик</string>
<string name="discard_changes_to_task_message">Вы уверены, что не хотите сохранять изменения в этой задаче\?</string>

View file

@ -1045,7 +1045,7 @@
<string name="not_now">Şimdi olmaz</string>
<string name="need_help_header_description">Sorularınızın bir başka oyuncu tarafından cevaplanması için%s içinde bir mesaj gönderin.</string>
<string name="setup_task_habit_1_notes">Bir Alışkanlık, Günlük İş veya Yapılacak İş</string>
<string name="damage_pending">%.01f hasar bekliyor</string>
<string name="damage_pending">%s hasar bekliyor</string>
<string name="x_remaining">%s kaldı</string>
<string name="won_achievement_description"><![CDATA[<b>%s</b> seni kazanan olarak seçti! Zaferin başarımlarının arasına eklendi.]]></string>
<string name="twelve_months_one_time">12 aylık tek seferlik abonelik</string>

View file

@ -1124,7 +1124,7 @@
<string name="all_tasks_completed">Ви завершили всі свої завдання. Чудова робота!</string>
<string name="privacy_policy">Політика конфіденційності</string>
<string name="terms_of_service">Умови обслуговування</string>
<string name="damage_pending">%.01f пошкоджень буде нанесено</string>
<string name="damage_pending">%s пошкоджень буде нанесено</string>
<string name="x_remaining">%s залишилось</string>
<string name="sale_ends_in">Розпродаж закінчується %s</string>
<string name="my_account">Мій акаунт</string>

View file

@ -1179,7 +1179,7 @@
<string name="class_confirmation_price">更改你的職業成為%s需要%d的寶石確認更改\?</string>
<string name="armoireEquipment_new">你在衣櫥裏找到了一個稀有裝備!</string>
<string name="starting_objectives">新手任務</string>
<string name="damage_pending">%.01f即將造成的傷害</string>
<string name="damage_pending">%s即將造成的傷害</string>
<string name="armoireFood_new">你在衣櫥搜查,然後找到了食物。那爲什麼在這裏?</string>
<string name="adventure_guide_description_new">完成這些任務,即可贏得&lt;b&gt;5項成就&lt;/b&gt;&lt;font color=#EE9109&gt;&lt;b&gt;100金幣&lt;/b&gt;&lt;/font&gt;</string>
<string name="survey_title">Habitica 用戶問卷</string>

View file

@ -1126,7 +1126,7 @@
<string name="class_confirmation_price">转职为%s需要%d宝石是否确定更改</string>
<string name="use_item">对队伍成员使用物品</string>&gt;
<string name="unsaved_changes">修改未保存</string>
<string name="damage_pending">即将造成%.01f点伤害</string>
<string name="damage_pending">即将造成%s点伤害</string>
<string name="copied_to_clipboard">已将%s复制到剪贴板</string>
<string name="adjust_counter">调整连击次数</string>
<string name="reset_counter">重置连击次数</string>

View file

@ -131,4 +131,5 @@
<color name="gray200_gray400">@color/gray_200</color>
<color name="gray700_gray10">@color/gray_700</color>
<color name="maroon100_red100">@color/maroon_100</color>
<color name="brand_button">@color/brand_400</color>
</resources>

View file

@ -1163,7 +1163,7 @@
<string name="all_tasks_completed">You completed all your tasks. Well done!</string>
<string name="privacy_policy">Privacy Policy</string>
<string name="terms_of_service">Terms of Service</string>
<string name="damage_pending">%.01f damage pending</string>
<string name="damage_pending">%s Damage pending</string>
<string name="x_remaining">%s remaining</string>
<string name="sale_ends_in">Sale ends in %s</string>
<string name="my_account">My Account</string>
@ -1432,6 +1432,10 @@
<string name="quest_mechanics_pausing_description">"If youre struggling to complete your Dailies, you can pause damage from Settings for a break. This will prevent the Boss from hurting you or others, but also pause your own damage. Other members missed Dailies will still cause damage, so be careful out there! "</string>
<string name="quest_mechanics_rage_title">Rage meters</string>
<string name="quest_mechanics_rage_description">Some difficult bosses have an orange Rage meter under their HP. This meter fills up when participants miss Dailies. When it fills completely, the boss will let out a fearsome attack that does extra damage!</string>
<string name="faint_subscriber_description">Your subscription lets you have a second chance each day if you run out of HP</string>
<string name="rage">Rage</string>
<string name="preference_push_invited_to_group_plan">Invited to Group Plan</string>
<string name="preference_push_joined_group_plan_mention">\@Mentions in Group Plans</string>
<plurals name="you_x_others">
<item quantity="zero">You</item>
@ -1463,8 +1467,8 @@
<item quantity="other">every %d years</item>
</plurals>
<plurals name="items_pending">
<item quantity="zero">No items pending</item>
<item quantity="one">%d item pending</item>
<item quantity="other">%d items pending</item>
<item quantity="zero">No Items pending</item>
<item quantity="one">%d Item pending</item>
<item quantity="other">%d Items pending</item>
</plurals>
</resources>

View file

@ -867,8 +867,8 @@
<style name="ArmoireDescriptionTextView">
<item name="android:fontFamily">@string/font_family_regular</item>
<item name="android:textSize">12sp</item>
<item name="android:letterSpacing">0.02</item>
<item name="android:textSize">14sp</item>
<item name="android:letterSpacing">0.03</item>
<item name="android:textColor">@color/armoire_text</item>
</style>
@ -882,7 +882,7 @@
<item name="android:textColor">@color/red_10</item>
</style>
<style name="YellowTextLabel" parent="TextAppearance.AppCompat">
<item name="android:textColor">@color/yellow_10</item>
<item name="android:textColor">@color/yellow_5</item>
</style>
<style name="BlueTextLabel" parent="TextAppearance.AppCompat">
<item name="android:textColor">@color/blue_10</item>

View file

@ -265,7 +265,7 @@
<CheckBoxPreference
android:key="preference_push_invited_to_guild"
android:defaultValue="true"
android:title="@string/preference_push_invited_to_guild"
android:title="@string/preference_push_invited_to_group_plan"
android:layout="@layout/preference_child_summary"/>
<CheckBoxPreference
android:key="preference_push_your_quest_has_begun"
@ -295,12 +295,7 @@
<CheckBoxPreference
android:key="preference_push_joined_guild_mention"
android:defaultValue="true"
android:title="@string/preference_push_joined_guild_mention"
android:layout="@layout/preference_child_summary"/>
<CheckBoxPreference
android:key="preference_push_unjoined_guild_mention"
android:defaultValue="true"
android:title="@string/preference_push_unjoined_guild_mention"
android:title="@string/preference_push_joined_group_plan_mention"
android:layout="@layout/preference_child_summary"/>
</PreferenceCategory>
</PreferenceScreen>

View file

@ -46,33 +46,26 @@ open class Customization : RealmObject(), BaseObject {
return !(availableUntil != null && !availableUntil!!.after(today))
}
fun getIconName(userSize: String?, hairColor: String?): String {
return if (type == "background") {
"icon_background_$identifier"
} else {
"icon_" + getImageName(userSize, hairColor)
}
fun getIconName(userSize: String?, hairColor: String?): String? {
return "icon_" + (getImageName(userSize, hairColor) ?: return null)
}
fun getImageName(userSize: String?, hairColor: String?): String {
fun getImageName(userSize: String?, hairColor: String?): String? {
if (identifier?.isNotBlank() != true || identifier == "none" || identifier == "0") return null
when (type) {
"skin" -> return "skin_$identifier"
"shirt" -> return userSize + "_shirt_" + identifier
"hair" -> {
return if (identifier == "0") {
"head_0"
} else {
when (this.category) {
"color" -> "hair_bangs_1_$identifier"
"flower" -> "hair_flower_$identifier"
else -> "hair_" + this.category + "_" + identifier + "_" + hairColor
}
}
}
"background" -> return "background_$identifier"
"chair" -> return "chair_$identifier"
}
return ""
return null
}
fun isUsable(purchased: Boolean): Boolean {

View file

@ -255,7 +255,7 @@ abstract class BaseActivity : AppCompatActivity() {
)
uri =
resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues) ?: return
fos = resolver.openOutputStream(uri) ?: return
fos = resolver.openOutputStream(uri, "wt") ?: return
} else {
val imagesDir =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)

View file

@ -82,7 +82,13 @@ class CustomizationEquipmentRecyclerViewAdapter : androidx.recyclerview.widget.R
fun bind(equipment: Equipment) {
this.equipment = equipment
binding.imageView.loadImage("shop_" + this.equipment?.key)
if (equipment.key?.isNotBlank() == true) {
binding.imageView.loadImage("shop_" + equipment.key)
} else {
binding.imageView.bitmap = null
binding.imageView.tag = null
binding.imageView.setImageResource(R.drawable.empty_slot)
}
if (equipment.owned == true || equipment.value == 0.0) {
binding.buyButton.visibility = View.GONE
} else {

View file

@ -172,12 +172,13 @@ class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.Recycler
fun bind(customization: Customization) {
this.customization = customization
if (customization.type == "background" && customization.identifier == "") {
val imageName = customization.getIconName(userSize, hairColor)
if (imageName != null) {
binding.imageView.loadImage(imageName)
} else {
binding.imageView.bitmap = null
binding.imageView.tag = null
binding.imageView.setImageResource(R.drawable.no_background)
} else {
binding.imageView.loadImage(customization.getIconName(userSize, hairColor))
binding.imageView.setImageResource(R.drawable.empty_slot)
}
if (customization.isUsable(ownedCustomizations.contains(customization.id))) {

View file

@ -40,7 +40,6 @@ class PushNotificationsPreferencesFragment : BasePreferencesFragment(), SharedPr
updatePreference("preference_push_party_activity", user?.preferences?.pushNotifications?.partyActivity)
updatePreference("preference_push_party_mention", user?.preferences?.pushNotifications?.mentionParty)
updatePreference("preference_push_joined_guild_mention", user?.preferences?.pushNotifications?.mentionJoinedGuild)
updatePreference("preference_push_unjoined_guild_mention", user?.preferences?.pushNotifications?.mentionUnjoinedGuild)
isSettingUser = false
isInitialSet = false
}

View file

@ -53,6 +53,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
import java.text.DecimalFormat
import javax.inject.Inject
@AndroidEntryPoint
@ -218,9 +219,10 @@ class PartyDetailFragment : BaseFragment<FragmentPartyDetailBinding>() {
if (viewModel.isQuestActive && viewModel.isUserOnQuest) {
val value = (user.party?.quest?.progress?.up ?: 0F).toDouble()
binding?.questPendingDamageView?.text = getString(R.string.damage_pending, value)
val df = DecimalFormat("###.#")
binding?.questPendingDamageView?.text = getString(R.string.damage_pending, df.format(value))
val collectedItems = user.party?.quest?.progress?.collectedItems
binding?.questPendingDamageView?.text = requireContext().resources.getQuantityString(R.plurals.items_pending, collectedItems ?: 0, collectedItems ?: 0)
binding?.questPendingItemsView?.text = requireContext().resources.getQuantityString(R.plurals.items_pending, collectedItems ?: 0, collectedItems ?: 0)
}
if ((user.invitations?.parties?.count() ?: 0) > 0) {

View file

@ -5,6 +5,7 @@ import android.graphics.drawable.BitmapDrawable
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.content.res.AppCompatResources
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.RowShopitemBinding
@ -87,6 +88,11 @@ class ShopItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), Vi
if (item.key == "gem" && item.limitedNumberLeft == -1) {
binding.itemDetailIndicator.background = AppCompatResources.getDrawable(context, R.drawable.item_indicator_subscribe)
binding.itemDetailIndicator.visibility = View.VISIBLE
} else if (item.key == "gem") {
binding.itemDetailIndicator.background = AppCompatResources.getDrawable(context, R.drawable.pill_bg_green)
binding.itemDetailIndicator.text = "${item.limitedNumberLeft}"
binding.itemDetailIndicator.setTextColor(ContextCompat.getColor(context, R.color.white))
binding.itemDetailIndicator.visibility = View.VISIBLE
}
if (binding.itemDetailIndicator.visibility == View.VISIBLE) {

View file

@ -85,7 +85,7 @@ private fun BottomSheetWrapper(
val radius = 20.dp
ModalBottomSheetLayout(
sheetBackgroundColor = Color.Transparent,
scrimColor = colorResource(R.color.content_background).copy(alpha = 0.3f),
scrimColor = colorResource(R.color.content_background).copy(alpha = 0.5f),
sheetState = modalBottomSheetState,
sheetShape = RoundedCornerShape(topStart = radius, topEnd = radius),
sheetContent = {
@ -93,11 +93,6 @@ private fun BottomSheetWrapper(
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier
.padding(horizontal = 4.dp)
.border(
2.dp,
colorResource(R.color.window_background),
RoundedCornerShape(topStart = radius, topEnd = radius)
)
.background(
MaterialTheme.colors.background,
RoundedCornerShape(topStart = radius, topEnd = radius)

View file

@ -37,7 +37,7 @@ fun OverviewItem(
modifier: Modifier = Modifier,
isTwoHanded: Boolean = false
) {
val hasIcon = isTwoHanded || (iconName?.isNotBlank() == true && iconName != "shirt_" && !iconName.endsWith("_none") && !iconName.endsWith("_base_0"))
val hasIcon = isTwoHanded || (iconName?.isNotBlank() == true && iconName != "shirt_" && !iconName.endsWith("_none") && !iconName.endsWith("_base_0") && !iconName.endsWith("_"))
Column(
horizontalAlignment = Alignment.CenterHorizontally,
modifier = modifier

View file

@ -435,7 +435,7 @@ class PurchaseDialog(
}
}
val rightTextColor = when (item.currency) {
"gold" -> ContextCompat.getColor(context, R.color.text_yellow)
"gold" -> ContextCompat.getColor(context, R.color.yellow_5)
"gems" -> ContextCompat.getColor(context, R.color.text_green)
"hourglasses" -> ContextCompat.getColor(context, R.color.text_brand)
else -> 0

View file

@ -18,6 +18,7 @@ import com.habitrpg.android.habitica.models.inventory.QuestProgressCollect
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.views.HabiticaIcons
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.common.habitica.extensions.dpToPx
import com.habitrpg.common.habitica.extensions.getThemeColor
import com.habitrpg.common.habitica.extensions.layoutInflater
import com.habitrpg.common.habitica.extensions.loadImage
@ -35,35 +36,32 @@ class OldQuestProgressView : LinearLayout {
private fun setupView(context: Context) {
orientation = VERTICAL
binding.bossHealthView.valueSuffix = "HP"
binding.bossRageView.valueSuffix = context.getString(R.string.rage)
setScaledPadding(context, 16, 16, 16, 16)
binding.bossHealthView.setSecondaryIcon(HabiticaIconsHelper.imageOfHeartLightBg())
binding.bossHealthView.setDescriptionIcon(HabiticaIconsHelper.imageOfDamage())
binding.bossRageView.setSecondaryIcon(HabiticaIconsHelper.imageOfRage())
}
fun setData(quest: QuestContent, progress: QuestProgress?) {
binding.collectionContainer.removeAllViews()
if (quest.isBossQuest) {
binding.bossNameView.text = quest.boss?.name
binding.bossHealthView.barHeight = 5.dpToPx(context)
if (progress != null) {
binding.bossHealthView.set(progress.hp, quest.boss?.hp?.toDouble() ?: 0.0)
}
if (quest.boss?.hasRage == true) {
binding.bossRageView.visibility = View.VISIBLE
binding.bossRageWrapper.visibility = VISIBLE
binding.bossRageView.barHeight = 5.dpToPx(context)
binding.bossRageView
binding.bossRageView.set(progress?.rage ?: 0.0, quest.boss?.rage?.value ?: 0.0)
binding.bossRageNameView.text = quest.boss?.rage?.title
} else {
binding.bossRageView.visibility = View.GONE
binding.bossRageWrapper.visibility = GONE
}
binding.bossNameView.visibility = View.VISIBLE
binding.bossHealthView.visibility = View.VISIBLE
binding.collectedItemsNumberView.visibility = View.GONE
binding.bossHealthWrapper.visibility = VISIBLE
} else {
binding.bossNameView.visibility = View.GONE
binding.bossHealthView.visibility = View.GONE
binding.bossRageView.visibility = View.GONE
binding.collectedItemsNumberView.visibility = View.VISIBLE
binding.bossHealthWrapper.visibility = GONE
binding.bossRageWrapper.visibility = GONE
if (progress != null) {
val inflater = LayoutInflater.from(context)
@ -73,6 +71,7 @@ class OldQuestProgressView : LinearLayout {
collectBinding.iconView.loadImage("quest_" + quest.key + "_" + collect.key)
collectBinding.nameView.text = contentCollect.text
collectBinding.valueView.set(collect.count.toDouble(), contentCollect.count.toDouble())
collectBinding.valueView.barHeight = 5.dpToPx(context)
}
}
}

View file

@ -39,6 +39,8 @@ class ValueBar(context: Context, attrs: AttributeSet?) : FrameLayout(context, at
binding.progressBar.maxValue = value
}
var valueSuffix: String? = null
var barForegroundColor: Int
get() = binding.progressBar.barForegroundColor
set(value) {
@ -82,7 +84,7 @@ class ValueBar(context: Context, attrs: AttributeSet?) : FrameLayout(context, at
private fun updateBar() {
binding.progressBar.set(currentValue, maxValue)
binding.progressBar.pendingValue = pendingValue
setValueText(formatter.format(currentValue) + " / " + formatter.format(maxValue.toInt()))
setValueText(formatter.format(currentValue) + " / " + formatter.format(maxValue.toInt()) + " " + valueSuffix)
}
init {

View file

@ -11,13 +11,13 @@
<color name="text_inverted">@color/gray_10</color>
<color name="text_brand">@color/brand_600</color>
<color name="text_brand_neon">@color/brand_500</color>
<color name="text_maroon">@color/maroon_100</color>
<color name="text_red">@color/red_100</color>
<color name="text_orange">@color/orange_100</color>
<color name="text_yellow">@color/yellow_100</color>
<color name="text_green">@color/green_100</color>
<color name="text_blue">@color/blue_100</color>
<color name="text_teal">@color/teal_100</color>
<color name="text_maroon">@color/maroon_500</color>
<color name="text_red">@color/red_500</color>
<color name="text_orange">@color/orange_500</color>
<color name="text_yellow">@color/yellow_500</color>
<color name="text_green">@color/green_500</color>
<color name="text_blue">@color/blue_500</color>
<color name="text_teal">@color/teal_500</color>
<color name="dim_background">#40502B94</color>
<color name="divider_color">@color/gray_100</color>
</resources>

View file

@ -1,2 +1,2 @@
NAME=4.3
CODE=6391
CODE=6421