From fac87d44f709a1ac99c9863234d06d0c80ce47a3 Mon Sep 17 00:00:00 2001 From: Yasin Arslan Date: Tue, 13 Feb 2024 16:51:29 +0300 Subject: [PATCH 1/3] add close button drawable and color support for dialogs --- libraries/dialogs/README.md | 16 ++++++++++------ .../com/trendyol/uicomponents/dialogs/Builder.kt | 10 ++++++++++ .../uicomponents/dialogs/DialogFragment.kt | 7 ++++++- .../dialogs/DialogFragmentArguments.kt | 2 ++ .../uicomponents/dialogs/DialogViewState.kt | 14 ++++++++++++++ .../src/main/res/layout/layout_dialog_header.xml | 13 ++++++------- libraries/dialogs/src/main/res/values/dimens.xml | 1 + .../com/trendyol/uicomponents/DialogsActivity.kt | 1 + 8 files changed, 50 insertions(+), 14 deletions(-) diff --git a/libraries/dialogs/README.md b/libraries/dialogs/README.md index 89a2599f..4c70be6a 100644 --- a/libraries/dialogs/README.md +++ b/libraries/dialogs/README.md @@ -1,7 +1,7 @@ -$dialogsVersion = dialogs-1.4.2 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) +$dialogsVersion = dialogs-1.4.3 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) ## Dialogs Dialogs is a bunch of BottomSheetDialogs to use in app to show user an information, agreement or list. @@ -34,6 +34,8 @@ Simple dialog to show information, error or text. |---------------------------------|--------------------------|---------------------------------------------------------------------------------------------------------------------------|---------------| | `title` | CharSequence | Title of the dialog | "" | | `showCloseButton` | Boolean | Close button visibility | false | +| `closeButtonColor` | Int | Close button color | false | +| `closeButtonDrawable` | Int | Close button drawable | false | | `animateCornerRadiusWhenExpand` | Boolean | Corner radius will be removed with an animation when set true. | false | | `cornerRadius` | Float | Corner radius will be applied. | 16dp | | `horizontalPadding` | Float | Horizontal padding will be applied. | 16dp | @@ -48,12 +50,14 @@ Simple dialog to show information, error or text. Sample usage: ```kotlin - infoDialog { + infoDialog { title = "Info Title" - showCloseButton = true - closeButtonListener = { onInfoDialogClosed(it) } - content = SpannableString.valueOf(getSpannableString()) - contentImage = android.R.drawable.btn_plus + showCloseButton = true + closeButtonColor = R.color.sample_color + closeButtonDrawable = R.drawable.sample_drawable + closeButtonListener = { onInfoDialogClosed(it) } + content = SpannableString.valueOf(getSpannableString()) + contentImage = android.R.drawable.btn_plus }.show(supportFragmentManager) ``` diff --git a/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/Builder.kt b/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/Builder.kt index 9b39c3fd..f18c9475 100644 --- a/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/Builder.kt +++ b/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/Builder.kt @@ -12,6 +12,8 @@ open class Builder internal constructor() { var titleTextColor: Int? = null var titleTextPosition: TextPosition? = null var showCloseButton: Boolean = false + var closeButtonColor: Int? = null + var closeButtonDrawable: Int? = null var closeButtonListener: ((DialogFragment) -> Unit)? = null var animateCornerRadiusWhenExpand: Boolean = false var onDialogDismissListener: ((DialogFragment) -> Unit)? = null @@ -38,6 +40,8 @@ open class InfoDialogBuilder internal constructor() : Builder() { arguments = DialogFragmentArguments( title = it.title, showCloseButton = it.showCloseButton, + closeButtonColor = it.closeButtonColor, + closeButtonDrawable = it.closeButtonDrawable, animateCornerRadiusWhenExpand = it.animateCornerRadiusWhenExpand, cornerRadius = it.cornerRadius, horizontalPadding = it.horizontalPadding, @@ -73,6 +77,8 @@ open class AgreementDialogBuilder internal constructor() : InfoDialogBuilder() { arguments = DialogFragmentArguments( title = it.title, showCloseButton = it.showCloseButton, + closeButtonColor = it.closeButtonColor, + closeButtonDrawable = it.closeButtonDrawable, content = SpannableString(it.content), cornerRadius = it.cornerRadius, horizontalPadding = it.horizontalPadding, @@ -110,6 +116,8 @@ class SelectionDialogBuilder internal constructor() : InfoDialogBuilder() { arguments = DialogFragmentArguments( title = it.title, showCloseButton = it.showCloseButton, + closeButtonColor = it.closeButtonColor, + closeButtonDrawable = it.closeButtonDrawable, content = SpannableString(it.content), showContentAsHtml = it.showContentAsHtml, contentImage = it.contentImage, @@ -148,6 +156,8 @@ class InfoListDialogBuilder internal constructor() : InfoDialogBuilder() { arguments = DialogFragmentArguments( title = it.title, showCloseButton = it.showCloseButton, + closeButtonColor = it.closeButtonColor, + closeButtonDrawable = it.closeButtonDrawable, content = SpannableString(it.content), animateCornerRadiusWhenExpand = it.animateCornerRadiusWhenExpand, cornerRadius = it.cornerRadius, diff --git a/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogFragment.kt b/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogFragment.kt index ef004ad7..633f33b0 100644 --- a/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogFragment.kt +++ b/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogFragment.kt @@ -147,6 +147,8 @@ class DialogFragment internal constructor() : BaseBottomSheetDialog() { val viewState = DialogViewState( title = dialogArguments.title, showCloseButton = dialogArguments.showCloseButton, + closeButtonColor = dialogArguments.closeButtonColor, + closeButtonDrawable = dialogArguments.closeButtonDrawable, content = dialogArguments.content ?: SpannableString(""), showContentAsHtml = dialogArguments.showContentAsHtml, contentImage = dialogArguments.contentImage, @@ -173,7 +175,10 @@ class DialogFragment internal constructor() : BaseBottomSheetDialog() { textAlignment = viewState.getTitleTextPosition() setTextColor(viewState.getTitleTextColor(context)) } - viewDialogHeader.imageClose.visibility = viewState.getCloseButtonVisibility() + with(viewDialogHeader.imageClose) { + visibility = viewState.getCloseButtonVisibility() + setImageDrawable(viewState.getCloseButtonDrawable(context)) + } with(imageContent) { setImageDrawable(viewState.getContentImageDrawable(context)) visibility = viewState.getContentImageVisibility() diff --git a/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogFragmentArguments.kt b/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogFragmentArguments.kt index f896c673..4e136578 100644 --- a/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogFragmentArguments.kt +++ b/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogFragmentArguments.kt @@ -12,6 +12,8 @@ import kotlinx.parcelize.Parcelize class DialogFragmentArguments( val title: CharSequence? = null, val showCloseButton: Boolean? = null, + @ColorRes val closeButtonColor: Int? = null, + @DrawableRes val closeButtonDrawable: Int? = null, val animateCornerRadiusWhenExpand: Boolean = true, val cornerRadius: Float? = null, val horizontalPadding: Float? = null, diff --git a/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogViewState.kt b/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogViewState.kt index 7d53e12a..f3d6565d 100644 --- a/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogViewState.kt +++ b/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogViewState.kt @@ -8,10 +8,13 @@ import androidx.annotation.ColorRes import androidx.annotation.DrawableRes import androidx.core.content.ContextCompat import androidx.core.text.HtmlCompat +import com.trendyol.dialog.R data class DialogViewState( val title: CharSequence?, private val showCloseButton: Boolean?, + @ColorRes val closeButtonColor: Int?, + @DrawableRes val closeButtonDrawable: Int?, private val content: CharSequence, val showContentAsHtml: Boolean, @DrawableRes val contentImage: Int?, @@ -59,6 +62,17 @@ data class DialogViewState( fun getCloseButtonVisibility(): Int = if (showCloseButton == true) View.VISIBLE else View.GONE + fun getCloseButtonDrawable( + context: Context + ): Drawable? { + val drawableId = closeButtonDrawable ?: R.drawable.ic_ui_components_dialogs_close + return ContextCompat.getDrawable(context, drawableId)?.apply { + closeButtonColor?.let { color -> + setTint(ContextCompat.getColor(context, color)) + } + } + } + fun getContentImageVisibility(): Int = if (contentImage?.takeIf { it != 0 } != null) View.VISIBLE else View.GONE fun getContentTextVisibility(): Int = if (content.isNotEmpty()) View.VISIBLE else View.GONE diff --git a/libraries/dialogs/src/main/res/layout/layout_dialog_header.xml b/libraries/dialogs/src/main/res/layout/layout_dialog_header.xml index 2c3cbcbe..c83bc724 100644 --- a/libraries/dialogs/src/main/res/layout/layout_dialog_header.xml +++ b/libraries/dialogs/src/main/res/layout/layout_dialog_header.xml @@ -1,13 +1,11 @@ - + android:paddingStart="@dimen/ui_components_dialogs_margin_outer"> + \ No newline at end of file diff --git a/libraries/dialogs/src/main/res/values/dimens.xml b/libraries/dialogs/src/main/res/values/dimens.xml index 043c282a..03762206 100644 --- a/libraries/dialogs/src/main/res/values/dimens.xml +++ b/libraries/dialogs/src/main/res/values/dimens.xml @@ -2,6 +2,7 @@ 16dp + 12dp 8dp 16dp diff --git a/sample/src/main/java/com/trendyol/uicomponents/DialogsActivity.kt b/sample/src/main/java/com/trendyol/uicomponents/DialogsActivity.kt index 7d65817c..f1401b47 100644 --- a/sample/src/main/java/com/trendyol/uicomponents/DialogsActivity.kt +++ b/sample/src/main/java/com/trendyol/uicomponents/DialogsActivity.kt @@ -77,6 +77,7 @@ class DialogsActivity : AppCompatActivity() { infoDialog { title = "Info Dialog Sample" showCloseButton = true + closeButtonColor = R.color.civ_error_stroke closeButtonListener = infoDialogClosed content = SpannableString.valueOf(getSpannableString()) contentImage = R.mipmap.ic_launcher_round From c290a94c897b31b900f6dc4660aadb7e8014f0a7 Mon Sep 17 00:00:00 2001 From: Yasin Arslan Date: Wed, 14 Feb 2024 10:53:04 +0300 Subject: [PATCH 2/3] change close button color usage from ColorRes to ColorInt --- .../uicomponents/dialogs/DialogFragmentArguments.kt | 3 ++- .../com/trendyol/uicomponents/dialogs/DialogViewState.kt | 6 ++---- .../main/java/com/trendyol/uicomponents/DialogsActivity.kt | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogFragmentArguments.kt b/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogFragmentArguments.kt index 4e136578..3056fabd 100644 --- a/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogFragmentArguments.kt +++ b/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogFragmentArguments.kt @@ -3,6 +3,7 @@ package com.trendyol.uicomponents.dialogs import android.os.Bundle import android.os.Parcelable import android.webkit.WebView +import androidx.annotation.ColorInt import androidx.annotation.ColorRes import androidx.annotation.DrawableRes import androidx.core.os.bundleOf @@ -12,7 +13,7 @@ import kotlinx.parcelize.Parcelize class DialogFragmentArguments( val title: CharSequence? = null, val showCloseButton: Boolean? = null, - @ColorRes val closeButtonColor: Int? = null, + @ColorInt val closeButtonColor: Int? = null, @DrawableRes val closeButtonDrawable: Int? = null, val animateCornerRadiusWhenExpand: Boolean = true, val cornerRadius: Float? = null, diff --git a/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogViewState.kt b/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogViewState.kt index f3d6565d..66383c2d 100644 --- a/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogViewState.kt +++ b/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogViewState.kt @@ -13,7 +13,7 @@ import com.trendyol.dialog.R data class DialogViewState( val title: CharSequence?, private val showCloseButton: Boolean?, - @ColorRes val closeButtonColor: Int?, + @ColorInt val closeButtonColor: Int?, @DrawableRes val closeButtonDrawable: Int?, private val content: CharSequence, val showContentAsHtml: Boolean, @@ -67,9 +67,7 @@ data class DialogViewState( ): Drawable? { val drawableId = closeButtonDrawable ?: R.drawable.ic_ui_components_dialogs_close return ContextCompat.getDrawable(context, drawableId)?.apply { - closeButtonColor?.let { color -> - setTint(ContextCompat.getColor(context, color)) - } + closeButtonColor?.let { color -> setTint(color) } } } diff --git a/sample/src/main/java/com/trendyol/uicomponents/DialogsActivity.kt b/sample/src/main/java/com/trendyol/uicomponents/DialogsActivity.kt index f1401b47..669d8fa4 100644 --- a/sample/src/main/java/com/trendyol/uicomponents/DialogsActivity.kt +++ b/sample/src/main/java/com/trendyol/uicomponents/DialogsActivity.kt @@ -77,7 +77,7 @@ class DialogsActivity : AppCompatActivity() { infoDialog { title = "Info Dialog Sample" showCloseButton = true - closeButtonColor = R.color.civ_error_stroke + closeButtonColor = ContextCompat.getColor(this@DialogsActivity, R.color.civ_error_stroke) closeButtonListener = infoDialogClosed content = SpannableString.valueOf(getSpannableString()) contentImage = R.mipmap.ic_launcher_round From 871e1efdf8a086b836ca3a21f645893927c36c8b Mon Sep 17 00:00:00 2001 From: Yasin Arslan Date: Wed, 14 Feb 2024 12:58:28 +0300 Subject: [PATCH 3/3] add qualifier for new variables --- .../main/java/com/trendyol/uicomponents/dialogs/Builder.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/Builder.kt b/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/Builder.kt index f18c9475..9c2b13bd 100644 --- a/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/Builder.kt +++ b/libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/Builder.kt @@ -3,6 +3,7 @@ package com.trendyol.uicomponents.dialogs import android.text.SpannableString import android.webkit.DownloadListener import android.webkit.WebView +import androidx.annotation.ColorInt import androidx.annotation.DrawableRes open class Builder internal constructor() { @@ -12,8 +13,8 @@ open class Builder internal constructor() { var titleTextColor: Int? = null var titleTextPosition: TextPosition? = null var showCloseButton: Boolean = false - var closeButtonColor: Int? = null - var closeButtonDrawable: Int? = null + @ColorInt var closeButtonColor: Int? = null + @DrawableRes var closeButtonDrawable: Int? = null var closeButtonListener: ((DialogFragment) -> Unit)? = null var animateCornerRadiusWhenExpand: Boolean = false var onDialogDismissListener: ((DialogFragment) -> Unit)? = null