mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-05-22 05:38:55 +00:00
Display current avatar customization
This commit is contained in:
parent
921b14183c
commit
ca2f89087f
11 changed files with 292 additions and 10 deletions
1
Habitica/assets/migrations/Habitica/5.sql
Normal file
1
Habitica/assets/migrations/Habitica/5.sql
Normal file
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE Hair ADD COLUMN 'flower' INTEGER DEFAULT 0;
|
||||
45
Habitica/res/layout/avatar_overview_card.xml
Normal file
45
Habitica/res/layout/avatar_overview_card.xml
Normal 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>
|
||||
111
Habitica/res/layout/fragment_avatar_overview.xml
Normal file
111
Habitica/res/layout/fragment_avatar_overview.xml
Normal 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>
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) {}
|
||||
}
|
||||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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; }
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue