diff --git a/Clover/app/src/main/java/org/floens/chan/core/loader/ChanLoader.java b/Clover/app/src/main/java/org/floens/chan/core/loader/ChanLoader.java index fad4c8f0..4e6f62ec 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/loader/ChanLoader.java +++ b/Clover/app/src/main/java/org/floens/chan/core/loader/ChanLoader.java @@ -41,7 +41,7 @@ import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; public class ChanLoader { - private static final String TAG = "Loader"; + private static final String TAG = "ChanLoader"; private static final ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); private static final int[] watchTimeouts = {10, 15, 20, 30, 60, 90, 120, 180, 240, 300, 600, 1800, 3600}; @@ -282,7 +282,7 @@ public class ChanLoader { return; if (thread == null) { - thread = new ChanThread(new ArrayList()); + thread = new ChanThread(loadable, new ArrayList()); } if (loadable.isThreadMode() || loadable.isCatalogMode()) { @@ -344,7 +344,7 @@ public class ChanLoader { if (destroyed) return; - Logger.e(TAG, "Error loading " + error.getMessage(), error); + Logger.e(TAG, "Loading error", error); // 404 with more pages already loaded means endofline if ((error instanceof ServerError) && loadable.isBoardMode() && loadable.no > 0) { diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/ChanThread.java b/Clover/app/src/main/java/org/floens/chan/core/model/ChanThread.java index d1ceb6a3..1faa77e8 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/model/ChanThread.java +++ b/Clover/app/src/main/java/org/floens/chan/core/model/ChanThread.java @@ -20,12 +20,14 @@ package org.floens.chan.core.model; import java.util.List; public class ChanThread { + public Loadable loadable; public List posts; public Post op; public boolean closed = false; public boolean archived = false; - public ChanThread(List posts) { + public ChanThread(Loadable loadable, List posts) { + this.loadable = loadable; this.posts = posts; } } diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java index cb758eec..102af1c1 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java +++ b/Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java @@ -64,6 +64,13 @@ public class ThreadPresenter implements ChanLoader.ChanLoaderCallback, PostAdapt } this.loadable = loadable; + Pin pin = ChanApplication.getWatchManager().findPinByLoadable(loadable); + if (pin != null) { + // Use the loadable from the pin. + // This way we can store the list position in the pin loadable, + // and not in a separate loadable instance. + loadable = pin.loadable; + } chanLoader = LoaderPool.getInstance().obtain(loadable, this); } } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/WatchSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/WatchSettingsController.java index 5f33a460..050f97ea 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/WatchSettingsController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/WatchSettingsController.java @@ -84,7 +84,7 @@ public class WatchSettingsController extends SettingsController implements Compo private void populatePreferences() { SettingsGroup settings = new SettingsGroup(string(R.string.settings_group_watch)); - settings.add(new BooleanSettingView(this, ChanSettings.watchCountdown, string(R.string.setting_watch_countdown), string(R.string.setting_watch_countdown_description))); +// settings.add(new BooleanSettingView(this, ChanSettings.watchCountdown, string(R.string.setting_watch_countdown), string(R.string.setting_watch_countdown_description))); enableBackground = settings.add(new BooleanSettingView(this, ChanSettings.watchBackground, string(R.string.setting_watch_enable_background), string(R.string.setting_watch_enable_background_description))); int[] timeouts = new int[]{1, 2, 3, 5, 10, 30, 60}; diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java index 58eb2560..d48add68 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java @@ -18,6 +18,7 @@ package org.floens.chan.ui.layout; import android.content.Context; +import android.os.Parcelable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; @@ -35,6 +36,7 @@ import org.floens.chan.ui.view.PostView; import org.floens.chan.ui.view.ThumbnailView; import org.floens.chan.utils.AndroidUtils; import org.floens.chan.utils.AnimationUtils; +import org.floens.chan.utils.Logger; import java.util.List; @@ -46,9 +48,11 @@ import static org.floens.chan.utils.AndroidUtils.ROBOTO_MEDIUM; public class ThreadListLayout extends LinearLayout { private TextView searchStatus; private RecyclerView recyclerView; + private LinearLayoutManager linearLayoutManager; private PostAdapter postAdapter; private PostAdapter.PostAdapterCallback postAdapterCallback; private PostView.PostViewCallback postViewCallback; + private ChanThread showingThread; public ThreadListLayout(Context context, AttributeSet attrs) { super(context, attrs); @@ -62,8 +66,8 @@ public class ThreadListLayout extends LinearLayout { searchStatus.setTypeface(ROBOTO_MEDIUM); recyclerView = (RecyclerView) findViewById(R.id.recycler_view); - LinearLayoutManager lm = new LinearLayoutManager(getContext()); - recyclerView.setLayoutManager(lm); + linearLayoutManager = new LinearLayoutManager(getContext()); + recyclerView.setLayoutManager(linearLayoutManager); } public void setCallbacks(PostAdapter.PostAdapterCallback postAdapterCallback, PostView.PostViewCallback postViewCallback, ThreadStatusCell.Callback statusCellCallback) { @@ -74,13 +78,15 @@ public class ThreadListLayout extends LinearLayout { recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + showingThread.loadable.listViewIndex = Math.max(0, linearLayoutManager.findFirstVisibleItemPosition()); } }); } public void showPosts(ChanThread thread, boolean initial) { + showingThread = thread; if (initial) { - recyclerView.scrollToPosition(0); + linearLayoutManager.scrollToPositionWithOffset(thread.loadable.listViewIndex, 0); } postAdapter.setThread(thread); } @@ -122,6 +128,7 @@ public class ThreadListLayout extends LinearLayout { public void cleanup() { postAdapter.cleanup(); + showingThread = null; } public ThumbnailView getThumbnail(PostImage postImage) {