From ebe09f0301d07e3091ebad4d664c72ee0c15bb04 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 14 Apr 2016 19:11:18 +0200 Subject: [PATCH] allow to change class in settings. --- Habitica/res/values/strings.xml | 9 +- Habitica/res/xml/preferences_fragment.xml | 12 +- .../habitrpg/android/habitica/APIHelper.java | 1 - .../ui/fragments/PreferencesFragment.java | 109 +++++++++++++++++- 4 files changed, 121 insertions(+), 10 deletions(-) diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index fff9a7d63..2adc5f858 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -40,13 +40,9 @@ Confirm password Logout + Log out of your account Account Details Welcome - You\'re dead! - You weren\'t vigilant enough, and get lost between some bad habits and some difficult dailies. - You are going to revive, but will loose a level, your gold and a random piece of equipment. - Try to be more careful with your dailies, and manage those bad habits! - Revive Please connect through the application before using a widget @@ -329,5 +325,8 @@ To start, which parts of your life do you want to improve? Choose Class Go Back Are you sure you want to Opt Out? + Change your class + Change your class and refund your attribute points for 3 gems. + Enable Class System diff --git a/Habitica/res/xml/preferences_fragment.xml b/Habitica/res/xml/preferences_fragment.xml index 65f4fdf66..e88c4312f 100644 --- a/Habitica/res/xml/preferences_fragment.xml +++ b/Habitica/res/xml/preferences_fragment.xml @@ -3,12 +3,14 @@ android:title="@string/PS_contact_title" > + android:title="@string/pref_account_header" + android:key="account_prefs"> + android:summary="Check your account details" + android:order="1"> @@ -48,10 +50,14 @@ + + android:summary="@string/logout_description" + android:order="99"/> { private Context context; private TimePreference timePreference; + private Preference classSelectionPreference; + private HabitRPGUser user; + private APIHelper apiHelper; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + apiHelper = HabiticaApplication.ApiHelper; + context = getActivity(); + + String userID = getPreferenceManager().getSharedPreferences().getString(context.getString(R.string.SP_userID), null); + if (userID != null) { + new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(userID)).async().querySingle(userTransactionListener); + } + } @Override @@ -32,6 +63,9 @@ public class PreferencesFragment extends BasePreferencesFragment implements timePreference = (TimePreference) findPreference("reminder_time"); boolean useReminder = getPreferenceManager().getSharedPreferences().getBoolean("use_reminder", false); timePreference.setEnabled(useReminder); + + classSelectionPreference = findPreference("choose_class"); + classSelectionPreference.setVisible(false); } @Override @@ -47,11 +81,62 @@ public class PreferencesFragment extends BasePreferencesFragment implements super.onPause(); } + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == MainActivity.SELECT_CLASS_RESULT) { + if (data.getBooleanExtra("optedOut", false)) { + Map updateData = new HashMap<>(); + updateData.put("preferences.disableClasses", true); + updateData.put("flags.classSelected", true); + apiHelper.apiService.updateUser(updateData, this); + } else { + String selectedClass = data.getStringExtra("selectedClass"); + if (selectedClass != null) { + apiHelper.apiService.changeClass(selectedClass, this); + } + } + } + } + + private TransactionListener userTransactionListener = new TransactionListener() { + @Override + public void onResultReceived(HabitRPGUser habitRPGUser) { + PreferencesFragment.this.setUser(habitRPGUser); + } + + @Override + public boolean onReady(BaseTransaction baseTransaction) { + return true; + } + + @Override + public boolean hasResult(BaseTransaction baseTransaction, HabitRPGUser habitRPGUser) { + return true; + } + }; + @Override public boolean onPreferenceTreeClick(Preference preference) { if (preference.getKey().equals("logout")) { HabiticaApplication.logout(context); getActivity().finish(); + } else if (preference.getKey().equals("choose_class")) { + Bundle bundle = new Bundle(); + bundle.putString("size", user.getPreferences().getSize()); + bundle.putString("skin", user.getPreferences().getSkin()); + bundle.putString("shirt", user.getPreferences().getShirt()); + bundle.putInt("hairBangs", user.getPreferences().getHair().getBangs()); + bundle.putInt("hairBase", user.getPreferences().getHair().getBase()); + bundle.putString("hairColor", user.getPreferences().getHair().getColor()); + bundle.putInt("hairMustache", user.getPreferences().getHair().getMustache()); + bundle.putInt("hairBeard", user.getPreferences().getHair().getBeard()); + bundle.putBoolean("isInitialSelection", false); + + Intent intent = new Intent(getActivity(), ClassSelectionActivity.class); + intent.putExtras(bundle); + startActivityForResult(intent, MainActivity.SELECT_CLASS_RESULT); + return true; } return super.onPreferenceTreeClick(preference); } @@ -115,4 +200,26 @@ public class PreferencesFragment extends BasePreferencesFragment implements } } + public void setUser(HabitRPGUser user) { + this.user = user; + if (user.getFlags().getClassSelected()) { + if (user.getPreferences().getDisableClasses()) { + classSelectionPreference.setTitle(getString(R.string.enable_class)); + } else { + classSelectionPreference.setTitle(getString(R.string.change_class)); + classSelectionPreference.setSummary(getString(R.string.change_class_description)); + } + classSelectionPreference.setVisible(true); + } + } + + @Override + public void success(HabitRPGUser habitRPGUser, Response response) { + + } + + @Override + public void failure(RetrofitError error) { + + } }