Display inventory items

This commit is contained in:
Phillip Thelen 2016-03-28 18:43:15 +02:00
parent f1c38e7614
commit ced7d44de7
51 changed files with 2132 additions and 72 deletions

View file

@ -0,0 +1 @@
ALTER TABLE QuestContent ADD COLUMN 'owned' INTEGER DEFAULT 0;

View file

@ -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'

View file

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_view"
android:layout_height="wrap_content"
android:layout_width="match_parent">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/selection_highlight"
style="@style/CardContent">
<ImageView
android:id="@+id/imageView"
android:layout_width="81dp"
android:layout_height="99dp"
android:layout_gravity="center_horizontal"
android:scaleType="fitEnd" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:id="@+id/titleTextView"
style="@style/RowTitle"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:id="@+id/ownedTextView"
style="@style/RowText"/>
</LinearLayout>
</android.support.v7.widget.CardView>

View file

@ -5,7 +5,7 @@
<data>
<import type="com.magicmicky.habitrpgwrapper.lib.models.Group" />
<import type="com.magicmicky.habitrpgwrapper.lib.models.QuestContent" />
<import type="com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent" />
<import type="com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser" />
<import type="android.view.View" />
<import type="android.text.Html"/>

View file

@ -2,7 +2,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Row"
style="@style/RowWrapper"
android:id="@+id/gear_container">
<ImageView

View file

@ -11,7 +11,7 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="Row"
style="@style/RowWrapper"
android:clickable="true">
<ImageView
android:layout_width="@dimen/gear_image_size"

View file

@ -1,21 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:bind="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable name="title" type="String"/>
<variable name="value" type="String"/>
<variable name="imageNamed" type="String"/>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="Row"
style="@style/RowWrapper"
android:clickable="true">
<ImageView
android:id="@+id/imageView"
android:layout_width="@dimen/gear_image_size"
android:layout_height="@dimen/gear_image_size"
bind:imageName='@{imageNamed == null ? "head_0" : imageNamed}'
android:contentDescription="@{imageNamed}"
android:alpha="@{imageNamed == null ? 0.4f : 1.0f}"
android:scaleType="fitEnd"
android:layout_marginRight="@dimen/row_padding"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center_vertical">
<TextView
android:id="@+id/titleTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{title}"
tools:text="Title"
style="@style/RowTitle"/>
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="Value"
android:text="@{value}"
style="@style/RowText"/>
</LinearLayout>
</LinearLayout>
</layout>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/RowWrapper">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>

View file

@ -66,4 +66,5 @@
<dimen name="row_title_bottommargin">2dp</dimen>
<dimen name="drawer_section_item_text">12sp</dimen>
<dimen name="material_drawer_section_vertical_padding">4dp</dimen>
<dimen name="pet_width">120dp</dimen>
</resources>

View file

@ -277,6 +277,8 @@ To start, which parts of your life do you want to improve?</string>
<string name="hatching_potions">Hatching Potions</string>
<string name="food">Food</string>
<string name="quests">Quests</string>
<string name="pets">Pets</string>
<string name="mounts">Mounts</string>
<string name="armoireEquipment" formatted="false">You found a piece of rare Equipment in the Armoire: %s! Awesome!</string>
<string name="armoireFood" formatted="false">You rummage in the Armoire and find %s %s. What\'s that doing in here?</string>

View file

@ -85,7 +85,7 @@
<item name="android:layout_margin">@dimen/card_margin</item>
</style>
<style name="Row">
<style name="RowWrapper">
<item name="android:padding">@dimen/row_padding</item>
<item name="android:background">@drawable/selection_highlight</item>
</style>

View file

@ -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<List<Task>>() {}.getType();
Type skillListType = new TypeToken<List<Skill>>() {}.getType();
Type checklistType = new TypeToken<List<ChecklistItem>>() {}.getType();
Type customizationListType = new TypeToken<List<Customization>>() {}.getType();
Type tutorialStepListType = new TypeToken<List<TutorialStep>>() {}.getType();
Type faqArticleListType = new TypeToken<List<FAQArticle>>() {}.getType();
Type itemDataListType = new TypeToken<List<ItemData>>() {}.getType();
Type eggListType = new TypeToken<List<Egg>>() {}.getType();
Type foodListType = new TypeToken<List<Food>>() {}.getType();
Type hatchingPotionListType = new TypeToken<List<HatchingPotion>>() {}.getType();
Type questContentListType = new TypeToken<List<QuestContent>>() {}.getType();
Type petListType = new TypeToken<List<Pet>>() {}.getType();
Type mountListType = new TypeToken<List<Mount>>() {}.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();

View file

