diff --git a/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/LoadingMoreList.java b/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/LoadingMoreList.java index 8cbc02b..107a380 100644 --- a/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/LoadingMoreList.java +++ b/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/LoadingMoreList.java @@ -42,36 +42,36 @@ import rx.subjects.BehaviorSubject; * Created by Gavriil Sitnikov on 23/05/16. * TODO: description */ -public class LoadingMoreList> +public class LoadingMoreList> extends ObservableCollection { @NonNull private final Scheduler loaderScheduler = RxAndroidUtils.createLooperScheduler(); @NonNull - private Observable loadingMoreConcreteObservable; + private Observable loadingMoreObservable; @NonNull private final BehaviorSubject moreItemsCount = BehaviorSubject.create(LoadedItems.UNKNOWN_ITEMS_COUNT); @NonNull private final ObservableList innerList = new ObservableList<>(); private boolean removeDuplicates; @Nullable - private TReference moreItemsReference; + private TMoreReference moreItemsReference; - public LoadingMoreList(@NonNull final MoreItemsLoader moreMoreItemsLoader) { + public LoadingMoreList(@NonNull final MoreItemsLoader moreMoreItemsLoader) { this(moreMoreItemsLoader, null); } @SuppressWarnings("PMD.ConstructorCallsOverridableMethod") //ConstructorCallsOverridableMethod: actually it is calling in lambda callback - public LoadingMoreList(@NonNull final MoreItemsLoader moreMoreItemsLoader, + public LoadingMoreList(@NonNull final MoreItemsLoader moreMoreItemsLoader, @Nullable final TLoadedItems initialItems) { super(); - this.loadingMoreConcreteObservable = Observable - .switchOnNext(Observable.create(subscriber -> { - subscriber.onNext(moreMoreItemsLoader.load(new MoreLoadRequest<>(moreItemsReference, Math.max(0, size())))); + this.loadingMoreObservable = Observable + .switchOnNext(Observable.>create(subscriber -> { + subscriber.onNext(moreMoreItemsLoader.load(new MoreLoadRequest<>(moreItemsReference, Math.max(0, size()))) + .subscribeOn(Schedulers.io())); subscriber.onCompleted(); - })) - .subscribeOn(Schedulers.io()) + }).subscribeOn(loaderScheduler)) .single() .doOnError(throwable -> { if ((throwable instanceof IllegalArgumentException) @@ -175,6 +175,11 @@ public class LoadingMoreList getLoadingMoreObservable() { + return loadingMoreObservable; + } + @NonNull @Override public Observable loadItem(final int position) { @@ -186,7 +191,7 @@ public class LoadingMoreList Observable.error(new NotLoadedYetException()))); } subscriber.onCompleted(); diff --git a/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/LoadingRenewableList.java b/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/LoadingRenewableList.java index 76b4d99..4056eb2 100644 --- a/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/LoadingRenewableList.java +++ b/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/LoadingRenewableList.java @@ -71,15 +71,18 @@ public class LoadingRenewableList newerItemsLoader, final boolean renew) { return Observable - .switchOnNext(Observable.create(subscriber -> { - if (!renew) { - subscriber.onNext(newerItemsLoader.load(new NewerLoadRequest<>(newerReference, newerItemsCount.getValue()))); + .switchOnNext(Observable.>create(subscriber -> { + if (newerReference == null && isEmpty()) { + subscriber.onNext(getLoadingMoreObservable()); + } else if (!renew) { + subscriber.onNext(newerItemsLoader.load(new NewerLoadRequest<>(newerReference, newerItemsCount.getValue())) + .subscribeOn(Schedulers.io())); } else { - subscriber.onNext(newerItemsLoader.load(new NewerLoadRequest<>(null, LoadedItems.UNKNOWN_ITEMS_COUNT))); + subscriber.onNext(newerItemsLoader.load(new NewerLoadRequest<>(null, LoadedItems.UNKNOWN_ITEMS_COUNT)) + .subscribeOn(Schedulers.io())); } subscriber.onCompleted(); - })) - .subscribeOn(Schedulers.io()) + }).subscribeOn(getLoaderScheduler())) .single() .doOnError(throwable -> { if ((throwable instanceof IllegalArgumentException) diff --git a/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/MoreItemsLoader.java b/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/MoreItemsLoader.java index 7aeb916..5eecae3 100644 --- a/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/MoreItemsLoader.java +++ b/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/MoreItemsLoader.java @@ -23,9 +23,9 @@ import android.support.annotation.NonNull; import rx.Observable; -public interface MoreItemsLoader> { +public interface MoreItemsLoader> { @NonNull - Observable load(@NonNull final MoreLoadRequest moreLoadRequest); + Observable load(@NonNull final MoreLoadRequest moreLoadRequest); } \ No newline at end of file diff --git a/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/MoreLoadRequest.java b/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/MoreLoadRequest.java index bf8b09c..83ea2d9 100644 --- a/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/MoreLoadRequest.java +++ b/src/main/java/ru/touchin/roboswag/core/observables/collections/loadable/MoreLoadRequest.java @@ -21,20 +21,20 @@ package ru.touchin.roboswag.core.observables.collections.loadable; import android.support.annotation.Nullable; -public class MoreLoadRequest { +public class MoreLoadRequest { @Nullable - private final TReference reference; + private final TMoreReference moreReference; private final int nextPosition; - public MoreLoadRequest(@Nullable final TReference reference, final int nextPosition) { - this.reference = reference; + public MoreLoadRequest(@Nullable final TMoreReference moreReference, final int nextPosition) { + this.moreReference = moreReference; this.nextPosition = nextPosition; } @Nullable - public TReference getReference() { - return reference; + public TMoreReference getReference() { + return moreReference; } public int getNextPosition() {