Skip to content
This repository was archived by the owner on Nov 12, 2024. It is now read-only.

Commit a93afc2

Browse files
author
Chris Banes
committed
Try and fix Epoxy crashing
Works around airbnb/epoxy#567
1 parent 72382ca commit a93afc2

File tree

4 files changed

+23
-22
lines changed

4 files changed

+23
-22
lines changed

app/src/main/java/app/tivi/home/library/LibraryViewModel.kt

+10-14
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ import java.util.concurrent.TimeUnit
5050

5151
class LibraryViewModel @AssistedInject constructor(
5252
@Assisted initialState: LibraryViewState,
53-
schedulers: AppRxSchedulers,
53+
private val schedulers: AppRxSchedulers,
5454
private val updateWatchedShows: UpdateWatchedShows,
5555
private val syncFollowedShows: SyncFollowedShows,
5656
private val traktManager: TraktManager,
@@ -119,19 +119,15 @@ class LibraryViewModel @AssistedInject constructor(
119119
}
120120

121121
private fun <T : EntryWithShow<*>> dataSourceToObservable(f: DataSource.Factory<Int, T>): Observable<PagedList<T>> {
122-
return RxPagedListBuilder(f, PAGING_CONFIG).setBoundaryCallback(object : PagedList.BoundaryCallback<T>() {
123-
override fun onZeroItemsLoaded() {
124-
setState { copy(isEmpty = true) }
125-
}
126-
127-
override fun onItemAtEndLoaded(itemAtEnd: T) {
128-
setState { copy(isEmpty = false) }
129-
}
130-
131-
override fun onItemAtFrontLoaded(itemAtFront: T) {
132-
setState { copy(isEmpty = false) }
133-
}
134-
}).buildObservable()
122+
return RxPagedListBuilder(f, PAGING_CONFIG)
123+
.setBoundaryCallback(object : PagedList.BoundaryCallback<T>() {
124+
override fun onZeroItemsLoaded() = setState { copy(isEmpty = true) }
125+
override fun onItemAtEndLoaded(itemAtEnd: T) = setState { copy(isEmpty = false) }
126+
override fun onItemAtFrontLoaded(itemAtFront: T) = setState { copy(isEmpty = false) }
127+
})
128+
.setFetchScheduler(schedulers.io)
129+
.setNotifyScheduler(schedulers.main)
130+
.buildObservable()
135131
}
136132

137133
fun refresh() {

app/src/main/java/app/tivi/home/library/LibraryWatchedEpoxyController.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ class LibraryWatchedEpoxyController(
3939
spanSizeOverride(TotalSpanOverride)
4040
}
4141
} else {
42-
super.addModels(models)
42+
// Need to use filterNotNull() due to https://github.com/airbnb/epoxy/issues/567
43+
super.addModels(models.filterNotNull())
4344
}
4445
}
4546

app/src/main/java/app/tivi/util/EntryGridEpoxyController.kt

+6-2
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,13 @@ open class EntryGridEpoxyController<LI : EntryWithShow<out Entry>> : PagedListEp
5050
fun onItemClicked(item: LI)
5151
}
5252

53+
@Suppress("UselessCallOnCollection")
5354
override fun addModels(models: List<EpoxyModel<*>>) {
54-
if (models.isNotEmpty()) {
55-
super.addModels(models)
55+
// Need to do this due to https://github.com/airbnb/epoxy/issues/567
56+
val modelsFiltered = models.filterNotNull()
57+
58+
if (modelsFiltered.isNotEmpty()) {
59+
super.addModels(modelsFiltered)
5660
} else {
5761
emptyState {
5862
id("item_placeholder")

app/src/main/java/app/tivi/util/EntryViewModel.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ import io.reactivex.subjects.BehaviorSubject
3232
import kotlinx.coroutines.launch
3333

3434
abstract class EntryViewModel<LI : EntryWithShow<out Entry>>(
35-
private val schedulers: AppRxSchedulers,
35+
schedulers: AppRxSchedulers,
3636
private val dispatchers: AppCoroutineDispatchers,
37-
private val dataSource: DataSource.Factory<Int, LI>,
37+
dataSource: DataSource.Factory<Int, LI>,
3838
tmdbManager: TmdbManager,
3939
private val logger: Logger,
4040
private val pageSize: Int = 21
@@ -54,10 +54,10 @@ abstract class EntryViewModel<LI : EntryWithShow<out Entry>>(
5454
tmdbManager.imageProviderFlowable,
5555
RxPagedListBuilder<Int, LI>(dataSource, pageListConfig)
5656
.setBoundaryCallback(object : PagedList.BoundaryCallback<LI>() {
57-
override fun onItemAtEndLoaded(itemAtEnd: LI) {
58-
onListScrolledToEnd()
59-
}
57+
override fun onItemAtEndLoaded(itemAtEnd: LI) = onListScrolledToEnd()
6058
})
59+
.setFetchScheduler(schedulers.io)
60+
.setNotifyScheduler(schedulers.main)
6161
.buildFlowable(BackpressureStrategy.LATEST)
6262
.distinctUntilChanged(),
6363
::EntryViewState

0 commit comments

Comments
 (0)