Skip to content

vertragswecker/RxDiffUtil

Repository files navigation

Icon RxDiffUtil

Build Release

RxDiffUtil is an Rx wrapper around the Android DiffUtil library for the RecyclerView widget. It handles threading and reacts to concurrent changes to the adapter with a ConcurrentModificationException.

All computation is done on the thread defined by the upstream Observable, while the application of the diff result and all terminal events are propagated on the Android main thread.

The resulting Completable expects upstream to honor backpressure and shares the subscription to reduce concurrent changes to the adapter.

Usage

Convert any Observable to a Completable applying all changes as diff to the provided adapter.

service.observeData()
       .subscribeOn(Schedulers.compute())
       .onBackpressureLatest()
       .to(RxDiffUtil.with(adapter))
       .calculateDiff(callback))
       .applyDiff(AdapterImpl::setUnsafe)
       .subscribe();

Installation

Add JitPack to your repositories and RxDiffUtil to the dependencies

compile "berlin.volders:rxdiffutil:$rxDiffUtilVersion"

License

Copyright (C) 2017 volders GmbH with <3 in Berlin

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.