Fix task form issues

This commit is contained in:
Phillip Thelen 2019-04-26 10:28:13 +02:00
parent 2cb410d203
commit 42b3797ebb
7 changed files with 62 additions and 27 deletions

View file

@ -108,7 +108,8 @@
<activity
android:name=".ui.activities.TaskFormActivity"
android:parentActivityName=".ui.activities.MainActivity"
tools:ignore="UnusedAttribute">
tools:ignore="UnusedAttribute"
android:windowSoftInputMode="stateVisible|adjustResize">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.activities.MainActivity" />

View file

@ -153,7 +153,7 @@ android {
buildConfigField "String", "TESTING_LEVEL", "\"production\""
multiDexEnabled true
versionCode 2101
versionCode 2103
versionName "1.9"
}

View file

@ -1,6 +1,6 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<item android:id="@+id/action_create" android:title="@string/create"
<item android:id="@+id/action_save" android:title="@string/create"
android:orderInCategory="100" app:showAsAction="always" />
</menu>

View file

@ -3,6 +3,6 @@
xmlns:tools="http://schemas.android.com/tools">
<item android:id="@+id/action_delete" android:title="@string/delete"
android:orderInCategory="100" app:showAsAction="always" />
<item android:id="@+id/action_save_changes" android:title="@string/save_changes"
<item android:id="@+id/action_save" android:title="@string/save_changes"
android:orderInCategory="100" app:showAsAction="always" />
</menu>

View file

@ -3,43 +3,42 @@ package com.habitrpg.android.habitica.ui.activities
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.res.ColorStateList
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.os.Handler
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager
import android.widget.CheckBox
import android.widget.EditText
import android.widget.LinearLayout
import android.widget.TextView
import androidx.appcompat.widget.AppCompatCheckBox
import androidx.appcompat.widget.Toolbar
import androidx.core.content.ContextCompat
import androidx.core.view.children
import androidx.core.view.forEachIndexed
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.AppComponent
import com.habitrpg.android.habitica.data.TagRepository
import com.habitrpg.android.habitica.data.TaskRepository
import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.extensions.notNull
import com.habitrpg.android.habitica.extensions.OnChangeTextWatcher
import com.habitrpg.android.habitica.extensions.dpToPx
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.Tag
import com.habitrpg.android.habitica.models.tasks.HabitResetOption
import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.ui.helpers.bindView
import io.reactivex.functions.Consumer
import javax.inject.Inject
import android.content.res.ColorStateList
import android.graphics.drawable.ColorDrawable
import android.os.Handler
import android.view.MenuItem
import android.view.inputmethod.InputMethodManager
import androidx.appcompat.widget.AppCompatCheckBox
import androidx.core.view.children
import androidx.core.view.forEach
import androidx.core.view.forEachIndexed
import com.habitrpg.android.habitica.extensions.dpToPx
import com.habitrpg.android.habitica.ui.views.tasks.form.*
import io.reactivex.functions.Consumer
import io.realm.RealmList
import java.util.*
import javax.inject.Inject
class TaskFormActivity : BaseActivity() {
@ -96,6 +95,8 @@ class TaskFormActivity : BaseActivity() {
setSelectedAttribute(value)
}
private var canSave: Boolean = false
private var tintColor: Int = 0
set(value) {
field = value
@ -141,6 +142,10 @@ class TaskFormActivity : BaseActivity() {
configureForm()
}, RxErrorHandler.handleEmptyError()))
textEditText.addTextChangedListener(OnChangeTextWatcher { _, _, _, _ ->
checkCanSave()
})
statStrengthButton.setOnClickListener { selectedStat = Stats.STRENGTH }
statIntelligenceButton.setOnClickListener { selectedStat = Stats.INTELLIGENCE }
statConstitutionButton.setOnClickListener { selectedStat = Stats.CONSTITUTION }
@ -167,18 +172,26 @@ class TaskFormActivity : BaseActivity() {
} else {
menuInflater.inflate(R.menu.menu_task_edit, menu)
}
menu.findItem(R.id.action_save).isEnabled = canSave
return true
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when (item?.itemId) {
R.id.action_create -> saveTask()
R.id.action_save_changes -> saveTask()
R.id.action_save -> saveTask()
R.id.action_delete -> deleteTask()
}
return super.onOptionsItemSelected(item)
}
private fun checkCanSave() {
val newCanSave = textEditText.text.isNotBlank()
if (newCanSave != canSave) {
invalidateOptionsMenu()
}
canSave = newCanSave
}
private fun configureForm() {
val habitViewsVisibility = if (taskType == Task.TYPE_HABIT) View.VISIBLE else View.GONE
habitScoringButtons.visibility = habitViewsVisibility
@ -246,6 +259,7 @@ class TaskFormActivity : BaseActivity() {
}
private fun fillForm(task: Task) {
canSave = true
textEditText.setText(task.text)
notesEditText.setText(task.notes)
taskDifficultyButtons.selectedDifficulty = task.priority

View file

@ -220,7 +220,7 @@ class PurchaseDialog(context: Context, component: AppComponent?, val item: ShopI
val observable: Flowable<Any>
if (shopIdentifier != null && shopIdentifier == Shop.TIME_TRAVELERS_SHOP || "mystery_set" == shopItem.purchaseType) {
observable = if (shopItem.purchaseType == "gear") {
inventoryRepository.purchaseMysterySet(shopItem.categoryIdentifier)
inventoryRepository.purchaseMysterySet(shopItem.key)
} else {
inventoryRepository.purchaseHourglassItem(shopItem.purchaseType, shopItem.key)
}

View file

@ -21,21 +21,40 @@ class RewardValueFormView @JvmOverloads constructor(
private val upButton: ImageButton by bindView(R.id.up_button)
private val downButton: ImageButton by bindView(R.id.down_button)
private val decimalFormat = DecimalFormat("0.#")
private val decimalFormat = DecimalFormat("0.###")
private var editTextIsFocused = false
var value = 0.0
set(value) {
field = if (value >= 0) value else 0.0
val stringValue = decimalFormat.format(field)
if (editText.text.toString() != stringValue) {
editText.setText(stringValue)
val newValue = if (value >= 0) value else 0.0
val oldValue = field
field = newValue
if (oldValue != newValue) {
valueString = decimalFormat.format(newValue)
}
downButton.isEnabled = field > 0
}
var valueString = ""
set(value) {
field = value
if (editText.text.toString() != field) {
editText.setText(field)
if (editTextIsFocused) {
editText.setSelection(field.length)
}
}
val newValue = field.toDoubleOrNull() ?: 0.0
if (this.value != newValue) {
this.value = newValue
}
}
init {
inflate(R.layout.task_form_reward_value, true)
//set value here, so that the setter is called and everything is set up correctly
value = 10.0
editText.setCompoundDrawablesWithIntrinsicBounds(HabiticaIconsHelper.imageOfGold().asDrawable(context.resources), null, null, null)
upButton.setOnClickListener {
@ -46,7 +65,8 @@ class RewardValueFormView @JvmOverloads constructor(
}
editText.addTextChangedListener(OnChangeTextWatcher { s, _, _, _ ->
value = s.toString().toDoubleOrNull() ?: 0.0
valueString = s.toString()
})
editText.setOnFocusChangeListener { _, hasFocus -> editTextIsFocused = hasFocus }
}
}