mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-05-20 12:49:02 +00:00
allow changing equipment
This commit is contained in:
parent
9c8e1be9d4
commit
11eb098d35
25 changed files with 729 additions and 21 deletions
1
Habitica/assets/migrations/Habitica/14.sql
Normal file
1
Habitica/assets/migrations/Habitica/14.sql
Normal file
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE ItemData ADD COLUMN owned bool;
|
||||
74
Habitica/res/layout/equipment_overview_list.xml
Normal file
74
Habitica/res/layout/equipment_overview_list.xml
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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">
|
||||
<data>
|
||||
<import type="com.magicmicky.habitrpgwrapper.lib.models.Outfit" />
|
||||
<variable name="categorytitle" type="String"/>
|
||||
<variable name="outfit" type="Outfit"/>
|
||||
</data>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="5dp"
|
||||
android:text="@{categorytitle}"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||
|
||||
<android.support.v7.widget.CardView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/card_horizontal_padding">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:divider="?android:listDivider"
|
||||
android:showDividers="middle">
|
||||
<include layout="@layout/item_image_row"
|
||||
android:id="@+id/outfit_head"
|
||||
bind:title="@{@string/outfit_head}"
|
||||
bind:value="@{outfit.getHead}"
|
||||
bind:imageNamed='@{outfit.getHead}'/>
|
||||
<include layout="@layout/item_image_row"
|
||||
android:id="@+id/outfit_head_accessory"
|
||||
bind:title="@{@string/outfit_headAccessory}"
|
||||
bind:value="@{outfit.getHeadAccessory}"
|
||||
bind:imageNamed='@{outfit.getHeadAccessory}'/>
|
||||
<include layout="@layout/item_image_row"
|
||||
android:id="@+id/outfit_Eyewear"
|
||||
bind:title="@{@string/outfit_eyewear}"
|
||||
bind:value="@{outfit.getEyeWear}"
|
||||
bind:imageNamed='@{outfit.getEyeWear}'/>
|
||||
<include layout="@layout/item_image_row"
|
||||
android:id="@+id/outfit_Armor"
|
||||
bind:title="@{@string/outfit_armor}"
|
||||
bind:value="@{outfit.getArmor}"
|
||||
bind:imageNamed='@{outfit.getArmor}'/>
|
||||
<include layout="@layout/item_image_row"
|
||||
android:id="@+id/outfit_back"
|
||||
bind:title="@{@string/outfit_back}"
|
||||
bind:value="@{outfit.getBack}"
|
||||
bind:imageNamed='@{outfit.getBack}'/>
|
||||
<include layout="@layout/item_image_row"
|
||||
android:id="@+id/outfit_Body"
|
||||
bind:title="@{@string/outfit_body}"
|
||||
bind:value="@{outfit.getBody}"
|
||||
bind:imageNamed='@{outfit.getBody}'/>
|
||||
<include layout="@layout/item_image_row"
|
||||
android:id="@+id/outfit_weapon"
|
||||
bind:title="@{@string/outfit_weapon}"
|
||||
bind:value="@{outfit.getWeapon}"
|
||||
bind:imageNamed='@{outfit.getWeapon}'/>
|
||||
<include layout="@layout/item_image_row"
|
||||
android:id="@+id/outfit_shield"
|
||||
bind:title="@{@string/outfit_shield}"
|
||||
bind:value="@{outfit.getShield}"
|
||||
bind:imageNamed='@{outfit.getShield}'/>
|
||||
</LinearLayout>
|
||||
</android.support.v7.widget.CardView>
|
||||
</LinearLayout>
|
||||
</layout>
|
||||
|
|
@ -71,12 +71,12 @@
|
|||
android:layout_marginEnd="8dp"
|
||||
android:entries="@array/avatar_sizes"/>
|
||||
</LinearLayout>
|
||||
<include layout="@layout/avatar_overview_card"
|
||||
<include layout="@layout/item_image_row"
|
||||
android:id="@+id/avatar_shirt"
|
||||
bind:title="@{@string/avatar_shirt}"
|
||||
bind:value="@{preferences.getShirt}"
|
||||
bind:imageNamed='@{preferences.getSize + "_shirt_" + preferences.getShirt}'/>
|
||||
<include layout="@layout/avatar_overview_card"
|
||||
<include layout="@layout/item_image_row"
|
||||
android:id="@+id/avatar_skin"
|
||||
bind:title="@{@string/avatar_skin}"
|
||||
bind:value="@{preferences.getSkin}"
|
||||
|
|
@ -100,32 +100,32 @@
|
|||
android:orientation="vertical"
|
||||
android:divider="?android:listDivider"
|
||||
android:showDividers="middle">
|
||||
<include layout="@layout/avatar_overview_card"
|
||||
<include layout="@layout/item_image_row"
|
||||
android:id="@+id/avatar_hair_color"
|
||||
bind:title="@{@string/avatar_color}"
|
||||
bind:value="@{preferences.getHair.getColor}"
|
||||
bind:imageNamed='@{"hair_bangs_1_" + preferences.getHair.getColor}' />
|
||||
<include layout="@layout/avatar_overview_card"
|
||||
<include layout="@layout/item_image_row"
|
||||
android:id="@+id/avatar_hair_base"
|
||||
bind:title="@{@string/avatar_base}"
|
||||
bind:valueInt="@{preferences.getHair.getBase}"
|
||||
bind:imageNamed='@{preferences.getHair.getBase == 0 ? null : "hair_base_" + preferences.getHair.getBase + "_" + preferences.getHair.getColor}' />
|
||||
<include layout="@layout/avatar_overview_card"
|
||||
<include layout="@layout/item_image_row"
|
||||
android:id="@+id/avatar_hair_bangs"
|
||||
bind:title="@{@string/avatar_bangs}"
|
||||
bind:valueInt="@{preferences.getHair.getBangs}"
|
||||
bind:imageNamed='@{preferences.getHair.getBangs == 0 ? null : "hair_bangs_" + preferences.getHair.getBangs + "_" + preferences.getHair.getColor}' />
|
||||
<include layout="@layout/avatar_overview_card"
|
||||
<include layout="@layout/item_image_row"
|
||||
android:id="@+id/avatar_hair_flower"
|
||||
bind:title="@{@string/avatar_flower}"
|
||||
bind:valueInt="@{preferences.getHair.getFlower}"
|
||||
bind:imageNamed='@{preferences.getHair.getFlower == 0 ? null : "hair_flower_" + preferences.getHair.getFlower}' />
|
||||
<include layout="@layout/avatar_overview_card"
|
||||
<include layout="@layout/item_image_row"
|
||||
android:id="@+id/avatar_hair_beard"
|
||||
bind:title="@{@string/avatar_beard}"
|
||||
bind:valueInt="@{preferences.getHair.getBeard}"
|
||||
bind:imageNamed='@{preferences.getHair.getBeard == 0 ? null : "hair_beard_" + preferences.getHair.getBeard + "_" + preferences.getHair.getColor}' />
|
||||
<include layout="@layout/avatar_overview_card"
|
||||
<include layout="@layout/item_image_row"
|
||||
android:id="@+id/avatar_hair_mustache"
|
||||
bind:title="@{@string/avatar_mustache}"
|
||||
bind:valueInt="@{preferences.getHair.getMustache}"
|
||||
|
|
|
|||
61
Habitica/res/layout/fragment_equipment_overview.xml
Normal file
61
Habitica/res/layout/fragment_equipment_overview.xml
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layout xmlns:bind="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<data>
|
||||
<import type="com.magicmicky.habitrpgwrapper.lib.models.Outfit" />
|
||||
<import type="android.view.View" />
|
||||
|
||||
<variable
|
||||
name="currentBattleGear"
|
||||
type="Outfit" />
|
||||
<variable
|
||||
name="currentCostume"
|
||||
type="Outfit" />
|
||||
<variable
|
||||
name="usingCostume"
|
||||
type="Boolean" />
|
||||
</data>
|
||||
|
||||
|
||||
<android.support.v4.widget.NestedScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scrollbarSize="3dp"
|
||||
android:scrollbarThumbVertical="@color/md_grey_500"
|
||||
android:scrollbars="vertical"
|
||||
android:paddingTop="@dimen/row_padding"
|
||||
android:paddingBottom="@dimen/row_padding" >
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
<include layout="@layout/equipment_overview_list"
|
||||
android:id="@+id/battle_gear_group"
|
||||
bind:categorytitle="@{@string/battle_gear}"
|
||||
bind:outfit="@{currentBattleGear}"/>
|
||||
<include layout="@layout/equipment_overview_list"
|
||||
android:id="@+id/costume_group"
|
||||
bind:categorytitle="@{@string/costume}"
|
||||
bind:outfit="@{currentCostume}"/>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="@dimen/row_padding">
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/wear_costume"/>
|
||||
|
||||
<Switch
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/costume_switch"
|
||||
android:checked="@{usingCostume}"/>
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</android.support.v4.widget.NestedScrollView>
|
||||
</layout>
|
||||
30
Habitica/res/layout/gear_list_item.xml
Normal file
30
Habitica/res/layout/gear_list_item.xml
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="horizontal" android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="@dimen/row_padding"
|
||||
android:background="@drawable/selection_highlight">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="@dimen/gear_image_size"
|
||||
android:layout_height="@dimen/gear_image_size"
|
||||
android:id="@+id/gear_image" />
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/gear_text"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/gear_notes" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
@ -13,8 +13,8 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:minHeight="60dp"
|
||||
android:padding="5dp"
|
||||
android:paddingTop="8dp"
|
||||
android:paddingBottom="8dp"
|
||||
android:paddingTop="@dimen/row_padding"
|
||||
android:paddingBottom="@dimen/row_padding"
|
||||
android:clickable="true"
|
||||
android:background="@drawable/selection_highlight">
|
||||
<ImageView
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical" android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="8dp">
|
||||
android:padding="@dimen/row_padding">
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
|
|
|
|||
|
|
@ -55,4 +55,6 @@
|
|||
<dimen name="avatar_small_width">114dp</dimen>
|
||||
<dimen name="avatar_small_height">90dp</dimen>
|
||||
<dimen name="customization_width">100dp</dimen>
|
||||
<dimen name="gear_image_size">90dp</dimen>
|
||||
<dimen name="row_padding">8dp</dimen>
|
||||
</resources>
|
||||
|
|
@ -241,4 +241,15 @@ To start, which parts of your life do you want to improve?</string>
|
|||
<string name="todo_due" formatted="false">Due: %s</string>
|
||||
<string name="daily_streak" formatted="false">current streak: %d</string>
|
||||
<string name="todo_has_duedate">Task has Due Date</string>
|
||||
<string name="battle_gear">Battle Gear</string>
|
||||
<string name="costume">Costume</string>
|
||||
<string name="outfit_head">Head</string>
|
||||
<string name="outfit_headAccessory">Head Accessory</string>
|
||||
<string name="outfit_eyewear">Eyewear</string>
|
||||
<string name="outfit_armor">Armor</string>
|
||||
<string name="outfit_back">Back</string>
|
||||
<string name="outfit_body">Body</string>
|
||||
<string name="outfit_shield">Shield</string>
|
||||
<string name="outfit_weapon">Weapon</string>
|
||||
<string name="wear_costume">Wear Costume</string>
|
||||
</resources>
|
||||
|
|
@ -35,6 +35,7 @@ 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.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;
|
||||
|
|
@ -42,6 +43,7 @@ import com.magicmicky.habitrpgwrapper.lib.utils.CustomizationDeserializer;
|
|||
import com.magicmicky.habitrpgwrapper.lib.utils.DateDeserializer;
|
||||
import com.magicmicky.habitrpgwrapper.lib.utils.FAQArticleListDeserilializer;
|
||||
import com.magicmicky.habitrpgwrapper.lib.utils.GroupSerialization;
|
||||
import com.magicmicky.habitrpgwrapper.lib.utils.ItemDataListDeserializer;
|
||||
import com.magicmicky.habitrpgwrapper.lib.utils.PurchasedDeserializer;
|
||||
import com.magicmicky.habitrpgwrapper.lib.utils.SkillDeserializer;
|
||||
import com.magicmicky.habitrpgwrapper.lib.utils.TaskListDeserializer;
|
||||
|
|
@ -94,6 +96,7 @@ public class APIHelper implements ErrorHandler, Profiler {
|
|||
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();
|
||||
|
||||
//Exclusion stratety needed for DBFlow https://github.com/Raizlabs/DBFlow/issues/121
|
||||
Gson gson = new GsonBuilder()
|
||||
|
|
@ -122,6 +125,7 @@ public class APIHelper implements ErrorHandler, Profiler {
|
|||
.registerTypeAdapter(faqArticleListType, new FAQArticleListDeserilializer())
|
||||
.registerTypeAdapter(Group.class, new GroupSerialization())
|
||||
.registerTypeAdapter(Date.class, new DateDeserializer())
|
||||
.registerTypeAdapter(itemDataListType, new ItemDataListDeserializer())
|
||||
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
|
||||
.create();
|
||||
|
||||
|
|
|
|||
|
|
@ -106,10 +106,10 @@ public class ContentCache {
|
|||
} else if (searchKey == "armoire") {
|
||||
searchedItem = (T) contentResult.armoire;
|
||||
} else {
|
||||
Collection<ItemData> itemList = contentResult.gear.flat.values();
|
||||
Collection<ItemData> itemList = contentResult.gear.flat;
|
||||
|
||||
for (ItemData item : itemList) {
|
||||
if (item.key == searchKey) {
|
||||
if (item.key.equals(searchKey)) {
|
||||
searchedItem = (T) item;
|
||||
}
|
||||
}
|
||||
|
|
@ -141,7 +141,7 @@ public class ContentCache {
|
|||
case "item": {
|
||||
List<T> resultList = new ArrayList<T>();
|
||||
|
||||
List<ItemData> itemList = new ArrayList<ItemData>(contentResult.gear.flat.values());
|
||||
List<ItemData> itemList = new ArrayList<ItemData>(contentResult.gear.flat);
|
||||
itemList.add(contentResult.potion);
|
||||
itemList.add(contentResult.armoire);
|
||||
|
||||
|
|
@ -181,7 +181,7 @@ public class ContentCache {
|
|||
}
|
||||
}
|
||||
|
||||
Collection<ItemData> itemList = new ArrayList<>(contentResult.gear.flat.values());
|
||||
Collection<ItemData> itemList = new ArrayList<>(contentResult.gear.flat);
|
||||
itemList.add(contentResult.armoire);
|
||||
itemList.add(contentResult.potion);
|
||||
|
||||
|
|
|
|||
|
|
@ -10,5 +10,5 @@ public class HabitDatabase {
|
|||
|
||||
public static final String NAME = "Habitica";
|
||||
|
||||
public static final int VERSION = 13;
|
||||
public static final int VERSION = 14;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,36 @@
|
|||
package com.habitrpg.android.habitica.callbacks;
|
||||
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Gear;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Items;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.responses.UnlockResponse;
|
||||
|
||||
import retrofit.Callback;
|
||||
import retrofit.RetrofitError;
|
||||
import retrofit.client.Response;
|
||||
|
||||
public class ItemsCallback implements Callback<Items> {
|
||||
|
||||
private final HabitRPGUserCallback.OnUserReceived mCallback;
|
||||
|
||||
private HabitRPGUser user;
|
||||
|
||||
public ItemsCallback(HabitRPGUserCallback.OnUserReceived callback, HabitRPGUser user) {
|
||||
this.mCallback = callback;
|
||||
this.user = user;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void success(Items items, Response response) {
|
||||
this.user.setItems(items);
|
||||
|
||||
this.user.async().save();
|
||||
|
||||
mCallback.onUserReceived(this.user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failure(RetrofitError error) {
|
||||
mCallback.onUserFail();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
package com.habitrpg.android.habitica.events.commands;
|
||||
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData;
|
||||
|
||||
public class EquipGearCommand {
|
||||
|
||||
public ItemData gear;
|
||||
public Boolean asCostume;
|
||||
|
||||
}
|
||||
|
|
@ -13,6 +13,7 @@ import com.habitrpg.android.habitica.ui.fragments.inventory.customization.Avatar
|
|||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.faq.FAQOverviewFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.GemsPurchaseFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.inventory.equipment.EquipmentOverviewFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.GuildsOverviewFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.party.PartyFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.SkillsFragment;
|
||||
|
|
@ -87,7 +88,7 @@ public class MainDrawerBuilder {
|
|||
|
||||
new SectionDrawerItem().withName(activity.getString(R.string.sidebar_section_inventory)),
|
||||
new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_avatar)).withIdentifier(SIDEBAR_AVATAR),
|
||||
new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_equipment)).withIdentifier(SIDEBAR_EQUIPMENT).withEnabled(false).withBadge(R.string.coming_soon),
|
||||
new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_equipment)).withIdentifier(SIDEBAR_EQUIPMENT),
|
||||
new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_stable)).withIdentifier(SIDEBAR_STABLE).withEnabled(false).withBadge(R.string.coming_soon),
|
||||
new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_purchaseGems)).withIdentifier(SIDEBAR_PURCHASE),
|
||||
|
||||
|
|
@ -131,6 +132,10 @@ public class MainDrawerBuilder {
|
|||
fragment = new AvatarOverviewFragment();
|
||||
break;
|
||||
}
|
||||
case SIDEBAR_EQUIPMENT: {
|
||||
fragment = new EquipmentOverviewFragment();
|
||||
break;
|
||||
}
|
||||
case SIDEBAR_PURCHASE: {
|
||||
fragment = new GemsPurchaseFragment();
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -32,8 +32,10 @@ import com.habitrpg.android.habitica.HabiticaApplication;
|
|||
import com.habitrpg.android.habitica.HostConfig;
|
||||
import com.habitrpg.android.habitica.NotificationPublisher;
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.callbacks.ItemsCallback;
|
||||
import com.habitrpg.android.habitica.events.DisplayFragmentEvent;
|
||||
import com.habitrpg.android.habitica.events.DisplayTutorialEvent;
|
||||
import com.habitrpg.android.habitica.events.commands.EquipGearCommand;
|
||||
import com.habitrpg.android.habitica.ui.TutorialView;
|
||||
import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
|
||||
import com.habitrpg.android.habitica.callbacks.TaskScoringCallback;
|
||||
|
|
@ -54,6 +56,7 @@ import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
|
|||
import com.habitrpg.android.habitica.ui.fragments.GemsPurchaseFragment;
|
||||
import com.habitrpg.android.habitica.userpicture.UserPicture;
|
||||
import com.habitrpg.android.habitica.userpicture.UserPictureRunnable;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Gear;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.SuppressedModals;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirection;
|
||||
|
|
@ -525,6 +528,15 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O
|
|||
mAPIHelper.apiService.updateUser(event.updateData, new HabitRPGUserCallback(this));
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onEvent(EquipGearCommand event) {
|
||||
if (event.asCostume) {
|
||||
this.mAPIHelper.apiService.equipCostume(event.gear.key, new ItemsCallback(this, this.user));
|
||||
} else {
|
||||
this.mAPIHelper.apiService.equipBattleGear(event.gear.key, new ItemsCallback(this, this.user));
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onEvent(UnlockPathCommand event) {
|
||||
this.user.setBalance(this.user.getBalance() - event.balanceDiff);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,96 @@
|
|||
package com.habitrpg.android.habitica.ui.adapter.inventory;
|
||||
|
||||
import android.content.res.Resources;
|
||||
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.events.commands.EquipGearCommand;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.Bind;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
public class EquipmentRecyclerViewAdapter extends RecyclerView.Adapter<EquipmentRecyclerViewAdapter.GearViewHolder> {
|
||||
|
||||
private List<ItemData> gearList;
|
||||
|
||||
public String equippedGear;
|
||||
public Boolean isCostume;
|
||||
|
||||
public void setGearList(List<ItemData> gearList) {
|
||||
this.gearList = gearList;
|
||||
this.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public GearViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
|
||||
View view = LayoutInflater.from(parent.getContext())
|
||||
.inflate(R.layout.gear_list_item, parent, false);
|
||||
|
||||
return new GearViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(GearViewHolder holder, int position) {
|
||||
holder.bind(gearList.get(position));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return gearList == null ? 0 : gearList.size();
|
||||
}
|
||||
|
||||
class GearViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||
|
||||
@Bind(R.id.gear_text)
|
||||
TextView gearNameTextView;
|
||||
|
||||
@Bind(R.id.gear_notes)
|
||||
TextView gearNotesTextView;
|
||||
|
||||
@Bind(R.id.gear_image)
|
||||
ImageView imageView;
|
||||
|
||||
ItemData gear;
|
||||
|
||||
Resources resources;
|
||||
|
||||
public GearViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
|
||||
ButterKnife.bind(this, itemView);
|
||||
|
||||
resources = itemView.getResources();
|
||||
itemView.setOnClickListener(this);
|
||||
}
|
||||
|
||||
public void bind(ItemData gear) {
|
||||
this.gear = gear;
|
||||
this.gearNameTextView.setText(this.gear.text);
|
||||
this.gearNotesTextView.setText(this.gear.notes);
|
||||
|
||||
Picasso.with(imageView.getContext())
|
||||
.load("https://habitica-assets.s3.amazonaws.com/mobileApp/images/" + gear.key + ".png")
|
||||
.into(imageView);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
EquipGearCommand command = new EquipGearCommand();
|
||||
command.gear = this.gear;
|
||||
command.asCostume = isCostume;
|
||||
EventBus.getDefault().post(command);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.inventory.equipment;
|
||||
|
||||
import android.databinding.DataBindingUtil;
|
||||
import android.os.Bundle;
|
||||
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.CustomizationRecyclerViewAdapter;
|
||||
import com.habitrpg.android.habitica.ui.adapter.inventory.EquipmentRecyclerViewAdapter;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.inventory.customization.AvatarCustomizationFragment;
|
||||
import com.habitrpg.android.habitica.ui.helpers.MarginDecoration;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.FAQArticle;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Gear;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData;
|
||||
import com.raizlabs.android.dbflow.sql.builder.Condition;
|
||||
import com.raizlabs.android.dbflow.sql.language.Select;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.Bind;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
public class EquipmentDetailFragment extends BaseMainFragment {
|
||||
|
||||
public String type;
|
||||
public String equippedGear;
|
||||
public Boolean isCostume;
|
||||
|
||||
@Bind(R.id.recyclerView)
|
||||
RecyclerView recyclerView;
|
||||
|
||||
EquipmentRecyclerViewAdapter adapter;
|
||||
|
||||
|
||||
@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_recyclerview, container, false);
|
||||
|
||||
ButterKnife.bind(this, v);
|
||||
|
||||
this.adapter = new EquipmentRecyclerViewAdapter();
|
||||
this.adapter.equippedGear = this.equippedGear;
|
||||
this.adapter.isCostume = this.isCostume;
|
||||
this.recyclerView.setLayoutManager(new LinearLayoutManager(activity));
|
||||
this.recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST));
|
||||
|
||||
this.recyclerView.setAdapter(this.adapter);
|
||||
|
||||
this.loadGear();
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
private void loadGear() {
|
||||
if(user == null || adapter == null){
|
||||
return;
|
||||
}
|
||||
|
||||
List<ItemData> gear = new Select()
|
||||
.from(ItemData.class)
|
||||
.where(Condition.CombinedCondition.begin(Condition.column("type").eq(this.type))
|
||||
.and(Condition.column("owned").eq(true))
|
||||
).queryList();
|
||||
|
||||
adapter.setGearList(gear);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,212 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.inventory.equipment;
|
||||
|
||||
import android.databinding.DataBindingUtil;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.Switch;
|
||||
|
||||
import com.habitrpg.android.habitica.ContentCache;
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.databinding.FragmentEquipmentOverviewBinding;
|
||||
import com.habitrpg.android.habitica.events.commands.UpdateUserCommand;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.inventory.customization.AvatarCustomizationFragment;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import butterknife.Bind;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
public class EquipmentOverviewFragment extends BaseMainFragment {
|
||||
|
||||
FragmentEquipmentOverviewBinding viewBinding;
|
||||
|
||||
@Bind(R.id.battle_gear_group)
|
||||
View battleGearGroupView;
|
||||
|
||||
@Bind(R.id.costume_group)
|
||||
View costumeGroupView;
|
||||
|
||||
View battleGearHeadView;
|
||||
View battleGearHeadAccessoryView;
|
||||
View battleGearEyewearView;
|
||||
View battleGearArmorView;
|
||||
View battleGearBackView;
|
||||
View battleGearBodyView;
|
||||
View battleGearWeaponView;
|
||||
View battleGearShieldView;
|
||||
|
||||
View costumeHeadView;
|
||||
View costumeHeadAccessoryView;
|
||||
View costumeEyewearView;
|
||||
View costumeArmorView;
|
||||
View costumeBackView;
|
||||
View costumeBodyView;
|
||||
View costumeWeaponView;
|
||||
View costumeShieldView;
|
||||
|
||||
@Bind(R.id.costume_switch)
|
||||
Switch costumeSwitch;
|
||||
|
||||
@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_equipment_overview, container, false);
|
||||
|
||||
viewBinding = DataBindingUtil.bind(v);
|
||||
viewBinding.setCurrentBattleGear(this.user.getItems().getGear().getEquipped());
|
||||
viewBinding.setCurrentCostume(this.user.getItems().getGear().getCostume());
|
||||
viewBinding.setUsingCostume(this.user.getPreferences().getCostume());
|
||||
|
||||
ButterKnife.bind(this, v);
|
||||
|
||||
battleGearHeadView = battleGearGroupView.findViewById(R.id.outfit_head);
|
||||
battleGearHeadAccessoryView = battleGearGroupView.findViewById(R.id.outfit_head_accessory);
|
||||
battleGearEyewearView = battleGearGroupView.findViewById(R.id.outfit_Eyewear);
|
||||
battleGearArmorView = battleGearGroupView.findViewById(R.id.outfit_Armor);
|
||||
battleGearBackView = battleGearGroupView.findViewById(R.id.outfit_back);
|
||||
battleGearBodyView = battleGearGroupView.findViewById(R.id.outfit_Body);
|
||||
battleGearWeaponView = battleGearGroupView.findViewById(R.id.outfit_weapon);
|
||||
battleGearShieldView = battleGearGroupView.findViewById(R.id.outfit_shield);
|
||||
|
||||
costumeHeadView = costumeGroupView.findViewById(R.id.outfit_head);
|
||||
costumeHeadAccessoryView = costumeGroupView.findViewById(R.id.outfit_head_accessory);
|
||||
costumeEyewearView = costumeGroupView.findViewById(R.id.outfit_Eyewear);
|
||||
costumeArmorView = costumeGroupView.findViewById(R.id.outfit_Armor);
|
||||
costumeBackView = costumeGroupView.findViewById(R.id.outfit_back);
|
||||
costumeBodyView = costumeGroupView.findViewById(R.id.outfit_Body);
|
||||
costumeWeaponView = costumeGroupView.findViewById(R.id.outfit_weapon);
|
||||
costumeShieldView = costumeGroupView.findViewById(R.id.outfit_shield);
|
||||
|
||||
battleGearHeadView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
displayEquipmentDetailList("head", user.getItems().getGear().getEquipped().getHead(), false);
|
||||
}
|
||||
});
|
||||
battleGearHeadAccessoryView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
displayEquipmentDetailList("headAccessory", user.getItems().getGear().getEquipped().getHeadAccessory(), false);
|
||||
}
|
||||
});
|
||||
battleGearEyewearView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
displayEquipmentDetailList("eyewear", user.getItems().getGear().getEquipped().getEyeWear(), false);
|
||||
}
|
||||
});
|
||||
battleGearArmorView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
displayEquipmentDetailList("armor", user.getItems().getGear().getEquipped().getArmor(), false);
|
||||
}
|
||||
});
|
||||
battleGearBackView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
displayEquipmentDetailList("back", user.getItems().getGear().getEquipped().getBack(), false);
|
||||
}
|
||||
});
|
||||
battleGearBodyView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
displayEquipmentDetailList("body", user.getItems().getGear().getEquipped().getBody(), false);
|
||||
}
|
||||
});
|
||||
battleGearWeaponView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
displayEquipmentDetailList("weapon", user.getItems().getGear().getEquipped().getWeapon(), false);
|
||||
}
|
||||
});
|
||||
battleGearShieldView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
displayEquipmentDetailList("shield", user.getItems().getGear().getEquipped().getShield(), false);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
costumeHeadView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
displayEquipmentDetailList("head", user.getItems().getGear().getEquipped().getHead(), true);
|
||||
}
|
||||
});
|
||||
costumeHeadAccessoryView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
displayEquipmentDetailList("headAccessory", user.getItems().getGear().getEquipped().getHeadAccessory(), true);
|
||||
}
|
||||
});
|
||||
costumeEyewearView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
displayEquipmentDetailList("eyewear", user.getItems().getGear().getEquipped().getEyeWear(), true);
|
||||
}
|
||||
});
|
||||
costumeArmorView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
displayEquipmentDetailList("armor", user.getItems().getGear().getEquipped().getArmor(), true);
|
||||
}
|
||||
});
|
||||
costumeBackView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
displayEquipmentDetailList("back", user.getItems().getGear().getEquipped().getBack(), true);
|
||||
}
|
||||
});
|
||||
costumeBodyView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
displayEquipmentDetailList("body", user.getItems().getGear().getEquipped().getBody(), true);
|
||||
}
|
||||
});
|
||||
costumeWeaponView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
displayEquipmentDetailList("weapon", user.getItems().getGear().getEquipped().getWeapon(), true);
|
||||
}
|
||||
});
|
||||
costumeShieldView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
displayEquipmentDetailList("shield", user.getItems().getGear().getEquipped().getShield(), true);
|
||||
}
|
||||
});
|
||||
|
||||
this.costumeSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
UpdateUserCommand command = new UpdateUserCommand();
|
||||
Map<String, Object> updateData = new HashMap<>();
|
||||
updateData.put("preferences.costume", isChecked);
|
||||
command.updateData = updateData;
|
||||
|
||||
EventBus.getDefault().post(command);
|
||||
}
|
||||
});
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
private void displayEquipmentDetailList(String type, String equipped, Boolean isCostume) {
|
||||
EquipmentDetailFragment fragment = new EquipmentDetailFragment();
|
||||
fragment.type = type;
|
||||
fragment.isCostume = isCostume;
|
||||
fragment.equippedGear = equipped;
|
||||
activity.displayFragment(fragment);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,10 +1,13 @@
|
|||
package com.magicmicky.habitrpgwrapper.lib.api;
|
||||
|
||||
import com.habitrpg.android.habitica.callbacks.ItemsCallback;
|
||||
import com.habitrpg.android.habitica.ui.activities.SetupActivity;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.ChatMessage;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.ContentResult;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Gear;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Group;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Items;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.PostChatMessageResult;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Status;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Tag;
|
||||
|
|
@ -50,6 +53,12 @@ public interface ApiService {
|
|||
@GET("/user/inventory/buy")
|
||||
void getInventoryBuyableGear(Callback<List<ItemData>> buyableGearCallback);
|
||||
|
||||
@POST("/user/inventory/equip/equipped/{key}")
|
||||
void equipBattleGear(@Path("key") String itemKey, Callback<Items> gearCallback);
|
||||
|
||||
@POST("/user/inventory/equip/costume/{key}")
|
||||
void equipCostume(@Path("key") String itemKey, Callback<Items> gearCallback);
|
||||
|
||||
@POST("/user/inventory/buy/{key}")
|
||||
void buyItem(@Path("key") String itemKey, Callback<Void> voidCallback);
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,10 @@ package com.magicmicky.habitrpgwrapper.lib.models;
|
|||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class ContentGear{
|
||||
|
||||
public HashMap<String, ItemData> flat;
|
||||
public List<ItemData> flat;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.magicmicky.habitrpgwrapper.lib.models;
|
||||
|
||||
import com.habitrpg.android.habitica.HabitDatabase;
|
||||
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;
|
||||
|
|
@ -9,6 +10,8 @@ import com.raizlabs.android.dbflow.annotation.PrimaryKey;
|
|||
import com.raizlabs.android.dbflow.annotation.Table;
|
||||
import com.raizlabs.android.dbflow.structure.BaseModel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by viirus on 20/07/15.
|
||||
*/
|
||||
|
|
@ -33,6 +36,8 @@ public class Gear extends BaseModel {
|
|||
foreignColumnName = "user_id")})
|
||||
private Outfit costume;
|
||||
|
||||
public List<ItemData> owned;
|
||||
|
||||
public Outfit getCostume() {
|
||||
return costume;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,4 +42,7 @@ public class ItemData extends BaseModel {
|
|||
@Column
|
||||
@SerializedName("int")
|
||||
public float _int;
|
||||
|
||||
@Column
|
||||
public Boolean owned;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,9 +28,6 @@ import java.util.Arrays;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Created by viirus on 14/01/16.
|
||||
*/
|
||||
public class CustomizationDeserializer implements JsonDeserializer<List<Customization>> {
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -0,0 +1,63 @@
|
|||
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.Customization;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
|
||||
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.builder.Condition;
|
||||
import com.raizlabs.android.dbflow.sql.language.Select;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class ItemDataListDeserializer implements JsonDeserializer<List<ItemData>> {
|
||||
@Override
|
||||
public List<ItemData> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
|
||||
JsonObject object = json.getAsJsonObject();
|
||||
List<ItemData> vals = new ArrayList<>();
|
||||
|
||||
List<ItemData> existingItems = new Select().from(ItemData.class).queryList();
|
||||
|
||||
for (ItemData item : existingItems) {
|
||||
if(object.has(item.key)) {
|
||||
JsonElement itemObject = object.get(item.key);
|
||||
|
||||
if (itemObject.isJsonObject()) {
|
||||
ItemData parsedItem = context.deserialize(itemObject.getAsJsonObject(), ItemData.class);
|
||||
item.text = parsedItem.text;
|
||||
item.value = parsedItem.value;
|
||||
item.type = parsedItem.type;
|
||||
item.klass = parsedItem.klass;
|
||||
item.index = parsedItem.index;
|
||||
item.notes = parsedItem.notes;
|
||||
item.con = parsedItem.con;
|
||||
item.str = parsedItem.str;
|
||||
item.per = parsedItem.per;
|
||||
item._int = parsedItem._int;
|
||||
} else {
|
||||
item.owned = itemObject.getAsBoolean();
|
||||
}
|
||||
vals.add(item);
|
||||
object.remove(item.key);
|
||||
}
|
||||
}
|
||||
|
||||
for (Map.Entry<String,JsonElement> entry : json.getAsJsonObject().entrySet()) {
|
||||
ItemData item = context.deserialize(entry.getValue(), ItemData.class);
|
||||
vals.add(item);
|
||||
}
|
||||
TransactionManager.getInstance().addTransaction(new SaveModelTransaction<>(ProcessModelInfo.withModels(vals)));
|
||||
|
||||
return vals;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue