From ced7d44de762432c7ac86ce3b2d978291dd94e74 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 28 Mar 2016 18:43:15 +0200 Subject: [PATCH] Display inventory items --- Habitica/assets/migrations/Habitica/16.sql | 1 + Habitica/build.gradle | 1 - Habitica/res/layout/animal_overview_item.xml | 32 ++++ Habitica/res/layout/fragment_group_info.xml | 2 +- Habitica/res/layout/gear_list_item.xml | 2 +- Habitica/res/layout/item_image_row.xml | 2 +- Habitica/res/layout/item_item.xml | 33 +++- Habitica/res/layout/menu_bottom_sheet.xml | 6 + .../res/layout/menu_bottom_sheet_item.xml | 10 ++ Habitica/res/values/dimens.xml | 1 + Habitica/res/values/strings.xml | 2 + Habitica/res/values/styles.xml | 2 +- .../habitrpg/android/habitica/APIHelper.java | 32 +++- .../android/habitica/ContentCache.java | 10 +- .../android/habitica/HabitDatabase.java | 2 +- .../habitica/ui/MainDrawerBuilder.java | 7 +- .../inventory/ItemRecyclerAdapter.java | 113 +++++++++++++ .../inventory/MountDetailRecyclerAdapter.java | 110 ++++++++++++ .../inventory/PetDetailRecyclerAdapter.java | 113 +++++++++++++ .../inventory/StableRecyclerAdapter.java | 133 +++++++++++++++ .../QuestCollectRecyclerViewAdapter.java | 4 +- .../MountDetailRecyclerFragment.java | 114 +++++++++++++ .../inventory/PetDetailRecyclerFragment.java | 117 +++++++++++++ .../fragments/inventory/StableFragment.java | 86 ++++++++++ .../inventory/StableRecyclerFragment.java | 156 ++++++++++++++++++ .../inventory/items/ItemRecyclerFragment.java | 98 +++++++++++ .../inventory/items/ItemsFragment.java | 97 +++++++++++ .../social/GroupInformationFragment.java | 2 +- .../fragments/social/party/PartyFragment.java | 2 +- .../lib/models/ContentResult.java | 22 ++- .../habitrpgwrapper/lib/models/Items.java | 73 +++++++- .../habitrpgwrapper/lib/models/SkillList.java | 8 - .../lib/models/inventory/Animal.java | 48 ++++++ .../lib/models/inventory/Egg.java | 49 ++++++ .../lib/models/inventory/Food.java | 39 +++++ .../lib/models/inventory/HatchingPotion.java | 28 ++++ .../lib/models/inventory/Item.java | 60 +++++++ .../lib/models/inventory/Mount.java | 22 +++ .../lib/models/inventory/Pet.java | 23 +++ .../models/{ => inventory}/QuestContent.java | 65 +++++--- .../lib/utils/ContentDeserializer.java | 110 ++++++++++++ .../lib/utils/CustomizationDeserializer.java | 1 - .../lib/utils/EggListDeserializer.java | 70 ++++++++ .../utils/FAQArticleListDeserilializer.java | 2 - .../lib/utils/FoodListDeserializer.java | 71 ++++++++ .../utils/HatchingPotionListDeserializer.java | 70 ++++++++ .../lib/utils/ItemDataListDeserializer.java | 1 - .../lib/utils/MountListDeserializer.java | 32 ++++ .../lib/utils/PetListDeserializer.java | 34 ++++ .../lib/utils/QuestListDeserializer.java | 75 +++++++++ .../lib/utils/SkillDeserializer.java | 11 +- 51 files changed, 2132 insertions(+), 72 deletions(-) create mode 100644 Habitica/assets/migrations/Habitica/16.sql create mode 100644 Habitica/res/layout/animal_overview_item.xml create mode 100644 Habitica/res/layout/menu_bottom_sheet.xml create mode 100644 Habitica/res/layout/menu_bottom_sheet_item.xml create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.java create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/MountDetailRecyclerAdapter.java create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/PetDetailRecyclerAdapter.java create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.java create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/MountDetailRecyclerFragment.java create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/PetDetailRecyclerFragment.java create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/StableFragment.java create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/StableRecyclerFragment.java create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.java create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.java delete mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/SkillList.java create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Animal.java create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Egg.java create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Food.java create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/HatchingPotion.java create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Item.java create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Mount.java create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Pet.java rename Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/{ => inventory}/QuestContent.java (65%) create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ContentDeserializer.java create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/EggListDeserializer.java create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/FoodListDeserializer.java create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/HatchingPotionListDeserializer.java create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/MountListDeserializer.java create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/PetListDeserializer.java create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/QuestListDeserializer.java diff --git a/Habitica/assets/migrations/Habitica/16.sql b/Habitica/assets/migrations/Habitica/16.sql new file mode 100644 index 000000000..dba2e770a --- /dev/null +++ b/Habitica/assets/migrations/Habitica/16.sql @@ -0,0 +1 @@ +ALTER TABLE QuestContent ADD COLUMN 'owned' INTEGER DEFAULT 0; \ No newline at end of file diff --git a/Habitica/build.gradle b/Habitica/build.gradle index 9cb3a8f93..7dbb5ce5c 100644 --- a/Habitica/build.gradle +++ b/Habitica/build.gradle @@ -52,7 +52,6 @@ dependencies { compile('com.mikepenz:materialdrawer:5.0.9@aar') { transitive = true } - compile 'com.mikepenz:google-material-typeface:2.2.0.1.original@aar' compile 'com.android.support:appcompat-v7:23.2.1' compile 'com.android.support:design:23.2.1' diff --git a/Habitica/res/layout/animal_overview_item.xml b/Habitica/res/layout/animal_overview_item.xml new file mode 100644 index 000000000..47a35b166 --- /dev/null +++ b/Habitica/res/layout/animal_overview_item.xml @@ -0,0 +1,32 @@ + + + + + + + + \ No newline at end of file diff --git a/Habitica/res/layout/fragment_group_info.xml b/Habitica/res/layout/fragment_group_info.xml index a041aabd0..dc88f0816 100644 --- a/Habitica/res/layout/fragment_group_info.xml +++ b/Habitica/res/layout/fragment_group_info.xml @@ -5,7 +5,7 @@ - + diff --git a/Habitica/res/layout/gear_list_item.xml b/Habitica/res/layout/gear_list_item.xml index 2cfe510e0..a39500c7c 100644 --- a/Habitica/res/layout/gear_list_item.xml +++ b/Habitica/res/layout/gear_list_item.xml @@ -2,7 +2,7 @@ - + + + + + + + - \ No newline at end of file + + + + \ No newline at end of file diff --git a/Habitica/res/layout/menu_bottom_sheet.xml b/Habitica/res/layout/menu_bottom_sheet.xml new file mode 100644 index 000000000..3509b8411 --- /dev/null +++ b/Habitica/res/layout/menu_bottom_sheet.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/Habitica/res/layout/menu_bottom_sheet_item.xml b/Habitica/res/layout/menu_bottom_sheet_item.xml new file mode 100644 index 000000000..a751f76bb --- /dev/null +++ b/Habitica/res/layout/menu_bottom_sheet_item.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/Habitica/res/values/dimens.xml b/Habitica/res/values/dimens.xml index 398284566..c5f964bed 100644 --- a/Habitica/res/values/dimens.xml +++ b/Habitica/res/values/dimens.xml @@ -66,4 +66,5 @@ 2dp 12sp 4dp + 120dp \ No newline at end of file diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 0d324f4a6..23e1c4c9a 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -277,6 +277,8 @@ To start, which parts of your life do you want to improve? Hatching Potions Food Quests + Pets + Mounts You found a piece of rare Equipment in the Armoire: %s! Awesome! You rummage in the Armoire and find %s %s. What\'s that doing in here? diff --git a/Habitica/res/values/styles.xml b/Habitica/res/values/styles.xml index dd5383d85..388fe0de6 100644 --- a/Habitica/res/values/styles.xml +++ b/Habitica/res/values/styles.xml @@ -85,7 +85,7 @@ @dimen/card_margin - diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java b/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java index 9c0d954d8..510697ec5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java @@ -23,30 +23,44 @@ import com.magicmicky.habitrpgwrapper.lib.api.ApiService; import com.magicmicky.habitrpgwrapper.lib.api.InAppPurchasesApiService; import com.magicmicky.habitrpgwrapper.lib.api.Server; import com.magicmicky.habitrpgwrapper.lib.api.TypeAdapter.TagsAdapter; +import com.magicmicky.habitrpgwrapper.lib.models.ContentResult; import com.magicmicky.habitrpgwrapper.lib.models.Customization; import com.magicmicky.habitrpgwrapper.lib.models.FAQArticle; import com.magicmicky.habitrpgwrapper.lib.models.Group; import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationRequest; import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationResult; import com.magicmicky.habitrpgwrapper.lib.models.Purchases; -import com.magicmicky.habitrpgwrapper.lib.models.SkillList; +import com.magicmicky.habitrpgwrapper.lib.models.Skill; import com.magicmicky.habitrpgwrapper.lib.models.TaskDirection; import com.magicmicky.habitrpgwrapper.lib.models.TutorialStep; import com.magicmicky.habitrpgwrapper.lib.models.UserAuth; import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse; import com.magicmicky.habitrpgwrapper.lib.models.UserAuthSocial; import com.magicmicky.habitrpgwrapper.lib.models.UserAuthSocialTokens; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Egg; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Food; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.HatchingPotion; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Mount; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem; import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData; import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag; import com.magicmicky.habitrpgwrapper.lib.utils.ChecklistItemSerializer; +import com.magicmicky.habitrpgwrapper.lib.utils.ContentDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.CustomizationDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.DateDeserializer; +import com.magicmicky.habitrpgwrapper.lib.utils.EggListDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.FAQArticleListDeserilializer; +import com.magicmicky.habitrpgwrapper.lib.utils.FoodListDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.GroupSerialization; +import com.magicmicky.habitrpgwrapper.lib.utils.HatchingPotionListDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.ItemDataListDeserializer; +import com.magicmicky.habitrpgwrapper.lib.utils.MountListDeserializer; +import com.magicmicky.habitrpgwrapper.lib.utils.PetListDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.PurchasedDeserializer; +import com.magicmicky.habitrpgwrapper.lib.utils.QuestListDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.SkillDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.TaskListDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.TaskSerializer; @@ -97,11 +111,18 @@ public class APIHelper implements ErrorHandler, Profiler { Type taskClassListType = new TypeToken>() {}.getType(); + Type skillListType = new TypeToken>() {}.getType(); Type checklistType = new TypeToken>() {}.getType(); Type customizationListType = new TypeToken>() {}.getType(); Type tutorialStepListType = new TypeToken>() {}.getType(); Type faqArticleListType = new TypeToken>() {}.getType(); Type itemDataListType = new TypeToken>() {}.getType(); + Type eggListType = new TypeToken>() {}.getType(); + Type foodListType = new TypeToken>() {}.getType(); + Type hatchingPotionListType = new TypeToken>() {}.getType(); + Type questContentListType = new TypeToken>() {}.getType(); + Type petListType = new TypeToken>() {}.getType(); + Type mountListType = new TypeToken>() {}.getType(); //Exclusion stratety needed for DBFlow https://github.com/Raizlabs/DBFlow/issues/121 Gson gson = new GsonBuilder() @@ -120,7 +141,7 @@ public class APIHelper implements ErrorHandler, Profiler { .registerTypeAdapter(taskTagClassListType, new TagsAdapter()) .registerTypeAdapter(Boolean.class, booleanAsIntAdapter) .registerTypeAdapter(boolean.class, booleanAsIntAdapter) - .registerTypeAdapter(SkillList.class, new SkillDeserializer()) + .registerTypeAdapter(skillListType, new SkillDeserializer()) .registerTypeAdapter(ChecklistItem.class, new ChecklistItemSerializer()) .registerTypeAdapter(taskClassListType, new TaskListDeserializer()) .registerTypeAdapter(Purchases.class, new PurchasedDeserializer()) @@ -130,7 +151,14 @@ public class APIHelper implements ErrorHandler, Profiler { .registerTypeAdapter(Group.class, new GroupSerialization()) .registerTypeAdapter(Date.class, new DateDeserializer()) .registerTypeAdapter(itemDataListType, new ItemDataListDeserializer()) + .registerTypeAdapter(eggListType, new EggListDeserializer()) + .registerTypeAdapter(foodListType, new FoodListDeserializer()) + .registerTypeAdapter(hatchingPotionListType, new HatchingPotionListDeserializer()) + .registerTypeAdapter(questContentListType, new QuestListDeserializer()) + .registerTypeAdapter(petListType, new PetListDeserializer()) + .registerTypeAdapter(mountListType, new MountListDeserializer()) .registerTypeAdapter(Task.class, new TaskSerializer()) + .registerTypeAdapter(ContentResult.class, new ContentDeserializer()) .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") .create(); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ContentCache.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ContentCache.java index f9b51f081..61c2e8a97 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ContentCache.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ContentCache.java @@ -3,7 +3,7 @@ package com.habitrpg.android.habitica; import com.magicmicky.habitrpgwrapper.lib.api.ApiService; import com.magicmicky.habitrpgwrapper.lib.models.ContentResult; import com.magicmicky.habitrpgwrapper.lib.models.QuestBoss; -import com.magicmicky.habitrpgwrapper.lib.models.QuestContent; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData; import com.raizlabs.android.dbflow.sql.builder.Condition; import com.raizlabs.android.dbflow.sql.language.Select; @@ -88,10 +88,10 @@ public class ContentCache { public void success(ContentResult contentResult, Response response) { switch (typeOfSearch) { case "quest": { - Collection questList = contentResult.quests.values(); + Collection questList = contentResult.quests; for (QuestContent quest : questList) { - if (quest.key == searchKey) { + if (quest.getKey() == searchKey) { gotEntry.GotObject((T) quest); } } @@ -170,13 +170,13 @@ public class ContentCache { private void saveContentResultToDb(ContentResult contentResult) { - Collection questList = contentResult.quests.values(); + Collection questList = contentResult.quests; for (QuestContent quest : questList) { quest.save(); if (quest.boss != null) { - quest.boss.key = quest.key; + quest.boss.key = quest.getKey(); quest.boss.async().save(); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/HabitDatabase.java b/Habitica/src/main/java/com/habitrpg/android/habitica/HabitDatabase.java index 30d428913..47ae24f02 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/HabitDatabase.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/HabitDatabase.java @@ -10,5 +10,5 @@ public class HabitDatabase { public static final String NAME = "Habitica"; - public static final int VERSION = 15; + public static final int VERSION = 17; } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java index cefd3dee6..793d5e7f1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/MainDrawerBuilder.java @@ -11,10 +11,10 @@ import com.habitrpg.android.habitica.ui.activities.MainActivity; import com.habitrpg.android.habitica.ui.activities.PrefsActivity; import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; import com.habitrpg.android.habitica.ui.fragments.GemsPurchaseFragment; -import com.habitrpg.android.habitica.ui.fragments.ItemsFragment; +import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemsFragment; import com.habitrpg.android.habitica.ui.fragments.NewsFragment; import com.habitrpg.android.habitica.ui.fragments.SkillsFragment; -import com.habitrpg.android.habitica.ui.fragments.StableFragment; +import com.habitrpg.android.habitica.ui.fragments.inventory.StableFragment; import com.habitrpg.android.habitica.ui.fragments.faq.FAQOverviewFragment; import com.habitrpg.android.habitica.ui.fragments.inventory.customization.AvatarOverviewFragment; import com.habitrpg.android.habitica.ui.fragments.inventory.equipment.EquipmentOverviewFragment; @@ -22,15 +22,12 @@ import com.habitrpg.android.habitica.ui.fragments.social.GuildsOverviewFragment; import com.habitrpg.android.habitica.ui.fragments.social.TavernFragment; import com.habitrpg.android.habitica.ui.fragments.social.party.PartyFragment; import com.habitrpg.android.habitica.ui.fragments.tasks.TasksFragment; -import com.mikepenz.google_material_typeface_library.GoogleMaterial; import com.mikepenz.materialdrawer.AccountHeader; import com.mikepenz.materialdrawer.AccountHeaderBuilder; import com.mikepenz.materialdrawer.Drawer; import com.mikepenz.materialdrawer.DrawerBuilder; -import com.mikepenz.materialdrawer.model.DividerDrawerItem; import com.mikepenz.materialdrawer.model.PrimaryDrawerItem; import com.mikepenz.materialdrawer.model.ProfileDrawerItem; -import com.mikepenz.materialdrawer.model.SectionDrawerItem; import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; import com.mikepenz.materialdrawer.model.interfaces.IProfile; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.java new file mode 100644 index 000000000..41e7c4496 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.java @@ -0,0 +1,113 @@ +package com.habitrpg.android.habitica.ui.adapter.inventory; + +import android.content.Context; +import android.content.res.Resources; +import android.databinding.DataBindingUtil; +import android.support.design.widget.BottomSheetDialog; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.databinding.ItemImageRowBinding; +import com.habitrpg.android.habitica.databinding.ItemItemBinding; +import com.habitrpg.android.habitica.events.commands.UseSkillCommand; +import com.magicmicky.habitrpgwrapper.lib.models.Group; +import com.magicmicky.habitrpgwrapper.lib.models.Quest; +import com.magicmicky.habitrpgwrapper.lib.models.Skill; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Egg; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Food; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.HatchingPotion; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Item; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; + +import org.greenrobot.eventbus.EventBus; +import org.w3c.dom.Text; + +import java.util.List; + +import butterknife.Bind; +import butterknife.ButterKnife; + +public class ItemRecyclerAdapter extends RecyclerView.Adapter { + + private List itemList; + + public Double mana; + + public Context context; + + public void setItemList(List itemList) { + this.itemList = itemList; + this.notifyDataSetChanged(); + } + + public void setMana(Double mana) { + this.mana = mana; + this.notifyDataSetChanged(); + } + + + @Override + public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.item_item, parent, false); + + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(ItemViewHolder holder, int position) { + holder.bind(this.itemList.get(position)); + } + + @Override + public int getItemCount() { + return itemList == null ? 0 : itemList.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { + Item item; + + Resources resources; + ItemItemBinding binding; + + public ItemViewHolder(View itemView) { + super(itemView); + + resources = itemView.getResources(); + + binding = DataBindingUtil.bind(itemView); + + itemView.setOnClickListener(this); + } + + public void bind(Item item) { + binding.setTitle(item.getText()); + if (item instanceof QuestContent) { + binding.setImageNamed("inventory_quest_scroll_"+item.getKey()); + } else { + String type = ""; + if (item instanceof Egg) { + type = "Egg"; + } else if (item instanceof Food) { + type = "Food"; + } else if (item instanceof HatchingPotion) { + type = "HatchingPotion"; + } + binding.setImageNamed("Pet_"+type+"_"+item.getKey()); + } + binding.setValue(item.getOwned().toString()); + } + + @Override + public void onClick(View v) { + + } + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/MountDetailRecyclerAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/MountDetailRecyclerAdapter.java new file mode 100644 index 000000000..7b9e95fe0 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/MountDetailRecyclerAdapter.java @@ -0,0 +1,110 @@ +package com.habitrpg.android.habitica.ui.adapter.inventory; + +import android.content.Context; +import android.content.res.Resources; +import android.support.v7.widget.CardView; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Mount; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; + +import java.util.HashMap; +import java.util.List; + +import butterknife.Bind; +import butterknife.ButterKnife; + +public class MountDetailRecyclerAdapter extends RecyclerView.Adapter { + + private List itemList; + private HashMap ownedMapping; + public String itemType; + + public Context context; + + public void setItemList(List itemList) { + this.itemList = itemList; + this.notifyDataSetChanged(); + } + + public void setOwnedMapping(HashMap map) { + this.ownedMapping = map; + this.notifyDataSetChanged(); + } + + @Override + public MountViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.animal_overview_item, parent, false); + + return new MountViewHolder(view); + } + + @Override + public void onBindViewHolder(MountViewHolder holder, int position) { + holder.bind(this.itemList.get(position)); + } + + @Override + public int getItemCount() { + return itemList == null ? 0 : itemList.size(); + } + + class MountViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { + Mount animal; + + @Bind(R.id.card_view) + CardView cardView; + + @Bind(R.id.imageView) + ImageView imageView; + + @Bind(R.id.titleTextView) + TextView titleView; + + @Bind(R.id.ownedTextView) + TextView ownedTextView; + + Resources resources; + + public MountViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + + resources = itemView.getResources(); + + itemView.setOnClickListener(this); + } + + public void bind(Mount item) { + titleView.setText(item.getColor()); + ownedTextView.setVisibility(View.GONE); + this.imageView.setAlpha(1.0f); + if (ownedMapping != null) { + if (ownedMapping.containsKey(item.getKey()) && ownedMapping.get(item.getKey())) { + DataBindingUtils.loadImage(this.imageView, "Mount_Icon_" + itemType + "-" + item.getColor()); + } else { + ownedTextView.setText(null); + DataBindingUtils.loadImage(this.imageView, "PixelPaw"); + this.imageView.setAlpha(0.4f); + } + } else { + DataBindingUtils.loadImage(this.imageView, "PixelPaw"); + this.imageView.setAlpha(0.4f); + } + } + + @Override + public void onClick(View v) { + + } + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/PetDetailRecyclerAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/PetDetailRecyclerAdapter.java new file mode 100644 index 000000000..18b41452e --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/PetDetailRecyclerAdapter.java @@ -0,0 +1,113 @@ +package com.habitrpg.android.habitica.ui.adapter.inventory; + +import android.content.Context; +import android.content.res.Resources; +import android.support.v7.widget.CardView; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Animal; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; + +import java.util.HashMap; +import java.util.List; + +import butterknife.Bind; +import butterknife.ButterKnife; + +public class PetDetailRecyclerAdapter extends RecyclerView.Adapter { + + private List itemList; + private HashMap ownedMapping; + public String itemType; + + public Context context; + + public void setItemList(List itemList) { + this.itemList = itemList; + this.notifyDataSetChanged(); + } + + public void setOwnedMapping(HashMap map) { + this.ownedMapping = map; + this.notifyDataSetChanged(); + } + + @Override + public PetViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.animal_overview_item, parent, false); + + return new PetViewHolder(view); + } + + @Override + public void onBindViewHolder(PetViewHolder holder, int position) { + holder.bind(this.itemList.get(position)); + } + + @Override + public int getItemCount() { + return itemList == null ? 0 : itemList.size(); + } + + class PetViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { + Pet animal; + + @Bind(R.id.card_view) + CardView cardView; + + @Bind(R.id.imageView) + ImageView imageView; + + @Bind(R.id.titleTextView) + TextView titleView; + + @Bind(R.id.ownedTextView) + TextView ownedTextView; + + Resources resources; + + public PetViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + + resources = itemView.getResources(); + + itemView.setOnClickListener(this); + } + + public void bind(Pet item) { + titleView.setText(item.getColor()); + ownedTextView.setVisibility(View.VISIBLE); + this.imageView.setAlpha(1.0f); + if (ownedMapping != null) { + if (ownedMapping.containsKey(item.getKey()) && ownedMapping.get(item.getKey()) > 0) { + this.ownedTextView.setText(ownedMapping.get(item.getKey()).toString()); + DataBindingUtils.loadImage(this.imageView, "Pet-" + itemType + "-" + item.getColor()); + } else { + ownedTextView.setVisibility(View.GONE); + ownedTextView.setText(null); + DataBindingUtils.loadImage(this.imageView, "PixelPaw"); + this.imageView.setAlpha(0.4f); + } + } else { + ownedTextView.setVisibility(View.GONE); + DataBindingUtils.loadImage(this.imageView, "PixelPaw"); + this.imageView.setAlpha(0.4f); + } + } + + @Override + public void onClick(View v) { + + } + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.java new file mode 100644 index 000000000..aeb7f636f --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.java @@ -0,0 +1,133 @@ +package com.habitrpg.android.habitica.ui.adapter.inventory; + +import android.content.res.Resources; +import android.support.v7.widget.CardView; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.activities.MainActivity; +import com.habitrpg.android.habitica.ui.fragments.inventory.MountDetailRecyclerFragment; +import com.habitrpg.android.habitica.ui.fragments.inventory.PetDetailRecyclerFragment; +import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Animal; + +import java.util.HashMap; +import java.util.List; + +import butterknife.Bind; +import butterknife.ButterKnife; + +public class StableRecyclerAdapter extends RecyclerView.Adapter { + + private List itemList; + private HashMap ownedMapping; + public String itemType; + + public MainActivity activity; + + public void setItemList(List itemList) { + this.itemList = itemList; + this.notifyDataSetChanged(); + } + + public void setOwnedMapping(HashMap map) { + this.ownedMapping = map; + this.notifyDataSetChanged(); + } + + @Override + public StableViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.animal_overview_item, parent, false); + + return new StableViewHolder(view); + } + + @Override + public void onBindViewHolder(StableViewHolder holder, int position) { + holder.bind(this.itemList.get(position)); + } + + @Override + public int getItemCount() { + return itemList == null ? 0 : itemList.size(); + } + + class StableViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { + Animal animal; + + @Bind(R.id.card_view) + CardView cardView; + + @Bind(R.id.imageView) + ImageView imageView; + + @Bind(R.id.titleTextView) + TextView titleView; + + @Bind(R.id.ownedTextView) + TextView ownedTextView; + + Resources resources; + + public StableViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + + resources = itemView.getResources(); + + itemView.setOnClickListener(this); + } + + public void bind(Animal item) { + this.animal = item; + titleView.setText(item.getAnimal()); + ownedTextView.setVisibility(View.VISIBLE); + this.imageView.setAlpha(1.0f); + if (ownedMapping != null) { + if (ownedMapping.containsKey(item.getAnimal()) && ownedMapping.get(item.getAnimal()) > 0) { + this.ownedTextView.setText(ownedMapping.get(item.getAnimal()).toString()); + if (itemType.equals("pets")) { + DataBindingUtils.loadImage(this.imageView, "Pet-" + item.getAnimal() + "-Base"); + } else { + DataBindingUtils.loadImage(this.imageView, "Mount_Icon_" + item.getAnimal() + "-Base"); + } + } else { + ownedTextView.setVisibility(View.GONE); + ownedTextView.setText(null); + DataBindingUtils.loadImage(this.imageView, "PixelPaw"); + this.imageView.setAlpha(0.4f); + } + } else { + ownedTextView.setVisibility(View.GONE); + DataBindingUtils.loadImage(this.imageView, "PixelPaw"); + this.imageView.setAlpha(0.4f); + } + } + + @Override + public void onClick(View v) { + if (animal != null) { + if (ownedMapping != null) { + if (ownedMapping.containsKey(animal.getAnimal()) && ownedMapping.get(animal.getAnimal()) > 0) { + if (itemType.equals("pets")) { + PetDetailRecyclerFragment fragment = new PetDetailRecyclerFragment(); + fragment.animalType = animal.getAnimal(); + activity.displayFragment(fragment); + } else { + MountDetailRecyclerFragment fragment = new MountDetailRecyclerFragment(); + fragment.animalType = animal.getAnimal(); + activity.displayFragment(fragment); + } + } + } + } + } + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/QuestCollectRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/QuestCollectRecyclerViewAdapter.java index b15c57975..69091f21a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/QuestCollectRecyclerViewAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/QuestCollectRecyclerViewAdapter.java @@ -8,8 +8,8 @@ import android.widget.ImageView; import android.widget.TextView; import com.habitrpg.android.habitica.R; -import com.magicmicky.habitrpgwrapper.lib.models.QuestContent; import com.magicmicky.habitrpgwrapper.lib.models.QuestProgress; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; import com.squareup.picasso.Picasso; import java.util.ArrayList; @@ -74,7 +74,7 @@ public class QuestCollectRecyclerViewAdapter extends RecyclerView.Adapter animals; + private static final String ANIMAL_TYPE_KEY = "ANIMAL_TYPE_KEY"; + GridLayoutManager layoutManager = null; + + private View view; + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + this.usesTabLayout = false; + super.onCreateView(inflater, container, savedInstanceState); + if (view == null) { + view = inflater.inflate(R.layout.fragment_recyclerview, container, false); + + recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); + + android.support.v4.app.FragmentActivity context = getActivity(); + + layoutManager = new GridLayoutManager(getActivity(), 2); + recyclerView.setLayoutManager(layoutManager); + recyclerView.addItemDecoration(new MarginDecoration(getActivity())); + + adapter = (MountDetailRecyclerAdapter)recyclerView.getAdapter(); + if (adapter == null) { + adapter = new MountDetailRecyclerAdapter(); + adapter.context = this.getActivity(); + adapter.itemType = this.animalType; + recyclerView.setAdapter(adapter); + this.loadItems(); + + } + } + + if (savedInstanceState != null){ + this.animalType = savedInstanceState.getString(ANIMAL_TYPE_KEY, ""); + } + + return view; + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + final View finalView = view; + finalView.post(new Runnable() { + @Override + public void run() { + setGridSpanCount(finalView.getWidth()); + } + }); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putString(ANIMAL_TYPE_KEY, this.animalType); + } + + + + private void setGridSpanCount(int width) { + float itemWidth; + itemWidth = getContext().getResources().getDimension(R.dimen.pet_width); + + int spanCount = (int) (width / itemWidth); + if (spanCount == 0) { + spanCount = 1; + } + layoutManager.setSpanCount(spanCount); + layoutManager.requestLayout(); + } + + private void loadItems() { + Runnable itemsRunnable = new Runnable() { + @Override + public void run() { + List items = new Select().from(Mount.class).where(Condition.column("animal").eq(animalType)).orderBy(true, "color").queryList(); + adapter.setItemList(items); + animals = items; + adapter.setOwnedMapping(user.getItems().getMounts()); + } + }; + itemsRunnable.run(); + + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/PetDetailRecyclerFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/PetDetailRecyclerFragment.java new file mode 100644 index 000000000..fd9a91b49 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/PetDetailRecyclerFragment.java @@ -0,0 +1,117 @@ +package com.habitrpg.android.habitica.ui.fragments.inventory; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.adapter.inventory.PetDetailRecyclerAdapter; +import com.habitrpg.android.habitica.ui.adapter.inventory.StableRecyclerAdapter; +import com.habitrpg.android.habitica.ui.fragments.BaseFragment; +import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; +import com.habitrpg.android.habitica.ui.helpers.MarginDecoration; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Animal; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Mount; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; +import com.raizlabs.android.dbflow.sql.builder.Condition; +import com.raizlabs.android.dbflow.sql.language.From; +import com.raizlabs.android.dbflow.sql.language.Select; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class PetDetailRecyclerFragment extends BaseMainFragment { + public RecyclerView recyclerView; + public PetDetailRecyclerAdapter adapter; + public String animalType; + public List animals; + private static final String ANIMAL_TYPE_KEY = "ANIMAL_TYPE_KEY"; + GridLayoutManager layoutManager = null; + + private View view; + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + this.usesTabLayout = false; + super.onCreateView(inflater, container, savedInstanceState); + if (view == null) { + view = inflater.inflate(R.layout.fragment_recyclerview, container, false); + + recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); + + android.support.v4.app.FragmentActivity context = getActivity(); + + layoutManager = new GridLayoutManager(getActivity(), 2); + recyclerView.setLayoutManager(layoutManager); + recyclerView.addItemDecoration(new MarginDecoration(getActivity())); + + adapter = (PetDetailRecyclerAdapter)recyclerView.getAdapter(); + if (adapter == null) { + adapter = new PetDetailRecyclerAdapter(); + adapter.context = this.getActivity(); + adapter.itemType = this.animalType; + recyclerView.setAdapter(adapter); + this.loadItems(); + + } + } + + if (savedInstanceState != null){ + this.animalType = savedInstanceState.getString(ANIMAL_TYPE_KEY, ""); + } + + return view; + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + final View finalView = view; + finalView.post(new Runnable() { + @Override + public void run() { + setGridSpanCount(finalView.getWidth()); + } + }); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putString(ANIMAL_TYPE_KEY, this.animalType); + } + + + + private void setGridSpanCount(int width) { + float itemWidth; + itemWidth = getContext().getResources().getDimension(R.dimen.pet_width); + + int spanCount = (int) (width / itemWidth); + if (spanCount == 0) { + spanCount = 1; + } + layoutManager.setSpanCount(spanCount); + layoutManager.requestLayout(); + } + + private void loadItems() { + Runnable itemsRunnable = new Runnable() { + @Override + public void run() { + List items = new Select().from(Pet.class).where(Condition.column("animal").eq(animalType)).orderBy(true, "color").queryList(); + adapter.setItemList(items); + animals = items; + adapter.setOwnedMapping(user.getItems().getPets()); + } + }; + itemsRunnable.run(); + + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/StableFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/StableFragment.java new file mode 100644 index 000000000..fdabe51c7 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/StableFragment.java @@ -0,0 +1,86 @@ +package com.habitrpg.android.habitica.ui.fragments.inventory; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.ViewPager; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; +import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemRecyclerFragment; +import com.magicmicky.habitrpgwrapper.lib.models.UserParty; + +public class StableFragment extends BaseMainFragment { + + public ViewPager viewPager; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + this.usesTabLayout = true; + super.onCreateView(inflater, container, savedInstanceState); + View v = inflater.inflate(R.layout.fragment_party, container, false); + + viewPager = (ViewPager) v.findViewById(R.id.view_pager); + + viewPager.setCurrentItem(0); + + setViewPagerAdapter(); + + return v; + } + + public void setViewPagerAdapter() { + android.support.v4.app.FragmentManager fragmentManager = getChildFragmentManager(); + + UserParty party = user.getParty(); + + if (party == null) { + return; + } + + viewPager.setAdapter(new FragmentPagerAdapter(fragmentManager) { + + @Override + public Fragment getItem(int position) { + + StableRecyclerFragment fragment = new StableRecyclerFragment(); + + switch (position) { + case 0: { + fragment.itemType = "pets"; + break; + } + case 1: { + fragment.itemType = "mounts"; + break; + } + } + fragment.user = StableFragment.this.user; + + return fragment; + } + + @Override + public int getCount() { + return 2; + } + + @Override + public CharSequence getPageTitle(int position) { + switch (position) { + case 0: + return activity.getString(R.string.pets); + case 1: + return activity.getString(R.string.mounts); + } + return ""; + } + }); + + tabLayout.setupWithViewPager(viewPager); + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/StableRecyclerFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/StableRecyclerFragment.java new file mode 100644 index 000000000..dac6b282d --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/StableRecyclerFragment.java @@ -0,0 +1,156 @@ +package com.habitrpg.android.habitica.ui.fragments.inventory; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.DividerItemDecoration; +import com.habitrpg.android.habitica.ui.activities.MainActivity; +import com.habitrpg.android.habitica.ui.adapter.inventory.ItemRecyclerAdapter; +import com.habitrpg.android.habitica.ui.adapter.inventory.StableRecyclerAdapter; +import com.habitrpg.android.habitica.ui.fragments.BaseFragment; +import com.habitrpg.android.habitica.ui.helpers.MarginDecoration; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Animal; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Egg; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Food; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.HatchingPotion; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Item; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Mount; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; +import com.raizlabs.android.dbflow.sql.builder.Condition; +import com.raizlabs.android.dbflow.sql.language.From; +import com.raizlabs.android.dbflow.sql.language.Select; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class StableRecyclerFragment extends BaseFragment { + public RecyclerView recyclerView; + public StableRecyclerAdapter adapter; + public String itemType; + public HabitRPGUser user; + public List animals; + private static final String ITEM_TYPE_KEY = "CLASS_TYPE_KEY"; + GridLayoutManager layoutManager = null; + + private View view; + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); + if (view == null) { + view = inflater.inflate(R.layout.fragment_recyclerview, container, false); + + recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); + + android.support.v4.app.FragmentActivity context = getActivity(); + + layoutManager = new GridLayoutManager(getActivity(), 2); + recyclerView.setLayoutManager(layoutManager); + recyclerView.addItemDecoration(new MarginDecoration(getActivity())); + + adapter = (StableRecyclerAdapter)recyclerView.getAdapter(); + if (adapter == null) { + adapter = new StableRecyclerAdapter(); + adapter.activity = (MainActivity)this.getActivity(); + adapter.itemType = this.itemType; + recyclerView.setAdapter(adapter); + this.loadItems(); + + } + } + + if (savedInstanceState != null){ + this.itemType = savedInstanceState.getString(ITEM_TYPE_KEY, ""); + } + + return view; + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + final View finalView = view; + finalView.post(new Runnable() { + @Override + public void run() { + setGridSpanCount(finalView.getWidth()); + } + }); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putString(ITEM_TYPE_KEY, this.itemType); + } + + + + private void setGridSpanCount(int width) { + float itemWidth; + itemWidth = getContext().getResources().getDimension(R.dimen.pet_width); + + int spanCount = (int) (width / itemWidth); + if (spanCount == 0) { + spanCount = 1; + } + layoutManager.setSpanCount(spanCount); + } + + private void loadItems() { + Runnable itemsRunnable = new Runnable() { + @Override + public void run() { + From from = null; + switch (itemType) { + case "pets": + from = new Select().from(Pet.class); + break; + case "mounts": + from = new Select().from(Mount.class); + break; + } + + if (from != null) { + List items = from.where().orderBy(true, "animalGroup", "animal").groupBy("animal").queryList(); + adapter.setItemList(items); + animals = items; + HashMap ownedMap = new HashMap<>(); + for (Animal animal : animals) { + ownedMap.put(animal.getAnimal(), 0); + } + switch (itemType) { + case "pets": + for (Map.Entry pet : StableRecyclerFragment.this.user.getItems().getPets().entrySet()) { + if (pet.getValue() > 0) { + ownedMap.put(pet.getKey().split("-")[0], ownedMap.get(pet.getKey().split("-")[0])+1); + } + } + break; + case "mounts": + for (Map.Entry mount : StableRecyclerFragment.this.user.getItems().getMounts().entrySet()) { + if (mount.getValue()) { + ownedMap.put(mount.getKey().split("-")[0], ownedMap.get(mount.getKey().split("-")[0])+1); + } + } + break; + } + adapter.setOwnedMapping(ownedMap); + } + } + }; + itemsRunnable.run(); + + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.java new file mode 100644 index 000000000..185780805 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.java @@ -0,0 +1,98 @@ +package com.habitrpg.android.habitica.ui.fragments.inventory.items; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.DividerItemDecoration; +import com.habitrpg.android.habitica.ui.adapter.inventory.ItemRecyclerAdapter; +import com.habitrpg.android.habitica.ui.fragments.BaseFragment; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Egg; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Food; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.HatchingPotion; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Item; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; +import com.raizlabs.android.dbflow.sql.builder.Condition; +import com.raizlabs.android.dbflow.sql.language.From; +import com.raizlabs.android.dbflow.sql.language.Select; + +import java.util.List; + +public class ItemRecyclerFragment extends BaseFragment { + public RecyclerView recyclerView; + public ItemRecyclerAdapter adapter; + public String itemType; + private static final String ITEM_TYPE_KEY = "CLASS_TYPE_KEY"; + LinearLayoutManager layoutManager = null; + + private View view; + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + if (view == null) { + view = inflater.inflate(R.layout.fragment_recyclerview, container, false); + + recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); + + android.support.v4.app.FragmentActivity context = getActivity(); + + layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); + + if (layoutManager == null) { + layoutManager = new LinearLayoutManager(context); + + recyclerView.setLayoutManager(layoutManager); + } + + adapter = (ItemRecyclerAdapter)recyclerView.getAdapter(); + if (adapter == null) { + adapter = new ItemRecyclerAdapter(); + adapter.context = this.getActivity(); + recyclerView.setAdapter(adapter); + this.loadItems(); + + } + recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST)); + } + + if (savedInstanceState != null){ + this.itemType = savedInstanceState.getString(ITEM_TYPE_KEY, ""); + } + + return view; + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putString(ITEM_TYPE_KEY, this.itemType); + } + + private void loadItems() { + From from = null; + switch (this.itemType) { + case "eggs": + from = new Select().from(Egg.class); + break; + case "hatchingPotions": + from = new Select().from(HatchingPotion.class); + break; + case "food": + from = new Select().from(Food.class); + break; + case "quests": + from = new Select().from(QuestContent.class); + } + + if (from != null) { + List items = from.where(Condition.column("owned").greaterThan(0)).queryList(); + adapter.setItemList(items); + } + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.java new file mode 100644 index 000000000..11148bc24 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.java @@ -0,0 +1,97 @@ +package com.habitrpg.android.habitica.ui.fragments.inventory.items; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.ViewPager; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.habitrpg.android.habitica.ContentCache; +import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; +import com.magicmicky.habitrpgwrapper.lib.models.UserParty; + +public class ItemsFragment extends BaseMainFragment { + + public ViewPager viewPager; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + this.usesTabLayout = true; + super.onCreateView(inflater, container, savedInstanceState); + View v = inflater.inflate(R.layout.fragment_party, container, false); + + viewPager = (ViewPager) v.findViewById(R.id.view_pager); + + viewPager.setCurrentItem(0); + + setViewPagerAdapter(); + + return v; + } + + public void setViewPagerAdapter() { + android.support.v4.app.FragmentManager fragmentManager = getChildFragmentManager(); + + UserParty party = user.getParty(); + + if (party == null) { + return; + } + + viewPager.setAdapter(new FragmentPagerAdapter(fragmentManager) { + + @Override + public Fragment getItem(int position) { + + ItemRecyclerFragment fragment = new ItemRecyclerFragment(); + + switch (position) { + case 0: { + fragment.itemType = "eggs"; + break; + } + case 1: { + fragment.itemType = "hatchingPotions"; + break; + } + case 2: { + fragment.itemType = "food"; + break; + } + case 3: { + fragment.itemType = "quests"; + break; + } + } + + return fragment; + } + + @Override + public int getCount() { + return 4; + } + + @Override + public CharSequence getPageTitle(int position) { + switch (position) { + case 0: + return activity.getString(R.string.eggs); + case 1: + return activity.getString(R.string.hatching_potions); + case 2: + return activity.getString(R.string.food); + case 3: + return activity.getString(R.string.quests); + } + return ""; + } + }); + + tabLayout.setupWithViewPager(viewPager); + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GroupInformationFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GroupInformationFragment.java index 89095b609..c19c77af0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GroupInformationFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GroupInformationFragment.java @@ -22,7 +22,7 @@ import com.habitrpg.android.habitica.databinding.ValueBarBinding; import com.habitrpg.android.habitica.ui.adapter.social.QuestCollectRecyclerViewAdapter; import com.magicmicky.habitrpgwrapper.lib.models.Group; import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; -import com.magicmicky.habitrpgwrapper.lib.models.QuestContent; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; import butterknife.Bind; import butterknife.ButterKnife; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java index a4dbba8a2..21cb9a1fe 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java @@ -16,8 +16,8 @@ import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment; import com.habitrpg.android.habitica.ui.fragments.social.ChatListFragment; import com.habitrpg.android.habitica.ui.fragments.social.GroupInformationFragment; import com.magicmicky.habitrpgwrapper.lib.models.Group; -import com.magicmicky.habitrpgwrapper.lib.models.QuestContent; import com.magicmicky.habitrpgwrapper.lib.models.UserParty; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; import retrofit.Callback; import retrofit.RetrofitError; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/ContentResult.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/ContentResult.java index ceecebf03..43365c998 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/ContentResult.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/ContentResult.java @@ -1,5 +1,11 @@ package com.magicmicky.habitrpgwrapper.lib.models; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Egg; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Food; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.HatchingPotion; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Mount; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData; import java.util.HashMap; @@ -16,9 +22,21 @@ public class ContentResult { public ContentGear gear; - public HashMap quests; + public List quests; + public List eggs; + public List food; + public List hatchingPotions; - public SkillList spells; + public List pets; + public List specialPets; + public List premiumPets; + public List questPets; + + public List mounts; + public List specialMounts; + public List questMounts; + + public List spells; public List appearances; public List backgrounds; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Items.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Items.java index 306c37359..be546ea6c 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Items.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Items.java @@ -1,6 +1,11 @@ package com.magicmicky.habitrpgwrapper.lib.models; import com.habitrpg.android.habitica.HabitDatabase; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Egg; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Food; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.HatchingPotion; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData; import com.raizlabs.android.dbflow.annotation.Column; import com.raizlabs.android.dbflow.annotation.ForeignKey; import com.raizlabs.android.dbflow.annotation.ForeignKeyReference; @@ -10,6 +15,8 @@ import com.raizlabs.android.dbflow.annotation.Table; import com.raizlabs.android.dbflow.structure.BaseModel; import java.util.Date; +import java.util.HashMap; +import java.util.List; /** * Created by MagicMicky on 16/03/14. @@ -32,7 +39,15 @@ public class Items extends BaseModel { @Column private Date lastDrop_date; - //private Quest quest; + public List eggs; + public List food; + public List hatchingPotions; + public List quests; + + HashMap pets; + HashMap mounts; + + //private QuestContent quest; @Column @ForeignKey(references = {@ForeignKeyReference(columnName = "gear_id", @@ -87,6 +102,62 @@ public class Items extends BaseModel { this.gear = gear; } + public String getUser_id() { + return user_id; + } + + public void setUser_id(String user_id) { + this.user_id = user_id; + } + + public List getEggs() { + return eggs; + } + + public void setEggs(List eggs) { + this.eggs = eggs; + } + + public List getFood() { + return food; + } + + public void setFood(List food) { + this.food = food; + } + + public List getHatchingPotions() { + return hatchingPotions; + } + + public void setHatchingPotions(List hatchingPotions) { + this.hatchingPotions = hatchingPotions; + } + + public List getQuests() { + return quests; + } + + public void setQuests(List quests) { + this.quests = quests; + } + + public HashMap getPets() { + return pets; + } + + public void setPets(HashMap pets) { + this.pets = pets; + } + + public HashMap getMounts() { + return mounts; + } + + public void setMounts(HashMap mounts) { + this.mounts = mounts; + } + public Items() {} @Override diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/SkillList.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/SkillList.java deleted file mode 100644 index cdf6b51dd..000000000 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/SkillList.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.magicmicky.habitrpgwrapper.lib.models; - -/** - * Created by viirus on 25/11/15. - */ -public class SkillList { - -} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Animal.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Animal.java new file mode 100644 index 000000000..b259f801c --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Animal.java @@ -0,0 +1,48 @@ +package com.magicmicky.habitrpgwrapper.lib.models.inventory; + +import com.raizlabs.android.dbflow.annotation.Column; +import com.raizlabs.android.dbflow.annotation.PrimaryKey; +import com.raizlabs.android.dbflow.structure.BaseModel; + +public class Animal extends BaseModel { + + @Column + @PrimaryKey + String key; + + @Column + String animal, color, animalGroup; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getAnimal() { + return animal; + } + + public void setAnimal(String animal) { + this.animal = animal; + } + + public String getColor() { + return color; + } + + public void setColor(String color) { + this.color = color; + } + + public String getAnimalGroup() { + return animalGroup; + } + + public void setAnimalGroup(String group) { + this.animalGroup = group; + } + +} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Egg.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Egg.java new file mode 100644 index 000000000..8cda37c94 --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Egg.java @@ -0,0 +1,49 @@ +package com.magicmicky.habitrpgwrapper.lib.models.inventory; + +import com.habitrpg.android.habitica.HabitDatabase; +import com.raizlabs.android.dbflow.annotation.Column; +import com.raizlabs.android.dbflow.annotation.Table; + +@Table(databaseName = HabitDatabase.NAME) +public class Egg extends Item { + + @Column + String adjective, mountText; + + Integer stableOwned, stableTotal; + + public String getAdjective() { + return adjective; + } + + public void setAdjective(String adjective) { + this.adjective = adjective; + } + + public String getMountText() { + return mountText; + } + + public void setMountText(String mountText) { + this.mountText = mountText; + } + + public Integer getStableOwned() { + if (stableOwned == null) { + stableOwned = 0; + } + return stableOwned; + } + + public void setStableOwned(Integer stableOwned) { + this.stableOwned = stableOwned; + } + + public Integer getStableTotal() { + return stableTotal; + } + + public void setStableTotal(Integer stableTotal) { + this.stableTotal = stableTotal; + } +} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Food.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Food.java new file mode 100644 index 000000000..b4460f8ab --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Food.java @@ -0,0 +1,39 @@ +package com.magicmicky.habitrpgwrapper.lib.models.inventory; + +import com.habitrpg.android.habitica.HabitDatabase; +import com.raizlabs.android.dbflow.annotation.Column; +import com.raizlabs.android.dbflow.annotation.Table; + +@Table(databaseName = HabitDatabase.NAME) +public class Food extends Item { + + @Column + String target, article; + + @Column + Boolean canDrop; + + public String getTarget() { + return target; + } + + public void setTarget(String target) { + this.target = target; + } + + public String getArticle() { + return article; + } + + public void setArticle(String article) { + this.article = article; + } + + public Boolean getCanDrop() { + return canDrop; + } + + public void setCanDrop(Boolean canDrop) { + this.canDrop = canDrop; + } +} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/HatchingPotion.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/HatchingPotion.java new file mode 100644 index 000000000..b7dfdb8e9 --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/HatchingPotion.java @@ -0,0 +1,28 @@ +package com.magicmicky.habitrpgwrapper.lib.models.inventory; + +import com.habitrpg.android.habitica.HabitDatabase; +import com.raizlabs.android.dbflow.annotation.Column; +import com.raizlabs.android.dbflow.annotation.Table; + +@Table(databaseName = HabitDatabase.NAME) +public class HatchingPotion extends Item { + + @Column + Boolean limited, premium; + + public Boolean getLimited() { + return limited; + } + + public void setLimited(Boolean limited) { + this.limited = limited; + } + + public Boolean getPremium() { + return premium; + } + + public void setPremium(Boolean premium) { + this.premium = premium; + } +} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Item.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Item.java new file mode 100644 index 000000000..326d8176f --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Item.java @@ -0,0 +1,60 @@ +package com.magicmicky.habitrpgwrapper.lib.models.inventory; + +import com.habitrpg.android.habitica.HabitDatabase; +import com.raizlabs.android.dbflow.annotation.Column; +import com.raizlabs.android.dbflow.annotation.PrimaryKey; +import com.raizlabs.android.dbflow.annotation.Table; +import com.raizlabs.android.dbflow.structure.BaseModel; + +public class Item extends BaseModel { + + @Column + @PrimaryKey + String key; + + @Column + String text, notes; + + @Column + Integer value, owned; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public Integer getValue() { + return value; + } + + public void setValue(Integer value) { + this.value = value; + } + + public Integer getOwned() { + return owned; + } + + public void setOwned(Integer owned) { + this.owned = owned; + } +} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Mount.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Mount.java new file mode 100644 index 000000000..d81bd0bf2 --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Mount.java @@ -0,0 +1,22 @@ +package com.magicmicky.habitrpgwrapper.lib.models.inventory; + +import com.habitrpg.android.habitica.HabitDatabase; +import com.raizlabs.android.dbflow.annotation.Column; +import com.raizlabs.android.dbflow.annotation.PrimaryKey; +import com.raizlabs.android.dbflow.annotation.Table; +import com.raizlabs.android.dbflow.structure.BaseModel; + +@Table(databaseName = HabitDatabase.NAME) +public class Mount extends Animal { + + @Column + Boolean owned; + + public Boolean getOwned() { + return owned; + } + + public void setOwned(Boolean owned) { + this.owned = owned; + } +} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Pet.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Pet.java new file mode 100644 index 000000000..0c91a5a07 --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/Pet.java @@ -0,0 +1,23 @@ +package com.magicmicky.habitrpgwrapper.lib.models.inventory; + +import com.habitrpg.android.habitica.HabitDatabase; +import com.raizlabs.android.dbflow.annotation.Column; +import com.raizlabs.android.dbflow.annotation.PrimaryKey; +import com.raizlabs.android.dbflow.annotation.Table; +import com.raizlabs.android.dbflow.structure.BaseModel; + +@Table(databaseName = HabitDatabase.NAME) +public class Pet extends Animal { + + + @Column + Integer trained; + + public Integer getTrained() { + return trained; + } + + public void setTrained(Integer trained) { + this.trained = trained; + } +} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/QuestContent.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/QuestContent.java similarity index 65% rename from Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/QuestContent.java rename to Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/QuestContent.java index ad8594c71..be6b87ad3 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/QuestContent.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/inventory/QuestContent.java @@ -1,36 +1,21 @@ -package com.magicmicky.habitrpgwrapper.lib.models; +package com.magicmicky.habitrpgwrapper.lib.models.inventory; import com.habitrpg.android.habitica.HabitDatabase; +import com.magicmicky.habitrpgwrapper.lib.models.QuestBoss; +import com.magicmicky.habitrpgwrapper.lib.models.QuestCollect; import com.raizlabs.android.dbflow.annotation.Column; import com.raizlabs.android.dbflow.annotation.OneToMany; -import com.raizlabs.android.dbflow.annotation.PrimaryKey; import com.raizlabs.android.dbflow.annotation.Table; import com.raizlabs.android.dbflow.sql.builder.Condition; import com.raizlabs.android.dbflow.sql.language.Select; -import com.raizlabs.android.dbflow.structure.BaseModel; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -/** - * Created by Negue on 29.09.2015. - */ @Table(databaseName = HabitDatabase.NAME) -public class QuestContent extends BaseModel { - @PrimaryKey - @Column - public String key; - - @Column - public String text; - - @Column - public String notes; - - @Column - public double value; +public class QuestContent extends Item { @Column public String previous; @@ -48,6 +33,46 @@ public class QuestContent extends BaseModel { HashMap collect; + public String getPrevious() { + return previous; + } + + public void setPrevious(String previous) { + this.previous = previous; + } + + public int getLvl() { + return lvl; + } + + public void setLvl(int lvl) { + this.lvl = lvl; + } + + public boolean isCanBuy() { + return canBuy; + } + + public void setCanBuy(boolean canBuy) { + this.canBuy = canBuy; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public QuestBoss getBoss() { + return boss; + } + + public void setBoss(QuestBoss boss) { + this.boss = boss; + } + @OneToMany(methods = {OneToMany.Method.SAVE, OneToMany.Method.DELETE}, variableName = "collect") public Collection getCollectCollection() { return getCollect().values(); @@ -81,6 +106,4 @@ public class QuestContent extends BaseModel { super.save(); } - // todo drops } - diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ContentDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ContentDeserializer.java new file mode 100644 index 000000000..67efbd7a7 --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ContentDeserializer.java @@ -0,0 +1,110 @@ +package com.magicmicky.habitrpgwrapper.lib.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.google.gson.reflect.TypeToken; +import com.magicmicky.habitrpgwrapper.lib.models.ContentGear; +import com.magicmicky.habitrpgwrapper.lib.models.ContentResult; +import com.magicmicky.habitrpgwrapper.lib.models.Customization; +import com.magicmicky.habitrpgwrapper.lib.models.FAQArticle; +import com.magicmicky.habitrpgwrapper.lib.models.Skill; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Egg; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Food; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.HatchingPotion; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Mount; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData; +import com.raizlabs.android.dbflow.runtime.TransactionManager; +import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo; +import com.raizlabs.android.dbflow.runtime.transaction.process.SaveModelTransaction; +import com.raizlabs.android.dbflow.structure.BaseModel; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +public class ContentDeserializer implements JsonDeserializer { + + + @Override + public ContentResult deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + List items = new ArrayList<>(); + + ContentResult result = new ContentResult(); + JsonObject object = json.getAsJsonObject(); + + result.potion = context.deserialize(object.get("potion"), ItemData.class); + result.armoire = context.deserialize(object.get("armoire"), ItemData.class); + result.gear = context.deserialize(object.get("gear"), ContentGear.class); + + result.quests = context.deserialize(object.get("quests"), new TypeToken>() {}.getType()); + result.eggs = context.deserialize(object.get("eggs"), new TypeToken>() {}.getType()); + result.food = context.deserialize(object.get("food"), new TypeToken>() {}.getType()); + result.hatchingPotions = context.deserialize(object.get("hatchingPotions"), new TypeToken>() {}.getType()); + + items.addAll(result.quests); + items.addAll(result.eggs); + items.addAll(result.food); + items.addAll(result.hatchingPotions); + + result.pets = context.deserialize(object.get("pets"), new TypeToken>() {}.getType()); + result.specialPets = context.deserialize(object.get("specialPets"), new TypeToken>() {}.getType()); + result.premiumPets = context.deserialize(object.get("premiumPets"), new TypeToken>() {}.getType()); + result.questPets = context.deserialize(object.get("questPets"), new TypeToken>() {}.getType()); + + for (Pet pet : result.pets) { + pet.setAnimalGroup("pets"); + items.add(pet); + } + for (Pet pet : result.specialPets) { + pet.setAnimalGroup("specialPets"); + items.add(pet); + } + for (Pet pet : result.premiumPets) { + pet.setAnimalGroup("premiumPets"); + items.add(pet); + } + for (Pet pet : result.questPets) { + pet.setAnimalGroup("questPets"); + items.add(pet); + } + + result.mounts = context.deserialize(object.get("mounts"), new TypeToken>() {}.getType()); + result.specialMounts = context.deserialize(object.get("specialMounts"), new TypeToken>() {}.getType()); + result.questMounts = context.deserialize(object.get("questMounts"), new TypeToken>() {}.getType()); + + for (Mount mount : result.mounts) { + mount.setAnimalGroup("mounts"); + items.add(mount); + } + for (Mount mount : result.specialMounts) { + mount.setAnimalGroup("specialMounts"); + items.add(mount); + } + for (Mount mount : result.questMounts) { + mount.setAnimalGroup("questMounts"); + items.add(mount); + } + + result.spells = context.deserialize(object.get("spells"), new TypeToken>() {}.getType()); + + result.appearances = context.deserialize(object.get("appearances"), new TypeToken>() {}.getType()); + result.backgrounds = context.deserialize(object.get("backgrounds"), new TypeToken>() {}.getType()); + + result.faq = context.deserialize(object.get("faq"), new TypeToken>() {}.getType()); + + items.addAll(result.spells); + + items.addAll(result.appearances); + items.addAll(result.backgrounds); + + items.addAll(result.faq); + + TransactionManager.getInstance().addTransaction(new SaveModelTransaction<>(ProcessModelInfo.withModels(items))); + return result; + } +} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/CustomizationDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/CustomizationDeserializer.java index a5a8ed7a2..cd4c38b79 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/CustomizationDeserializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/CustomizationDeserializer.java @@ -87,7 +87,6 @@ public class CustomizationDeserializer implements JsonDeserializer(ProcessModelInfo.withModels(customizations))); return customizations; } diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/EggListDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/EggListDeserializer.java new file mode 100644 index 000000000..3178aae28 --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/EggListDeserializer.java @@ -0,0 +1,70 @@ +package com.magicmicky.habitrpgwrapper.lib.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.magicmicky.habitrpgwrapper.lib.models.inventory.Egg; +import com.raizlabs.android.dbflow.runtime.TransactionManager; +import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo; +import com.raizlabs.android.dbflow.runtime.transaction.process.SaveModelTransaction; +import com.raizlabs.android.dbflow.sql.language.Select; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class EggListDeserializer implements JsonDeserializer> { + @Override + public List deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + List vals = new ArrayList<>(); + if (json.isJsonObject()) { + JsonObject object = json.getAsJsonObject(); + + List existingItems = new Select().from(Egg.class).queryList(); + + for (Egg item : existingItems) { + if(object.has(item.getKey())) { + JsonElement itemObject = object.get(item.getKey()); + + if (itemObject.isJsonObject()) { + Egg parsedItem = context.deserialize(itemObject.getAsJsonObject(), Egg.class); + item.setText(parsedItem.getText()); + item.setNotes(parsedItem.getNotes()); + item.setValue(parsedItem.getValue()); + item.setAdjective(parsedItem.getAdjective()); + item.setMountText(parsedItem.getMountText()); + } else { + item.setOwned(itemObject.getAsInt()); + } + vals.add(item); + object.remove(item.getKey()); + } + } + + for (Map.Entry entry : json.getAsJsonObject().entrySet()) { + Egg item; + if (entry.getValue().isJsonObject()) { + item = context.deserialize(entry.getValue(), Egg.class); + } else { + item = new Egg(); + item.setKey(entry.getKey()); + if (entry.getValue().isJsonNull()) { + item.setOwned(0); + } else { + item.setOwned(entry.getValue().getAsInt()); + } + } + vals.add(item); + } + } else { + for (JsonElement item : json.getAsJsonArray()) { + vals.add((Egg) context.deserialize(item.getAsJsonObject(), Egg.class)); + } + } + + return vals; + } +} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/FAQArticleListDeserilializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/FAQArticleListDeserilializer.java index 9776b3919..9a6d9922c 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/FAQArticleListDeserilializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/FAQArticleListDeserilializer.java @@ -38,8 +38,6 @@ public class FAQArticleListDeserilializer implements JsonDeserializer(ProcessModelInfo.withModels(vals))); - return vals; } } diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/FoodListDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/FoodListDeserializer.java new file mode 100644 index 000000000..f5611b21e --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/FoodListDeserializer.java @@ -0,0 +1,71 @@ +package com.magicmicky.habitrpgwrapper.lib.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.magicmicky.habitrpgwrapper.lib.models.inventory.Food; +import com.raizlabs.android.dbflow.runtime.TransactionManager; +import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo; +import com.raizlabs.android.dbflow.runtime.transaction.process.SaveModelTransaction; +import com.raizlabs.android.dbflow.sql.language.Select; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class FoodListDeserializer implements JsonDeserializer> { + @Override + public List deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + List vals = new ArrayList<>(); + if (json.isJsonObject()) { + JsonObject object = json.getAsJsonObject(); + + List existingItems = new Select().from(Food.class).queryList(); + + for (Food item : existingItems) { + if(object.has(item.getKey())) { + JsonElement itemObject = object.get(item.getKey()); + + if (itemObject.isJsonObject()) { + Food parsedItem = context.deserialize(itemObject.getAsJsonObject(), Food.class); + item.setText(parsedItem.getText()); + item.setNotes(parsedItem.getNotes()); + item.setValue(parsedItem.getValue()); + item.setArticle(parsedItem.getArticle()); + item.setCanDrop(parsedItem.getCanDrop()); + item.setTarget(parsedItem.getTarget()); + } else { + item.setOwned(itemObject.getAsInt()); + } + vals.add(item); + object.remove(item.getKey()); + } + } + + for (Map.Entry entry : json.getAsJsonObject().entrySet()) { + Food item; + if (entry.getValue().isJsonObject()) { + item = context.deserialize(entry.getValue(), Food.class); + } else { + item = new Food(); + item.setKey(entry.getKey()); + if (entry.getValue().isJsonNull()) { + item.setOwned(0); + } else { + item.setOwned(entry.getValue().getAsInt()); + } + } + vals.add(item); + } + } else { + for (JsonElement item : json.getAsJsonArray()) { + vals.add((Food) context.deserialize(item.getAsJsonObject(), Food.class)); + } + } + + return vals; + } +} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/HatchingPotionListDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/HatchingPotionListDeserializer.java new file mode 100644 index 000000000..301a18a3e --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/HatchingPotionListDeserializer.java @@ -0,0 +1,70 @@ +package com.magicmicky.habitrpgwrapper.lib.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.magicmicky.habitrpgwrapper.lib.models.inventory.HatchingPotion; +import com.raizlabs.android.dbflow.runtime.TransactionManager; +import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo; +import com.raizlabs.android.dbflow.runtime.transaction.process.SaveModelTransaction; +import com.raizlabs.android.dbflow.sql.language.Select; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class HatchingPotionListDeserializer implements JsonDeserializer> { + @Override + public List deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + List vals = new ArrayList<>(); + if (json.isJsonObject()) { + JsonObject object = json.getAsJsonObject(); + + List existingItems = new Select().from(HatchingPotion.class).queryList(); + + for (HatchingPotion item : existingItems) { + if(object.has(item.getKey())) { + JsonElement itemObject = object.get(item.getKey()); + + if (itemObject.isJsonObject()) { + HatchingPotion parsedItem = context.deserialize(itemObject.getAsJsonObject(), HatchingPotion.class); + item.setText(parsedItem.getText()); + item.setNotes(parsedItem.getNotes()); + item.setValue(parsedItem.getValue()); + item.setLimited(parsedItem.getLimited()); + item.setPremium(parsedItem.getPremium()); + } else { + item.setOwned(itemObject.getAsInt()); + } + vals.add(item); + object.remove(item.getKey()); + } + } + + for (Map.Entry entry : json.getAsJsonObject().entrySet()) { + HatchingPotion item; + if (entry.getValue().isJsonObject()) { + item = context.deserialize(entry.getValue(), HatchingPotion.class); + } else { + item = new HatchingPotion(); + item.setKey(entry.getKey()); + if (entry.getValue().isJsonNull()) { + item.setOwned(0); + } else { + item.setOwned(entry.getValue().getAsInt()); + } + } + vals.add(item); + } + } else { + for (JsonElement item : json.getAsJsonArray()) { + vals.add((HatchingPotion) context.deserialize(item.getAsJsonObject(), HatchingPotion.class)); + } + } + + return vals; + } +} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ItemDataListDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ItemDataListDeserializer.java index 8768e1e99..13e561d40 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ItemDataListDeserializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/ItemDataListDeserializer.java @@ -64,7 +64,6 @@ public class ItemDataListDeserializer implements JsonDeserializer } vals.add(item); } - TransactionManager.getInstance().addTransaction(new SaveModelTransaction<>(ProcessModelInfo.withModels(vals))); } else { for (JsonElement item : json.getAsJsonArray()) { vals.add((ItemData) context.deserialize(item.getAsJsonObject(), ItemData.class)); diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/MountListDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/MountListDeserializer.java new file mode 100644 index 000000000..7c97e1068 --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/MountListDeserializer.java @@ -0,0 +1,32 @@ +package com.magicmicky.habitrpgwrapper.lib.utils; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Mount; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; +import com.raizlabs.android.dbflow.runtime.TransactionManager; +import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo; +import com.raizlabs.android.dbflow.runtime.transaction.process.SaveModelTransaction; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class MountListDeserializer implements JsonDeserializer> { + @Override + public List deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + List vals = new ArrayList<>(); + for (Map.Entry entry : json.getAsJsonObject().entrySet()) { + Mount pet = new Mount(); + pet.setKey(entry.getKey()); + pet.setAnimal(entry.getKey().split("-")[0]); + pet.setColor(entry.getKey().split("-")[1]); + vals.add(pet); + } + + return vals; + } +} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/PetListDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/PetListDeserializer.java new file mode 100644 index 000000000..d9e2cf72a --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/PetListDeserializer.java @@ -0,0 +1,34 @@ +package com.magicmicky.habitrpgwrapper.lib.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.magicmicky.habitrpgwrapper.lib.models.inventory.HatchingPotion; +import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; +import com.raizlabs.android.dbflow.runtime.TransactionManager; +import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo; +import com.raizlabs.android.dbflow.runtime.transaction.process.SaveModelTransaction; +import com.raizlabs.android.dbflow.sql.language.Select; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class PetListDeserializer implements JsonDeserializer> { + @Override + public List deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + List vals = new ArrayList<>(); + for (Map.Entry entry : json.getAsJsonObject().entrySet()) { + Pet pet = new Pet(); + pet.setKey(entry.getKey()); + pet.setAnimal(entry.getKey().split("-")[0]); + pet.setColor(entry.getKey().split("-")[1]); + vals.add(pet); + } + + return vals; + } +} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/QuestListDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/QuestListDeserializer.java new file mode 100644 index 000000000..b25a83e8b --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/QuestListDeserializer.java @@ -0,0 +1,75 @@ +package com.magicmicky.habitrpgwrapper.lib.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.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; +import com.raizlabs.android.dbflow.runtime.TransactionManager; +import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo; +import com.raizlabs.android.dbflow.runtime.transaction.process.SaveModelTransaction; +import com.raizlabs.android.dbflow.sql.language.Select; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class QuestListDeserializer implements JsonDeserializer> { + @Override + public List deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + List vals = new ArrayList<>(); + if (json.isJsonObject()) { + JsonObject object = json.getAsJsonObject(); + + List existingItems = new Select().from(QuestContent.class).queryList(); + + for (QuestContent item : existingItems) { + if(object.has(item.getKey())) { + JsonElement itemObject = object.get(item.getKey()); + + if (itemObject.isJsonObject()) { + QuestContent parsedItem = context.deserialize(itemObject.getAsJsonObject(), QuestContent.class); + item.setText(parsedItem.getText()); + item.setNotes(parsedItem.getNotes()); + item.setValue(parsedItem.getValue()); + item.setPrevious(parsedItem.getPrevious()); + item.setCanBuy(parsedItem.isCanBuy()); + item.setBoss(parsedItem.getBoss()); + item.setCategory(parsedItem.getCategory()); + item.setCollect(parsedItem.getCollect()); + item.setLvl(parsedItem.getLvl()); + } else { + item.setOwned(itemObject.getAsInt()); + } + vals.add(item); + object.remove(item.getKey()); + } + } + + for (Map.Entry entry : json.getAsJsonObject().entrySet()) { + QuestContent item; + if (entry.getValue().isJsonObject()) { + item = context.deserialize(entry.getValue(), QuestContent.class); + } else { + item = new QuestContent(); + item.setKey(entry.getKey()); + if (entry.getValue().isJsonNull()) { + item.setOwned(0); + } else { + item.setOwned(entry.getValue().getAsInt()); + } + } + vals.add(item); + } + TransactionManager.getInstance().addTransaction(new SaveModelTransaction<>(ProcessModelInfo.withModels(vals))); + } else { + for (JsonElement item : json.getAsJsonArray()) { + vals.add((QuestContent) context.deserialize(item.getAsJsonObject(), QuestContent.class)); + } + } + + return vals; + } +} diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/SkillDeserializer.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/SkillDeserializer.java index 0ee64f6fd..2624c4c0b 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/SkillDeserializer.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/utils/SkillDeserializer.java @@ -6,7 +6,6 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; import com.magicmicky.habitrpgwrapper.lib.models.Skill; -import com.magicmicky.habitrpgwrapper.lib.models.SkillList; import com.raizlabs.android.dbflow.runtime.TransactionManager; import com.raizlabs.android.dbflow.runtime.transaction.process.ProcessModelInfo; import com.raizlabs.android.dbflow.runtime.transaction.process.SaveModelTransaction; @@ -20,10 +19,10 @@ import java.util.Map; * Created by viirus on 25/11/15. */ public class SkillDeserializer - implements JsonDeserializer { + implements JsonDeserializer> { @Override - public SkillList deserialize(JsonElement json, Type type, + public List deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException { JsonObject object = json.getAsJsonObject(); @@ -49,10 +48,6 @@ public class SkillDeserializer } } - TransactionManager.getInstance().addTransaction(new SaveModelTransaction<>(ProcessModelInfo.withModels(skills))); - - SkillList skillList = new SkillList(); - - return skillList; + return skills; } } \ No newline at end of file