some renamings

This commit is contained in:
Gavriil Sitnikov 2016-07-27 02:30:19 +03:00
parent 30ad6cf4c5
commit c470691437
4 changed files with 33 additions and 25 deletions

View File

@ -42,36 +42,36 @@ import rx.subjects.BehaviorSubject;
* Created by Gavriil Sitnikov on 23/05/16.
* TODO: description
*/
public class LoadingMoreList<TItem, TReference, TLoadedItems extends LoadedItems<TItem, TReference>>
public class LoadingMoreList<TItem, TMoreReference, TLoadedItems extends LoadedItems<TItem, TMoreReference>>
extends ObservableCollection<TItem> {
@NonNull
private final Scheduler loaderScheduler = RxAndroidUtils.createLooperScheduler();
@NonNull
private Observable<TLoadedItems> loadingMoreConcreteObservable;
private Observable<TLoadedItems> loadingMoreObservable;
@NonNull
private final BehaviorSubject<Integer> moreItemsCount = BehaviorSubject.create(LoadedItems.UNKNOWN_ITEMS_COUNT);
@NonNull
private final ObservableList<TItem> innerList = new ObservableList<>();
private boolean removeDuplicates;
@Nullable
private TReference moreItemsReference;
private TMoreReference moreItemsReference;
public LoadingMoreList(@NonNull final MoreItemsLoader<TItem, TReference, TLoadedItems> moreMoreItemsLoader) {
public LoadingMoreList(@NonNull final MoreItemsLoader<TItem, TMoreReference, TLoadedItems> moreMoreItemsLoader) {
this(moreMoreItemsLoader, null);
}
@SuppressWarnings("PMD.ConstructorCallsOverridableMethod")
//ConstructorCallsOverridableMethod: actually it is calling in lambda callback
public LoadingMoreList(@NonNull final MoreItemsLoader<TItem, TReference, TLoadedItems> moreMoreItemsLoader,
public LoadingMoreList(@NonNull final MoreItemsLoader<TItem, TMoreReference, TLoadedItems> moreMoreItemsLoader,
@Nullable final TLoadedItems initialItems) {
super();
this.loadingMoreConcreteObservable = Observable
.<TLoadedItems>switchOnNext(Observable.create(subscriber -> {
subscriber.onNext(moreMoreItemsLoader.load(new MoreLoadRequest<>(moreItemsReference, Math.max(0, size()))));
this.loadingMoreObservable = Observable
.switchOnNext(Observable.<Observable<TLoadedItems>>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<TItem, TReference, TLoadedItems extends LoadedItems
return innerList.getItems();
}
@NonNull
protected Observable<TLoadedItems> getLoadingMoreObservable() {
return loadingMoreObservable;
}
@NonNull
@Override
public Observable<TItem> loadItem(final int position) {
@ -186,7 +191,7 @@ public class LoadingMoreList<TItem, TReference, TLoadedItems extends LoadedItems
} else if (moreItemsCount.getValue() == 0) {
subscriber.onNext(Observable.just((TItem) null));
} else {
subscriber.onNext(loadingMoreConcreteObservable
subscriber.onNext(loadingMoreObservable
.switchMap(ignored -> Observable.<TItem>error(new NotLoadedYetException())));
}
subscriber.onCompleted();

View File

@ -71,15 +71,18 @@ public class LoadingRenewableList<TItem, TReference, TNewerReference,
@NonNull final NewerItemsLoader<TItem, TReference, TNewerReference, TLoadedItems> newerItemsLoader,
final boolean renew) {
return Observable
.<TLoadedItems>switchOnNext(Observable.create(subscriber -> {
if (!renew) {
subscriber.onNext(newerItemsLoader.load(new NewerLoadRequest<>(newerReference, newerItemsCount.getValue())));
.switchOnNext(Observable.<Observable<TLoadedItems>>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)

View File

@ -23,9 +23,9 @@ import android.support.annotation.NonNull;
import rx.Observable;
public interface MoreItemsLoader<TItem, TReference, TLoadedItems extends LoadedItems<TItem, TReference>> {
public interface MoreItemsLoader<TItem, TMoreReference, TLoadedItems extends LoadedItems<TItem, TMoreReference>> {
@NonNull
Observable<TLoadedItems> load(@NonNull final MoreLoadRequest<TReference> moreLoadRequest);
Observable<TLoadedItems> load(@NonNull final MoreLoadRequest<TMoreReference> moreLoadRequest);
}

View File

@ -21,20 +21,20 @@ package ru.touchin.roboswag.core.observables.collections.loadable;
import android.support.annotation.Nullable;
public class MoreLoadRequest<TReference> {
public class MoreLoadRequest<TMoreReference> {
@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() {