Rewrite sprite rendering to not make things blurry

This commit is contained in:
Phillip Thelen 2022-05-12 13:32:36 +02:00
parent 409c3f6a34
commit 67dd4bda78
80 changed files with 254 additions and 203 deletions

View file

@ -22,7 +22,7 @@
<FrameLayout <FrameLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="66dp"> android:layout_height="66dp">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/achievement_icon" android:id="@+id/achievement_icon"
android:layout_width="64dp" android:layout_width="64dp"
android:layout_height="56dp" android:layout_height="56dp"

View file

@ -9,7 +9,7 @@
<RelativeLayout <RelativeLayout
android:layout_width="100dp" android:layout_width="100dp"
android:layout_height="86dp"> android:layout_height="86dp">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/achievement_icon" android:id="@+id/achievement_icon"
android:layout_width="64dp" android:layout_width="64dp"
android:layout_height="56dp" android:layout_height="56dp"

View file

@ -48,7 +48,7 @@
android:layout_height="158dp" android:layout_height="158dp"
android:layout_centerInParent="true" android:layout_centerInParent="true"
android:src="@drawable/circle_gray_700" /> android:src="@drawable/circle_gray_700" />
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/icon_view" android:id="@+id/icon_view"
android:layout_width="136dp" android:layout_width="136dp"
android:layout_height="136dp" android:layout_height="136dp"

View file

@ -350,7 +350,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
tools:text="#" /> tools:text="#" />
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/current_pet_drawee" android:id="@+id/current_pet_drawee"
android:layout_width="40dp" android:layout_width="40dp"
android:layout_height="40dp"/> android:layout_height="40dp"/>
@ -369,7 +369,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
tools:text="#" /> tools:text="#" />
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/current_mount_drawee" android:id="@+id/current_mount_drawee"
android:layout_width="40dp" android:layout_width="40dp"
android:layout_height="40dp"/> android:layout_height="40dp"/>

View file

@ -4,7 +4,7 @@
android:orientation="horizontal" android:orientation="horizontal"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/icon_view" android:id="@+id/icon_view"
android:layout_width="52dp" android:layout_width="52dp"
android:layout_height="56dp" android:layout_height="56dp"

View file

@ -18,13 +18,13 @@
android:layout_width="86dp" android:layout_width="86dp"
android:layout_height="68dp" android:layout_height="68dp"
android:layout_gravity="center"> android:layout_gravity="center">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/hatchingPotion_view" android:id="@+id/hatchingPotion_view"
android:layout_width="72dp" android:layout_width="72dp"
android:layout_height="72dp" android:layout_height="72dp"
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:layout_alignParentEnd="true" /> android:layout_alignParentEnd="true" />
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/egg_view" android:id="@+id/egg_view"
android:layout_width="72dp" android:layout_width="72dp"
android:layout_height="72dp" android:layout_height="72dp"

View file

@ -11,7 +11,7 @@
<FrameLayout <FrameLayout
android:layout_width="76dp" android:layout_width="76dp"
android:layout_height="76dp"> android:layout_height="76dp">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/imageView" android:id="@+id/imageView"
android:layout_width="60dp" android:layout_width="60dp"
android:layout_height="68dp" android:layout_height="68dp"

View file

@ -16,7 +16,7 @@
android:layout_width="41dp" android:layout_width="41dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@drawable/sparkles_left" /> android:src="@drawable/sparkles_left" />
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/icon_view" android:id="@+id/icon_view"
android:layout_width="52dp" android:layout_width="52dp"
android:layout_height="56dp" android:layout_height="56dp"

View file

@ -46,7 +46,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"/> android:orientation="vertical"/>
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/imageView" android:id="@+id/imageView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View file

@ -15,7 +15,7 @@
android:layout_height="80dp" android:layout_height="80dp"
android:background="@drawable/layout_rounded_bg_window" android:background="@drawable/layout_rounded_bg_window"
android:layout_marginEnd="@dimen/spacing_large"> android:layout_marginEnd="@dimen/spacing_large">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/egg_view" android:id="@+id/egg_view"
android:layout_width="@dimen/gear_image_size" android:layout_width="@dimen/gear_image_size"
android:layout_height="@dimen/gear_image_size" android:layout_height="@dimen/gear_image_size"
@ -25,7 +25,7 @@
android:layout_width="80dp" android:layout_width="80dp"
android:layout_height="80dp" android:layout_height="80dp"
android:background="@drawable/layout_rounded_bg_window"> android:background="@drawable/layout_rounded_bg_window">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/hatchingPotion_view" android:id="@+id/hatchingPotion_view"
android:layout_width="@dimen/gear_image_size" android:layout_width="@dimen/gear_image_size"
android:layout_height="@dimen/gear_image_size" android:layout_height="@dimen/gear_image_size"

View file

@ -5,7 +5,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:gravity="center_horizontal"> android:gravity="center_horizontal">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:layout_width="@dimen/shopitem_image_size" android:layout_width="@dimen/shopitem_image_size"
android:layout_height="@dimen/shopitem_image_size" android:layout_height="@dimen/shopitem_image_size"
android:id="@+id/imageView" android:id="@+id/imageView"

View file

@ -5,7 +5,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_horizontal"> android:gravity="center_horizontal">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/icon_view" android:id="@+id/icon_view"
android:layout_height="@dimen/shopitem_image_size" android:layout_height="@dimen/shopitem_image_size"
android:layout_width="@dimen/shopitem_image_size" /> android:layout_width="@dimen/shopitem_image_size" />

View file

@ -21,7 +21,7 @@
android:background="@drawable/layout_rounded_bg_window" android:background="@drawable/layout_rounded_bg_window"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_alignParentStart="true"> android:layout_alignParentStart="true">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/egg_view" android:id="@+id/egg_view"
android:layout_width="@dimen/gear_image_size" android:layout_width="@dimen/gear_image_size"
android:layout_height="@dimen/gear_image_size" android:layout_height="@dimen/gear_image_size"
@ -46,7 +46,7 @@
android:background="@drawable/layout_rounded_bg_window" android:background="@drawable/layout_rounded_bg_window"
android:layout_marginEnd="13dp" android:layout_marginEnd="13dp"
android:layout_marginStart="@dimen/spacing_small"> android:layout_marginStart="@dimen/spacing_small">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/pet_view" android:id="@+id/pet_view"
android:layout_width="@dimen/gear_image_size" android:layout_width="@dimen/gear_image_size"
android:layout_height="@dimen/gear_image_size" android:layout_height="@dimen/gear_image_size"
@ -63,7 +63,7 @@
android:background="@drawable/layout_rounded_bg_window" android:background="@drawable/layout_rounded_bg_window"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_alignParentStart="true"> android:layout_alignParentStart="true">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/hatchingPotion_view" android:id="@+id/hatchingPotion_view"
android:layout_width="@dimen/gear_image_size" android:layout_width="@dimen/gear_image_size"
android:layout_height="@dimen/gear_image_size" android:layout_height="@dimen/gear_image_size"

View file

@ -10,7 +10,7 @@
tools:parentTag="LinearLayout" tools:parentTag="LinearLayout"
tools:orientation="vertical"> tools:orientation="vertical">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/imageView" android:id="@+id/imageView"
android:layout_width="@dimen/shopitem_image_size" android:layout_width="@dimen/shopitem_image_size"
android:layout_height="@dimen/shopitem_image_size" /> android:layout_height="@dimen/shopitem_image_size" />

View file

@ -11,7 +11,7 @@
tools:parentTag="LinearLayout" tools:parentTag="LinearLayout"
tools:orientation="vertical"> tools:orientation="vertical">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/imageView" android:id="@+id/imageView"
android:layout_width="@dimen/shopitem_image_size" android:layout_width="@dimen/shopitem_image_size"
android:layout_height="@dimen/shopitem_image_size" /> android:layout_height="@dimen/shopitem_image_size" />

View file

@ -10,7 +10,7 @@
tools:parentTag="LinearLayout" tools:parentTag="LinearLayout"
tools:orientation="vertical"> tools:orientation="vertical">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/imageView" android:id="@+id/imageView"
android:layout_width="@dimen/shopitem_image_size" android:layout_width="@dimen/shopitem_image_size"
android:layout_height="@dimen/shopitem_image_size" /> android:layout_height="@dimen/shopitem_image_size" />

View file

@ -6,7 +6,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
tools:parentTag="android.widget.LinearLayout"> tools:parentTag="android.widget.LinearLayout">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:layout_width="@dimen/customization_width" android:layout_width="@dimen/customization_width"
android:layout_height="@dimen/customization_width" android:layout_height="@dimen/customization_width"
android:id="@+id/imageView" android:id="@+id/imageView"

View file

@ -12,7 +12,7 @@
tools:background="?attr/colorContentBackground" tools:background="?attr/colorContentBackground"
tools:orientation="vertical"> tools:orientation="vertical">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/imageView" android:id="@+id/imageView"
android:layout_width="@dimen/shopitem_image_size" android:layout_width="@dimen/shopitem_image_size"
android:layout_height="@dimen/shopitem_image_size" /> android:layout_height="@dimen/shopitem_image_size" />

View file

@ -25,7 +25,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:src="@drawable/sparkles_left" /> android:src="@drawable/sparkles_left" />
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/achievement_view" android:id="@+id/achievement_view"
android:layout_width="48dp" android:layout_width="48dp"
android:layout_height="52dp" android:layout_height="52dp"

View file

@ -11,7 +11,7 @@
android:layout_height="70dp" android:layout_height="70dp"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:background="@drawable/layout_rounded_bg_content"> android:background="@drawable/layout_rounded_bg_content">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/icon_view" android:id="@+id/icon_view"
android:layout_width="@dimen/gear_image_size" android:layout_width="@dimen/gear_image_size"
android:layout_height="@dimen/gear_image_size" android:layout_height="@dimen/gear_image_size"

View file

@ -65,7 +65,7 @@
android:gravity="center_vertical" android:gravity="center_vertical"
android:layout_marginBottom="@dimen/spacing_medium" android:layout_marginBottom="@dimen/spacing_medium"
android:visibility="gone"> android:visibility="gone">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/quest_scroll_image_view" android:id="@+id/quest_scroll_image_view"
android:layout_width="@dimen/gear_image_size" android:layout_width="@dimen/gear_image_size"
android:layout_height="@dimen/gear_image_size" /> android:layout_height="@dimen/gear_image_size" />
@ -101,7 +101,7 @@
android:background="@drawable/layout_rounded_bg_window" android:background="@drawable/layout_rounded_bg_window"
android:padding="@dimen/spacing_medium" android:padding="@dimen/spacing_medium"
android:layout_marginBottom="@dimen/spacing_medium"> android:layout_marginBottom="@dimen/spacing_medium">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/quest_image_view" android:id="@+id/quest_image_view"
android:layout_width="@dimen/quest_image_width" android:layout_width="@dimen/quest_image_width"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View file

@ -17,7 +17,7 @@
android:paddingTop="12dp" android:paddingTop="12dp"
android:paddingBottom="12dp" android:paddingBottom="12dp"
> >
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/quest_scroll_image_view" android:id="@+id/quest_scroll_image_view"
android:layout_width="63dp" android:layout_width="63dp"
android:layout_height="63dp" android:layout_height="63dp"

View file

@ -187,7 +187,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:orientation="horizontal">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/sub_benefits_mystery_item_icon" android:id="@+id/sub_benefits_mystery_item_icon"
android:layout_width="68dp" android:layout_width="68dp"
android:layout_height="68dp" android:layout_height="68dp"

View file

@ -14,7 +14,7 @@
android:layout_width="80dp" android:layout_width="80dp"
android:layout_height="80dp" android:layout_height="80dp"
android:layout_marginEnd="@dimen/row_padding"> android:layout_marginEnd="@dimen/row_padding">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:layout_width="@dimen/gear_image_size" android:layout_width="@dimen/gear_image_size"
android:layout_height="@dimen/gear_image_size" android:layout_height="@dimen/gear_image_size"
android:layout_gravity="center" android:layout_gravity="center"

View file

@ -8,7 +8,7 @@
android:clickable="true" android:clickable="true"
android:focusable="true" android:focusable="true"
tools:parentTag="android.widget.LinearLayout"> tools:parentTag="android.widget.LinearLayout">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/imageView" android:id="@+id/imageView"
android:layout_width="@dimen/gear_image_size" android:layout_width="@dimen/gear_image_size"
android:layout_height="@dimen/gear_image_size" android:layout_height="@dimen/gear_image_size"

View file

@ -6,7 +6,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/RowWrapper" style="@style/RowWrapper"
android:clickable="true"> android:clickable="true">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/imageView" android:id="@+id/imageView"
android:layout_width="@dimen/gear_image_size" android:layout_width="@dimen/gear_image_size"
android:layout_height="@dimen/gear_image_size" android:layout_height="@dimen/gear_image_size"

View file

@ -21,7 +21,7 @@
android:layout_width="68dp" android:layout_width="68dp"
android:layout_height="66dp" android:layout_height="66dp"
android:layout_gravity="center"> android:layout_gravity="center">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/imageView" android:id="@+id/imageView"
android:layout_width="68dp" android:layout_width="68dp"
android:layout_height="68dp" android:layout_height="68dp"

View file

@ -14,7 +14,7 @@
android:background="@drawable/layout_rounded_bg_window" android:background="@drawable/layout_rounded_bg_window"
android:orientation="vertical" android:orientation="vertical"
android:layout_centerInParent="true"> android:layout_centerInParent="true">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/imageView" android:id="@+id/imageView"
android:layout_width="68dp" android:layout_width="68dp"
android:layout_height="68dp" android:layout_height="68dp"

View file

@ -2,7 +2,8 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="@dimen/pet_image_width" android:layout_height="@dimen/pet_image_height" android:layout_width="@dimen/pet_image_width" android:layout_height="@dimen/pet_image_height"
android:layout_gravity="center"> android:layout_gravity="center">
<ImageView android:id="@+id/pet_imageview" <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/pet_imageview"
android:layout_width="68dp" android:layout_width="68dp"
android:layout_height="68dp" android:layout_height="68dp"
android:layout_gravity="center" /> android:layout_gravity="center" />

View file

@ -18,7 +18,7 @@
android:layout_width="68dp" android:layout_width="68dp"
android:layout_height="58dp" android:layout_height="58dp"
android:layout_gravity="center"> android:layout_gravity="center">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/imageView" android:id="@+id/imageView"
android:layout_width="68dp" android:layout_width="68dp"
android:layout_height="68dp" android:layout_height="68dp"

View file

@ -10,7 +10,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"> android:layout_gravity="center_horizontal">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/achievement_drawee" android:id="@+id/achievement_drawee"
android:layout_width="64dp" android:layout_width="64dp"
android:layout_height="56dp" android:layout_height="56dp"

View file

@ -30,7 +30,7 @@
</LinearLayout> </LinearLayout>
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/gear_drawee" android:id="@+id/gear_drawee"
android:layout_width="40dp" android:layout_width="40dp"
android:layout_height="40dp" android:layout_height="40dp"

View file

@ -8,7 +8,7 @@
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal"> android:orientation="horizontal">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/icon_view" android:id="@+id/icon_view"
android:layout_width="40dp" android:layout_width="40dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View file

@ -47,7 +47,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:clipChildren="true"> android:clipChildren="true">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/questImageView" android:id="@+id/questImageView"
android:layout_width="219dp" android:layout_width="219dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -56,7 +56,7 @@
android:paddingStart="@dimen/spacing_large" android:paddingStart="@dimen/spacing_large"
android:paddingEnd="@dimen/spacing_large" android:paddingEnd="@dimen/spacing_large"
android:layout_gravity="center_horizontal" /> android:layout_gravity="center_horizontal" />
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/questFlourishesImageView" android:id="@+id/questFlourishesImageView"
android:layout_width="310dp" android:layout_width="310dp"
android:layout_height="219dp" android:layout_height="219dp"

View file

@ -6,7 +6,7 @@
android:gravity="center_vertical" android:gravity="center_vertical"
android:layout_marginBottom="4dp"> android:layout_marginBottom="4dp">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/imageView" android:id="@+id/imageView"
android:layout_width="@dimen/shopitem_image_size" android:layout_width="@dimen/shopitem_image_size"
android:layout_height="@dimen/shopitem_image_size" android:layout_height="@dimen/shopitem_image_size"

View file

@ -14,7 +14,7 @@
android:orientation="vertical" android:orientation="vertical"
android:background="@drawable/layout_rounded_bg_shopitem" android:background="@drawable/layout_rounded_bg_shopitem"
android:layout_centerInParent="true"> android:layout_centerInParent="true">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/imageView" android:id="@+id/imageView"
android:layout_width="@dimen/shopitem_image_size" android:layout_width="@dimen/shopitem_image_size"
android:layout_height="@dimen/shopitem_image_size" android:layout_height="@dimen/shopitem_image_size"

View file

@ -16,7 +16,7 @@
android:layout_marginTop="4dp" android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"> android:layout_marginBottom="4dp">
<ImageView <com.habitrpg.android.habitica.ui.views.PixelArtView
android:id="@+id/skill_image" android:id="@+id/skill_image"
android:layout_width="40dp" android:layout_width="40dp"
android:layout_height="40dp" android:layout_height="40dp"

View file

@ -14,6 +14,8 @@ import com.habitrpg.android.habitica.models.inventory.Pet
import com.habitrpg.android.habitica.models.responses.FeedResponse import com.habitrpg.android.habitica.models.responses.FeedResponse
import com.habitrpg.android.habitica.ui.activities.BaseActivity import com.habitrpg.android.habitica.ui.activities.BaseActivity
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.PixelArtView
import com.habitrpg.android.habitica.ui.views.SnackbarActivity import com.habitrpg.android.habitica.ui.views.SnackbarActivity
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.core.Flowable
@ -36,12 +38,9 @@ constructor(
null null
) as? FrameLayout ) as? FrameLayout
val mountImageView = val mountImageView =
mountWrapper?.findViewById(R.id.pet_imageview) as? ImageView mountWrapper?.findViewById(R.id.pet_imageview) as? PixelArtView
DataBindingUtils.loadImage( mountImageView?.loadImage("Mount_Icon_" + requestValues.pet.key)
mountImageView,
"Mount_Icon_" + requestValues.pet.key
)
val dialog = HabiticaAlertDialog(requestValues.context) val dialog = HabiticaAlertDialog(requestValues.context)
dialog.setTitle( dialog.setTitle(
requestValues.context.getString( requestValues.context.getString(

View file

@ -5,7 +5,6 @@ import android.graphics.Bitmap
import android.graphics.Canvas import android.graphics.Canvas
import android.view.View import android.view.View
import android.widget.FrameLayout import android.widget.FrameLayout
import android.widget.ImageView
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.data.InventoryRepository import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.executors.PostExecutionThread import com.habitrpg.android.habitica.executors.PostExecutionThread
@ -14,7 +13,8 @@ import com.habitrpg.android.habitica.models.inventory.Egg
import com.habitrpg.android.habitica.models.inventory.HatchingPotion import com.habitrpg.android.habitica.models.inventory.HatchingPotion
import com.habitrpg.android.habitica.models.user.Items import com.habitrpg.android.habitica.models.user.Items
import com.habitrpg.android.habitica.ui.activities.BaseActivity import com.habitrpg.android.habitica.ui.activities.BaseActivity
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.PixelArtView
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.core.Flowable
import javax.inject.Inject import javax.inject.Inject
@ -27,9 +27,9 @@ constructor(
override fun buildUseCaseObservable(requestValues: RequestValues): Flowable<Items> { override fun buildUseCaseObservable(requestValues: RequestValues): Flowable<Items> {
return inventoryRepository.hatchPet(requestValues.egg, requestValues.potion) { return inventoryRepository.hatchPet(requestValues.egg, requestValues.potion) {
val petWrapper = View.inflate(requestValues.context, R.layout.pet_imageview, null) as? FrameLayout val petWrapper = View.inflate(requestValues.context, R.layout.pet_imageview, null) as? FrameLayout
val petImageView = petWrapper?.findViewById(R.id.pet_imageview) as? ImageView val petImageView = petWrapper?.findViewById(R.id.pet_imageview) as? PixelArtView
DataBindingUtils.loadImage(petImageView, "stable_Pet-" + requestValues.egg.key + "-" + requestValues.potion.key) petImageView?.loadImage("stable_Pet-" + requestValues.egg.key + "-" + requestValues.potion.key)
val potionName = requestValues.potion.text val potionName = requestValues.potion.text
val eggName = requestValues.egg.text val eggName = requestValues.egg.text
val dialog = HabiticaAlertDialog(requestValues.context) val dialog = HabiticaAlertDialog(requestValues.context)

View file

@ -3,7 +3,6 @@ package com.habitrpg.android.habitica.interactors
import android.app.Activity import android.app.Activity
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import androidx.lifecycle.LifecycleCoroutineScope import androidx.lifecycle.LifecycleCoroutineScope
import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.analytics.FirebaseAnalytics
@ -14,8 +13,9 @@ import com.habitrpg.android.habitica.models.notifications.ChallengeWonData
import com.habitrpg.android.habitica.models.notifications.FirstDropData import com.habitrpg.android.habitica.models.notifications.FirstDropData
import com.habitrpg.android.habitica.models.notifications.LoginIncentiveData import com.habitrpg.android.habitica.models.notifications.LoginIncentiveData
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.PixelArtView
import com.habitrpg.android.habitica.ui.views.SnackbarActivity import com.habitrpg.android.habitica.ui.views.SnackbarActivity
import com.habitrpg.android.habitica.ui.views.dialogs.AchievementDialog import com.habitrpg.android.habitica.ui.views.dialogs.AchievementDialog
import com.habitrpg.android.habitica.ui.views.dialogs.FirstDropDialog import com.habitrpg.android.habitica.ui.views.dialogs.FirstDropDialog
@ -84,12 +84,12 @@ class ShowNotificationInteractor(
val factory = LayoutInflater.from(activity) val factory = LayoutInflater.from(activity)
val view = factory.inflate(R.layout.dialog_login_incentive, null) val view = factory.inflate(R.layout.dialog_login_incentive, null)
val imageView = view.findViewById(R.id.imageView) as? ImageView val imageView = view.findViewById(R.id.imageView) as? PixelArtView
var imageKey = notificationData.rewardKey?.get(0) var imageKey = notificationData.rewardKey?.get(0)
if (imageKey?.contains("armor") == true) { if (imageKey?.contains("armor") == true) {
imageKey = "slim_$imageKey" imageKey = "slim_$imageKey"
} }
DataBindingUtils.loadImage(imageView, imageKey) imageView?.loadImage(imageKey)
val youEarnedMessage = activity.getString(R.string.checkInRewardEarned, notificationData.rewardText) val youEarnedMessage = activity.getString(R.string.checkInRewardEarned, notificationData.rewardText)
val youEarnedTexView = view.findViewById(R.id.you_earned_message) as? TextView val youEarnedTexView = view.findViewById(R.id.you_earned_message) as? TextView

View file

@ -9,15 +9,16 @@ import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.PixelArtView
class ItemDetailDialog(context: Context) : AlertDialog(context) { class ItemDetailDialog(context: Context) : AlertDialog(context) {
private val itemImageView: ImageView private val itemImageView = PixelArtView(context)
private val contentTextView: TextView private val contentTextView = TextView(context, null)
private val priceTextView: TextView private val priceTextView = TextView(context, null)
private val currencyImageView: ImageView private val currencyImageView = ImageView(context)
init { init {
@ -26,7 +27,6 @@ class ItemDetailDialog(context: Context) : AlertDialog(context) {
contentViewLayout.orientation = LinearLayout.VERTICAL contentViewLayout.orientation = LinearLayout.VERTICAL
// Gear Image // Gear Image
itemImageView = ImageView(context)
val gearImageLayoutParams = LinearLayout.LayoutParams( val gearImageLayoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT
) )
@ -39,7 +39,6 @@ class ItemDetailDialog(context: Context) : AlertDialog(context) {
itemImageView.visibility = View.GONE itemImageView.visibility = View.GONE
// Gear Description // Gear Description
contentTextView = TextView(context, null)
contentTextView.setPadding(16, 0, 16, 0) contentTextView.setPadding(16, 0, 16, 0)
contentTextView.visibility = View.GONE contentTextView.visibility = View.GONE
@ -57,10 +56,8 @@ class ItemDetailDialog(context: Context) : AlertDialog(context) {
goldPriceLayout.gravity = Gravity.CENTER_HORIZONTAL or Gravity.CENTER_VERTICAL goldPriceLayout.gravity = Gravity.CENTER_HORIZONTAL or Gravity.CENTER_VERTICAL
// Price View // Price View
priceTextView = TextView(context)
priceTextView.setPadding(10, 0, 0, 0) priceTextView.setPadding(10, 0, 0, 0)
currencyImageView = ImageView(context)
currencyImageView.minimumHeight = 50 currencyImageView.minimumHeight = 50
currencyImageView.minimumWidth = 50 currencyImageView.minimumWidth = 50
currencyImageView.setPadding(0, 0, 5, 0) currencyImageView.setPadding(0, 0, 5, 0)
@ -104,7 +101,7 @@ class ItemDetailDialog(context: Context) : AlertDialog(context) {
fun setImage(imageName: String) { fun setImage(imageName: String) {
itemImageView.visibility = View.VISIBLE itemImageView.visibility = View.VISIBLE
DataBindingUtils.loadImage(itemImageView, imageName) itemImageView.loadImage(imageName)
} }
fun setBuyListener(listener: DialogInterface.OnClickListener) { fun setBuyListener(listener: DialogInterface.OnClickListener) {

View file

@ -17,7 +17,7 @@ import com.habitrpg.android.habitica.extensions.fromHtml
import com.habitrpg.android.habitica.helpers.AmplitudeManager import com.habitrpg.android.habitica.helpers.AmplitudeManager
import com.habitrpg.android.habitica.helpers.RxErrorHandler import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
class AdventureGuideActivity : BaseActivity() { class AdventureGuideActivity : BaseActivity() {
private lateinit var binding: ActivityAdventureGuideBinding private lateinit var binding: ActivityAdventureGuideBinding
@ -107,7 +107,7 @@ class AdventureGuideActivity : BaseActivity() {
} else { } else {
"achievement-unearned2x" "achievement-unearned2x"
} }
DataBindingUtils.loadImage(itemBinding.iconView, iconName) itemBinding.iconView.loadImage(iconName)
if (achievement.earned) { if (achievement.earned) {
itemBinding.titleView.paintFlags = itemBinding.titleView.paintFlags or Paint.STRIKE_THRU_TEXT_FLAG itemBinding.titleView.paintFlags = itemBinding.titleView.paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
itemBinding.titleView.setTextColor(ContextCompat.getColor(this, R.color.text_ternary)) itemBinding.titleView.setTextColor(ContextCompat.getColor(this, R.color.text_ternary))

View file

@ -27,6 +27,7 @@ import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaBottomSheetDialog
import com.plattysoft.leonids.ParticleSystem import com.plattysoft.leonids.ParticleSystem
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.util.Locale
import javax.inject.Inject import javax.inject.Inject
class ArmoireActivity: BaseActivity() { class ArmoireActivity: BaseActivity() {
@ -192,7 +193,7 @@ class ArmoireActivity: BaseActivity() {
} }
fun configure(type: String, key: String, text: String, value: String? = "") { fun configure(type: String, key: String, text: String, value: String? = "") {
binding.titleView.text = text binding.titleView.text = text.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() }
binding.equipButton.visibility = if (type == "gear") View.VISIBLE else View.GONE binding.equipButton.visibility = if (type == "gear") View.VISIBLE else View.GONE
when (type) { when (type) {
"gear" -> { "gear" -> {

View file

@ -39,6 +39,7 @@ import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.helpers.setMarkdown import com.habitrpg.android.habitica.ui.helpers.setMarkdown
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType
import com.habitrpg.android.habitica.ui.views.PixelArtView
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.core.Flowable
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -316,7 +317,7 @@ class FullProfileActivity : BaseActivity() {
private fun addEquipmentRow(table: TableLayout, gearKey: String?, text: String?, stats: String?) { private fun addEquipmentRow(table: TableLayout, gearKey: String?, text: String?, stats: String?) {
val gearRow = layoutInflater.inflate(R.layout.profile_gear_tablerow, table, false) as? TableRow val gearRow = layoutInflater.inflate(R.layout.profile_gear_tablerow, table, false) as? TableRow
val draweeView = gearRow?.findViewById<ImageView>(R.id.gear_drawee) val draweeView = gearRow?.findViewById<PixelArtView>(R.id.gear_drawee)
draweeView?.loadImage("shop_$gearKey") draweeView?.loadImage("shop_$gearKey")

View file

@ -2,7 +2,6 @@ package com.habitrpg.android.habitica.ui.adapter
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
@ -12,7 +11,8 @@ import com.habitrpg.android.habitica.databinding.AchievementSectionHeaderBinding
import com.habitrpg.android.habitica.extensions.inflate import com.habitrpg.android.habitica.extensions.inflate
import com.habitrpg.android.habitica.models.Achievement import com.habitrpg.android.habitica.models.Achievement
import com.habitrpg.android.habitica.models.QuestAchievement import com.habitrpg.android.habitica.models.QuestAchievement
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.PixelArtView
import com.habitrpg.android.habitica.ui.views.dialogs.AchievementDetailDialog import com.habitrpg.android.habitica.ui.views.dialogs.AchievementDetailDialog
class AchievementsAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() { class AchievementsAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
@ -75,7 +75,7 @@ class AchievementsAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var achievement: Achievement? = null private var achievement: Achievement? = null
private val achievementContainer: ViewGroup? private val achievementContainer: ViewGroup?
private val achievementIconView: ImageView private val achievementIconView: PixelArtView
private val achievementCountView: TextView private val achievementCountView: TextView
private val achievementTitleView: TextView private val achievementTitleView: TextView
private val achievementDescriptionView: TextView? private val achievementDescriptionView: TextView?
@ -96,7 +96,7 @@ class AchievementsAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
} else { } else {
"achievement-unearned2x" "achievement-unearned2x"
} }
DataBindingUtils.loadImage(achievementIconView, iconName) achievementIconView.loadImage(iconName)
achievementTitleView.text = achievement.title achievementTitleView.text = achievement.title
achievementDescriptionView?.text = achievement.text achievementDescriptionView?.text = achievement.text
if (achievement.optionalCount ?: 0 > 0) { if (achievement.optionalCount ?: 0 > 0) {

View file

@ -13,8 +13,9 @@ import com.habitrpg.android.habitica.databinding.CustomizationGridItemBinding
import com.habitrpg.android.habitica.helpers.MainNavigationController import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.models.inventory.CustomizationSet import com.habitrpg.android.habitica.models.inventory.CustomizationSet
import com.habitrpg.android.habitica.models.inventory.Equipment import com.habitrpg.android.habitica.models.inventory.Equipment
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.PixelArtView
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.rxjava3.core.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.core.Flowable
@ -91,7 +92,7 @@ class CustomizationEquipmentRecyclerViewAdapter : androidx.recyclerview.widget.R
fun bind(equipment: Equipment) { fun bind(equipment: Equipment) {
this.equipment = equipment this.equipment = equipment
DataBindingUtils.loadImage(binding.imageView, "shop_" + this.equipment?.key) binding.imageView.loadImage("shop_" + this.equipment?.key)
if (equipment.owned == true || equipment.value == 0.0) { if (equipment.owned == true || equipment.value == 0.0) {
binding.buyButton.visibility = View.GONE binding.buyButton.visibility = View.GONE
} else { } else {
@ -115,8 +116,8 @@ class CustomizationEquipmentRecyclerViewAdapter : androidx.recyclerview.widget.R
if (equipment?.owned != true && (equipment?.value ?: 0.0) > 0.0) { if (equipment?.owned != true && (equipment?.value ?: 0.0) > 0.0) {
val dialogContent = LayoutInflater.from(itemView.context).inflate(R.layout.dialog_purchase_customization, null) as LinearLayout val dialogContent = LayoutInflater.from(itemView.context).inflate(R.layout.dialog_purchase_customization, null) as LinearLayout
val imageView = dialogContent.findViewById<ImageView>(R.id.imageView) val imageView = dialogContent.findViewById<PixelArtView>(R.id.imageView)
DataBindingUtils.loadImage(imageView, "shop_" + this.equipment?.key) imageView.loadImage("shop_" + this.equipment?.key)
val priceLabel = dialogContent.findViewById<TextView>(R.id.priceLabel) val priceLabel = dialogContent.findViewById<TextView>(R.id.priceLabel)
priceLabel.text = if (equipment?.gearSet == "animal") { priceLabel.text = if (equipment?.gearSet == "animal") {

View file

@ -15,7 +15,7 @@ import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.models.inventory.Customization import com.habitrpg.android.habitica.models.inventory.Customization
import com.habitrpg.android.habitica.models.inventory.CustomizationSet import com.habitrpg.android.habitica.models.inventory.CustomizationSet
import com.habitrpg.android.habitica.models.shops.ShopItem import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog
import io.reactivex.rxjava3.core.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
@ -148,7 +148,7 @@ class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.Recycler
if (customization.type == "background" && customization.identifier == "") { if (customization.type == "background" && customization.identifier == "") {
binding.imageView.load(R.drawable.no_background) binding.imageView.load(R.drawable.no_background)
} else { } else {
DataBindingUtils.loadImage(binding.imageView, customization.getIconName(userSize, hairColor)) binding.imageView.loadImage(customization.getIconName(userSize, hairColor))
} }
if (customization.isUsable(ownedCustomizations.contains(customization.id))) { if (customization.isUsable(ownedCustomizations.contains(customization.id))) {

View file

@ -13,7 +13,7 @@ import com.habitrpg.android.habitica.extensions.inflate
import com.habitrpg.android.habitica.extensions.isUsingNightModeResources import com.habitrpg.android.habitica.extensions.isUsingNightModeResources
import com.habitrpg.android.habitica.models.Skill import com.habitrpg.android.habitica.models.Skill
import com.habitrpg.android.habitica.models.user.OwnedItem import com.habitrpg.android.habitica.models.user.OwnedItem
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import io.reactivex.rxjava3.core.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.core.Flowable
@ -125,7 +125,7 @@ class SkillsRecyclerViewAdapter : RecyclerView.Adapter<SkillsRecyclerViewAdapter
binding.priceLabel.visibility = View.GONE binding.priceLabel.visibility = View.GONE
} }
} }
DataBindingUtils.loadImage(binding.skillImage, "shop_" + skill.key) binding.skillImage.loadImage("shop_" + skill.key)
} }
override fun onClick(v: View) { override fun onClick(v: View) {

View file

@ -12,7 +12,7 @@ import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.GearListItemBinding import com.habitrpg.android.habitica.databinding.GearListItemBinding
import com.habitrpg.android.habitica.models.inventory.Equipment import com.habitrpg.android.habitica.models.inventory.Equipment
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import io.reactivex.rxjava3.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
@ -71,7 +71,7 @@ class EquipmentRecyclerViewAdapter : BaseRecyclerViewAdapter<Equipment, Equipmen
binding.gearIconBackgroundView.background = ContextCompat.getDrawable(context, R.drawable.layout_rounded_bg_window) binding.gearIconBackgroundView.background = ContextCompat.getDrawable(context, R.drawable.layout_rounded_bg_window)
} }
binding.twoHandedView.visibility = if (gear.twoHanded) View.VISIBLE else View.GONE binding.twoHandedView.visibility = if (gear.twoHanded) View.VISIBLE else View.GONE
DataBindingUtils.loadImage(binding.gearImage, "shop_" + gear.key) binding.gearImage.loadImage("shop_" + gear.key)
set(binding.strLabel, binding.strValue, gear.str) set(binding.strLabel, binding.strValue, gear.str)
set(binding.conLabel, binding.conValue, gear.con) set(binding.conLabel, binding.conValue, gear.con)

View file

@ -20,7 +20,7 @@ import com.habitrpg.android.habitica.models.user.OwnedItem
import com.habitrpg.android.habitica.models.user.OwnedPet import com.habitrpg.android.habitica.models.user.OwnedPet
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.menu.BottomSheetMenu import com.habitrpg.android.habitica.ui.menu.BottomSheetMenu
import com.habitrpg.android.habitica.ui.menu.BottomSheetMenuItem import com.habitrpg.android.habitica.ui.menu.BottomSheetMenuItem
import com.habitrpg.android.habitica.ui.views.dialogs.DetailDialog import com.habitrpg.android.habitica.ui.views.dialogs.DetailDialog
@ -143,7 +143,7 @@ class ItemRecyclerAdapter(val context: Context, val user: User?) : BaseRecyclerV
disabled = !this.canHatch disabled = !this.canHatch
} }
} }
DataBindingUtils.loadImage(binding.imageView, imageName) binding.imageView.loadImage(imageName)
var alpha = 1.0f var alpha = 1.0f
if (disabled) { if (disabled) {

View file

@ -16,7 +16,7 @@ import com.habitrpg.android.habitica.models.inventory.StableSection
import com.habitrpg.android.habitica.models.user.OwnedItem import com.habitrpg.android.habitica.models.user.OwnedItem
import com.habitrpg.android.habitica.models.user.OwnedMount import com.habitrpg.android.habitica.models.user.OwnedMount
import com.habitrpg.android.habitica.models.user.OwnedPet import com.habitrpg.android.habitica.models.user.OwnedPet
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.viewHolders.PetViewHolder import com.habitrpg.android.habitica.ui.viewHolders.PetViewHolder
import com.habitrpg.android.habitica.ui.viewHolders.SectionViewHolder import com.habitrpg.android.habitica.ui.viewHolders.SectionViewHolder
import com.habitrpg.android.habitica.ui.views.dialogs.PetSuggestHatchDialog import com.habitrpg.android.habitica.ui.views.dialogs.PetSuggestHatchDialog
@ -187,11 +187,8 @@ class PetDetailRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapt
this.hasUnlockedPotion = hasUnlockedPotion this.hasUnlockedPotion = hasUnlockedPotion
this.hasMount = hasMount this.hasMount = hasMount
DataBindingUtils.loadImage(binding.eggView, "Pet_Egg_${item.animal}") binding.eggView.loadImage("Pet_Egg_${item.animal}")
DataBindingUtils.loadImage( binding.hatchingPotionView.loadImage("Pet_HatchingPotion_${item.color}")
binding.hatchingPotionView,
"Pet_HatchingPotion_${item.color}"
)
binding.eggView.startAnimation(Animations.bobbingAnimation(4f)) binding.eggView.startAnimation(Animations.bobbingAnimation(4f))
binding.hatchingPotionView.startAnimation(Animations.bobbingAnimation(-4f)) binding.hatchingPotionView.startAnimation(Animations.bobbingAnimation(-4f))

View file

@ -2,7 +2,6 @@ package com.habitrpg.android.habitica.ui.adapter.inventory
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
@ -25,6 +24,7 @@ import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.viewHolders.MountViewHolder import com.habitrpg.android.habitica.ui.viewHolders.MountViewHolder
import com.habitrpg.android.habitica.ui.viewHolders.PetViewHolder import com.habitrpg.android.habitica.ui.viewHolders.PetViewHolder
import com.habitrpg.android.habitica.ui.viewHolders.SectionViewHolder import com.habitrpg.android.habitica.ui.viewHolders.SectionViewHolder
import com.habitrpg.android.habitica.ui.views.PixelArtView
import io.reactivex.rxjava3.core.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
@ -192,7 +192,7 @@ class StableRecyclerAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
internal inner class StableViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener { internal inner class StableViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
private var animal: Animal? = null private var animal: Animal? = null
private val imageView: ImageView = itemView.findViewById(R.id.imageView) private val imageView: PixelArtView = itemView.findViewById(R.id.imageView)
private val titleView: TextView = itemView.findViewById(R.id.titleTextView) private val titleView: TextView = itemView.findViewById(R.id.titleTextView)
private val ownedTextView: TextView = itemView.findViewById(R.id.ownedTextView) private val ownedTextView: TextView = itemView.findViewById(R.id.ownedTextView)

View file

@ -26,14 +26,14 @@ import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.activities.GiftSubscriptionActivity import com.habitrpg.android.habitica.ui.activities.GiftSubscriptionActivity
import com.habitrpg.android.habitica.ui.fragments.BaseFragment import com.habitrpg.android.habitica.ui.fragments.BaseFragment
import com.habitrpg.android.habitica.ui.fragments.PromoInfoFragment import com.habitrpg.android.habitica.ui.fragments.PromoInfoFragment
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.subscriptions.SubscriptionOptionView import com.habitrpg.android.habitica.ui.views.subscriptions.SubscriptionOptionView
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import javax.inject.Inject
class SubscriptionFragment : BaseFragment<FragmentSubscriptionBinding>() { class SubscriptionFragment : BaseFragment<FragmentSubscriptionBinding>() {
@ -90,7 +90,7 @@ class SubscriptionFragment : BaseFragment<FragmentSubscriptionBinding>() {
compositeSubscription.add( compositeSubscription.add(
inventoryRepository.getLatestMysteryItem().subscribe( inventoryRepository.getLatestMysteryItem().subscribe(
{ {
DataBindingUtils.loadImage(binding?.subBenefitsMysteryItemIcon, "shop_set_mystery_${it.key?.split("_")?.last()}") binding?.subBenefitsMysteryItemIcon?.loadImage("shop_set_mystery_${it.key?.split("_")?.last()}")
binding?.subBenefitsMysteryItemText?.text = context?.getString(R.string.subscribe_listitem3_description_new, it.text) binding?.subBenefitsMysteryItemText?.text = context?.getString(R.string.subscribe_listitem3_description_new, it.text)
}, },
RxErrorHandler.handleEmptyError() RxErrorHandler.handleEmptyError()

View file

@ -26,6 +26,7 @@ import com.habitrpg.android.habitica.modules.AppModule
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser import com.habitrpg.android.habitica.ui.helpers.MarkdownParser
import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import javax.inject.Inject import javax.inject.Inject
@ -149,7 +150,7 @@ class QuestDetailFragment : BaseMainFragment<FragmentQuestDetailBinding>() {
// We need to do this, because the quest description can contain markdown AND HTML. // We need to do this, because the quest description can contain markdown AND HTML.
binding?.descriptionView?.setText(MarkdownParser.parseMarkdown(questContent.notes).toHtml().fromHtml(), TextView.BufferType.SPANNABLE) binding?.descriptionView?.setText(MarkdownParser.parseMarkdown(questContent.notes).toHtml().fromHtml(), TextView.BufferType.SPANNABLE)
DataBindingUtils.loadImage(binding?.questScrollImageView, "inventory_quest_scroll_" + questContent.key) binding?.questScrollImageView?.loadImage("inventory_quest_scroll_" + questContent.key)
} }
private fun setQuestParticipants(participants: List<Member>?) { private fun setQuestParticipants(participants: List<Member>?) {

View file

@ -35,16 +35,17 @@ import com.habitrpg.android.habitica.ui.fragments.BaseFragment
import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemDialogFragment import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemDialogFragment
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.helpers.setMarkdown import com.habitrpg.android.habitica.ui.helpers.setMarkdown
import com.habitrpg.android.habitica.ui.viewHolders.GroupMemberViewHolder import com.habitrpg.android.habitica.ui.viewHolders.GroupMemberViewHolder
import com.habitrpg.android.habitica.ui.viewmodels.PartyViewModel import com.habitrpg.android.habitica.ui.viewmodels.PartyViewModel
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import javax.inject.Inject
import javax.inject.Named
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import javax.inject.Inject
import javax.inject.Named
class PartyDetailFragment : BaseFragment<FragmentPartyDetailBinding>() { class PartyDetailFragment : BaseFragment<FragmentPartyDetailBinding>() {
@ -218,9 +219,9 @@ class PartyDetailFragment : BaseFragment<FragmentPartyDetailBinding>() {
return return
} }
binding?.questTitleView?.text = questContent.text binding?.questTitleView?.text = questContent.text
DataBindingUtils.loadImage(binding?.questScrollImageView, "inventory_quest_scroll_" + questContent.key) binding?.questScrollImageView?.loadImage("inventory_quest_scroll_" + questContent.key)
if (questContent.hasGifImage()) { if (questContent.hasGifImage()) {
DataBindingUtils.loadImage(binding?.questImageView, "quest_" + questContent.key, "gif") binding?.questImageView?.loadImage("quest_" + questContent.key, "gif")
} else { } else {
context?.let { context -> context?.let { context ->
DataBindingUtils.loadImage(context, "quest_" + questContent.key) { DataBindingUtils.loadImage(context, "quest_" + questContent.key) {
@ -230,7 +231,7 @@ class PartyDetailFragment : BaseFragment<FragmentPartyDetailBinding>() {
binding?.questImageView?.layoutParams = params binding?.questImageView?.layoutParams = params
} }
} }
DataBindingUtils.loadImage(binding?.questImageView, "quest_" + questContent.key) binding?.questImageView?.loadImage("quest_" + questContent.key)
} }
binding?.questImageWrapper?.alpha = 1.0f binding?.questImageWrapper?.alpha = 1.0f
binding?.questProgressView?.alpha = 1.0f binding?.questProgressView?.alpha = 1.0f

View file

@ -6,39 +6,36 @@ import android.graphics.drawable.Drawable
import android.view.View import android.view.View
import android.view.animation.Animation import android.view.animation.Animation
import android.view.animation.Transformation import android.view.animation.Transformation
import android.widget.ImageView
import android.widget.LinearLayout import android.widget.LinearLayout
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import androidx.core.graphics.drawable.toBitmap
import coil.imageLoader import coil.imageLoader
import coil.load
import coil.request.ImageRequest import coil.request.ImageRequest
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.setTintWith import com.habitrpg.android.habitica.extensions.setTintWith
import com.habitrpg.android.habitica.helpers.AppConfigManager import com.habitrpg.android.habitica.helpers.AppConfigManager
import com.habitrpg.android.habitica.ui.views.PixelArtView
import java.util.Collections import java.util.Collections
import java.util.Date import java.util.Date
fun ImageView.loadImage(imageName: String?, imageFormat: String? = null) { fun PixelArtView.loadImage(imageName: String?, imageFormat: String? = null) {
DataBindingUtils.loadImage(this, imageName, imageFormat) if (imageName != null) {
val fullname = DataBindingUtils.getFullFilename(imageName, imageFormat)
if (tag == fullname) {
return
}
tag = fullname
bitmap = null
DataBindingUtils.loadImage(context, imageName, imageFormat) {
if (tag == fullname) {
bitmap = it.toBitmap()
}
}
}
} }
object DataBindingUtils { object DataBindingUtils {
fun loadImage(view: ImageView?, imageName: String) {
loadImage(view, imageName, null)
}
fun loadImage(view: ImageView?, imageName: String?, imageFormat: String? = null) {
if (view != null && imageName != null && view.visibility == View.VISIBLE) {
val fullname = getFullFilename(imageName, imageFormat)
if (view.tag == fullname) {
return
}
view.tag = fullname
view.load(BASE_IMAGE_URL + fullname)
}
}
fun loadImage(context: Context, imageName: String, imageResult: (Drawable) -> Unit) { fun loadImage(context: Context, imageName: String, imageResult: (Drawable) -> Unit) {
loadImage(context, imageName, null, imageResult) loadImage(context, imageName, null, imageResult)
} }

View file

@ -41,7 +41,7 @@ class MountViewHolder(parent: ViewGroup, private val equipEvents: PublishSubject
binding.activeIndicator.visibility = if (currentMount.equals(animal?.key)) View.VISIBLE else View.GONE binding.activeIndicator.visibility = if (currentMount.equals(animal?.key)) View.VISIBLE else View.GONE
DataBindingUtils.loadImage(itemView.context, imageName) { DataBindingUtils.loadImage(itemView.context, imageName) {
val drawable = if (owned) it else BitmapDrawable(itemView.context.resources, it.toBitmap().extractAlpha()) val drawable = if (owned) it else BitmapDrawable(itemView.context.resources, it.toBitmap().extractAlpha())
binding.imageView.background = drawable binding.imageView.bitmap = drawable.toBitmap()
} }
} }

View file

@ -101,7 +101,7 @@ class PetViewHolder(
val resources = itemView.context.resources ?: return@loadImage val resources = itemView.context.resources ?: return@loadImage
val drawable = val drawable =
if (trained == 0) BitmapDrawable(resources, it.toBitmap().extractAlpha()) else it if (trained == 0) BitmapDrawable(resources, it.toBitmap().extractAlpha()) else it
binding.imageView.background = drawable binding.imageView.bitmap = drawable.toBitmap()
} }
} }

View file

@ -10,7 +10,7 @@ import com.habitrpg.android.habitica.databinding.RowShopitemBinding
import com.habitrpg.android.habitica.extensions.dpToPx import com.habitrpg.android.habitica.extensions.dpToPx
import com.habitrpg.android.habitica.extensions.isUsingNightModeResources import com.habitrpg.android.habitica.extensions.isUsingNightModeResources
import com.habitrpg.android.habitica.models.shops.ShopItem import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog
@ -39,7 +39,7 @@ class ShopItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), Vi
this.item = item this.item = item
binding.buyButton.visibility = View.VISIBLE binding.buyButton.visibility = View.VISIBLE
DataBindingUtils.loadImage(binding.imageView, item.imageName?.replace("_locked", "")) binding.imageView.loadImage(item.imageName?.replace("_locked", ""))
binding.itemDetailIndicator.text = null binding.itemDetailIndicator.text = null
binding.itemDetailIndicator.visibility = View.GONE binding.itemDetailIndicator.visibility = View.GONE

View file

@ -7,7 +7,7 @@ import android.widget.LinearLayout
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.ItemImageRowBinding import com.habitrpg.android.habitica.databinding.ItemImageRowBinding
import com.habitrpg.android.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
class EquipmentItemRow(context: Context, attrs: AttributeSet?) : LinearLayout(context, attrs) { class EquipmentItemRow(context: Context, attrs: AttributeSet?) : LinearLayout(context, attrs) {
@ -16,14 +16,14 @@ class EquipmentItemRow(context: Context, attrs: AttributeSet?) : LinearLayout(co
set(value) { set(value) {
field = value field = value
val imageName = if (equipmentIdentifier?.isNotEmpty() == true && equipmentIdentifier?.endsWith("base_0") == false) "shop_$equipmentIdentifier" else "head_0" val imageName = if (equipmentIdentifier?.isNotEmpty() == true && equipmentIdentifier?.endsWith("base_0") == false) "shop_$equipmentIdentifier" else "head_0"
DataBindingUtils.loadImage(binding.imageView, imageName) binding.imageView.loadImage(imageName)
} }
var customizationIdentifier: String? = null var customizationIdentifier: String? = null
set(value) { set(value) {
field = value field = value
val imageName = if (customizationIdentifier?.isNotEmpty() == true) customizationIdentifier else "head_0" val imageName = if (customizationIdentifier?.isNotEmpty() == true) customizationIdentifier else "head_0"
DataBindingUtils.loadImage(binding.imageView, imageName) binding.imageView.loadImage(imageName)
} }
init { init {

View file

@ -38,7 +38,9 @@ class NPCBannerView(context: Context, attrs: AttributeSet?) : FrameLayout(contex
} }
private fun setImage() { private fun setImage() {
DataBindingUtils.loadImage(binding.sceneView, identifier + "_scene" + shopSpriteSuffix) DataBindingUtils.loadImage(context, identifier + "_scene" + shopSpriteSuffix) {
binding.sceneView.setImageDrawable(it)
}
binding.backgroundView.scaleType = ImageView.ScaleType.FIT_START binding.backgroundView.scaleType = ImageView.ScaleType.FIT_START

View file

@ -0,0 +1,59 @@
package com.habitrpg.android.habitica.ui.views
import android.content.Context
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.Rect
import android.util.AttributeSet
class PixelArtView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : androidx.appcompat.widget.AppCompatImageView(context, attrs, defStyleAttr) {
private var targetRect = Rect(0, 0, 0, 0)
var bitmap: Bitmap? = null
set(value) {
field = value
updateTargetRect()
invalidate()
}
private val paint: Paint by lazy {
val paint = Paint()
paint.isAntiAlias = true
paint.isFilterBitmap = false
paint
}
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
super.onSizeChanged(w, h, oldw, oldh)
updateTargetRect()
}
private fun updateTargetRect() {
var targetWidth = bitmap?.width ?: 0
var targetHeight = bitmap?.height ?: 0
if (width > 0 && targetWidth > 0 && width != targetWidth) {
targetWidth = (targetWidth/3) * (width / (targetWidth/3))
}
if (height > 0 && targetHeight > 0 && height != targetHeight) {
targetHeight = (targetHeight/3) * (height / (targetHeight/3))
}
val left = (width-targetWidth)/2
val top = (height-targetHeight)/2
targetRect = Rect(left, top, left+targetWidth, top+targetHeight)
}
override fun onDraw(canvas: Canvas?) {
if (bitmap == null) {
super.onDraw(canvas)
return
}
val bitmap = bitmap ?: return
canvas?.drawBitmap(bitmap, null, targetRect, paint)
}
}

View file

@ -3,17 +3,17 @@ package com.habitrpg.android.habitica.ui.views.dialogs
import android.content.Context import android.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import com.habitrpg.android.habitica.databinding.DialogAchievementDetailBinding import com.habitrpg.android.habitica.databinding.DialogAchievementDetailBinding
import com.habitrpg.android.habitica.extensions.addCloseButton import com.habitrpg.android.habitica.extensions.addCloseButton
import com.habitrpg.android.habitica.extensions.fromHtml import com.habitrpg.android.habitica.extensions.fromHtml
import com.habitrpg.android.habitica.models.Achievement import com.habitrpg.android.habitica.models.Achievement
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.PixelArtView
class AchievementDetailDialog(val achievement: Achievement, context: Context) : HabiticaAlertDialog(context) { class AchievementDetailDialog(val achievement: Achievement, context: Context) : HabiticaAlertDialog(context) {
private var iconView: ImageView? private var iconView: PixelArtView?
private var descriptionView: TextView? private var descriptionView: TextView?
init { init {
@ -30,7 +30,7 @@ class AchievementDetailDialog(val achievement: Achievement, context: Context) :
} else { } else {
"achievement-unearned2x" "achievement-unearned2x"
} }
DataBindingUtils.loadImage(iconView, iconName) iconView?.loadImage(iconName)
addCloseButton(true) addCloseButton(true)
} }
} }

View file

@ -12,7 +12,7 @@ import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.helpers.MainNavigationController import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.models.Notification import com.habitrpg.android.habitica.models.Notification
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
class AchievementDialog(context: Context) : HabiticaAlertDialog(context) { class AchievementDialog(context: Context) : HabiticaAlertDialog(context) {
var isLastOnboardingAchievement: Boolean = false var isLastOnboardingAchievement: Boolean = false
@ -51,7 +51,7 @@ class AchievementDialog(context: Context) : HabiticaAlertDialog(context) {
private fun configure(title: String, description: String, iconName: String) { private fun configure(title: String, description: String, iconName: String) {
binding.titleView.text = title binding.titleView.text = title
binding.descriptionView.setText(description.fromHtml(), TextView.BufferType.SPANNABLE) binding.descriptionView.setText(description.fromHtml(), TextView.BufferType.SPANNABLE)
DataBindingUtils.loadImage(binding.iconView, "achievement-${iconName}2x") binding.iconView.loadImage("achievement-${iconName}2x")
if (iconName == "onboardingComplete") { if (iconName == "onboardingComplete") {
setTitle(R.string.onboardingComplete_achievement_title) setTitle(R.string.onboardingComplete_achievement_title)
binding.titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f) binding.titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f)

View file

@ -2,15 +2,15 @@ package com.habitrpg.android.habitica.ui.views.dialogs
import android.content.Context import android.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.ImageView
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.helpers.MainNavigationController import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.PixelArtView
class FirstDropDialog(context: Context) : HabiticaAlertDialog(context) { class FirstDropDialog(context: Context) : HabiticaAlertDialog(context) {
private var eggView: ImageView? private var eggView: PixelArtView?
private var hatchingPotionView: ImageView? private var hatchingPotionView: PixelArtView?
init { init {
val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as? LayoutInflater val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as? LayoutInflater
@ -26,7 +26,7 @@ class FirstDropDialog(context: Context) : HabiticaAlertDialog(context) {
} }
fun configure(egg: String, hatchingPotion: String) { fun configure(egg: String, hatchingPotion: String) {
DataBindingUtils.loadImage(eggView, "Pet_Egg_$egg") eggView?.loadImage("Pet_Egg_$egg")
DataBindingUtils.loadImage(hatchingPotionView, "Pet_HatchingPotion_$hatchingPotion") hatchingPotionView?.loadImage("Pet_HatchingPotion_$hatchingPotion")
} }
} }

View file

@ -19,6 +19,7 @@ import com.habitrpg.android.habitica.models.inventory.Item
import com.habitrpg.android.habitica.ui.activities.BaseActivity import com.habitrpg.android.habitica.ui.activities.BaseActivity
import com.habitrpg.android.habitica.ui.activities.MainActivity import com.habitrpg.android.habitica.ui.activities.MainActivity
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.CurrencyView import com.habitrpg.android.habitica.ui.views.CurrencyView
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.core.Flowable
@ -50,8 +51,8 @@ class PetSuggestHatchDialog(context: Context) : HabiticaAlertDialog(context) {
hasUnlockedPotion: Boolean, hasUnlockedPotion: Boolean,
hasMount: Boolean hasMount: Boolean
) { ) {
DataBindingUtils.loadImage(binding.eggView, "Pet_Egg_${pet.animal}") binding.eggView.loadImage("Pet_Egg_${pet.animal}")
DataBindingUtils.loadImage(binding.hatchingPotionView, "Pet_HatchingPotion_${pet.color}") binding.hatchingPotionView.loadImage("Pet_HatchingPotion_${pet.color}")
binding.petTitleView.text = pet.text binding.petTitleView.text = pet.text
val hasEgg = eggCount > 0 val hasEgg = eggCount > 0
@ -170,7 +171,7 @@ class PetSuggestHatchDialog(context: Context) : HabiticaAlertDialog(context) {
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe( .subscribe(
{ {
binding.petView.background = drawable binding.petView.bitmap = drawable.toBitmap()
}, },
RxErrorHandler.handleEmptyError() RxErrorHandler.handleEmptyError()
) )

View file

@ -15,8 +15,9 @@ import com.habitrpg.android.habitica.extensions.fromHtml
import com.habitrpg.android.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.models.inventory.QuestContent import com.habitrpg.android.habitica.models.inventory.QuestContent
import com.habitrpg.android.habitica.models.inventory.QuestDropItem import com.habitrpg.android.habitica.models.inventory.QuestDropItem
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.PixelArtView
class QuestCompletedDialogContent : LinearLayout { class QuestCompletedDialogContent : LinearLayout {
@ -40,7 +41,7 @@ class QuestCompletedDialogContent : LinearLayout {
fun setQuestContent(questContent: QuestContent) { fun setQuestContent(questContent: QuestContent) {
binding.titleTextView.setText(questContent.text.fromHtml(), TextView.BufferType.SPANNABLE) binding.titleTextView.setText(questContent.text.fromHtml(), TextView.BufferType.SPANNABLE)
binding.notesTextView.setText(questContent.completion.fromHtml(), TextView.BufferType.SPANNABLE) binding.notesTextView.setText(questContent.completion.fromHtml(), TextView.BufferType.SPANNABLE)
DataBindingUtils.loadImage(binding.imageView, "quest_" + questContent.key) binding.imageView.loadImage("quest_" + questContent.key)
val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as? LayoutInflater val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as? LayoutInflater
@ -89,9 +90,9 @@ class QuestCompletedDialogContent : LinearLayout {
containerView: ViewGroup? containerView: ViewGroup?
) { ) {
val view = inflater?.inflate(R.layout.row_quest_reward, containerView, false) as? ViewGroup val view = inflater?.inflate(R.layout.row_quest_reward, containerView, false) as? ViewGroup
val imageView = view?.findViewById(R.id.imageView) as? ImageView val imageView = view?.findViewById(R.id.imageView) as? PixelArtView
val titleTextView = view?.findViewById(R.id.titleTextView) as? TextView val titleTextView = view?.findViewById(R.id.titleTextView) as? TextView
DataBindingUtils.loadImage(imageView, item.imageName) imageView?.loadImage(item.imageName)
if (item.count > 1) { if (item.count > 1) {
titleTextView?.text = context.getString(R.string.quest_reward_count, item.text, item.count) titleTextView?.text = context.getString(R.string.quest_reward_count, item.text, item.count)
} else { } else {

View file

@ -8,12 +8,13 @@ import android.widget.TextView
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.fromHtml import com.habitrpg.android.habitica.extensions.fromHtml
import com.habitrpg.android.habitica.models.notifications.ChallengeWonData import com.habitrpg.android.habitica.models.notifications.ChallengeWonData
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.PixelArtView
class WonChallengeDialog(context: Context) : HabiticaAlertDialog(context) { class WonChallengeDialog(context: Context) : HabiticaAlertDialog(context) {
fun configure(data: ChallengeWonData?) { fun configure(data: ChallengeWonData?) {
val imageView = additionalContentView?.findViewById<ImageView>(R.id.achievement_view) val imageView = additionalContentView?.findViewById<PixelArtView>(R.id.achievement_view)
DataBindingUtils.loadImage(imageView, "achievement-karaoke-2x") imageView?.loadImage("achievement-karaoke-2x")
if (data?.name != null) { if (data?.name != null) {
additionalContentView?.findViewById<TextView>(R.id.description_view)?.text = context.getString(R.string.won_achievement_description, data.name).fromHtml() additionalContentView?.findViewById<TextView>(R.id.description_view)?.text = context.getString(R.string.won_achievement_description, data.name).fromHtml()

View file

@ -9,7 +9,7 @@ import androidx.core.content.ContextCompat
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.EquipmentOverviewItemBinding import com.habitrpg.android.habitica.databinding.EquipmentOverviewItemBinding
import com.habitrpg.android.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
class EquipmentOverviewItem @JvmOverloads constructor( class EquipmentOverviewItem @JvmOverloads constructor(
@ -35,7 +35,7 @@ class EquipmentOverviewItem @JvmOverloads constructor(
identifier = key ?: "" identifier = key ?: ""
binding.twoHandedIndicator.setImageDrawable(null) binding.twoHandedIndicator.setImageDrawable(null)
if (identifier.isNotEmpty() && !identifier.endsWith("base_0")) { if (identifier.isNotEmpty() && !identifier.endsWith("base_0")) {
DataBindingUtils.loadImage(binding.iconView, "shop_$key") binding.iconView.loadImage("shop_$key")
binding.localIconView.visibility = View.GONE binding.localIconView.visibility = View.GONE
binding.iconView.visibility = View.VISIBLE binding.iconView.visibility = View.VISIBLE
binding.iconWrapper.background = ContextCompat.getDrawable(context, R.drawable.layout_rounded_bg_content) binding.iconWrapper.background = ContextCompat.getDrawable(context, R.drawable.layout_rounded_bg_content)

View file

@ -1,17 +1,17 @@
package com.habitrpg.android.habitica.ui.views.shops package com.habitrpg.android.habitica.ui.views.shops
import android.content.Context import android.content.Context
import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import com.habitrpg.android.habitica.databinding.PurchaseDialogBackgroundBinding import com.habitrpg.android.habitica.databinding.PurchaseDialogBackgroundBinding
import com.habitrpg.android.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.models.Avatar import com.habitrpg.android.habitica.models.Avatar
import com.habitrpg.android.habitica.models.shops.ShopItem import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.android.habitica.ui.views.PixelArtView
class PurchaseDialogBackgroundContent(context: Context) : PurchaseDialogContent(context) { class PurchaseDialogBackgroundContent(context: Context) : PurchaseDialogContent(context) {
val binding = PurchaseDialogBackgroundBinding.inflate(context.layoutInflater, this) val binding = PurchaseDialogBackgroundBinding.inflate(context.layoutInflater, this)
override val imageView: ImageView override val imageView: PixelArtView
get() = ImageView(context) get() = PixelArtView(context)
override val titleTextView: TextView override val titleTextView: TextView
get() = binding.titleTextView get() = binding.titleTextView

View file

@ -1,14 +1,14 @@
package com.habitrpg.android.habitica.ui.views.shops package com.habitrpg.android.habitica.ui.views.shops
import android.content.Context import android.content.Context
import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import com.habitrpg.android.habitica.databinding.DialogPurchaseContentItemBinding import com.habitrpg.android.habitica.databinding.DialogPurchaseContentItemBinding
import com.habitrpg.android.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.ui.views.PixelArtView
class PurchaseDialogBaseContent(context: Context) : PurchaseDialogContent(context) { class PurchaseDialogBaseContent(context: Context) : PurchaseDialogContent(context) {
val binding = DialogPurchaseContentItemBinding.inflate(context.layoutInflater, this) val binding = DialogPurchaseContentItemBinding.inflate(context.layoutInflater, this)
override val imageView: ImageView override val imageView: PixelArtView
get() = binding.imageView get() = binding.imageView
override val titleTextView: TextView override val titleTextView: TextView
get() = binding.titleTextView get() = binding.titleTextView

View file

@ -3,7 +3,6 @@ package com.habitrpg.android.habitica.ui.views.shops
import android.content.Context import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.view.Gravity import android.view.Gravity
import android.widget.ImageView
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import coil.load import coil.load
@ -13,6 +12,7 @@ import com.habitrpg.android.habitica.models.inventory.QuestContent
import com.habitrpg.android.habitica.models.shops.ShopItem import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.helpers.loadImage import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.PixelArtView
abstract class PurchaseDialogContent @JvmOverloads constructor( abstract class PurchaseDialogContent @JvmOverloads constructor(
context: Context, context: Context,
@ -20,7 +20,7 @@ abstract class PurchaseDialogContent @JvmOverloads constructor(
defStyleAttr: Int = 0 defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr) { ) : LinearLayout(context, attrs, defStyleAttr) {
abstract val imageView: ImageView abstract val imageView: PixelArtView
abstract val titleTextView: TextView abstract val titleTextView: TextView
init { init {

View file

@ -1,14 +1,14 @@
package com.habitrpg.android.habitica.ui.views.shops package com.habitrpg.android.habitica.ui.views.shops
import android.content.Context import android.content.Context
import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import com.habitrpg.android.habitica.databinding.DialogPurchaseCustomizationBinding import com.habitrpg.android.habitica.databinding.DialogPurchaseCustomizationBinding
import com.habitrpg.android.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.ui.views.PixelArtView
class PurchaseDialogCustomizationContent(context: Context) : PurchaseDialogContent(context) { class PurchaseDialogCustomizationContent(context: Context) : PurchaseDialogContent(context) {
val binding = DialogPurchaseCustomizationBinding.inflate(context.layoutInflater, this) val binding = DialogPurchaseCustomizationBinding.inflate(context.layoutInflater, this)
override val imageView: ImageView override val imageView: PixelArtView
get() = binding.imageView get() = binding.imageView
override val titleTextView: TextView override val titleTextView: TextView
get() = binding.titleTextView get() = binding.titleTextView

View file

@ -1,7 +1,6 @@
package com.habitrpg.android.habitica.ui.views.shops package com.habitrpg.android.habitica.ui.views.shops
import android.content.Context import android.content.Context
import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import com.google.android.flexbox.FlexboxLayout import com.google.android.flexbox.FlexboxLayout
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
@ -10,11 +9,12 @@ import com.habitrpg.android.habitica.extensions.dpToPx
import com.habitrpg.android.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.models.shops.ShopItem import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.android.habitica.ui.helpers.loadImage import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.PixelArtView
class PurchaseDialogCustomizationSetContent(context: Context) : PurchaseDialogContent(context) { class PurchaseDialogCustomizationSetContent(context: Context) : PurchaseDialogContent(context) {
val binding = DialogPurchaseCustomizationsetBinding.inflate(context.layoutInflater, this) val binding = DialogPurchaseCustomizationsetBinding.inflate(context.layoutInflater, this)
override val imageView: ImageView override val imageView: PixelArtView
get() = ImageView(context) get() = PixelArtView(context)
override val titleTextView: TextView override val titleTextView: TextView
get() = binding.titleTextView get() = binding.titleTextView
@ -22,7 +22,7 @@ class PurchaseDialogCustomizationSetContent(context: Context) : PurchaseDialogCo
titleTextView.text = item.text titleTextView.text = item.text
binding.imageViewWrapper.removeAllViews() binding.imageViewWrapper.removeAllViews()
item.setImageNames.forEach { item.setImageNames.forEach {
val imageView = ImageView(context) val imageView = PixelArtView(context)
imageView.setBackgroundResource(R.drawable.layout_rounded_bg_window) imageView.setBackgroundResource(R.drawable.layout_rounded_bg_window)
imageView.loadImage(it) imageView.loadImage(it)
imageView.layoutParams = FlexboxLayout.LayoutParams(76.dpToPx(context), 76.dpToPx(context)) imageView.layoutParams = FlexboxLayout.LayoutParams(76.dpToPx(context), 76.dpToPx(context))

View file

@ -9,10 +9,11 @@ import com.habitrpg.android.habitica.databinding.DialogPurchaseContentGearBindin
import com.habitrpg.android.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.models.inventory.Equipment import com.habitrpg.android.habitica.models.inventory.Equipment
import com.habitrpg.android.habitica.models.shops.ShopItem import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.android.habitica.ui.views.PixelArtView
internal class PurchaseDialogGearContent(context: Context) : PurchaseDialogContent(context) { internal class PurchaseDialogGearContent(context: Context) : PurchaseDialogContent(context) {
val binding = DialogPurchaseContentGearBinding.inflate(context.layoutInflater, this) val binding = DialogPurchaseContentGearBinding.inflate(context.layoutInflater, this)
override val imageView: ImageView override val imageView: PixelArtView
get() = binding.imageView get() = binding.imageView
override val titleTextView: TextView override val titleTextView: TextView
get() = binding.titleTextView get() = binding.titleTextView

View file

@ -8,10 +8,11 @@ import com.habitrpg.android.habitica.extensions.asDrawable
import com.habitrpg.android.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.models.shops.ShopItem import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.PixelArtView
internal class PurchaseDialogGemsContent(context: Context) : PurchaseDialogContent(context) { internal class PurchaseDialogGemsContent(context: Context) : PurchaseDialogContent(context) {
internal val binding = DialogPurchaseGemsBinding.inflate(context.layoutInflater, this) internal val binding = DialogPurchaseGemsBinding.inflate(context.layoutInflater, this)
override val imageView: ImageView override val imageView: PixelArtView
get() = binding.imageView get() = binding.imageView
override val titleTextView: TextView override val titleTextView: TextView
get() = binding.titleTextView get() = binding.titleTextView

View file

@ -1,15 +1,15 @@
package com.habitrpg.android.habitica.ui.views.shops package com.habitrpg.android.habitica.ui.views.shops
import android.content.Context import android.content.Context
import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import com.habitrpg.android.habitica.databinding.DialogPurchaseContentItemBinding import com.habitrpg.android.habitica.databinding.DialogPurchaseContentItemBinding
import com.habitrpg.android.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.models.shops.ShopItem import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.android.habitica.ui.views.PixelArtView
class PurchaseDialogItemContent(context: Context) : PurchaseDialogContent(context) { class PurchaseDialogItemContent(context: Context) : PurchaseDialogContent(context) {
private val binding = DialogPurchaseContentItemBinding.inflate(context.layoutInflater, this) private val binding = DialogPurchaseContentItemBinding.inflate(context.layoutInflater, this)
override val imageView: ImageView override val imageView: PixelArtView
get() = binding.imageView get() = binding.imageView
override val titleTextView: TextView override val titleTextView: TextView
get() = binding.titleTextView get() = binding.titleTextView

View file

@ -12,12 +12,13 @@ import com.habitrpg.android.habitica.databinding.DialogPurchaseContentQuestBindi
import com.habitrpg.android.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.models.inventory.QuestContent import com.habitrpg.android.habitica.models.inventory.QuestContent
import com.habitrpg.android.habitica.models.inventory.QuestDropItem import com.habitrpg.android.habitica.models.inventory.QuestDropItem
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.PixelArtView
class PurchaseDialogQuestContent(context: Context) : PurchaseDialogContent(context) { class PurchaseDialogQuestContent(context: Context) : PurchaseDialogContent(context) {
private val binding = DialogPurchaseContentQuestBinding.inflate(context.layoutInflater, this) private val binding = DialogPurchaseContentQuestBinding.inflate(context.layoutInflater, this)
override val imageView: ImageView override val imageView: PixelArtView
get() = binding.imageView get() = binding.imageView
override val titleTextView: TextView override val titleTextView: TextView
get() = binding.titleTextView get() = binding.titleTextView
@ -91,9 +92,9 @@ class PurchaseDialogQuestContent(context: Context) : PurchaseDialogContent(conte
containerView: ViewGroup? containerView: ViewGroup?
) { ) {
val view = inflater?.inflate(R.layout.row_quest_reward, containerView, false) as? ViewGroup val view = inflater?.inflate(R.layout.row_quest_reward, containerView, false) as? ViewGroup
val imageView = view?.findViewById(R.id.imageView) as? ImageView val imageView = view?.findViewById(R.id.imageView) as? PixelArtView
val titleTextView = view?.findViewById(R.id.titleTextView) as? TextView val titleTextView = view?.findViewById(R.id.titleTextView) as? TextView
DataBindingUtils.loadImage(imageView, item.imageName) imageView?.loadImage(item.imageName)
if (item.count > 1) { if (item.count > 1) {
titleTextView?.text = context.getString(R.string.quest_reward_count, item.text, item.count) titleTextView?.text = context.getString(R.string.quest_reward_count, item.text, item.count)
} else { } else {

View file

@ -6,11 +6,10 @@ import android.graphics.RectF
import android.util.AttributeSet import android.util.AttributeSet
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.widget.ImageView
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.TextView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.QuestCollectBinding
import com.habitrpg.android.habitica.databinding.QuestProgressOldBinding import com.habitrpg.android.habitica.databinding.QuestProgressOldBinding
import com.habitrpg.android.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.extensions.setScaledPadding import com.habitrpg.android.habitica.extensions.setScaledPadding
@ -18,10 +17,9 @@ import com.habitrpg.android.habitica.models.inventory.QuestContent
import com.habitrpg.android.habitica.models.inventory.QuestProgress import com.habitrpg.android.habitica.models.inventory.QuestProgress
import com.habitrpg.android.habitica.models.inventory.QuestProgressCollect import com.habitrpg.android.habitica.models.inventory.QuestProgressCollect
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.views.HabiticaIcons import com.habitrpg.android.habitica.ui.views.HabiticaIcons
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.ValueBar
class OldQuestProgressView : LinearLayout { class OldQuestProgressView : LinearLayout {
private val binding = QuestProgressOldBinding.inflate(context.layoutInflater, this) private val binding = QuestProgressOldBinding.inflate(context.layoutInflater, this)
@ -95,15 +93,10 @@ class OldQuestProgressView : LinearLayout {
val inflater = LayoutInflater.from(context) val inflater = LayoutInflater.from(context)
for (collect in progress.collect ?: emptyList<QuestProgressCollect>()) { for (collect in progress.collect ?: emptyList<QuestProgressCollect>()) {
val contentCollect = quest.getCollectWithKey(collect.key) ?: continue val contentCollect = quest.getCollectWithKey(collect.key) ?: continue
val view = inflater.inflate(R.layout.quest_collect, binding.collectionContainer, false) val collectBinding = QuestCollectBinding.inflate(inflater, binding.collectionContainer, true)
val iconView = view.findViewById(R.id.icon_view) as? ImageView collectBinding.iconView.loadImage("quest_" + quest.key + "_" + collect.key)
val nameView = view.findViewById(R.id.name_view) as? TextView collectBinding.nameView.text = contentCollect.text
val valueView = view.findViewById(R.id.value_view) as? ValueBar collectBinding.valueView.set(collect.count.toDouble(), contentCollect.count.toDouble())
DataBindingUtils.loadImage(iconView, "quest_" + quest.key + "_" + collect.key)
nameView?.text = contentCollect.text
valueView?.set(collect.count.toDouble(), contentCollect.count.toDouble())
binding.collectionContainer.addView(view)
} }
} }
} }

View file

@ -12,12 +12,12 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ImageView import android.widget.ImageView
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.TextView
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.content.edit import androidx.core.content.edit
import androidx.core.graphics.drawable.toBitmap import androidx.core.graphics.drawable.toBitmap
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.QuestCollectBinding
import com.habitrpg.android.habitica.databinding.QuestProgressBinding import com.habitrpg.android.habitica.databinding.QuestProgressBinding
import com.habitrpg.android.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.helpers.RxErrorHandler import com.habitrpg.android.habitica.helpers.RxErrorHandler
@ -26,11 +26,11 @@ import com.habitrpg.android.habitica.models.inventory.QuestContent
import com.habitrpg.android.habitica.models.inventory.QuestProgressCollect import com.habitrpg.android.habitica.models.inventory.QuestProgressCollect
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.helpers.setMarkdown import com.habitrpg.android.habitica.ui.helpers.setMarkdown
import com.habitrpg.android.habitica.ui.views.HabiticaIcons import com.habitrpg.android.habitica.ui.views.HabiticaIcons
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.NPCBannerView import com.habitrpg.android.habitica.ui.views.NPCBannerView
import com.habitrpg.android.habitica.ui.views.ValueBar
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.core.Observable
@ -148,8 +148,8 @@ class QuestProgressView : LinearLayout {
} }
} }
binding.questDescription.setMarkdown(quest.notes) binding.questDescription.setMarkdown(quest.notes)
DataBindingUtils.loadImage(binding.questImageView, "quest_" + quest.key, "gif") binding.questImageView.loadImage("quest_" + quest.key, "gif")
DataBindingUtils.loadImage(binding.questFlourishesImageView, "quest_" + quest.key + "_flourishes") binding.questFlourishesImageView.loadImage("quest_" + quest.key + "_flourishes")
val lightColor = quest.colors?.lightColor val lightColor = quest.colors?.lightColor
if (lightColor != null) { if (lightColor != null) {
binding.questDescriptionSection.separatorColor = lightColor binding.questDescriptionSection.separatorColor = lightColor
@ -253,15 +253,10 @@ class QuestProgressView : LinearLayout {
val inflater = LayoutInflater.from(context) val inflater = LayoutInflater.from(context)
for (collect in collection) { for (collect in collection) {
val contentCollect = quest.getCollectWithKey(collect.key) ?: continue val contentCollect = quest.getCollectWithKey(collect.key) ?: continue
val view = inflater.inflate(R.layout.quest_collect, binding.collectionContainer, false) val collectBinding = QuestCollectBinding.inflate(inflater, binding.collectionContainer, true)
val iconView: ImageView = view.findViewById(R.id.icon_view) collectBinding.iconView.loadImage("quest_" + quest.key + "_" + collect.key)
val nameView: TextView = view.findViewById(R.id.name_view) collectBinding.nameView.text = contentCollect.text
val valueView: ValueBar = view.findViewById(R.id.value_view) collectBinding.valueView.set(collect.count.toDouble(), contentCollect.count.toDouble())
DataBindingUtils.loadImage(iconView, "quest_" + quest.key + "_" + collect.key)
nameView.text = contentCollect.text
valueView.set(collect.count.toDouble(), contentCollect.count.toDouble())
binding.collectionContainer.addView(view)
} }
} }
@ -289,7 +284,7 @@ class QuestProgressView : LinearLayout {
private fun showQuestImage() { private fun showQuestImage() {
binding.questImageWrapper.visibility = View.VISIBLE binding.questImageWrapper.visibility = View.VISIBLE
DataBindingUtils.loadImage(binding.questImageView, "quest_" + quest?.key) binding.questImageView.loadImage("quest_" + quest?.key)
preferences?.edit { putBoolean("boss_art_collapsed", false) } preferences?.edit { putBoolean("boss_art_collapsed", false) }
updateCaretImage() updateCaretImage()
} }