Skip to content

Commit 27f8329

Browse files
author
belfu.ogretir
committed
add Font Support for Dialogs
1 parent 8017e7a commit 27f8329

File tree

12 files changed

+129
-34
lines changed

12 files changed

+129
-34
lines changed

libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/Builder.kt

+25-8
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
package com.trendyol.uicomponents.dialogs
22

33
import android.text.SpannableString
4-
import android.webkit.DownloadListener
5-
import android.webkit.WebView
64
import androidx.annotation.ColorInt
75
import androidx.annotation.DrawableRes
6+
import androidx.annotation.FontRes
87

98
open class Builder internal constructor() {
109

@@ -13,13 +12,23 @@ open class Builder internal constructor() {
1312
var titleTextColor: Int? = null
1413
var titleTextPosition: TextPosition? = null
1514
var showCloseButton: Boolean = false
16-
@ColorInt var closeButtonColor: Int? = null
17-
@DrawableRes var closeButtonDrawable: Int? = null
15+
16+
@ColorInt
17+
var closeButtonColor: Int? = null
18+
19+
@DrawableRes
20+
var closeButtonDrawable: Int? = null
1821
var closeButtonListener: ((DialogFragment) -> Unit)? = null
1922
var animateCornerRadiusWhenExpand: Boolean = false
2023
var onDialogDismissListener: ((DialogFragment) -> Unit)? = null
2124
var cornerRadius: Float? = null
2225
var isFullHeightWebView: Boolean = false
26+
27+
@FontRes
28+
var titleFontFamily: Int? = null
29+
30+
@FontRes
31+
var contentFontFamily: Int? = null
2332
}
2433

2534
open class InfoDialogBuilder internal constructor() : Builder() {
@@ -54,7 +63,9 @@ open class InfoDialogBuilder internal constructor() : Builder() {
5463
titleTextPosition = it.titleTextPosition,
5564
contentTextPosition = it.contentTextPosition,
5665
webViewContent = it.webViewContent,
57-
isFullHeightWebView = it.isFullHeightWebView
66+
isFullHeightWebView = it.isFullHeightWebView,
67+
titleFontFamily = it.titleFontFamily,
68+
contentFontFamily = it.contentFontFamily
5869
).toBundle()
5970
this.closeButtonListener = it.closeButtonListener ?: { }
6071
this.onDismissListener = it.onDialogDismissListener ?: {}
@@ -86,7 +97,9 @@ open class AgreementDialogBuilder internal constructor() : InfoDialogBuilder() {
8697
contentImage = it.contentImage,
8798
rightButtonText = it.rightButtonText,
8899
leftButtonText = it.leftButtonText,
89-
webViewContent = it.webViewContent
100+
webViewContent = it.webViewContent,
101+
titleFontFamily = it.titleFontFamily,
102+
contentFontFamily = it.contentFontFamily
90103
).toBundle()
91104
closeButtonListener = it.closeButtonListener
92105
rightButtonClickListener = it.rightButtonClickListener
@@ -133,7 +146,9 @@ class SelectionDialogBuilder internal constructor() : InfoDialogBuilder() {
133146
selectedItemDrawable = it.selectedItemDrawable,
134147
selectedTextColor = it.selectedTextColor,
135148
showRadioButton = it.showRadioButton,
136-
webViewContent = it.webViewContent
149+
webViewContent = it.webViewContent,
150+
titleFontFamily = it.titleFontFamily,
151+
contentFontFamily = it.contentFontFamily
137152
).toBundle()
138153
closeButtonListener = it.closeButtonListener
139154
onItemSelectedListener = it.onItemSelectedListener
@@ -166,7 +181,9 @@ class InfoListDialogBuilder internal constructor() : InfoDialogBuilder() {
166181
contentImage = it.contentImage,
167182
webViewContent = it.webViewContent,
168183
infoListItems = it.infoListItems,
169-
itemDividers = it.itemDividers
184+
itemDividers = it.itemDividers,
185+
titleFontFamily = it.titleFontFamily,
186+
contentFontFamily = it.contentFontFamily
170187
).toBundle()
171188
closeButtonListener = it.closeButtonListener
172189
this.onDismissListener = it.onDialogDismissListener ?: {}

libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogFragment.kt

+35-13
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import android.text.method.LinkMovementMethod
88
import android.text.util.Linkify
99
import android.view.LayoutInflater
1010
import android.view.View
11-
import android.view.ViewConfiguration
1211
import android.view.ViewGroup
1312
import android.view.ViewOutlineProvider
1413
import android.webkit.DownloadListener
@@ -47,7 +46,8 @@ class DialogFragment internal constructor() : BaseBottomSheetDialog() {
4746
dialogArguments.showItemsAsHtml,
4847
dialogArguments.selectedItemDrawable,
4948
dialogArguments.selectedTextColor,
50-
dialogArguments.showRadioButton
49+
dialogArguments.showRadioButton,
50+
dialogArguments.contentFontFamily
5151
)
5252
}
5353

@@ -57,7 +57,11 @@ class DialogFragment internal constructor() : BaseBottomSheetDialog() {
5757
ViewModelProviders.of(this)[DialogListViewModel::class.java]
5858
}
5959

60-
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
60+
override fun onCreateView(
61+
inflater: LayoutInflater,
62+
container: ViewGroup?,
63+
savedInstanceState: Bundle?
64+
): View {
6165
binding = FragmentDialogBinding.inflate(inflater, container, false)
6266
return binding.root
6367
}
@@ -66,7 +70,8 @@ class DialogFragment internal constructor() : BaseBottomSheetDialog() {
6670
if (dialogArguments.animateCornerRadiusWhenExpand) {
6771
animateCornerRadiusWithStateChanged()
6872
} else {
69-
val cornerRadius = dialogArguments.cornerRadius ?: requireContext().pixel(R.dimen.ui_components_dialogs_corner_radius)
73+
val cornerRadius = dialogArguments.cornerRadius
74+
?: requireContext().pixel(R.dimen.ui_components_dialogs_corner_radius)
7075
binding.cardView.outlineProvider = BottomSheetOutlineProvider(radius = cornerRadius)
7176
}
7277

@@ -90,13 +95,21 @@ class DialogFragment internal constructor() : BaseBottomSheetDialog() {
9095
initializeSelectionDialog(items)
9196
}
9297
dialogArguments.infoListItems?.let { items ->
93-
initializeInfoListDialog(items, dialogArguments.itemDividers)
98+
initializeInfoListDialog(
99+
items,
100+
dialogArguments.itemDividers,
101+
dialogArguments.contentFontFamily
102+
)
94103
}
95104
if (dialogArguments.horizontalPadding != null || dialogArguments.verticalPadding != null) {
96-
val topPadding = dialogArguments.verticalPadding?.toInt() ?: nestedScrollView.paddingTop
97-
val bottomPadding = dialogArguments.verticalPadding?.toInt() ?: nestedScrollView.paddingBottom
98-
val startPadding = dialogArguments.horizontalPadding?.toInt() ?: nestedScrollView.paddingStart
99-
val endPadding = dialogArguments.horizontalPadding?.toInt() ?: nestedScrollView.paddingEnd
105+
val topPadding =
106+
dialogArguments.verticalPadding?.toInt() ?: nestedScrollView.paddingTop
107+
val bottomPadding =
108+
dialogArguments.verticalPadding?.toInt() ?: nestedScrollView.paddingBottom
109+
val startPadding =
110+
dialogArguments.horizontalPadding?.toInt() ?: nestedScrollView.paddingStart
111+
val endPadding =
112+
dialogArguments.horizontalPadding?.toInt() ?: nestedScrollView.paddingEnd
100113
nestedScrollView.setPadding(startPadding, topPadding, endPadding, bottomPadding)
101114
}
102115
}
@@ -135,10 +148,12 @@ class DialogFragment internal constructor() : BaseBottomSheetDialog() {
135148

136149
private fun initializeInfoListDialog(
137150
items: List<Pair<CharSequence, CharSequence>>,
138-
itemDividers: List<ItemDivider>
151+
itemDividers: List<ItemDivider>,
152+
fontFamily: Int?
139153
) {
140154
with(binding.recyclerViewItems) {
141155
infoListAdapter.setItems(items)
156+
infoListAdapter.contentFontFamily = fontFamily
142157
itemDividers.forEach {
143158
addItemDecoration(ItemDecorator(it))
144159
}
@@ -162,11 +177,15 @@ class DialogFragment internal constructor() : BaseBottomSheetDialog() {
162177
isSearchEnabled = dialogArguments.enableSearch,
163178
isClearSearchButtonVisible = dialogArguments.showClearSearchButton,
164179
searchHint = dialogArguments.searchHint,
165-
titleBackgroundColor = dialogArguments.titleBackgroundColor ?: R.color.ui_components_dialogs_gray,
166-
titleTextColor = dialogArguments.titleTextColor ?: R.color.ui_components_dialogs_primary_text_color,
180+
titleBackgroundColor = dialogArguments.titleBackgroundColor
181+
?: R.color.ui_components_dialogs_gray,
182+
titleTextColor = dialogArguments.titleTextColor
183+
?: R.color.ui_components_dialogs_primary_text_color,
167184
titleTextPosition = dialogArguments.titleTextPosition ?: TextPosition.START,
168185
contentTextPosition = dialogArguments.contentTextPosition ?: TextPosition.START,
169186
webViewContent = dialogArguments.webViewContent,
187+
titleFontFamily = dialogArguments.titleFontFamily,
188+
contentFontFamily = dialogArguments.contentFontFamily
170189
)
171190

172191
with(binding) {
@@ -178,6 +197,7 @@ class DialogFragment internal constructor() : BaseBottomSheetDialog() {
178197
text = viewState.title
179198
textAlignment = viewState.getTitleTextPosition()
180199
setTextColor(viewState.getTitleTextColor(context))
200+
typeface = viewState.getTitleFontFamily(context)
181201
}
182202
with(viewDialogHeader.imageClose) {
183203
visibility = viewState.getCloseButtonVisibility()
@@ -191,6 +211,7 @@ class DialogFragment internal constructor() : BaseBottomSheetDialog() {
191211
text = viewState.getContent()
192212
textAlignment = viewState.getContentTextPosition()
193213
visibility = viewState.getContentTextVisibility()
214+
typeface = viewState.getContentFontFamily(context)
194215
}
195216
with(webViewContent) {
196217
visibility = viewState.getWebViewContentVisibility()
@@ -209,6 +230,7 @@ class DialogFragment internal constructor() : BaseBottomSheetDialog() {
209230
with(editTextSearch) {
210231
hint = viewState.searchHint
211232
visibility = viewState.isSearchVisible()
233+
typeface = viewState.getContentFontFamily(context)
212234
}
213235
imageClearSearchQuery.visibility = viewState.getClearButtonVisibility()
214236
recyclerViewItems.visibility = viewState.getListVisibility()
@@ -310,4 +332,4 @@ class DialogFragment internal constructor() : BaseBottomSheetDialog() {
310332
return fragmentManager.findFragmentByTag(TAG) as? DialogFragment
311333
}
312334
}
313-
}
335+
}

libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogFragmentArguments.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ package com.trendyol.uicomponents.dialogs
22

33
import android.os.Bundle
44
import android.os.Parcelable
5-
import android.webkit.WebView
65
import androidx.annotation.ColorInt
76
import androidx.annotation.ColorRes
87
import androidx.annotation.DrawableRes
8+
import androidx.annotation.FontRes
99
import androidx.core.os.bundleOf
1010
import kotlinx.parcelize.Parcelize
1111

@@ -39,7 +39,9 @@ class DialogFragmentArguments(
3939
val webViewContent: WebViewContent? = null,
4040
val infoListItems: List<Pair<CharSequence, CharSequence>>? = null,
4141
val itemDividers: List<ItemDivider> = emptyList(),
42-
val isFullHeightWebView : Boolean = false
42+
val isFullHeightWebView: Boolean = false,
43+
@FontRes val titleFontFamily: Int? = null,
44+
@FontRes val contentFontFamily: Int? = null
4345
) : Parcelable {
4446

4547
fun toBundle() = bundleOf("ARGUMENTS" to this)

libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/DialogViewState.kt

+16-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ import android.view.View
66
import androidx.annotation.ColorInt
77
import androidx.annotation.ColorRes
88
import androidx.annotation.DrawableRes
9+
import androidx.annotation.FontRes
910
import androidx.core.content.ContextCompat
11+
import androidx.core.content.res.ResourcesCompat
1012
import androidx.core.text.HtmlCompat
1113
import com.trendyol.dialog.R
1214

@@ -29,6 +31,8 @@ data class DialogViewState(
2931
val titleTextPosition: TextPosition,
3032
val contentTextPosition: TextPosition,
3133
val webViewContent: WebViewContent?,
34+
@FontRes val titleFontFamily: Int?,
35+
@FontRes val contentFontFamily: Int?,
3236
) {
3337

3438
fun getTitleVisibility(): Int = if (title.isNullOrEmpty().not()) View.VISIBLE else View.GONE
@@ -40,10 +44,17 @@ data class DialogViewState(
4044
}
4145

4246
@ColorInt
43-
fun getTitleBackgroundColor(context: Context): Int = ContextCompat.getColor(context, titleBackgroundColor)
47+
fun getTitleBackgroundColor(context: Context): Int =
48+
ContextCompat.getColor(context, titleBackgroundColor)
4449

4550
fun getTitleTextColor(context: Context) = ContextCompat.getColor(context, titleTextColor)
4651

52+
fun getTitleFontFamily(context: Context) =
53+
titleFontFamily?.let { ResourcesCompat.getFont(context, it) }
54+
55+
fun getContentFontFamily(context: Context) =
56+
contentFontFamily?.let { ResourcesCompat.getFont(context, it) }
57+
4758
fun getTitleTextPosition(): Int {
4859
return when (titleTextPosition) {
4960
TextPosition.CENTER -> 4
@@ -71,7 +82,8 @@ data class DialogViewState(
7182
}
7283
}
7384

74-
fun getContentImageVisibility(): Int = if (contentImage?.takeIf { it != 0 } != null) View.VISIBLE else View.GONE
85+
fun getContentImageVisibility(): Int =
86+
if (contentImage?.takeIf { it != 0 } != null) View.VISIBLE else View.GONE
7587

7688
fun getContentTextVisibility(): Int = if (content.isNotEmpty()) View.VISIBLE else View.GONE
7789

@@ -86,7 +98,8 @@ data class DialogViewState(
8698

8799
fun isSearchVisible(): Int = if (isSearchEnabled) View.VISIBLE else View.GONE
88100

89-
fun getClearButtonVisibility(): Int = if (isClearSearchButtonVisible) View.VISIBLE else View.GONE
101+
fun getClearButtonVisibility(): Int =
102+
if (isClearSearchButtonVisible) View.VISIBLE else View.GONE
90103

91104
fun getListVisibility(): Int = if (isListVisible) View.VISIBLE else View.GONE
92105

libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/list/DialogListAdapter.kt

+13-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.trendyol.uicomponents.dialogs.list
22

33
import android.view.LayoutInflater
44
import android.view.ViewGroup
5+
import androidx.annotation.FontRes
56
import androidx.recyclerview.widget.ListAdapter
67
import androidx.recyclerview.widget.RecyclerView
78
import com.trendyol.dialog.databinding.ItemUiComponentsSelectionDialogBinding
@@ -10,7 +11,8 @@ internal class DialogListAdapter(
1011
private val showItemsAsHtml: Boolean,
1112
private val selectedItemDrawable: Int?,
1213
private val selectedTextColor: Int?,
13-
private val showRadioButton: Boolean
14+
private val showRadioButton: Boolean,
15+
@FontRes private val contentFontFamily: Int?
1416
) : ListAdapter<Pair<Boolean, CharSequence>, DialogListAdapter.ItemViewHolder>(ListItemDiffCallback()) {
1517

1618
var onItemSelectedListener: ((Int) -> Unit)? = null
@@ -25,7 +27,13 @@ internal class DialogListAdapter(
2527
}
2628

2729
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder =
28-
ItemViewHolder(ItemUiComponentsSelectionDialogBinding.inflate(LayoutInflater.from(parent.context), parent, false))
30+
ItemViewHolder(
31+
ItemUiComponentsSelectionDialogBinding.inflate(
32+
LayoutInflater.from(parent.context),
33+
parent,
34+
false
35+
)
36+
)
2937

3038
inner class ItemViewHolder(
3139
private val binding: ItemUiComponentsSelectionDialogBinding
@@ -48,7 +56,8 @@ internal class DialogListAdapter(
4856
selectedItemDrawable = selectedItemDrawable,
4957
selectedTextColor = selectedTextColor,
5058
isChecked = item.first,
51-
showRadioButton = showRadioButton
59+
showRadioButton = showRadioButton,
60+
contentFontFamily = contentFontFamily
5261
)
5362

5463
with(binding) {
@@ -59,6 +68,7 @@ internal class DialogListAdapter(
5968
with(radioButtonItem) {
6069
text = viewState.getText()
6170
setTextColor(viewState.getSelectedTextColor(context))
71+
typeface = viewState.getFontFamily(context)
6272
}
6373
with(imageViewCheckedDrawable) {
6474
setImageDrawable(viewState.getSelectedItemDrawable(context))

libraries/dialogs/src/main/java/com/trendyol/uicomponents/dialogs/list/DialogListItemViewState.kt

+6-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ package com.trendyol.uicomponents.dialogs.list
33
import android.content.Context
44
import android.graphics.drawable.Drawable
55
import android.view.View
6+
import androidx.annotation.FontRes
67
import androidx.core.content.ContextCompat
8+
import androidx.core.content.res.ResourcesCompat
79
import androidx.core.text.HtmlCompat
810
import com.trendyol.dialog.R
911

@@ -13,7 +15,8 @@ data class DialogListItemViewState(
1315
val selectedItemDrawable: Int?,
1416
val selectedTextColor: Int?,
1517
val isChecked: Boolean,
16-
val showRadioButton: Boolean
18+
val showRadioButton: Boolean,
19+
@FontRes val contentFontFamily: Int?,
1720
) {
1821

1922
fun getText(): CharSequence =
@@ -39,5 +42,7 @@ data class DialogListItemViewState(
3942
fun getRadioButtonVisibility(): Int = if (showRadioButton) View.VISIBLE else View.GONE
4043

4144
fun getRadioButtonChecked(): Boolean = isChecked
45+
46+
fun getFontFamily(context: Context) = contentFontFamily?.let { ResourcesCompat.getFont(context, it) }
4247
}
4348

0 commit comments

Comments
 (0)