Display current avatar customization

This commit is contained in:
Phillip Thelen 2016-01-12 17:08:02 +01:00
parent 921b14183c
commit ca2f89087f
11 changed files with 292 additions and 10 deletions

View file

@ -0,0 +1 @@
ALTER TABLE Hair ADD COLUMN 'flower' INTEGER DEFAULT 0;

View file

@ -0,0 +1,45 @@
<?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>
<variable name="title" type="String"/>
<variable name="value" type="String"/>
<variable name="valueInt" type="int"/>
<variable name="imageNamed" type="String"/>
</data>
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="60dp"
android:layout_height="60dp"
bind:imageName='@{imageNamed == null ? "head_0" : imageNamed}'
android:contentDescription="@{imageNamed}"
android:alpha="@{imageNamed == null ? 0.4f : 1.0f}"
android:scaleType="fitEnd"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{title}"
tools:text="Title"
android:textStyle="bold"/>
<TextView android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/task_gray"
tools:text="Value"
android:text="@{value != null ? value : (valueInt != 0 ? String.valueOf(valueInt) : @string/avatar_nothing)}" />
</LinearLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
</layout>

View file

@ -0,0 +1,111 @@
<?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.Preferences" />
<import type="android.view.View" />
<variable
name="preferences"
type="Preferences" />
</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">
<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="@string/avatar_body"
android:textAppearance="?android:attr/textAppearanceMedium" />
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="40dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/textView3"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:text="@string/avatar_size"
android:gravity="center_vertical"
android:textStyle="bold" />
<Spinner
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/avatar_size_spinner"
android:spinnerMode="dropdown"
android:layout_marginRight="8dp"
android:layout_marginEnd="8dp"
android:entries="@array/avatar_sizes"/>
</LinearLayout>
</android.support.v7.widget.CardView>
<include layout="@layout/avatar_overview_card"
bind:title="@{@string/avatar_shirt}"
bind:value="@{preferences.getShirt}"
bind:imageNamed='@{preferences.getSize + "_shirt_" + preferences.getShirt}'/>
<include layout="@layout/avatar_overview_card"
bind:title="@{@string/avatar_skin}"
bind:value="@{preferences.getSkin}"
bind:imageNamed='@{"skin_" + preferences.getSkin}' />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/avatar_hair"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_margin="5dp"/>
<include layout="@layout/avatar_overview_card"
bind:title="@{@string/avatar_color}"
bind:value="@{preferences.getHair.getColor}"
bind:imageNamed='@{"hair_bangs_1_" + preferences.getHair.getColor}' />
<include layout="@layout/avatar_overview_card"
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"
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"
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"
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"
bind:title="@{@string/avatar_mustache}"
bind:valueInt="@{preferences.getHair.getMustache}"
bind:imageNamed='@{preferences.getHair.getMustache == 0 ? null : "hair_mustache_" + preferences.getHair.getMustache + "_" + preferences.getHair.getColor}' />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</layout>

View file

@ -83,7 +83,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
bind:imageName='@{"quest_"+ quest.key}'
bind:questImageName='@{"quest_"+ quest.key}'
/>
<TextView

View file

@ -140,4 +140,19 @@
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="quest">Quest</string>
<string name="avatar_body">Body</string>
<string name="avatar_hair">Hair</string>
<string name="avatar_shirt">Shirt</string>
<string name="avatar_skin">Skin</string>
<string name="avatar_ears">Animal Ears</string>
<string name="avatar_base">Base</string>
<string name="avatar_color">Color</string>
<string name="avatar_beard">Beard</string>
<string name="avatar_mustache">Mustache</string>
<string name="avatar_flower">Flower</string>
<string name="avatar_bangs">Bangs</string>
<string name="avatar_nothing">Nothing set</string>
<string name="avatar_size">Size</string>
<string name="avatar_size_slim">Slim</string>
<string name="avatar_size_broad">Broad</string>
</resources>

View file

@ -29,4 +29,9 @@
<item>@string/saturday</item>
<item>@string/sunday</item>
</string-array>
<string-array name="avatar_sizes">
<item>@string/avatar_size_slim</item>
<item>@string/avatar_size_broad</item>
</string-array>
</resources>

View file

@ -10,5 +10,5 @@ public class HabitDatabase {
public static final String NAME = "Habitica";
public static final int VERSION = 4;
public static final int VERSION = 5;
}

View file

@ -9,6 +9,7 @@ import com.habitrpg.android.habitica.ui.activities.AboutActivity;
import com.habitrpg.android.habitica.ui.activities.MainActivity;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.ui.activities.PrefsActivity;
import com.habitrpg.android.habitica.ui.fragments.AvatarOverviewFragment;
import com.habitrpg.android.habitica.ui.fragments.BaseFragment;
import com.habitrpg.android.habitica.ui.fragments.GemsPurchaseFragment;
import com.habitrpg.android.habitica.ui.fragments.PartyFragment;
@ -37,9 +38,12 @@ public class MainDrawerBuilder {
public static final int SIDEBAR_SKILLS = 1;
public static final int SIDEBAR_TAVERN = 3;
public static final int SIDEBAR_PARTY = 4;
public static final int SIDEBAR_PURCHASE = 5;
public static final int SIDEBAR_SETTINGS = 7;
public static final int SIDEBAR_ABOUT = 8;
public static final int SIDEBAR_AVATAR = 5;
public static final int SIDEBAR_EQUIPMENT = 6;
public static final int SIDEBAR_STABLE = 7;
public static final int SIDEBAR_PURCHASE = 8;
public static final int SIDEBAR_SETTINGS = 9;
public static final int SIDEBAR_ABOUT = 10;
@ -82,9 +86,9 @@ public class MainDrawerBuilder {
new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_challenges)),*/
new SectionDrawerItem().withName(activity.getString(R.string.sidebar_section_inventory)),
new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_avatar)).withEnabled(false).withBadge(R.string.coming_soon),
new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_equipment)).withEnabled(false).withBadge(R.string.coming_soon),
new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_stable)).withEnabled(false).withBadge(R.string.coming_soon),
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_stable)).withIdentifier(SIDEBAR_STABLE).withEnabled(false).withBadge(R.string.coming_soon),
new PrimaryDrawerItem().withName(activity.getString(R.string.sidebar_purchaseGems)).withIdentifier(SIDEBAR_PURCHASE),
new DividerDrawerItem(),
@ -117,6 +121,10 @@ public class MainDrawerBuilder {
fragment = new TavernFragment();
break;
}
case SIDEBAR_AVATAR: {
fragment = new AvatarOverviewFragment();
break;
}
case SIDEBAR_PURCHASE: {
fragment = new GemsPurchaseFragment();
break;

View file

@ -0,0 +1,83 @@
package com.habitrpg.android.habitica.ui.fragments;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Spinner;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
import com.habitrpg.android.habitica.databinding.FragmentAvatarOverviewBinding;
import com.habitrpg.android.habitica.databinding.FragmentPartyInfoBinding;
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
import java.util.HashMap;
import java.util.Map;
import butterknife.Bind;
import butterknife.ButterKnife;
/**
* Created by viirus on 12/01/16.
*/
public class AvatarOverviewFragment extends BaseFragment implements AdapterView.OnItemSelectedListener {
FragmentAvatarOverviewBinding viewBinding;
@Bind(R.id.avatar_size_spinner)
Spinner avatarSizeSpinner;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View v = inflater.inflate(R.layout.fragment_avatar_overview, container, false);
viewBinding = DataBindingUtil.bind(v);
viewBinding.setPreferences(this.user.getPreferences());
ButterKnife.bind(this, v);
this.setSize(this.user.getPreferences().getSize());
avatarSizeSpinner.setOnItemSelectedListener(this);
return v;
}
@Override
public void updateUserData(HabitRPGUser user) {
super.updateUserData(user);
viewBinding.setPreferences(user.getPreferences());
this.setSize(user.getPreferences().getSize());
}
private void setSize(String size) {
if (size.equals("slim")) {
avatarSizeSpinner.setSelection(0, false);
} else {
avatarSizeSpinner.setSelection(1, false);
}
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String newSize;
if (position == 0) {
newSize = "slim";
} else {
newSize = "broad";
}
if (!this.user.getPreferences().getSize().equals(newSize)) {
Map<String, String> updateData = new HashMap<String, String>();
updateData.put("preferences.size", newSize);
mAPIHelper.apiService.updateUser(updateData, new HabitRPGUserCallback(activity));
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
}

View file

@ -24,6 +24,15 @@ public class DataBindingUtils {
@BindingAdapter("bind:imageName")
public static void loadImage(ImageView view, String imageName) {
if (view.getVisibility() == View.VISIBLE) {
Picasso.with(view.getContext())
.load("https://habitica-assets.s3.amazonaws.com/mobileApp/images/" + imageName + ".png")
.into(view);
}
}
@BindingAdapter("bind:questImageName")
public static void loadQuestImage(ImageView view, String imageName) {
if (view.getVisibility() == View.VISIBLE) {
Picasso.with(view.getContext())
.load("https://habitica-assets.s3.amazonaws.com/mobileApp/images/" + imageName + ".png")

View file

@ -16,19 +16,20 @@ public class Hair extends BaseModel {
public String userId;
@Column
private int mustache,beard, bangs,base;
private int mustache,beard, bangs,base, flower;
@Column
private String color;
public Hair() {
}
public Hair(int mustache, int beard, int bangs, int base, String color) {
public Hair(int mustache, int beard, int bangs, int base, String color, int flower) {
this.mustache = mustache;
this.beard = beard;
this.bangs = bangs;
this.base = base;
this.color = color;
this.flower = flower;
}
public int getMustache() {
@ -70,4 +71,8 @@ public class Hair extends BaseModel {
public void setColor(String color) {
this.color = color;
}
public int getFlower() { return flower; }
public void setFlower(int flower) { this.flower = flower; }
}