From 450b47d6759c1ec244d71e9d80fda99d7e8be93d Mon Sep 17 00:00:00 2001 From: Gavriil Sitnikov Date: Sat, 14 Nov 2015 22:31:32 +0300 Subject: [PATCH] scroll view saved state added --- .../requests/AbstractHttpRequest.java | 4 +- .../ScrollViewSavedStateController.java | 46 +++++++++++++++++++ src/main/res/values/ids.xml | 1 + 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/roboswag/components/savestate/ScrollViewSavedStateController.java diff --git a/src/main/java/org/roboswag/components/requests/AbstractHttpRequest.java b/src/main/java/org/roboswag/components/requests/AbstractHttpRequest.java index 442cf8b..aa687d2 100644 --- a/src/main/java/org/roboswag/components/requests/AbstractHttpRequest.java +++ b/src/main/java/org/roboswag/components/requests/AbstractHttpRequest.java @@ -136,7 +136,9 @@ public abstract class AbstractHttpRequest { } catch (Exception e) { subscriber.onError(e); } - }).subscribeOn(Schedulers.io()); + }).subscribeOn(Schedulers.io()) + .unsubscribeOn(Schedulers.io()) + .doOnUnsubscribe(this::cancel); } @NonNull diff --git a/src/main/java/org/roboswag/components/savestate/ScrollViewSavedStateController.java b/src/main/java/org/roboswag/components/savestate/ScrollViewSavedStateController.java new file mode 100644 index 0000000..4e04e02 --- /dev/null +++ b/src/main/java/org/roboswag/components/savestate/ScrollViewSavedStateController.java @@ -0,0 +1,46 @@ +package org.roboswag.components.savestate; + +import android.graphics.Point; +import android.os.Parcelable; +import android.support.annotation.NonNull; +import android.widget.ScrollView; + +import org.roboswag.components.R; + +/** + * Created by Gavriil Sitnikov on 14/11/2015. + * TODO: fill description + */ +public class ScrollViewSavedStateController extends AbstractSavedStateController { + + @NonNull + private final ScrollView scrollView; + + public ScrollViewSavedStateController(@NonNull final ScrollView scrollView) { + this(scrollView.getId(), scrollView); + } + + public ScrollViewSavedStateController(final int id, @NonNull final ScrollView scrollView) { + super(id); + this.scrollView = scrollView; + } + + @Override + protected int getTypeId() { + return R.id.SCROLL_VIEW_SAVED_STATE; + } + + @NonNull + @Override + public Parcelable getState() { + return new Point(scrollView.getScrollX(), scrollView.getScrollY()); + } + + @Override + public void restoreState(@NonNull final Parcelable savedState) { + if (savedState instanceof Point) { + scrollView.post(() -> scrollView.scrollTo(((Point) savedState).x, ((Point) savedState).y)); + } + } + +} diff --git a/src/main/res/values/ids.xml b/src/main/res/values/ids.xml index d3ee3d3..f5de52e 100644 --- a/src/main/res/values/ids.xml +++ b/src/main/res/values/ids.xml @@ -1,4 +1,5 @@ + \ No newline at end of file