mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 19:56:32 +00:00
Fix task form issues
This commit is contained in:
parent
2cb410d203
commit
42b3797ebb
7 changed files with 62 additions and 27 deletions
|
|
@ -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" />
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ android {
|
|||
buildConfigField "String", "TESTING_LEVEL", "\"production\""
|
||||
multiDexEnabled true
|
||||
|
||||
versionCode 2101
|
||||
versionCode 2103
|
||||
versionName "1.9"
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue