diff --git a/Chan/src/org/floens/chan/activity/BoardActivity.java b/Chan/src/org/floens/chan/activity/BoardActivity.java index 335b86f7..af363fb9 100644 --- a/Chan/src/org/floens/chan/activity/BoardActivity.java +++ b/Chan/src/org/floens/chan/activity/BoardActivity.java @@ -206,7 +206,7 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio if (threadPane.isOpen()) { boardFragment.reload(); } else { - if (threadFragment.getThreadManager().hasThread()) { + if (threadFragment.getThreadManager().hasLoadable()) { threadFragment.reload(); } } @@ -215,14 +215,14 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio if (threadPane.isOpen()) { boardFragment.getThreadManager().openReply(true); // todo if tablet } else { - if (threadFragment.getThreadManager().hasThread()) { + if (threadFragment.getThreadManager().hasLoadable()) { threadFragment.getThreadManager().openReply(true); // todo if tablet } } return true; case R.id.action_pin: - if (threadFragment.getThreadManager().hasThread()) { + if (threadFragment.getThreadManager().hasLoadable()) { Pin pin = new Pin(); pin.loadable = threadLoadable; @@ -236,7 +236,7 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio if (threadPane.isOpen()) { showUrlOpenPicker(ChanUrls.getBoardUrlDesktop(boardLoadable.board)); } else { - if (threadFragment.getThreadManager().hasThread()) { + if (threadFragment.getThreadManager().hasLoadable()) { showUrlOpenPicker(ChanUrls.getThreadUrlDesktop(threadLoadable.board, threadLoadable.no)); } } diff --git a/Chan/src/org/floens/chan/adapter/PostAdapter.java b/Chan/src/org/floens/chan/adapter/PostAdapter.java index e78b8ce4..97d44f89 100644 --- a/Chan/src/org/floens/chan/adapter/PostAdapter.java +++ b/Chan/src/org/floens/chan/adapter/PostAdapter.java @@ -6,6 +6,7 @@ import java.util.List; import org.floens.chan.R; import org.floens.chan.manager.ThreadManager; import org.floens.chan.model.Post; +import org.floens.chan.utils.ViewUtils; import org.floens.chan.view.PostView; import org.floens.chan.view.ThreadWatchCounterView; @@ -84,7 +85,8 @@ public class PostAdapter extends BaseAdapter { private View createThreadEndView() { if (threadManager.getWatchLogic() != null) { ThreadWatchCounterView view = new ThreadWatchCounterView(context); - view.init(threadManager, listView); + ViewUtils.setPressedDrawable(view); + view.init(threadManager, listView, this); int padding = context.getResources().getDimensionPixelSize(R.dimen.general_padding); view.setPadding(padding, padding, padding, padding); view.setGravity(Gravity.CENTER); diff --git a/Chan/src/org/floens/chan/manager/ThreadManager.java b/Chan/src/org/floens/chan/manager/ThreadManager.java index 78034855..9401b6c1 100644 --- a/Chan/src/org/floens/chan/manager/ThreadManager.java +++ b/Chan/src/org/floens/chan/manager/ThreadManager.java @@ -110,7 +110,7 @@ public class ThreadManager implements ThreadLoader.ThreadLoaderListener, WatchLi threadListener.onThreadLoaded(result); } - public boolean hasThread() { + public boolean hasLoadable() { return loadable != null; } @@ -125,6 +125,8 @@ public class ThreadManager implements ThreadLoader.ThreadLoaderListener, WatchLi public void startLoading(Loadable loadable) { this.loadable = loadable; + stop(); + threadLoader.start(loadable); Pin pin = PinnedManager.getInstance().findPinByLoadable(loadable); @@ -157,8 +159,6 @@ public class ThreadManager implements ThreadLoader.ThreadLoaderListener, WatchLi if (loadable == null) { Log.e("Chan", "ThreadManager: loadable null"); } else { - stop(); - if (loadable.isBoardMode()) { loadable.no = 0; loadable.listViewIndex = 0; diff --git a/Chan/src/org/floens/chan/view/ThreadWatchCounterView.java b/Chan/src/org/floens/chan/view/ThreadWatchCounterView.java index f60e0ccd..09621dc5 100644 --- a/Chan/src/org/floens/chan/view/ThreadWatchCounterView.java +++ b/Chan/src/org/floens/chan/view/ThreadWatchCounterView.java @@ -4,13 +4,16 @@ import org.floens.chan.manager.ThreadManager; import org.floens.chan.watch.WatchLogic; import android.content.Context; +import android.os.Handler; import android.util.AttributeSet; import android.view.View; +import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; -public class ThreadWatchCounterView extends TextView { +public class ThreadWatchCounterView extends TextView implements View.OnClickListener { private boolean detached = false; + private ThreadManager tm; public ThreadWatchCounterView(Context activity) { super(activity); @@ -24,28 +27,21 @@ public class ThreadWatchCounterView extends TextView { super(activity, attbs, style); } - public void init(final ThreadManager threadManager, final ListView listView) { - updateCounterText(threadManager); + public void init(final ThreadManager threadManager, final ListView listView, final BaseAdapter adapter) { + tm = threadManager; - postInvalidateDelayed(1000); + updateCounterText(threadManager); - postDelayed(new Runnable() { + new Handler().postDelayed(new Runnable() { @Override public void run() { if (!detached) { - updateCounterText(threadManager); - // TODO: This sometimes fails to recreate this view - listView.invalidateViews(); + adapter.notifyDataSetChanged(); } } }, 1000); - setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - threadManager.loadMore(); - } - }); + setOnClickListener(this); } @Override @@ -57,6 +53,11 @@ public class ThreadWatchCounterView extends TextView { detached = true; } + @Override + public void onClick(View v) { + tm.loadMore(); + } + private void updateCounterText(ThreadManager threadManager) { WatchLogic logic = threadManager.getWatchLogic(); diff --git a/Chan/src/org/floens/chan/watch/WatchLogic.java b/Chan/src/org/floens/chan/watch/WatchLogic.java index 67692ac0..f11c0d67 100644 --- a/Chan/src/org/floens/chan/watch/WatchLogic.java +++ b/Chan/src/org/floens/chan/watch/WatchLogic.java @@ -19,6 +19,9 @@ public class WatchLogic { this.listener = listener; } + /** + * Stops the timer and removes the listener + */ public void destroy() { this.listener = null; clearTimer(); @@ -36,12 +39,18 @@ public class WatchLogic { scheduleTimer(); } + /** + * Stops the timer + */ public void stopTimer() { Logger.test("WatchLogic timer paused"); clearTimer(); } + /** + * Call onWatchReloadRequested on the listener and reset the timer + */ public void loadNow() { clearTimer(); lastLoadTime = 0; @@ -54,7 +63,7 @@ public class WatchLogic { /** * Call this to notify of new posts. - * @param wereNewPosts set this to true when there were new posts, false otherwise + * @param postCount how many posts there were loaded */ public void onLoaded(int postCount) { Logger.test("WatchLogic onLoaded: " + (postCount > lastPostCount)); @@ -72,7 +81,7 @@ public class WatchLogic { } /** - * Time time in ms left before a reload is necessary. + * Time in ms left before a reload is necessary. * @return */ public long timeLeft() {