@ -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<QuestContent> questList = contentResult.quests.values();
Collection<QuestContent> 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<QuestContent> questList = contentResult.quests.values();
Collection<QuestContent> 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();
}
}

View file

@ -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;
}

View file

@ -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;

View file

@ -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<ItemRecyclerAdapter.ItemViewHolder> {
private List<Item> itemList;
public Double mana;
public Context context;
public void setItemList(List<Item> 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) {
}
}
}

View file

@ -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<MountDetailRecyclerAdapter.MountViewHolder> {
private List<Mount> itemList;
private HashMap<String, Boolean> ownedMapping;
public String itemType;
public Context context;
public void setItemList(List<Mount> itemList) {
this.itemList = itemList;
this.notifyDataSetChanged();
}
public void setOwnedMapping(HashMap<String, Boolean> 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) {
}
}
}

View file

@ -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<PetDetailRecyclerAdapter.PetViewHolder> {
private List<Pet> itemList;
private HashMap<String, Integer> ownedMapping;
public String itemType;
public Context context;
public void setItemList(List<Pet> itemList) {
this.itemList = itemList;
this.notifyDataSetChanged();
}
public void setOwnedMapping(HashMap<String, Integer> 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) {
}
}
}

View file

@ -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<StableRecyclerAdapter.StableViewHolder> {
private List<Animal> itemList;
private HashMap<String, Integer> ownedMapping;
public String itemType;
public MainActivity activity;
public <T extends Animal> void setItemList(List<Animal> itemList) {
this.itemList = itemList;
this.notifyDataSetChanged();
}
public void setOwnedMapping(HashMap<String, Integer> 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);
}
}
}
}
}
}
}

View file

@ -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<QuestC
public void bind(String key) {
Picasso.with(view.getContext())
.load("https://habitica-assets.s3.amazonaws.com/mobileApp/images/" + "quest_" + quest.key + "_" + key + ".png")
.load("https://habitica-assets.s3.amazonaws.com/mobileApp/images/" + "quest_" + quest.getKey() + "_" + key + ".png")
.into(image);
name.setText(quest.getCollect().get(key).text);
count.setText(progress.collect.get(key) + " / " + quest.getCollect().get(key).count);

View file

@ -0,0 +1,114 @@
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.MountDetailRecyclerAdapter;
import com.habitrpg.android.habitica.ui.adapter.inventory.PetDetailRecyclerAdapter;
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
import com.habitrpg.android.habitica.ui.helpers.MarginDecoration;
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.Select;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MountDetailRecyclerFragment extends BaseMainFragment {
public RecyclerView recyclerView;
public MountDetailRecyclerAdapter adapter;
public String animalType;
public List<Mount> 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<Mount> 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();
}
}

View file

@ -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<Pet> 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<Pet> 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();
}
}

View file

@ -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);
}
}

View file

@ -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<Animal> 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<Animal> items = from.where().orderBy(true, "animalGroup", "animal").groupBy("animal").queryList();
adapter.setItemList(items);
animals = items;
HashMap<String, Integer> ownedMap = new HashMap<>();
for (Animal animal : animals) {
ownedMap.put(animal.getAnimal(), 0);
}
switch (itemType) {
case "pets":
for (Map.Entry<String, Integer> 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<String, Boolean> 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();
}
}

View file

@ -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<Item> items = from.where(Condition.column("owned").greaterThan(0)).queryList();
adapter.setItemList(items);
}
}
}

View file

@ -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);
}
}

View file

@ -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;

View file

@ -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;

View file

@ -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<String, QuestContent> quests;
public List<QuestContent> quests;
public List<Egg> eggs;
public List<Food> food;
public List<HatchingPotion> hatchingPotions;
public SkillList spells;
public List<Pet> pets;
public List<Pet> specialPets;
public List<Pet> premiumPets;
public List<Pet> questPets;
public List<Mount> mounts;
public List<Mount> specialMounts;
public List<Mount> questMounts;
public List<Skill> spells;
public List<Customization> appearances;
public List<Customization> backgrounds;

View file

@ -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<Egg> eggs;
public List<Food> food;
public List<HatchingPotion> hatchingPotions;
public List<QuestContent> quests;
HashMap<String, Integer> pets;
HashMap<String, Boolean> 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<Egg> getEggs() {
return eggs;
}
public void setEggs(List<Egg> eggs) {
this.eggs = eggs;
}
public List<Food> getFood() {
return food;
}
public void setFood(List<Food> food) {
this.food = food;
}
public List<HatchingPotion> getHatchingPotions() {
return hatchingPotions;
}
public void setHatchingPotions(List<HatchingPotion> hatchingPotions) {
this.hatchingPotions = hatchingPotions;
}
public List<QuestContent> getQuests() {
return quests;
}
public void setQuests(List<QuestContent> quests) {
this.quests = quests;
}
public HashMap<String, Integer> getPets() {
return pets;
}
public void setPets(HashMap<String, Integer> pets) {
this.pets = pets;
}
public HashMap<String, Boolean> getMounts() {
return mounts;
}
public void setMounts(HashMap<String, Boolean> mounts) {
this.mounts = mounts;
}
public Items() {}
@Override

