Skip to content

Commit e2c4b79

Browse files
Merge pull request #16 from yogeshpaliyal/improvement/builder
Builder improvements
2 parents 196416d + 5932a1b commit e2c4b79

File tree

1 file changed

+150
-23
lines changed

1 file changed

+150
-23
lines changed

universal_adapter/src/main/java/com/yogeshpaliyal/universalAdapter/adapter/UniversalRecyclerAdapter.kt

Lines changed: 150 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.yogeshpaliyal.universalAdapter.adapter
22

33
import androidx.annotation.LayoutRes
4+
import androidx.databinding.ViewDataBinding
45
import androidx.lifecycle.LifecycleOwner
56
import androidx.recyclerview.widget.ConcatAdapter
67
import androidx.recyclerview.widget.RecyclerView
@@ -80,37 +81,48 @@ class UniversalRecyclerAdapter<T> constructor(val adapterBuilder: Builder<T>) {
8081
private var data: Resource<List<T>?>? = null
8182

8283
init {
83-
if (adapterBuilder.content != null)
84+
adapterBuilder.content?.let { content ->
8485
contentAdapter = ContentListAdapter(
8586
adapterBuilder.lifecycleOwner,
86-
adapterBuilder.content
87+
content
8788
)
89+
}
8890

89-
if (adapterBuilder.loading?.resourceLoading != null)
90-
loadingAdapter = LoadingAdapter(
91-
adapterBuilder.lifecycleOwner,
92-
adapterBuilder.loading
93-
)
9491

95-
if (adapterBuilder.loadingFooter?.loaderFooter != null)
96-
loadMoreAdapter = LoadingFooterAdapter(
97-
adapterBuilder.lifecycleOwner,
98-
adapterBuilder.loadingFooter
99-
)
92+
adapterBuilder.loading?.let { loading ->
93+
if (loading.resourceLoading != null)
94+
loadingAdapter = LoadingAdapter(
95+
adapterBuilder.lifecycleOwner,
96+
loading
97+
)
98+
}
10099

101-
if (adapterBuilder.error?.errorLayout != null)
100+
101+
adapterBuilder.loadingFooter?.let { loadingFooter ->
102+
if (loadingFooter.loaderFooter != null)
103+
loadMoreAdapter = LoadingFooterAdapter(
104+
adapterBuilder.lifecycleOwner,
105+
loadingFooter
106+
)
107+
}
108+
109+
110+
adapterBuilder.error?.let { error ->
102111
errorAdapter = ErrorAdapter(
103112
adapterBuilder.lifecycleOwner,
104-
adapterBuilder.error,
113+
error,
105114
adapterBuilder.data?.message ?: ""
106115
)
116+
}
107117

108-
if (adapterBuilder.noData?.noDataLayout != null)
118+
adapterBuilder.noData?.let { noData ->
109119
noDataFound = NoDataAdapter(
110120
adapterBuilder.lifecycleOwner,
111-
adapterBuilder.noData,
121+
noData,
112122
adapterBuilder.data?.message ?: ""
113123
)
124+
}
125+
114126

115127
adapterBuilder.data?.let { updateData(data = it) }
116128
}
@@ -120,8 +132,14 @@ class UniversalRecyclerAdapter<T> constructor(val adapterBuilder: Builder<T>) {
120132
setupAdapters(data)
121133
}
122134

135+
/**
136+
* Get Resource data
137+
*/
123138
fun getData() = data
124139

140+
/**
141+
* get content adapter adapter which has content list adapter
142+
*/
125143
fun getContentAdapter() = contentAdapter
126144
fun getLoadMoreAdapter() = loadMoreAdapter
127145
fun getLoadingAdapter() = loadingAdapter
@@ -224,16 +242,125 @@ class UniversalRecyclerAdapter<T> constructor(val adapterBuilder: Builder<T>) {
224242
}
225243
}
226244

