Skip to content

Commit 9f434a8

Browse files
committed
implemented kotlin declarative extensions in ext module
1 parent f703448 commit 9f434a8

File tree

3 files changed

+93
-5
lines changed

3 files changed

+93
-5
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ In this way every item of the recycler view has its own set of files, resulting
3737
## <a name="setup"></a>Setup
3838
In your gradle dependencies add:
3939
```groovy
40-
def recyclerAdapterVersion = "2.6.2" // change it with the version you want to use
40+
def recyclerAdapterVersion = "2.7.0" // change it with the version you want to use
4141
implementation "net.gotev:recycleradapter:$recyclerAdapterVersion"
4242
```
4343
This is the latest version: [ ![Download](https://api.bintray.com/packages/gotev/maven/recycler-adapter/images/download.svg) ](https://bintray.com/gotev/maven/recycler-adapter/_latestVersion)

manifest.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ ext {
99
library_licenses = ["Apache-2.0"]
1010
library_licenses_url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
1111
library_project_group = 'net.gotev'
12-
library_version = '2.6.2'
12+
library_version = '2.7.0'
1313
version_code = 5
1414
min_sdk = 18
1515
target_sdk = 28
1616
demo_app_id = 'net.gotev.recycleradapterdemo'
1717

1818
// Gradle classpath dependencies versions
19-
kotlin_version = '1.3.21'
19+
kotlin_version = '1.3.41'
2020
gradle_version = '3.3.2'
2121
maven_gradle_version = '2.1'
2222
gradle_versions_plugin_version = '0.20.0'
@@ -37,9 +37,9 @@ ext {
3737
androidx_appcompat_version = '1.0.2'
3838

3939
// App dependencies
40-
okhttp_version = '3.13.1'
40+
okhttp_version = '3.14.2'
4141
retrofit_version = '2.5.0'
42-
rxjava2_version = '2.2.7'
42+
rxjava2_version = '2.2.10'
4343
rxkotlin_version = '2.3.0'
4444
rxandroid_version = '2.1.1'
4545

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package net.gotev.recycleradapter.ext
2+
3+
import net.gotev.recycleradapter.AdapterItem
4+
import net.gotev.recycleradapter.RecyclerAdapter
5+
6+
/**
7+
* @author Aleksandar Gotev
8+
*/
9+
10+
typealias AdapterItems = ArrayList<AdapterItem<*>>
11+
12+
fun createRecyclerAdapterWith(vararg items: AdapterItem<*>?): RecyclerAdapter {
13+
return RecyclerAdapter().apply {
14+
val filtered = items.filterNotNull()
15+
if (filtered.isNotEmpty()) {
16+
add(filtered)
17+
}
18+
}
19+
}
20+
21+
fun createRecyclerAdapterWith(list: List<AdapterItem<*>?>?): RecyclerAdapter {
22+
return RecyclerAdapter().apply {
23+
val filtered = list?.filterNotNull() ?: emptyList()
24+
if (filtered.isNotEmpty()) {
25+
add(filtered)
26+
}
27+
}
28+
}
29+
30+
fun listOfAdapterItems(vararg items: AdapterItem<*>?): AdapterItems {
31+
return if (items.isEmpty()) {
32+
ArrayList(1)
33+
} else {
34+
ArrayList(items.filterNotNull())
35+
}
36+
}
37+
38+
fun AdapterItems.adding(item: AdapterItem<*>?): AdapterItems {
39+
return if (item == null) {
40+
this
41+
} else {
42+
apply { add(item) }
43+
}
44+
}
45+
46+
fun adapterItems(vararg items: AdapterItem<*>?): AdapterItems {
47+
return ArrayList(listOfNotNull(*items))
48+
}
49+
50+
inline fun <T> Iterable<T>.mapItems(transform: (T) -> AdapterItem<*>?): Array<AdapterItem<*>> {
51+
return mapNotNull(transform).toTypedArray()
52+
}
53+
54+
inline fun <K, V> Map<out K, V>.mapToManyAdapterItems(transform: (Map.Entry<K, V>) -> List<AdapterItem<*>>): Array<AdapterItem<*>> {
55+
return map(transform).flatten().toTypedArray()
56+
}
57+
58+
inline fun <T> Iterable<T>.createRecyclerAdapterByMapping(transform: (T) -> AdapterItem<*>?): RecyclerAdapter {
59+
return RecyclerAdapter().add(mapToAdapterItems(transform))
60+
}
61+
62+
inline fun <T> Iterable<T>.mapToAdapterItems(transform: (T) -> AdapterItem<*>?): AdapterItems {
63+
return ArrayList(mapNotNull(transform))
64+
}
65+
66+
interface RecyclerAdapterProvider {
67+
val recyclerAdapter: RecyclerAdapter
68+
69+
fun AdapterItems.render() {
70+
recyclerAdapter.syncWithItems(this)
71+
}
72+
73+
fun render(vararg items: AdapterItem<*>?) {
74+
renderList(items.filterNotNull())
75+
}
76+
77+
fun render(list: List<AdapterItem<*>?>?) {
78+
renderList(list?.filterNotNull() ?: emptyList())
79+
}
80+
81+
private fun renderList(list: List<AdapterItem<*>>) {
82+
if (list.isEmpty()) {
83+
recyclerAdapter.clear()
84+
} else {
85+
ArrayList(list).render()
86+
}
87+
}
88+
}

0 commit comments

Comments
 (0)