View file

@ -1,8 +0,0 @@
package com.magicmicky.habitrpgwrapper.lib.models;
/**
* Created by viirus on 25/11/15.
*/
public class SkillList {
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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<String, QuestCollect> 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<QuestCollect> getCollectCollection() {
return getCollect().values();
@ -81,6 +106,4 @@ public class QuestContent extends BaseModel {
super.save();
}
// todo drops
}

View file

@ -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<ContentResult> {
@Override
public ContentResult deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
List<BaseModel> 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<List<QuestContent>>() {}.getType());
result.eggs = context.deserialize(object.get("eggs"), new TypeToken<List<Egg>>() {}.getType());
result.food = context.deserialize(object.get("food"), new TypeToken<List<Food>>() {}.getType());
result.hatchingPotions = context.deserialize(object.get("hatchingPotions"), new TypeToken<List<HatchingPotion>>() {}.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<List<Pet>>() {}.getType());
result.specialPets = context.deserialize(object.get("specialPets"), new TypeToken<List<Pet>>() {}.getType());
result.premiumPets = context.deserialize(object.get("premiumPets"), new TypeToken<List<Pet>>() {}.getType());
result.questPets = context.deserialize(object.get("questPets"), new TypeToken<List<Pet>>() {}.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<List<Mount>>() {}.getType());
result.specialMounts = context.deserialize(object.get("specialMounts"), new TypeToken<List<Mount>>() {}.getType());
result.questMounts = context.deserialize(object.get("questMounts"), new TypeToken<List<Mount>>() {}.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<List<Skill>>() {}.getType());
result.appearances = context.deserialize(object.get("appearances"), new TypeToken<List<Customization>>() {}.getType());
result.backgrounds = context.deserialize(object.get("backgrounds"), new TypeToken<List<Customization>>() {}.getType());
result.faq = context.deserialize(object.get("faq"), new TypeToken<List<FAQArticle>>() {}.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;
}
}

View file

@ -87,7 +87,6 @@ public class CustomizationDeserializer implements JsonDeserializer<List<Customiz
}
}
}
TransactionManager.getInstance().addTransaction(new SaveModelTransaction<>(ProcessModelInfo.withModels(customizations)));
return customizations;
}

View file

@ -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<List<Egg>> {
@Override
public List<Egg> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
List<Egg> vals = new ArrayList<>();
if (json.isJsonObject()) {
JsonObject object = json.getAsJsonObject();
List<Egg> 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<String,JsonElement> 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;
}
}

View file

@ -38,8 +38,6 @@ public class FAQArticleListDeserilializer implements JsonDeserializer<List<FAQAr
position++;
}
TransactionManager.getInstance().addTransaction(new SaveModelTransaction<>(ProcessModelInfo.withModels(vals)));
return vals;
}
}

View file

@ -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<List<Food>> {
@Override
public List<Food> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
List<Food> vals = new ArrayList<>();
if (json.isJsonObject()) {
JsonObject object = json.getAsJsonObject();
List<Food> 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<String,JsonElement> 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;
}
}

View file

@ -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<List<HatchingPotion>> {
@Override
public List<HatchingPotion> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
List<HatchingPotion> vals = new ArrayList<>();
if (json.isJsonObject()) {
JsonObject object = json.getAsJsonObject();
List<HatchingPotion> 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<String,JsonElement> 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;
}
}

View file

@ -64,7 +64,6 @@ public class ItemDataListDeserializer implements JsonDeserializer<List<ItemData>
}
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));

View file

@ -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<List<Mount>> {
@Override
public List<Mount> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
List<Mount> vals = new ArrayList<>();
for (Map.Entry<String,JsonElement> 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;
}
}

View file

@ -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<List<Pet>> {
@Override
public List<Pet> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
List<Pet> vals = new ArrayList<>();
for (Map.Entry<String,JsonElement> 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;
}
}

View file

@ -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<List<QuestContent>> {
@Override
public List<QuestContent> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
List<QuestContent> vals = new ArrayList<>();
if (json.isJsonObject()) {
JsonObject object = json.getAsJsonObject();
List<QuestContent> 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<String,JsonElement> 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;
}
}

View file

@ -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<SkillList> {
implements JsonDeserializer<List<Skill>> {
@Override
public SkillList deserialize(JsonElement json, Type type,
public List<Skill> 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;
}
}