245+
227246
data class Builder<T> constructor(
228-
var lifecycleOwner: LifecycleOwner? = null,
229-
var data: Resource<List<T>?>? = null,
230-
val content: UniversalAdapterViewType.Content<T>? = null,
231-
val loading: UniversalAdapterViewType.Loading<T>? = null,
232-
val loadingFooter: UniversalAdapterViewType.LoadingFooter<T>? = null,
233-
val noData: UniversalAdapterViewType.NoData<T>? = null,
234-
val error: UniversalAdapterViewType.Error<T>? = null
247+
internal var lifecycleOwner: LifecycleOwner? = null,
248+
internal var data: Resource<List<T>?>? = null,
249+
internal var content: UniversalAdapterViewType.Content<T>? = null,
250+
internal var loading: UniversalAdapterViewType.Loading<T>? = null,
251+
internal var loadingFooter: UniversalAdapterViewType.LoadingFooter<T>? = null,
252+
internal var noData: UniversalAdapterViewType.NoData<T>? = null,
253+
internal var error: UniversalAdapterViewType.Error<T>? = null
235254
) {
236255

256+
fun setLifecycleOwner(lifecycleOwner: LifecycleOwner?) {
257+
this.lifecycleOwner = lifecycleOwner
258+
}
259+
260+
fun setData(data: Resource<List<T>?>?) {
261+
this.data = data
262+
}
263+
264+
fun setContent(content: UniversalAdapterViewType.Content<T>) {
265+
this.content = content
266+
}
267+
268+
@JvmOverloads
269+
fun setContent(
270+
@LayoutRes
271+
resource: Int? = null,
272+
listener: Any? = null,
273+
additionalParams: HashMap<Int, Any>? = null,
274+
customBindingMapping: ((itemBinding: ViewDataBinding, item: T, bindingAdapterPosition: Int) -> Unit)? = null
275+
) {
276+
this.content = UniversalAdapterViewType.Content<T>(
277+
resource,
278+
listener,
279+
additionalParams,
280+
customBindingMapping
281+
)
282+
}
283+
284+
fun setLoading(loading: UniversalAdapterViewType.Loading<T>) {
285+
this.loading = loading
286+
}
287+
288+
@JvmOverloads
289+
fun setLoading(
290+
@LayoutRes
291+
resourceLoading: Int? = null,
292+
defaultLoadingItems: Int = 5,
293+
additionalParams: HashMap<Int, Any>? = null,
294+
customBindingMapping: ((itemBinding: ViewDataBinding, item: T) -> Unit)? = null
295+
) {
296+
297+
this.loading = UniversalAdapterViewType.Loading<T>(
298+
resourceLoading,
299+
defaultLoadingItems,
300+
additionalParams,
301+
customBindingMapping
302+
)
303+
}
304+
305+
fun setLoadingFooter(loadingFooter: UniversalAdapterViewType.LoadingFooter<T>) {
306+
this.loadingFooter = loadingFooter
307+
}
308+
309+
@JvmOverloads
310+
fun setLoadingFooter(
311+
@LayoutRes
312+
loaderFooter: Int? = null,
313+
additionalParams: HashMap<Int, Any>? = null,
314+
customBindingMapping: ((itemBinding: ViewDataBinding, item: T) -> Unit)? = null
315+
) {
316+
this.loadingFooter = UniversalAdapterViewType.LoadingFooter<T>(
317+
loaderFooter,
318+
additionalParams,
319+
customBindingMapping
320+
)
321+
}
322+
323+
fun setNoData(noData: UniversalAdapterViewType.NoData<T>) {
324+
this.noData = noData
325+
}
326+
327+
@JvmOverloads
328+
fun setNoData(
329+
@LayoutRes
330+
noDataLayout: Int? = null,
331+
listener: Any? = null,
332+
additionalParams: HashMap<Int, Any>? = null,
333+
customBindingMapping: ((itemBinding: ViewDataBinding, item: String?) -> Unit)? = null
334+
) {
335+
this.noData = UniversalAdapterViewType.NoData<T>(
336+
noDataLayout,
337+
listener,
338+
additionalParams,
339+
customBindingMapping
340+
)
341+
}
342+
343+
fun setError(error: UniversalAdapterViewType.Error<T>) {
344+
this.error = error
345+
}
346+
347+
@JvmOverloads
348+
fun setError(
349+
@LayoutRes
350+
errorLayout: Int? = null,
351+
listener: Any? = null,
352+
additionalParams: HashMap<Int, Any>? = null,
353+
customBindingMapping: ((itemBinding: ViewDataBinding, message: String?) -> Unit)? = null
354+
) {
355+
this.error = UniversalAdapterViewType.Error<T>(
356+
errorLayout,
357+
listener,
358+
additionalParams,
359+
customBindingMapping
360+
)
361+
}
362+
363+
237364
@Suppress
238365
constructor(
239366
@LayoutRes

0 commit comments

Comments
 (0)