From f288db64bf5743325e5d87a5f2642daced266a69 Mon Sep 17 00:00:00 2001 From: Florens Douwes Date: Sat, 22 Mar 2014 20:05:43 +0100 Subject: [PATCH] Fix timer not cancelling for pins while in the background (or something like that) --- .../floens/chan/loader/ChanReaderRequest.java | 2 - Chan/src/org/floens/chan/loader/Loader.java | 37 +++++++++++++------ .../floens/chan/manager/ThreadManager.java | 2 + .../floens/chan/service/PinnedService.java | 32 ++++++++++++---- .../src/org/floens/chan/watch/PinWatcher.java | 6 +-- 5 files changed, 54 insertions(+), 25 deletions(-) diff --git a/Chan/src/org/floens/chan/loader/ChanReaderRequest.java b/Chan/src/org/floens/chan/loader/ChanReaderRequest.java index 7d4b22a8..efc7a2b5 100644 --- a/Chan/src/org/floens/chan/loader/ChanReaderRequest.java +++ b/Chan/src/org/floens/chan/loader/ChanReaderRequest.java @@ -80,9 +80,7 @@ public class ChanReaderRequest extends JsonReaderRequest> { private void processPosts(List posts) { for (Post post : posts) { post.repliesFrom.clear(); - } - for (Post post : posts) { for (Post other : posts) { if (other.repliesTo.contains(post.no)) { post.repliesFrom.add(other.no); diff --git a/Chan/src/org/floens/chan/loader/Loader.java b/Chan/src/org/floens/chan/loader/Loader.java index 1160718d..f5d86bb1 100644 --- a/Chan/src/org/floens/chan/loader/Loader.java +++ b/Chan/src/org/floens/chan/loader/Loader.java @@ -28,6 +28,7 @@ public class Loader { private final List cachedPosts = new ArrayList(); private boolean destroyed = false; + private boolean activityStarted = false; private ChanReaderRequest request; private int currentTimeout; @@ -119,14 +120,25 @@ public class Loader { return loadable; } + // Temp fix + public void activityHasBinded() { + activityStarted = true; + } + public void onStart() { - if (loadable.isThreadMode()) { - requestNextDataResetTimer(); + if (!activityStarted) { + activityStarted = true; + if (loadable.isThreadMode()) { + requestNextDataResetTimer(); + } } } public void onStop() { - clearTimer(); + if (activityStarted) { + activityStarted = false; + clearTimer(); + } } public long getTimeUntilReload() { @@ -144,13 +156,6 @@ public class Loader { } if (pendingRunnable == null) { - pendingRunnable = new Runnable() { - @Override - public void run() { - pendingRunnableCallback(); - }; - }; - lastPostCount = postCount; if (postCount > lastPostCount) { @@ -159,7 +164,17 @@ public class Loader { currentTimeout = Math.min(watchTimeouts.length - 1, currentTimeout + 1); } - handler.postDelayed(pendingRunnable, watchTimeouts[currentTimeout] * 1000L); + if (activityStarted) { + pendingRunnable = new Runnable() { + @Override + public void run() { + pendingRunnableCallback(); + }; + }; + + + handler.postDelayed(pendingRunnable, watchTimeouts[currentTimeout] * 1000L); + } } } diff --git a/Chan/src/org/floens/chan/manager/ThreadManager.java b/Chan/src/org/floens/chan/manager/ThreadManager.java index 8905d872..d5721460 100644 --- a/Chan/src/org/floens/chan/manager/ThreadManager.java +++ b/Chan/src/org/floens/chan/manager/ThreadManager.java @@ -80,10 +80,12 @@ public class ThreadManager implements Loader.LoaderListener { } loader = LoaderPool.getInstance().obtain(loadable, this); + loader.activityHasBinded(); } public void unbindLoader() { if (loader != null) { + loader.onStop(); LoaderPool.getInstance().release(loader, this); loader = null; } else { diff --git a/Chan/src/org/floens/chan/service/PinnedService.java b/Chan/src/org/floens/chan/service/PinnedService.java index ea46107e..b7e0e345 100644 --- a/Chan/src/org/floens/chan/service/PinnedService.java +++ b/Chan/src/org/floens/chan/service/PinnedService.java @@ -5,6 +5,7 @@ import java.util.List; import org.floens.chan.manager.PinnedManager; import org.floens.chan.model.Pin; import org.floens.chan.utils.ChanPreferences; +import org.floens.chan.utils.Logger; import org.floens.chan.watch.WatchNotifier; import android.app.Service; @@ -28,10 +29,16 @@ public class PinnedService extends Service { public static void onActivityStart() { activityInForeground = true; + if (instance != null) { + instance.onActivityInForeground(); + } } public static void onActivityStop() { activityInForeground = false; + if (instance != null) { + instance.onActivityInBackground(); + } } public static void startStopAccordingToSettings(Context context) { @@ -105,16 +112,21 @@ public class PinnedService extends Service { @Override public void run() { while (running) { + Logger.test("Loadthread iteration"); + update(); - long timeout = activityInForeground ? FOREGROUND_INTERVAL : BACKGROUND_INTERVAL; + if (!running) + return; - if (!running) return; + long timeout = activityInForeground ? FOREGROUND_INTERVAL : BACKGROUND_INTERVAL; try { Thread.sleep(timeout); } catch (InterruptedException e) { - return; + if (!running) { + return; + } } } } @@ -125,6 +137,16 @@ public class PinnedService extends Service { } } + private void onActivityInForeground() { + if (loadThread != null) { + loadThread.interrupt(); + } + } + + private void onActivityInBackground() { + + } + private void update() { List pins = PinnedManager.getInstance().getPins(); for (Pin pin : pins) { @@ -139,7 +161,3 @@ public class PinnedService extends Service { return null; } } - - - - diff --git a/Chan/src/org/floens/chan/watch/PinWatcher.java b/Chan/src/org/floens/chan/watch/PinWatcher.java index 71523501..b4a55d6d 100644 --- a/Chan/src/org/floens/chan/watch/PinWatcher.java +++ b/Chan/src/org/floens/chan/watch/PinWatcher.java @@ -31,13 +31,9 @@ public class PinWatcher implements Loader.LoaderListener { } public void update() { - Logger.test("PinWatcher update"); +// Logger.test("PinWatcher update"); if (!isError) { - if (loader.getTimeUntilReload() < -1000000L) { - Logger.test("Here: " + loader.getTimeUntilReload()); - } - if (loader.getTimeUntilReload() < 0L) { loader.requestNextDataResetTimer(); }