diff --git a/app/src/main/java/io/homeassistant/companion/android/widgets/button/ButtonWidgetConfigureActivity.kt b/app/src/main/java/io/homeassistant/companion/android/widgets/button/ButtonWidgetConfigureActivity.kt index 45acc038c..3de9da9ed 100644 --- a/app/src/main/java/io/homeassistant/companion/android/widgets/button/ButtonWidgetConfigureActivity.kt +++ b/app/src/main/java/io/homeassistant/companion/android/widgets/button/ButtonWidgetConfigureActivity.kt @@ -93,14 +93,18 @@ class ButtonWidgetConfigureActivity : BaseWidgetConfigureActivity() { .setView(fieldKeyInput) .setNegativeButton(android.R.string.cancel) { _, _ -> } .setPositiveButton(android.R.string.ok) { _, _ -> + if (dynamicFields.any { it.field == binding.widgetTextConfigService.text.toString() }) return@setPositiveButton + + val position = dynamicFields.size dynamicFields.add( + position, ServiceFieldBinder( binding.widgetTextConfigService.text.toString(), fieldKeyInput.text.toString() ) ) - dynamicFieldAdapter.notifyDataSetChanged() + dynamicFieldAdapter.notifyItemInserted(position) } .show() } @@ -134,6 +138,7 @@ class ButtonWidgetConfigureActivity : BaseWidgetConfigureActivity() { Log.d(TAG, "Fields applicable to this service: $fields") val existingServiceData = mutableMapOf() + val addedFields = mutableListOf() buttonWidgetDao.get(appWidgetId)?.let { buttonWidget -> if ( buttonWidget.serverId != selectedServerId || @@ -146,6 +151,7 @@ class ButtonWidgetConfigureActivity : BaseWidgetConfigureActivity() { for (item in dbMap) { val value = item.value.toString().replace("[", "").replace("]", "") + if (item.key == "entity_id") ", " else "" existingServiceData[item.key] = value.ifEmpty { null } + addedFields.add(item.key) } } @@ -165,6 +171,10 @@ class ButtonWidgetConfigureActivity : BaseWidgetConfigureActivity() { dynamicFields.add(ServiceFieldBinder(serviceText, fieldKey, existingServiceData[fieldKey])) } } + addedFields.minus("entity_id").minus(fieldKeys).forEach { extraFieldKey -> + Log.d(TAG, "Creating a text input box for extra $extraFieldKey") + dynamicFields.add(ServiceFieldBinder(serviceText, extraFieldKey, existingServiceData[extraFieldKey])) + } dynamicFieldAdapter.notifyDataSetChanged() } else { diff --git a/app/src/main/java/io/homeassistant/companion/android/widgets/common/WidgetDynamicFieldAdapter.kt b/app/src/main/java/io/homeassistant/companion/android/widgets/common/WidgetDynamicFieldAdapter.kt index 1bf7b4952..d6e74b40e 100644 --- a/app/src/main/java/io/homeassistant/companion/android/widgets/common/WidgetDynamicFieldAdapter.kt +++ b/app/src/main/java/io/homeassistant/companion/android/widgets/common/WidgetDynamicFieldAdapter.kt @@ -148,6 +148,8 @@ class WidgetDynamicFieldAdapter( // Set text to empty string to prevent a recycled, incorrect value autoCompleteTextView.setText("") } + } else { + autoCompleteTextView.setText("") } // Have the text view store its text for later recall