diff --git a/src/main/java/ru/touchin/roboswag/components/calendar/CalendarAdapter.java b/src/main/java/ru/touchin/roboswag/components/calendar/CalendarAdapter.java index ac5ce16..c129520 100644 --- a/src/main/java/ru/touchin/roboswag/components/calendar/CalendarAdapter.java +++ b/src/main/java/ru/touchin/roboswag/components/calendar/CalendarAdapter.java @@ -77,13 +77,16 @@ public abstract class CalendarAdapter calendarItems, + final int initialShift) { + int shift = initialShift; + final Calendar newMonthCalendar = Calendar.getInstance(); + newMonthCalendar.setTime(calendar.getTime()); + newMonthCalendar.add(Calendar.DAY_OF_MONTH, 1); + final int firstFayInNextMonth = getFirstDateStart(newMonthCalendar); + calendarItems.add(new CalendarEmptyItem(shift, shift + (7 - firstFayInNextMonth) - 1)); + shift += 7 - firstFayInNextMonth; + calendarItems.add(new CalendarHeaderItem(calendar.get(Calendar.MONTH) + 1, shift, shift)); + shift += 1; + calendarItems.add(new CalendarEmptyItem(shift, shift + firstFayInNextMonth - 1)); + } + private static int getFirstDateStart(@NonNull final Calendar calendar) { int firstDateStart = calendar.get(Calendar.DAY_OF_WEEK) - 2; if (firstDateStart == -1) { @@ -249,4 +270,4 @@ public final class CalendarUtils { private CalendarUtils() { } -} +} \ No newline at end of file diff --git a/src/main/java/ru/touchin/roboswag/components/listing/AbstractSimplePagingProvider.java b/src/main/java/ru/touchin/roboswag/components/listing/AbstractSimplePagingProvider.java index 4b9f1c5..f8440f2 100644 --- a/src/main/java/ru/touchin/roboswag/components/listing/AbstractSimplePagingProvider.java +++ b/src/main/java/ru/touchin/roboswag/components/listing/AbstractSimplePagingProvider.java @@ -32,6 +32,7 @@ import ru.touchin.roboswag.core.log.Lc; import ru.touchin.roboswag.core.utils.android.RxAndroidUtils; import rx.Observable; import rx.Scheduler; +import rx.subjects.BehaviorSubject; /** * Created by Ilia Kurtov on 12.05.2016. @@ -48,13 +49,25 @@ public abstract class AbstractSimplePagingProvider extends ItemsProvider { private final SparseArray>> loadingPages = new SparseArray<>(); @Nullable private Integer maxLoadedPage; - private boolean isLastPageLoaded; + private final BehaviorSubject isLastPageLoadedSubject = BehaviorSubject.create(false); public AbstractSimplePagingProvider(final int pageSize) { super(); this.pageSize = pageSize; } + public void updateLoadedPages(@NonNull final List startedDataList) { + for (int page = 0; page < startedDataList.size() / pageSize; page++) { + final List pageList = new ArrayList<>(); + for (int i = pageSize * page; i < pageSize * (page + 1); i++) { + pageList.add(startedDataList.get(i)); + } + loadedPages.put(page, pageList); + } + maxLoadedPage = startedDataList.size() / pageSize - 1; + } + + public int getPageSize() { return pageSize; } @@ -63,7 +76,7 @@ public abstract class AbstractSimplePagingProvider extends ItemsProvider { public int getSize() { synchronized (lock) { return (maxLoadedPage != null ? maxLoadedPage * pageSize + loadedPages.get(maxLoadedPage).size() : 0) - + (isLastPageLoaded ? 0 : 1); + + (isLastPageLoadedSubject.getValue() ? 0 : 1); } } @@ -109,7 +122,7 @@ public abstract class AbstractSimplePagingProvider extends ItemsProvider { subscriber.onNext(page != null && page.size() > indexOnPage ? page.get(indexOnPage) : null); subscriber.onCompleted(); }).switchMap(item -> { - if (item != null || (isLastPageLoaded && maxLoadedPage != null && maxLoadedPage <= indexOfPage)) { + if (item != null || (isLastPageLoadedSubject.getValue() && maxLoadedPage != null && maxLoadedPage <= indexOfPage)) { return Observable.just(item); } Observable> loadingPage = loadingPages.get(indexOfPage); @@ -142,19 +155,18 @@ public abstract class AbstractSimplePagingProvider extends ItemsProvider { .doOnNext(pageItems -> { synchronized (lock) { final int oldSize = getSize(); - final boolean oldIsLastPageLoaded = isLastPageLoaded; + final boolean oldIsLastPageLoaded = isLastPageLoadedSubject.getValue(); if (pageItems.size() < pageSize) { if (maxLoadedPage != null && maxLoadedPage > indexOfPage) { maxLoadedPage = indexOfPage == 0 || !pageItems.isEmpty() ? indexOfPage : null; downgradeMaxLoadedPages(indexOfPage); - isLastPageLoaded = false; + isLastPageLoadedSubject.onNext(false); } if (shouldReplaceMaxLoaded(pageItems, indexOfPage)) { maxLoadedPage = indexOfPage; } - isLastPageLoaded = isLastPageLoaded - || (maxLoadedPage != null - && (maxLoadedPage == indexOfPage || maxLoadedPage == indexOfPage - 1)); + isLastPageLoadedSubject.onNext(isLastPageLoadedSubject.getValue() + || (maxLoadedPage != null && (maxLoadedPage == indexOfPage || maxLoadedPage == indexOfPage - 1))); } else if (shouldReplaceMaxLoaded(pageItems, indexOfPage)) { maxLoadedPage = indexOfPage; } @@ -198,7 +210,7 @@ public abstract class AbstractSimplePagingProvider extends ItemsProvider { changes.add(new Change(Change.Type.INSERTED, oldSize, size - oldSize)); } else { changes.add(new Change(Change.Type.REMOVED, size, oldSize - size)); - if (!isLastPageLoaded) { + if (!isLastPageLoadedSubject.getValue()) { changes.add(new Change(Change.Type.CHANGED, size - 1, 1)); } } @@ -217,4 +229,9 @@ public abstract class AbstractSimplePagingProvider extends ItemsProvider { } } + @NonNull + public Observable observeListLoadingFinished() { + return isLastPageLoadedSubject.distinctUntilChanged(); + } + } diff --git a/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java b/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java index 716d186..3e07a8e 100644 --- a/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java +++ b/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java @@ -153,6 +153,10 @@ public class ViewController, isStartedSubject.onNext(true); } + public void onAppear(@NonNull final ViewControllerFragment.AppearType appearType) { + //do nothing + } + public void onSaveInstanceState(@NonNull final Bundle savedInstanceState) { // do nothing } diff --git a/src/main/java/ru/touchin/roboswag/components/navigation/fragments/ViewControllerFragment.java b/src/main/java/ru/touchin/roboswag/components/navigation/fragments/ViewControllerFragment.java index e8db011..377a6ed 100644 --- a/src/main/java/ru/touchin/roboswag/components/navigation/fragments/ViewControllerFragment.java +++ b/src/main/java/ru/touchin/roboswag/components/navigation/fragments/ViewControllerFragment.java @@ -178,7 +178,16 @@ public abstract class ViewControllerFragment