handle class selection correctly

This commit is contained in:
Phillip Thelen 2016-04-15 14:00:53 +02:00
parent ebe09f0301
commit 8654e038f6
6 changed files with 84 additions and 40 deletions

View file

@ -328,5 +328,6 @@ To start, which parts of your life do you want to improve?</string>
<string name="change_class">Change your class</string>
<string name="change_class_description">Change your class and refund your attribute points for 3 gems. </string>
<string name="enable_class">Enable Class System</string>
<string name="changing_class_progress">Changing Class</string>
</resources>

View file

@ -92,7 +92,7 @@ public class AvatarWithBarsViewModel implements View.OnClickListener {
mpBar.valueBarLayout.setVisibility((stats.get_class() == null || stats.getLvl() < 10 || user.getPreferences().getDisableClasses()) ? View.GONE : View.VISIBLE);
if (user.getPreferences().getDisableClasses() || !user.getFlags().getClassSelected()) {
if (user.getPreferences() != null && user.getFlags() != null && (user.getPreferences().getDisableClasses() || !user.getFlags().getClassSelected())) {
lvlText.setText(context.getString(R.string.user_level, user.getStats().getLvl()));
lvlText.setCompoundDrawables(null, null, null, null);
} else {

View file

@ -1,5 +1,6 @@
package com.habitrpg.android.habitica.ui.activities;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
@ -7,7 +8,11 @@ import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import com.habitrpg.android.habitica.APIHelper;
import com.habitrpg.android.habitica.HabiticaApplication;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
import com.habitrpg.android.habitica.callbacks.MergeUserCallback;
import com.habitrpg.android.habitica.userpicture.UserPicture;
import com.magicmicky.habitrpgwrapper.lib.models.Gear;
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
@ -16,12 +21,20 @@ import com.magicmicky.habitrpgwrapper.lib.models.Items;
import com.magicmicky.habitrpgwrapper.lib.models.Outfit;
import com.magicmicky.habitrpgwrapper.lib.models.Preferences;
import java.util.HashMap;
import java.util.Map;
import butterknife.Bind;
import butterknife.OnClick;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
public class ClassSelectionActivity extends BaseActivity {
public class ClassSelectionActivity extends BaseActivity implements Callback<HabitRPGUser> {
Boolean isInitialSelection;
Boolean classWasUnset = false;
Boolean shouldFinish = false;
@Bind(R.id.healerImageView)
ImageView healerImageView;
@ -32,6 +45,10 @@ public class ClassSelectionActivity extends BaseActivity {
@Bind(R.id.warriorImageView)
ImageView warriorImageView;
APIHelper apiHelper;
ProgressDialog progressDialog;
@Override
protected int getLayoutResId() {
return R.layout.activity_class_selection;
@ -41,6 +58,8 @@ public class ClassSelectionActivity extends BaseActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.apiHelper = HabiticaApplication.ApiHelper;
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
isInitialSelection = bundle.getBoolean("isInitialSelection");
@ -96,6 +115,10 @@ public class ClassSelectionActivity extends BaseActivity {
UserPicture warriorUserPicture = new UserPicture(this);
warriorUserPicture.setUser(warrior);
warriorUserPicture.setPictureOn(warriorImageView);
if (!isInitialSelection) {
apiHelper.apiService.changeClass(this);
}
}
public HabitRPGUser makeUser(Preferences preferences, Outfit outfit) {
@ -129,34 +152,69 @@ public class ClassSelectionActivity extends BaseActivity {
@OnClick(R.id.optOutWrapper)
public void optOutSelected() {
if (!this.isInitialSelection && !this.classWasUnset) {
return;
}
AlertDialog alert = new AlertDialog.Builder(this)
.setTitle(getString(R.string.opt_out_confirmation))
.setNegativeButton(getString(R.string.dialog_go_back), (dialog, which) -> {
dialog.dismiss();
})
.setPositiveButton(getString(R.string.opt_out_class), (dialog, which) -> {
Intent intent = new Intent();
intent.putExtra("optedOut", true);
setResult(MainActivity.SELECT_CLASS_RESULT, intent);
finish();
optOutOfClasses();
}).create();
alert.show();
}
private void displayConfirmationDialogForClass(String className, String classIdentifier) {
if (!this.isInitialSelection && !this.classWasUnset) {
return;
}
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle(getString(R.string.class_confirmation, className))
.setNegativeButton(getString(R.string.dialog_go_back), (dialog, which) -> {
dialog.dismiss();
})
.setPositiveButton(getString(R.string.choose_class), (dialog, which) -> {
Intent intent = new Intent();
intent.putExtra("selectedClass", classIdentifier);
setResult(MainActivity.SELECT_CLASS_RESULT, intent);
finish();
selectClass(classIdentifier);
});
AlertDialog alert = builder.create();
alert.show();
}
private void optOutOfClasses() {
shouldFinish = true;
this.displayProgressDialog();
Map<String, Object> updateData = new HashMap<>();
updateData.put("preferences.disableClasses", true);
updateData.put("flags.classSelected", true);
apiHelper.apiService.updateUser(updateData, this);
}
private void selectClass(String selectedClass) {
shouldFinish = true;
this.displayProgressDialog();
apiHelper.apiService.changeClass(selectedClass, this);
}
@Override
public void success(HabitRPGUser habitRPGUser, Response response) {
this.classWasUnset = true;
if (shouldFinish) {
if (progressDialog != null) {
progressDialog.dismiss();
}
setResult(MainActivity.SELECT_CLASS_RESULT);
finish();
}
}
@Override
public void failure(RetrofitError error) {
shouldFinish = false;
}
private void displayProgressDialog() {
progressDialog = ProgressDialog.show(this, getString(R.string.changing_class_progress), null, true);
}
}

View file

@ -572,6 +572,10 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O
});
accountHeader.updateProfile(profile);
if (user.getPreferences() == null || user.getFlags() == null) {
return;
}
IDrawerItem item = drawer.getDrawerItem(MainDrawerBuilder.SIDEBAR_SKILLS);
if (user.getPreferences().getDisableClasses() || !user.getFlags().getClassSelected()) {
if (item != null) {
@ -638,16 +642,8 @@ public class MainActivity extends BaseActivity implements HabitRPGUserCallback.O
super.onActivityResult(requestCode, resultCode, data);
checkout.onActivityResult(requestCode, resultCode, data);
if (resultCode == SELECT_CLASS_RESULT) {
if (data.getBooleanExtra("optedOut", false)) {
Map<String, Object> updateData = new HashMap<>();
updateData.put("preferences.disableClasses", true);
updateData.put("flags.classSelected", true);
mAPIHelper.apiService.updateUser(updateData, new HabitRPGUserCallback(this));
} else {
String selectedClass = data.getStringExtra("selectedClass");
if (selectedClass != null) {
mAPIHelper.apiService.changeClass(selectedClass, new MergeUserCallback(this, this.user));
}
if (this.mAPIHelper != null) {
this.mAPIHelper.retrieveUser(new HabitRPGUserCallback(this));
}
}
}

View file

@ -81,24 +81,6 @@ 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<String, Object> 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<HabitRPGUser> userTransactionListener = new TransactionListener<HabitRPGUser>() {
@Override
public void onResultReceived(HabitRPGUser habitRPGUser) {
@ -131,7 +113,11 @@ public class PreferencesFragment extends BasePreferencesFragment implements
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);
if (!user.getFlags().getClassSelected()) {
bundle.putBoolean("isInitialSelection", true);
} else {
bundle.putBoolean("isInitialSelection", false);
}
Intent intent = new Intent(getActivity(), ClassSelectionActivity.class);
intent.putExtras(bundle);

View file

@ -121,6 +121,9 @@ public interface ApiService {
@POST("/user/class/cast/{skill}")
void useSkill(@Path("skill") String skillName, @Query("targetType") String targetType, Callback<HabitRPGUser> habitRPGUserCallback);
@POST("/user/class/change")
void changeClass(Callback<HabitRPGUser> cb);
@POST("/user/class/change")
void changeClass(@Query("class") String className, Callback<HabitRPGUser> cb);