mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-07-14 18:21:57 +00:00
handle class selection correctly
This commit is contained in:
parent
ebe09f0301
commit
8654e038f6
6 changed files with 84 additions and 40 deletions
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue