Improve custom field management UI

dev
Aurelien Hubert 7 years ago
parent ed9da94302
commit 44472999b0
  1. 18
      app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt
  2. 1
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt
  3. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/EditableDataFragment.kt
  4. 8
      app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt
  5. 14
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/CustomFieldRow.kt
  6. 5
      app/src/main/res/color/chips_background_states.xml
  7. 6
      app/src/main/res/color/chips_stroke_states.xml
  8. 5
      app/src/main/res/color/chips_text_states.xml
  9. 7
      app/src/main/res/values/styles.xml

@ -21,13 +21,14 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.CustomFieldRow
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.util.enumerations.IntIdentifiable
import timber.log.Timber
import java.util.*
import kotlin.collections.ArrayList
open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable {
enum class Type(override var uniqueIdentifier: Int, var resId: Int) : IntIdentifiable {
enum class Type(override var uniqueIdentifier: Int, var resId: Int, var isEnabled: Boolean = true) : IntIdentifiable {
LIST(0, R.string.enum_custom_field_type),
NUMBER(1, R.string.number),
AMOUNT(2, R.string.amount)
@ -75,11 +76,14 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
//helper
val isListType: Boolean
get() { return this.type == Type.LIST.uniqueIdentifier }
get() {
return this.type == Type.LIST.uniqueIdentifier
}
val isAmountType: Boolean
get() { return this.type == Type.AMOUNT.uniqueIdentifier }
get() {
return this.type == Type.AMOUNT.uniqueIdentifier
}
override fun localizedTitle(context: Context): String {
return this.name
@ -118,12 +122,13 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
}
override fun isValidForDelete(context: Context, realm: Realm): Boolean {
return true
val sessions = realm.where<Session>().contains("customFieldEntries.customField.id", id).findAll()
return sessions.isEmpty()
}
override fun getFailedDeleteMessage(status: DeleteValidityStatus): Int {
//TODO:
return R.string.relationship_error
return R.string.cf_entry_delete_popup_message
}
override val bottomSheetType: BottomSheetType
@ -247,6 +252,7 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
}
entriesToDelete.forEach {
Timber.d("Delete entry: ${it.value} / ${it.id}")
realm.where<CustomFieldEntry>().equalTo("id", it.id).findFirst()?.deleteFromRealm()
}
entriesToDelete.clear()

@ -130,6 +130,7 @@ class CustomFieldDataFragment : EditableDataFragment(), StaticRowRepresentableDa
override fun boolForRow(row: RowRepresentable): Boolean {
return when (row) {
CustomFieldRow.COPY_ON_DUPLICATE -> customField.duplicateValue
CustomFieldRow.TYPE -> isUpdating
else -> super.boolForRow(row)
}
}

@ -23,6 +23,7 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat
lateinit var rowRepresentableAdapter: RowRepresentableAdapter
var shouldOpenKeyboard = true
var isUpdating = false
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
@ -67,6 +68,7 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat
proxyItem?.let {
this.appBar.toolbar.title = this.liveDataType.updateEntityLocalizedTitle(requireContext())
deleteButtonShouldAppear = true
isUpdating = true
} ?: run {
this.appBar.toolbar.title = this.liveDataType.newEntityLocalizedTitle(requireContext())
}

@ -437,12 +437,18 @@ enum class RowViewType(private var layoutRes: Int) {
chipGroup.removeAllViews()
chipGroup.setOnCheckedChangeListener(null)
CustomField.Type.values().forEach { type ->
val currentChoice = adapter.dataSource.intForRow(row)
val isUpdating = adapter.dataSource.boolForRow(row)
row.getChoices(currentChoice, isUpdating)?.forEach { type ->
val chip = Chip(itemView.context)
chip.id = type.ordinal
chip.text = itemView.context.getString(type.resId)
chip.chipStartPadding = 8f.px
chip.chipEndPadding = 8f.px
chip.isEnabled = type.isEnabled
chip.alpha = if (type.isEnabled) 1f else 0.5f
chip.isChecked = adapter.dataSource.intForRow(row) == type.ordinal
chipGroup.addView(chip)
}

@ -36,11 +36,23 @@ enum class CustomFieldRow : RowRepresentable, DefaultEditDataSource {
}
override val choices: List<*>?
override val choices: List<CustomField.Type>?
get() {
return when (this) {
TYPE -> CustomField.Type.values().toList()
else -> null
}
}
fun getChoices(currentChoiceIndex: Int, isUpdating: Boolean): List<CustomField.Type>? {
val list = CustomField.Type.values().toList()
list.forEach { type ->
type.isEnabled = if (!isUpdating) {
true
} else {
!(currentChoiceIndex == CustomFieldRow.TYPE.ordinal || type == CustomField.Type.LIST)
}
}
return list
}
}

@ -2,4 +2,9 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/colorAccent" android:state_checked="true" />
<item android:color="@android:color/transparent" />
<!--
<item android:color="@color/colorAccent" android:state_checked="true" android:state_enabled="true" />
<item android:color="@color/green_transparent" android:state_checked="true" android:state_enabled="false" />
<item android:color="@android:color/transparent" />
-->
</selector>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/green" android:state_checked="true" android:state_enabled="true" />
<item android:color="@color/white_transparent" android:state_enabled="false" />
<item android:color="@color/white" />
</selector>

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/white_transparent" android:state_enabled="false" />
<item android:color="@color/white" />
</selector>

@ -300,7 +300,12 @@
<item name="android:textColor">@color/white</item>
<item name="chipStrokeColor">@color/colorAccent</item>
<item name="chipStrokeWidth">1dp</item>
<!--
<item name="chipBackgroundColor">@color/chips_background_states</item>
<item name="android:textColor">@color/chips_text_states</item>
<item name="chipStrokeColor">@color/chips_stroke_states</item>
<item name="chipStrokeWidth">1dp</item>
-->
</style>
<!-- Subscription -->

Loading…
Cancel
Save