diff --git a/templates-api/src/main/java/com/itsaky/androidide/templates/parameters.kt b/templates-api/src/main/java/com/itsaky/androidide/templates/parameters.kt index f7b0aa85aa..ac2dd79446 100644 --- a/templates-api/src/main/java/com/itsaky/androidide/templates/parameters.kt +++ b/templates-api/src/main/java/com/itsaky/androidide/templates/parameters.kt @@ -300,6 +300,8 @@ class BooleanParameterBuilder : ParameterBuilder() { * is clicked. Click listener to the icon will be set on if this is non-null. * @property onEndIconClick Function which will be used when the end icon is * clicked. Click listener to the icon will be set on if this is non-null. + * @property showClearIcon Whether a Material clear-text (X) end icon should be + * shown, allowing the user to empty the field in one tap. */ abstract class TextFieldParameter( @StringRes name: Int, @@ -311,7 +313,8 @@ abstract class TextFieldParameter( val inputType: Int?, @StyleableRes val imeOptions: Int?, val maxLines: Int?, tooltipTag: String?, constraints: List, - id: Int?, nameStr: String? + id: Int?, nameStr: String?, + val showClearIcon: Boolean = false ) : Parameter(name, description, default, tooltipTag, constraints, id, nameStr) abstract class TextFieldParameterBuilder( @@ -322,6 +325,7 @@ abstract class TextFieldParameterBuilder( var inputType: Int? = null, var imeOptions: Int? = null, var maxLines: Int? = null, + var showClearIcon: Boolean = false, ) : ParameterBuilder() class StringParameter( @@ -337,11 +341,12 @@ class StringParameter( tooltipTag: String?, constraints: List, id: Int?, - nameStr: String? + nameStr: String?, + showClearIcon: Boolean = false ) : TextFieldParameter( name, description, default, startIcon, endIcon, onStartIconClick, onEndIconClick, inputType, imeOptions, maxLines, tooltipTag, constraints, - id, nameStr + id, nameStr, showClearIcon ) class StringParameterBuilder : TextFieldParameterBuilder() { @@ -361,7 +366,8 @@ class StringParameterBuilder : TextFieldParameterBuilder() { tooltipTag = tooltipTag, constraints = constraints, id = id, - nameStr = nameStr + nameStr = nameStr, + showClearIcon = showClearIcon ) } } @@ -438,6 +444,7 @@ inline fun projectNameParameter( name = string.project_app_name default = "My Application" startIcon = { R.drawable.ic_android } + showClearIcon = true constraints = listOf(NONEMPTY) inputType = android.text.InputType.TYPE_CLASS_TEXT or android.text.InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS diff --git a/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/TemplateWidgetViewProviderImpl.kt b/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/TemplateWidgetViewProviderImpl.kt index ac4824862d..fd1adbf51c 100644 --- a/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/TemplateWidgetViewProviderImpl.kt +++ b/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/TemplateWidgetViewProviderImpl.kt @@ -360,6 +360,9 @@ class TemplateWidgetViewProviderImpl : ITemplateWidgetViewProvider { root.setHint(name) } resetStartAndEndIcons(context, root) + if (showClearIcon) { + root.endIconMode = TextInputLayout.END_ICON_CLEAR_TEXT + } root.editText!!.addTextChangedListener(object : SingleTextWatcher() { override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { onTextChanged(s?.toString() ?: "")