diff --git a/library/src/main/java/com/telefonica/mistica/feedback/error/LoadErrorFeedbackView.kt b/library/src/main/java/com/telefonica/mistica/feedback/error/LoadErrorFeedbackView.kt
index c80c721ff..fb4699e33 100644
--- a/library/src/main/java/com/telefonica/mistica/feedback/error/LoadErrorFeedbackView.kt
+++ b/library/src/main/java/com/telefonica/mistica/feedback/error/LoadErrorFeedbackView.kt
@@ -5,48 +5,13 @@ import android.util.AttributeSet
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
-import android.view.View.OnClickListener
import android.widget.LinearLayout
import android.widget.TextView
import androidx.annotation.StringRes
-import androidx.databinding.BindingMethod
-import androidx.databinding.BindingMethods
import com.telefonica.mistica.R
import com.telefonica.mistica.button.ProgressButton
import com.telefonica.mistica.util.convertDpToPx
-@BindingMethods(
- BindingMethod(
- type = LoadErrorFeedbackView::class,
- attribute = "loadErrorFeedbackTitle",
- method = "setTitle"
- ),
- BindingMethod(
- type = LoadErrorFeedbackView::class,
- attribute = "loadErrorFeedbackDescription",
- method = "setDescription"
- ),
- BindingMethod(
- type = LoadErrorFeedbackView::class,
- attribute = "loadErrorFeedbackIsLoading",
- method = "setIsLoading"
- ),
- BindingMethod(
- type = LoadErrorFeedbackView::class,
- attribute = "loadErrorFeedbackButtonOnClick",
- method = "setButtonOnClick"
- ),
- BindingMethod(
- type = LoadErrorFeedbackView::class,
- attribute = "loadErrorFeedbackButtonText",
- method = "setButtonText"
- ),
- BindingMethod(
- type = LoadErrorFeedbackView::class,
- attribute = "loadErrorFeedbackIsButtonVisible",
- method = "setIsButtonVisible"
- )
-)
class LoadErrorFeedbackView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
diff --git a/library/src/main/java/com/telefonica/mistica/feedback/error/README.md b/library/src/main/java/com/telefonica/mistica/feedback/error/README.md
index 3348e3d9d..0083d794a 100644
--- a/library/src/main/java/com/telefonica/mistica/feedback/error/README.md
+++ b/library/src/main/java/com/telefonica/mistica/feedback/error/README.md
@@ -4,7 +4,7 @@
-Implemented as a custom view, `com.telefonica.mistica.feedback.error.LoadErrorFeedbackView` can be used inside any layout like a regular view. It supports both **attribute configuration** and **databinding for all properties**.
+Implemented as a custom view, `com.telefonica.mistica.feedback.error.LoadErrorFeedbackView` can be used inside any layout like a regular view. It supports **attribute-based configuration for all properties**.
```xml
diff --git a/library/src/main/java/com/telefonica/mistica/feedback/screen/README.md b/library/src/main/java/com/telefonica/mistica/feedback/screen/README.md
index 1f68919bb..0034c103b 100644
--- a/library/src/main/java/com/telefonica/mistica/feedback/screen/README.md
+++ b/library/src/main/java/com/telefonica/mistica/feedback/screen/README.md
@@ -8,7 +8,7 @@
It can be used inside any layout like a regular view. When adding it to the view hierarchy, entry animations will be performed.
-In order to configure it for the specific purpose, it supports both **attribute configuration and databinding for all properties**
+In order to configure it for the specific purpose, it supports **attribute-based configuration for all properties**.
## Available fields
diff --git a/library/src/main/java/com/telefonica/mistica/header/HeaderView.kt b/library/src/main/java/com/telefonica/mistica/header/HeaderView.kt
index 1a932d70e..2249d998d 100644
--- a/library/src/main/java/com/telefonica/mistica/header/HeaderView.kt
+++ b/library/src/main/java/com/telefonica/mistica/header/HeaderView.kt
@@ -15,8 +15,6 @@ import androidx.annotation.ColorInt
import androidx.annotation.LayoutRes
import androidx.annotation.StringRes
import androidx.core.graphics.drawable.toDrawable
-import androidx.databinding.BindingMethod
-import androidx.databinding.BindingMethods
import com.telefonica.mistica.R
import com.telefonica.mistica.util.children
import com.telefonica.mistica.util.convertDpToPx
@@ -24,88 +22,6 @@ import com.telefonica.mistica.util.getMisticaThemeDrawable
import com.telefonica.mistica.util.getThemeColor
import com.telefonica.mistica.util.setTextAndVisibility
-@BindingMethods(
- BindingMethod(
- type = HeaderView::class,
- attribute = "headerInverse",
- method = "setInverse"
- ),
- BindingMethod(
- type = HeaderView::class,
- attribute = "headerHasTopPadding",
- method = "setHasTopPadding"
- ),
- BindingMethod(
- type = HeaderView::class,
- attribute = "headerFirstPretitle",
- method = "setFirstPretitle"
- ),
- BindingMethod(
- type = HeaderView::class,
- attribute = "headerFirstPretitleHasSecondaryColor",
- method = "setFirstPretitleHasSecondaryColor"
- ),
- BindingMethod(
- type = HeaderView::class,
- attribute = "headerTitle",
- method = "setTitle"
- ),
- BindingMethod(
- type = HeaderView::class,
- attribute = "headerSecondPretitle",
- method = "setSecondPretitle"
- ),
- BindingMethod(
- type = HeaderView::class,
- attribute = "headerSecondPretitleHasSecondaryColor",
- method = "setSecondPretitleHasSecondaryColor"
- ),
- BindingMethod(
- type = HeaderView::class,
- attribute = "headerNumeral",
- method = "setNumeral"
- ),
- BindingMethod(
- type = HeaderView::class,
- attribute = "headerNumeralHasErrorColor",
- method = "setNumeralHasDangerColor"
- ),
- BindingMethod(
- type = HeaderView::class,
- attribute = "headerActionButtonText",
- method = "setActionButtonText"
- ),
- BindingMethod(
- type = HeaderView::class,
- attribute = "headerSecondaryActionButtonText",
- method = "setSecondaryActionButtonText"
- ),
- BindingMethod(
- type = HeaderView::class,
- attribute = "headerActionButtonOnClick",
- method = "setActionButtonOnClick"
- ),
- BindingMethod(
- type = HeaderView::class,
- attribute = "headerSecondaryActionButtonOnClick",
- method = "setSecondaryActionButtonOnClick"
- ),
- BindingMethod(
- type = HeaderView::class,
- attribute = "headerSubtitle",
- method = "setHeaderSubtitle"
- ),
- BindingMethod(
- type = HeaderView::class,
- attribute = "headerSubtitleHasSecondaryColor",
- method = "setSubtitleHasSecondaryColor"
- ),
- BindingMethod(
- type = HeaderView::class,
- attribute = "bottomLayout",
- method = "setBottomLayout"
- ),
-)
class HeaderView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
@@ -319,6 +235,36 @@ class HeaderView @JvmOverloads constructor(
configureTextsColors()
}
+ fun setHeaderFirstPretitle(@StringRes textRes: Int?) = setFirstPretitle(textRes)
+ fun setHeaderTitle(text: CharSequence?) = setTitle(text)
+
+ fun setHeaderInverse(value: Boolean) = setInverse(value)
+ fun setHeaderHasTopPadding(value: Boolean) = setHasTopPadding(value)
+
+ fun setHeaderFirstPretitle(text: CharSequence?) = setFirstPretitle(text)
+ fun setHeaderFirstPretitleHasSecondaryColor(value: Boolean) =
+ setFirstPretitleHasSecondaryColor(value)
+
+ fun setHeaderSecondPretitle(text: CharSequence?) = setSecondPretitle(text)
+ fun setHeaderSecondPretitleHasSecondaryColor(value: Boolean) =
+ setSecondPretitleHasSecondaryColor(value)
+
+ fun setHeaderNumeral(text: CharSequence?) = setNumeral(text)
+ fun setHeaderNumeralHasErrorColor(value: Boolean) = setNumeralHasDangerColor(value)
+
+ fun setHeaderSubtitle(text: CharSequence?) = setSubtitle(text)
+ fun setHeaderSubtitleHasSecondaryColor(value: Boolean) = setSubtitleHasSecondaryColor(value)
+
+ fun setHeaderActionButtonText(text: CharSequence?) = setActionButtonText(text)
+ fun setHeaderSecondaryActionButtonText(text: CharSequence?) = setSecondaryActionButtonText(text)
+
+ fun setHeaderActionButtonOnClick(listener: OnClickListener?) = setActionButtonOnClick(listener)
+ fun setHeaderSecondaryActionButtonOnClick(listener: OnClickListener?) =
+ setSecondaryActionButtonOnClick(listener)
+
+ fun setHeaderBottomLayout(@LayoutRes layoutRes: Int) = setBottomLayout(layoutRes)
+
+
private fun configureTextsColors() {
val backgroundDrawable = if (isInverse) {
context.getMisticaThemeDrawable(R.attr.drawableBackgroundBrand)
diff --git a/library/src/main/java/com/telefonica/mistica/header/README.md b/library/src/main/java/com/telefonica/mistica/header/README.md
index 27268f7e1..981a40f4f 100644
--- a/library/src/main/java/com/telefonica/mistica/header/README.md
+++ b/library/src/main/java/com/telefonica/mistica/header/README.md
@@ -5,7 +5,7 @@
-Implemented as a custom view, `com.telefonica.mistica.header.HeaderView` can be used inside any layout like a regular view. It supports both **attribute configuration and databinding for all properties**.
+Implemented as a custom view, `com.telefonica.mistica.header.HeaderView` can be used inside any layout like a regular view. It supports **attribute-based configuration for all properties**.
```xml
diff --git a/library/src/main/java/com/telefonica/mistica/highlightedcard/HighlightedCardView.kt b/library/src/main/java/com/telefonica/mistica/highlightedcard/HighlightedCardView.kt
index 3e358d0aa..fd9eb4e7a 100644
--- a/library/src/main/java/com/telefonica/mistica/highlightedcard/HighlightedCardView.kt
+++ b/library/src/main/java/com/telefonica/mistica/highlightedcard/HighlightedCardView.kt
@@ -23,84 +23,15 @@ import androidx.annotation.IntDef
import androidx.annotation.StringRes
import androidx.appcompat.content.res.AppCompatResources
import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.graphics.createBitmap
import androidx.core.graphics.drawable.toDrawable
-import androidx.databinding.BindingMethod
-import androidx.databinding.BindingMethods
import com.telefonica.mistica.R
import com.telefonica.mistica.util.getDimension
import com.telefonica.mistica.util.getMisticaThemeDrawableBuilder
import com.telefonica.mistica.util.getThemeColor
import com.telefonica.mistica.util.hide
import com.telefonica.mistica.util.show
-import androidx.core.graphics.createBitmap
-@BindingMethods(
- BindingMethod(
- type = HighlightedCardView::class,
- attribute = "highlightedCardBackground",
- method = "setCustomBackground"
- ),
- BindingMethod(
- type = HighlightedCardView::class,
- attribute = "highlightedCardInverse",
- method = "setInverse"
- ),
- BindingMethod(
- type = HighlightedCardView::class,
- attribute = "highlightedCardTitle",
- method = "setTitle"
- ),
- BindingMethod(
- type = HighlightedCardView::class,
- attribute = "highlightedCardContent",
- method = "setContent"
- ),
- BindingMethod(
- type = HighlightedCardView::class,
- attribute = "highlightedCardButtonStyle",
- method = "setButtonStyle"
- ),
- BindingMethod(
- type = HighlightedCardView::class,
- attribute = "highlightedCardImageStyle",
- method = "setImageStyle"
- ),
- BindingMethod(
- type = HighlightedCardView::class,
- attribute = "highlightedCardImage",
- method = "setImage"
- ),
- BindingMethod(
- type = HighlightedCardView::class,
- attribute = "highlightedCardButton",
- method = "setButtonText"
- ),
- BindingMethod(
- type = HighlightedCardView::class,
- attribute = "highlightedCardImageVisibility",
- method = "setImageVisibility"
- ),
- BindingMethod(
- type = HighlightedCardView::class,
- attribute = "highlightedCardCloseButtonVisibility",
- method = "setCloseVisibility"
- ),
- BindingMethod(
- type = HighlightedCardView::class,
- attribute = "highlightedCardButtonOnClick",
- method = "setButtonOnClick"
- ),
- BindingMethod(
- type = HighlightedCardView::class,
- attribute = "highlightedCardCloseButton",
- method = "setCloseButton"
- ),
- BindingMethod(
- type = HighlightedCardView::class,
- attribute = "highlightedCardCloseButtonOnClick",
- method = "setCloseButtonOnClick"
- )
-)
class HighlightedCardView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
diff --git a/library/src/main/java/com/telefonica/mistica/highlightedcard/README.md b/library/src/main/java/com/telefonica/mistica/highlightedcard/README.md
index 4af63e201..5567999d0 100644
--- a/library/src/main/java/com/telefonica/mistica/highlightedcard/README.md
+++ b/library/src/main/java/com/telefonica/mistica/highlightedcard/README.md
@@ -8,7 +8,7 @@
-Implemented as a custom view, `com.telefonica.mistica.highlightedcard.HighlightedCardView` can be used inside any layout like a regular view. It supports both **attribute configuration and databinding for all properties**.
+Implemented as a custom view, `com.telefonica.mistica.highlightedcard.HighlightedCardView` can be used inside any layout like a regular view. It supports **attribute-based configuration for all properties**.
```xml
diff --git a/library/src/main/java/com/telefonica/mistica/input/CheckBoxInput.kt b/library/src/main/java/com/telefonica/mistica/input/CheckBoxInput.kt
index ebbb06824..def1aa303 100644
--- a/library/src/main/java/com/telefonica/mistica/input/CheckBoxInput.kt
+++ b/library/src/main/java/com/telefonica/mistica/input/CheckBoxInput.kt
@@ -7,36 +7,12 @@ import android.text.method.MovementMethod
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.CompoundButton
+import androidx.annotation.StringRes
import androidx.appcompat.widget.AppCompatCheckBox
-import androidx.databinding.BindingAdapter
-import androidx.databinding.BindingMethod
-import androidx.databinding.BindingMethods
-import androidx.databinding.InverseBindingListener
-import androidx.databinding.InverseBindingMethod
-import androidx.databinding.InverseBindingMethods
import com.google.android.material.textfield.TextInputLayout
import com.telefonica.mistica.R
import com.telefonica.mistica.util.getThemeColor
-@BindingMethods(
- BindingMethod(
- type = CheckBoxInput::class,
- attribute = "inputCheckText",
- method = "setText"
- ),
- BindingMethod(
- type = CheckBoxInput::class,
- attribute = "inputChecked",
- method = "setChecked"
- )
-)
-@InverseBindingMethods(
- InverseBindingMethod(
- type = CheckBoxInput::class,
- attribute = "inputChecked",
- method = "isChecked"
- )
-)
class CheckBoxInput @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
@@ -102,6 +78,28 @@ class CheckBoxInput @JvmOverloads constructor(
checkBox.buttonTintList = ColorStateList(states, colors)
}
+ fun setInputError(@StringRes errorRes: Int?) {
+ if (errorRes == null) {
+ error = null
+ setErrorEnabled(false)
+ } else {
+ error = context.getString(errorRes)
+ setErrorEnabled(true)
+ }
+ }
+
+ fun setInputEnabled(enabled: Boolean) {
+ isEnabled = enabled
+ }
+
+ fun setInputCheckText(text: CharSequence?) {
+ setText(text)
+ }
+
+ fun getInputCheckText(): CharSequence? {
+ return getText()
+ }
+
fun setChecked(checked: Boolean) {
checkBox.isChecked = checked
}
@@ -131,14 +129,4 @@ class CheckBoxInput @JvmOverloads constructor(
super.setEnabled(enabled)
checkBox.isEnabled = enabled
}
-
- companion object {
- @BindingAdapter(
- value = ["inputCheckedAttrChanged"]
- )
- @JvmStatic
- fun setCheckWatcher(input: CheckBoxInput, listener: InverseBindingListener) {
- input.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener { _, _ -> listener.onChange() })
- }
- }
}
diff --git a/library/src/main/java/com/telefonica/mistica/input/Input.kt b/library/src/main/java/com/telefonica/mistica/input/Input.kt
index 126ff2dc3..426f969dd 100644
--- a/library/src/main/java/com/telefonica/mistica/input/Input.kt
+++ b/library/src/main/java/com/telefonica/mistica/input/Input.kt
@@ -7,40 +7,11 @@ import android.text.style.ForegroundColorSpan
import android.util.AttributeSet
import android.widget.FrameLayout
import androidx.annotation.StringRes
-import androidx.databinding.BindingMethod
-import androidx.databinding.BindingMethods
import com.google.android.material.textfield.TextInputLayout
import com.telefonica.mistica.R
import com.telefonica.mistica.util.getThemeColor
import com.telefonica.mistica.util.setAlpha
-@BindingMethods(
- BindingMethod(
- type = Input::class,
- attribute = "inputHint",
- method = "setHint"
- ),
- BindingMethod(
- type = Input::class,
- attribute = "inputError",
- method = "setError"
- ),
- BindingMethod(
- type = Input::class,
- attribute = "inputHelperText",
- method = "setHelperText"
- ),
- BindingMethod(
- type = Input::class,
- attribute = "inputEnabled",
- method = "setEnabled"
- ),
- BindingMethod(
- type = Input::class,
- attribute = "inputInverse",
- method = "setInverse"
- )
-)
abstract class Input @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
diff --git a/library/src/main/java/com/telefonica/mistica/input/README.md b/library/src/main/java/com/telefonica/mistica/input/README.md
index 1247533b2..2b3c8efef 100644
--- a/library/src/main/java/com/telefonica/mistica/input/README.md
+++ b/library/src/main/java/com/telefonica/mistica/input/README.md
@@ -10,7 +10,7 @@ There are three input types. For each one, a component is provided:
* Check Box Input --> `com.telefonica.mistica.input.CheckBoxInput`
* Drop Down Input --> `com.telefonica.mistica.input.DropDownInput`
-All them can be placed directly on any layout, and can be configured with the following attributes (**All atributes for all types support databinding**):
+All of them can be placed directly on any layout, and can be configured with the following attributes (**All attributes are supported for all types**):
```xml
@@ -33,7 +33,7 @@ All them can be placed directly on any layout, and can be configured with the fo
-
+
@@ -44,7 +44,7 @@ And `com.telefonica.mistica.input.CheckBoxInput` provides also:
```xml
-
+
```
@@ -67,4 +67,8 @@ dropDownInput.dropDown.setOnItemClickListener { parent, view, position, id ->
// do something
}
dropDownInput.dropDown.setText("First option") // Select first option
-```
\ No newline at end of file
+```
+
+> [!NOTE]
+> Form input components are implemented as standard Android Views and do not provide Android DataBinding or inverse DataBinding support.
+> State changes can be handled through the exposed APIs and listeners.
\ No newline at end of file
diff --git a/library/src/main/java/com/telefonica/mistica/input/TextInput.kt b/library/src/main/java/com/telefonica/mistica/input/TextInput.kt
index 6a17fa494..ec327a544 100644
--- a/library/src/main/java/com/telefonica/mistica/input/TextInput.kt
+++ b/library/src/main/java/com/telefonica/mistica/input/TextInput.kt
@@ -14,13 +14,6 @@ import android.view.inputmethod.InputConnection
import android.widget.TextView
import androidx.annotation.IntDef
import androidx.annotation.LayoutRes
-import androidx.databinding.BindingAdapter
-import androidx.databinding.BindingMethod
-import androidx.databinding.BindingMethods
-import androidx.databinding.InverseBindingListener
-import androidx.databinding.InverseBindingMethod
-import androidx.databinding.InverseBindingMethods
-import androidx.databinding.adapters.ListenerUtil
import com.google.android.material.textfield.TextInputEditText
import com.google.android.material.textfield.TextInputLayout
import com.telefonica.mistica.R
@@ -29,35 +22,6 @@ import com.telefonica.mistica.input.validations.TextInputValidation
import com.telefonica.mistica.input.validations.TextInputValidationResult
import com.telefonica.mistica.util.padding
-@BindingMethods(
- BindingMethod(
- type = TextInput::class,
- attribute = "inputCounterEnabled",
- method = "setCounterEnabled"
- ),
- BindingMethod(
- type = TextInput::class,
- attribute = "inputMaxLength",
- method = "setMaxLength"
- ),
- BindingMethod(
- type = TextInput::class,
- attribute = "inputAutofillEnabled",
- method = "setAutofillEnabled"
- ),
- BindingMethod(
- type = TextInput::class,
- attribute = "inputText",
- method = "setText"
- )
-)
-@InverseBindingMethods(
- InverseBindingMethod(
- type = TextInput::class,
- attribute = "inputText",
- method = "getText"
- )
-)
class TextInput @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
@@ -200,6 +164,7 @@ class TextInput @JvmOverloads constructor(
TextInputValidationResult.Success -> {
setErrorEnabled(false)
}
+
is TextInputValidationResult.Invalid -> {
error = result.invalidMessage
setErrorEnabled(true)
@@ -269,32 +234,5 @@ class TextInput @JvmOverloads constructor(
const val TYPE_NUMBER = 5
const val NO_MAX_LENGTH = 0
-
- @BindingAdapter(
- value = ["inputTextAttrChanged"]
- )
- @JvmStatic
- fun setTextWatcher(input: TextInput, listener: InverseBindingListener) {
- val textWatcher: TextWatcher = object : TextWatcher {
- override fun afterTextChanged(s: Editable?) {
- listener.onChange()
- }
-
- override fun beforeTextChanged(
- s: CharSequence?,
- start: Int,
- count: Int,
- after: Int
- ) {
- }
-
- override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
- }
- val oldTextWatcher = ListenerUtil.trackListener(input, textWatcher, R.id.textWatcher)
- if (oldTextWatcher != null) {
- input.removeTextChangedListener(oldTextWatcher)
- }
- input.addTextChangedListener(textWatcher)
- }
}
}