From bcc9b13602dc78d499b188a2fa2d13e3fb3704f6 Mon Sep 17 00:00:00 2001 From: Negue Date: Sat, 22 Apr 2017 15:55:37 +0200 Subject: [PATCH] show gem errors / recolor gem buttons (based on state) --- .../res/drawable/challenge_gem_add_button.xml | 5 ++ .../challenge_gem_add_button_disabled.xml | 8 ++ .../challenge_gem_add_button_enabled.xml | 8 ++ .../drawable/challenge_gem_remove_button.xml | 5 ++ .../challenge_gem_remove_button_disabled.xml | 8 ++ .../challenge_gem_remove_button_enabled.xml | 8 ++ .../res/layout/activity_create_challenge.xml | 19 +++-- Habitica/res/values/strings.xml | 2 + .../activities/CreateChallengeActivity.java | 85 ++++++++++++++++--- .../lib/models/HabitRPGUser.java | 4 + 10 files changed, 133 insertions(+), 19 deletions(-) create mode 100644 Habitica/res/drawable/challenge_gem_add_button.xml create mode 100644 Habitica/res/drawable/challenge_gem_add_button_disabled.xml create mode 100644 Habitica/res/drawable/challenge_gem_add_button_enabled.xml create mode 100644 Habitica/res/drawable/challenge_gem_remove_button.xml create mode 100644 Habitica/res/drawable/challenge_gem_remove_button_disabled.xml create mode 100644 Habitica/res/drawable/challenge_gem_remove_button_enabled.xml diff --git a/Habitica/res/drawable/challenge_gem_add_button.xml b/Habitica/res/drawable/challenge_gem_add_button.xml new file mode 100644 index 000000000..bc8d2cca9 --- /dev/null +++ b/Habitica/res/drawable/challenge_gem_add_button.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Habitica/res/drawable/challenge_gem_add_button_disabled.xml b/Habitica/res/drawable/challenge_gem_add_button_disabled.xml new file mode 100644 index 000000000..5cee4da70 --- /dev/null +++ b/Habitica/res/drawable/challenge_gem_add_button_disabled.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/Habitica/res/drawable/challenge_gem_add_button_enabled.xml b/Habitica/res/drawable/challenge_gem_add_button_enabled.xml new file mode 100644 index 000000000..0ece5a328 --- /dev/null +++ b/Habitica/res/drawable/challenge_gem_add_button_enabled.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/Habitica/res/drawable/challenge_gem_remove_button.xml b/Habitica/res/drawable/challenge_gem_remove_button.xml new file mode 100644 index 000000000..6b0b2d3e5 --- /dev/null +++ b/Habitica/res/drawable/challenge_gem_remove_button.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Habitica/res/drawable/challenge_gem_remove_button_disabled.xml b/Habitica/res/drawable/challenge_gem_remove_button_disabled.xml new file mode 100644 index 000000000..c8356c480 --- /dev/null +++ b/Habitica/res/drawable/challenge_gem_remove_button_disabled.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/Habitica/res/drawable/challenge_gem_remove_button_enabled.xml b/Habitica/res/drawable/challenge_gem_remove_button_enabled.xml new file mode 100644 index 000000000..7bbf3519b --- /dev/null +++ b/Habitica/res/drawable/challenge_gem_remove_button_enabled.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/Habitica/res/layout/activity_create_challenge.xml b/Habitica/res/layout/activity_create_challenge.xml index ad1f747ea..c24708661 100644 --- a/Habitica/res/layout/activity_create_challenge.xml +++ b/Habitica/res/layout/activity_create_challenge.xml @@ -87,6 +87,17 @@ android:text="@string/gem_reward" android:textColor="#cc000000" /> + + + android:drawableLeft="@drawable/challenge_gem_add_button"/> @@ -125,8 +135,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="2" - android:drawableRight="@drawable/minus" - android:drawableTint="@color/brand_400" /> + android:drawableRight="@drawable/challenge_gem_remove_button"/> diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 75014da11..bcbea03b0 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -563,4 +563,6 @@ Create challenge Tavern Edit Challenge + You need at least 1 gem to create a challenge in Tavern. + You don\'t have enough gems to create a challenge. diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java index 487c0cc4c..565f5c0a5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java @@ -18,9 +18,12 @@ import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.widget.AdapterView; import android.widget.ArrayAdapter; +import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; +import android.widget.TextView; import com.habitrpg.android.habitica.HabiticaApplication; import com.habitrpg.android.habitica.R; @@ -63,9 +66,17 @@ public class CreateChallengeActivity extends BaseActivity { @BindView(R.id.create_challenge_tag) EditText create_challenge_tag; + @BindView(R.id.create_challenge_gem_error) + TextView create_challenge_gem_error; + @BindView(R.id.challenge_location_spinner) Spinner challenge_location_spinner; + @BindView(R.id.challenge_add_gem_btn) + Button challenge_add_gem_btn; + + @BindView(R.id.challenge_remove_gem_btn) + Button challenge_remove_gem_btn; @BindView(R.id.create_challenge_task_list) RecyclerView create_challenge_task_list; @@ -112,7 +123,7 @@ public class CreateChallengeActivity extends BaseActivity { @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.action_save) { - if(editMode){ + if (editMode) { updateChallenge(); } else { createChallenge(); @@ -129,7 +140,7 @@ public class CreateChallengeActivity extends BaseActivity { Intent intent = getIntent(); Bundle bundle = intent.getExtras(); - if(bundle != null) { + if (bundle != null) { challengeId = bundle.getString(CHALLENGE_ID_KEY, null); } @@ -147,13 +158,13 @@ public class CreateChallengeActivity extends BaseActivity { String taskIdToDelete = deleteTask.TaskIdToDelete; challengeTasks.removeTask(taskIdToDelete); - if(editMode){ - if(addedTasks.containsKey(taskIdToDelete)){ + if (editMode) { + if (addedTasks.containsKey(taskIdToDelete)) { addedTasks.remove(taskIdToDelete); - } else{ + } else { removedTasks.put(taskIdToDelete, null); - if(updatedTasks.containsKey(taskIdToDelete)){ + if (updatedTasks.containsKey(taskIdToDelete)) { updatedTasks.remove(taskIdToDelete); } } @@ -181,6 +192,8 @@ public class CreateChallengeActivity extends BaseActivity { currentVal++; create_challenge_prize.setText("" + currentVal); + + checkGemAndLocation(); } @OnClick(R.id.challenge_remove_gem_btn) @@ -189,10 +202,37 @@ public class CreateChallengeActivity extends BaseActivity { int currentVal = Integer.parseInt(create_challenge_prize.getText().toString()); currentVal--; - if (currentVal == 0) - currentVal = 1; - create_challenge_prize.setText("" + currentVal); + + checkGemAndLocation(); + } + + private void checkGemAndLocation() { + String inputValue = create_challenge_prize.getText().toString(); + + if(inputValue.isEmpty()){ + inputValue = "0"; + } + + int currentVal = Integer.parseInt(inputValue); + + // 0 is Tavern + int selectedLocation = challenge_location_spinner.getSelectedItemPosition(); + + double gemCount = HabiticaApplication.User.getGemCount(); + + if (selectedLocation == 0 && currentVal == 0) { + create_challenge_gem_error.setVisibility(View.VISIBLE); + create_challenge_gem_error.setText(R.string.challenge_create_error_tavern_one_gem); + } else if (currentVal > gemCount) { + create_challenge_gem_error.setVisibility(View.VISIBLE); + create_challenge_gem_error.setText(R.string.challenge_create_error_enough_gems); + } else { + create_challenge_gem_error.setVisibility(View.GONE); + } + + challenge_remove_gem_btn.setEnabled(currentVal != 0); + } private void fillControls() { @@ -221,6 +261,22 @@ public class CreateChallengeActivity extends BaseActivity { }, Throwable::printStackTrace); challenge_location_spinner.setAdapter(locationAdapter); + challenge_location_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + checkGemAndLocation(); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + create_challenge_prize.setOnKeyListener((view, i, keyEvent) -> { + checkGemAndLocation(); + + return false; + }); addHabit = createTask(ChallengeTasksRecyclerViewAdapter.TASK_TYPE_ADD_ITEM, resources.getString(R.string.add_habit)); addDaily = createTask(ChallengeTasksRecyclerViewAdapter.TASK_TYPE_ADD_ITEM, resources.getString(R.string.add_daily)); @@ -291,6 +347,8 @@ public class CreateChallengeActivity extends BaseActivity { } } + checkGemAndLocation(); + challengeRepository.getChallengeTasks(challengeId).subscribe(tasks -> { tasks.tasks.forEach((s, task) -> addOrUpdateTaskInList(task)); }, Throwable::printStackTrace, () -> { @@ -344,13 +402,13 @@ public class CreateChallengeActivity extends BaseActivity { startActivityForResult(intent, 1); } - private PostChallenge getChallengeData(){ + private PostChallenge getChallengeData() { PostChallenge c = new PostChallenge(); int locationPos = challenge_location_spinner.getSelectedItemPosition(); Group locationGroup = locationAdapter.getItem(locationPos); - if(challengeId != null){ + if (challengeId != null) { c.id = challengeId; } @@ -419,13 +477,12 @@ public class CreateChallengeActivity extends BaseActivity { challengeTasks.addTaskUnder(task, taskAbove); - if(editMode){ + if (editMode) { addedTasks.put(task.getId(), task); } } else { // don't need to add the task to updatedTasks if its already been added right now - if(editMode && !addedTasks.containsKey(task.getId())) - { + if (editMode && !addedTasks.containsKey(task.getId())) { updatedTasks.put(task.getId(), task); } } diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java index e8526e2de..0ed094b43 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java @@ -216,6 +216,10 @@ public class HabitRPGUser extends BaseModel { return this.balance; } + public double getGemCount(){ + return this.balance * 4; + } + public void setBalance(double balance) { this.balance = balance; }