diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/members/Member.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/members/Member.kt index 81277cee1..a9781520a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/members/Member.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/members/Member.kt @@ -101,9 +101,9 @@ open class Member : RealmObject(), Avatar { val petsFoundCount: Int get() = this.items?.pets?.size ?: 0 - val mountsTamedCount: Int get() = this.items?.mounts?.size ?: 0 + val username: String? get() = authentication?.localAuthentication?.username val formattedUsername: String? diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt index 92bb0f0f5..756f29c87 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt @@ -27,13 +27,13 @@ import com.habitrpg.android.habitica.models.user.Stats import com.habitrpg.android.habitica.ui.AvatarView import com.habitrpg.android.habitica.ui.AvatarWithBarsViewModel import com.habitrpg.android.habitica.ui.adapter.social.AchievementProfileAdapter -import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.MarkdownParser import com.habitrpg.android.habitica.ui.helpers.bindView import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard -import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog +import com.habitrpg.android.habitica.ui.helpers.loadImage import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType +import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import io.reactivex.Flowable import io.reactivex.functions.Consumer import io.realm.RealmResults @@ -213,8 +213,8 @@ class FullProfileActivity : BaseActivity() { petsFoundCount.text = user.petsFoundCount.toString() mountsTamedCount.text = user.mountsTamedCount.toString() - DataBindingUtils.loadImage(this.currentPetDrawee, "Pet-" + user.currentPet) - DataBindingUtils.loadImage(this.currentMountDrawee, "Mount_Icon_" + user.currentMount) + currentPetDrawee.loadImage("Pet-" + user.currentPet) + currentMountDrawee.loadImage("Mount_Icon_" + user.currentMount) } // endregion diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/DataBindingUtils.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/DataBindingUtils.kt index 38d82621a..44998cad1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/DataBindingUtils.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/DataBindingUtils.kt @@ -2,13 +2,13 @@ package com.habitrpg.android.habitica.ui.helpers import android.graphics.Bitmap import android.graphics.PorterDuff -import androidx.core.content.ContextCompat -import androidx.core.content.res.ResourcesCompat import android.view.View import android.view.animation.Animation import android.view.animation.Transformation import android.widget.LinearLayout import android.widget.TextView +import androidx.core.content.ContextCompat +import androidx.core.content.res.ResourcesCompat import androidx.core.net.toUri import com.facebook.common.executors.CallerThreadExecutor import com.facebook.common.references.CloseableReference @@ -20,6 +20,11 @@ import com.facebook.imagepipeline.image.CloseableImage import com.facebook.imagepipeline.request.ImageRequestBuilder import com.habitrpg.android.habitica.R + +fun SimpleDraweeView.loadImage(imageName: String, imageFormat: String = "png") { + DataBindingUtils.loadImage(this, imageName, imageFormat) +} + object DataBindingUtils { fun loadImage(view: SimpleDraweeView?, imageName: String) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/MemberSerialization.java b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/MemberSerialization.java deleted file mode 100644 index b67ca27a8..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/MemberSerialization.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.habitrpg.android.habitica.utils; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.habitrpg.android.habitica.models.inventory.Quest; -import com.habitrpg.android.habitica.models.members.Member; -import com.habitrpg.android.habitica.models.members.MemberPreferences; -import com.habitrpg.android.habitica.models.social.UserParty; -import com.habitrpg.android.habitica.models.user.Authentication; -import com.habitrpg.android.habitica.models.user.ContributorInfo; -import com.habitrpg.android.habitica.models.user.Inbox; -import com.habitrpg.android.habitica.models.user.Items; -import com.habitrpg.android.habitica.models.user.Outfit; -import com.habitrpg.android.habitica.models.user.Profile; -import com.habitrpg.android.habitica.models.user.Stats; - -import java.lang.reflect.Type; - -import io.realm.Realm; - -public class MemberSerialization implements JsonDeserializer { - @Override - public Member deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - JsonObject obj = json.getAsJsonObject(); - String id = obj.get("_id").getAsString(); - - Realm realm = Realm.getDefaultInstance(); - Member member = realm.where(Member.class).equalTo("id", id).findFirst(); - if (member == null) { - member = new Member(); - member.setId(id); - } else { - member = realm.copyFromRealm(member); - } - - if (obj.has("stats")) { - member.setStats(context.deserialize(obj.get("stats"), Stats.class)); - } - if (obj.has("inbox")) { - member.setInbox(context.deserialize(obj.get("inbox"), Inbox.class)); - } - if (obj.has("preferences")) { - member.setPreferences(context.deserialize(obj.get("preferences"), MemberPreferences.class)); - } - if (obj.has("profile")) { - member.setProfile(context.deserialize(obj.get("profile"), Profile.class)); - } - if (obj.has("party")) { - member.setParty(context.deserialize(obj.get("party"), UserParty.class)); - if (member.getParty() != null && member.getParty().getQuest() != null) { - member.getParty().getQuest().setId(member.getId()); - if (!obj.get("party").getAsJsonObject().get("quest").getAsJsonObject().has("RSVPNeeded")) { - Quest quest = realm.where(Quest.class).equalTo("id", member.getId()).findFirst(); - if (quest != null && quest.isValid()) { - member.getParty().getQuest().setRSVPNeeded(quest.getRSVPNeeded()); - } - } - } - } - - if (obj.has("items")) { - JsonObject items = obj.getAsJsonObject("items"); - if (items.has("currentMount") && items.get("currentMount").isJsonPrimitive()) { - member.setCurrentMount(items.get("currentMount").getAsString()); - } - if (items.has("currentPet") && items.get("currentPet").isJsonPrimitive()) { - member.setCurrentPet(items.get("currentPet").getAsString()); - } - if (items.has("gear")) { - JsonObject gear = items.getAsJsonObject("gear"); - if (gear.has("costume")) { - member.setCostume(context.deserialize(gear.get("costume"), Outfit.class)); - } - if (gear.has("equipped")) { - member.setEquipped(context.deserialize(gear.get("equipped"), Outfit.class)); - } - } - } - if (obj.has("contributor")) { - member.setContributor(context.deserialize(obj.get("contributor"), ContributorInfo.class)); - } - if (obj.has("auth")) { - member.setAuthentication(context.deserialize(obj.get("auth"), Authentication.class)); - } - if (obj.has("loginIncentives")) { - member.setLoginIncentives(obj.get("loginIncentives").getAsInt()); - } - - /* - TODO: Fix ownership storage - Right now ownership is a boolean field on the item/pet/mount/equipment itself. - Storing this data for the user can overwrite the ownership for the logged in user. The fix - is to properly store ownership of these things in a different object, similar to how the - iOS app handles it. - if (obj.has("items")) { - member.setItems(context.deserialize(obj.get("items"), Items.class)); - } - */ - member.setId(member.getId()); - - realm.close(); - return member; - } -} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/MemberSerialization.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/MemberSerialization.kt new file mode 100644 index 000000000..fcca6adde --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/MemberSerialization.kt @@ -0,0 +1,72 @@ +package com.habitrpg.android.habitica.utils + +import com.google.gson.JsonDeserializationContext +import com.google.gson.JsonDeserializer +import com.google.gson.JsonElement +import com.google.gson.JsonParseException +import com.habitrpg.android.habitica.models.inventory.Quest +import com.habitrpg.android.habitica.models.members.Member +import com.habitrpg.android.habitica.models.members.MemberPreferences +import com.habitrpg.android.habitica.models.social.UserParty +import com.habitrpg.android.habitica.models.user.* +import io.realm.Realm +import java.lang.reflect.Type + +class MemberSerialization : JsonDeserializer { + @Throws(JsonParseException::class) + override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): Member { + val obj = json.asJsonObject + val id = obj.get("_id").asString + + val realm = Realm.getDefaultInstance() + var member = realm.where(Member::class.java).equalTo("id", id).findFirst() ?: Member() + if (member.id == null) { + member.id = id + } else { + member = realm.copyFromRealm(member) + } + + if (obj.has("stats")) { + member.stats = context.deserialize(obj.get("stats"), Stats::class.java) + } + if (obj.has("inbox")) { + member.inbox = context.deserialize(obj.get("inbox"), Inbox::class.java) + } + if (obj.has("preferences")) { + member.preferences = context.deserialize(obj.get("preferences"), MemberPreferences::class.java) + } + if (obj.has("profile")) { + member.profile = context.deserialize(obj.get("profile"), Profile::class.java) + } + if (obj.has("party")) { + member.party = context.deserialize(obj.get("party"), UserParty::class.java) + if (member.party != null && member.party?.quest != null) { + member.party?.quest?.id = member.id + if (!obj.get("party").asJsonObject.get("quest").asJsonObject.has("RSVPNeeded")) { + val quest = realm.where(Quest::class.java).equalTo("id", member.id).findFirst() + if (quest != null && quest.isValid) { + member.party?.quest?.RSVPNeeded = quest.RSVPNeeded + } + } + } + } + + if (obj.has("items")) { + member.items = context.deserialize(obj.get("items"), Items::class.java) + } + if (obj.has("contributor")) { + member.contributor = context.deserialize(obj.get("contributor"), ContributorInfo::class.java) + } + if (obj.has("auth")) { + member.authentication = context.deserialize(obj.get("auth"), Authentication::class.java) + } + if (obj.has("loginIncentives")) { + member.loginIncentives = obj.get("loginIncentives").asInt + } + + member.id = member.id + + realm.close() + return member + } +}