Fix timer not cancelling for pins while in the background (or something like that)

captchafix
Florens Douwes 11 years ago
parent 952f54338c
commit f288db64bf
  1. 2
      Chan/src/org/floens/chan/loader/ChanReaderRequest.java
  2. 29
      Chan/src/org/floens/chan/loader/Loader.java
  3. 2
      Chan/src/org/floens/chan/manager/ThreadManager.java
  4. 30
      Chan/src/org/floens/chan/service/PinnedService.java
  5. 6
      Chan/src/org/floens/chan/watch/PinWatcher.java

@ -80,9 +80,7 @@ public class ChanReaderRequest extends JsonReaderRequest<List<Post>> {
private void processPosts(List<Post> posts) { private void processPosts(List<Post> posts) {
for (Post post : posts) { for (Post post : posts) {
post.repliesFrom.clear(); post.repliesFrom.clear();
}
for (Post post : posts) {
for (Post other : posts) { for (Post other : posts) {
if (other.repliesTo.contains(post.no)) { if (other.repliesTo.contains(post.no)) {
post.repliesFrom.add(other.no); post.repliesFrom.add(other.no);

@ -28,6 +28,7 @@ public class Loader {
private final List<Post> cachedPosts = new ArrayList<Post>(); private final List<Post> cachedPosts = new ArrayList<Post>();
private boolean destroyed = false; private boolean destroyed = false;
private boolean activityStarted = false;
private ChanReaderRequest request; private ChanReaderRequest request;
private int currentTimeout; private int currentTimeout;
@ -119,15 +120,26 @@ public class Loader {
return loadable; return loadable;
} }
// Temp fix
public void activityHasBinded() {
activityStarted = true;
}
public void onStart() { public void onStart() {
if (!activityStarted) {
activityStarted = true;
if (loadable.isThreadMode()) { if (loadable.isThreadMode()) {
requestNextDataResetTimer(); requestNextDataResetTimer();
} }
} }
}
public void onStop() { public void onStop() {
if (activityStarted) {
activityStarted = false;
clearTimer(); clearTimer();
} }
}
public long getTimeUntilReload() { public long getTimeUntilReload() {
if (request != null) { if (request != null) {
@ -144,13 +156,6 @@ public class Loader {
} }
if (pendingRunnable == null) { if (pendingRunnable == null) {
pendingRunnable = new Runnable() {
@Override
public void run() {
pendingRunnableCallback();
};
};
lastPostCount = postCount; lastPostCount = postCount;
if (postCount > lastPostCount) { if (postCount > lastPostCount) {
@ -159,9 +164,19 @@ public class Loader {
currentTimeout = Math.min(watchTimeouts.length - 1, currentTimeout + 1); currentTimeout = Math.min(watchTimeouts.length - 1, currentTimeout + 1);
} }
if (activityStarted) {
pendingRunnable = new Runnable() {
@Override
public void run() {
pendingRunnableCallback();
};
};
handler.postDelayed(pendingRunnable, watchTimeouts[currentTimeout] * 1000L); handler.postDelayed(pendingRunnable, watchTimeouts[currentTimeout] * 1000L);
} }
} }
}
private void clearTimer() { private void clearTimer() {
if (pendingRunnable != null) { if (pendingRunnable != null) {

@ -80,10 +80,12 @@ public class ThreadManager implements Loader.LoaderListener {
} }
loader = LoaderPool.getInstance().obtain(loadable, this); loader = LoaderPool.getInstance().obtain(loadable, this);
loader.activityHasBinded();
} }
public void unbindLoader() { public void unbindLoader() {
if (loader != null) { if (loader != null) {
loader.onStop();
LoaderPool.getInstance().release(loader, this); LoaderPool.getInstance().release(loader, this);
loader = null; loader = null;
} else { } else {

@ -5,6 +5,7 @@ import java.util.List;
import org.floens.chan.manager.PinnedManager; import org.floens.chan.manager.PinnedManager;
import org.floens.chan.model.Pin; import org.floens.chan.model.Pin;
import org.floens.chan.utils.ChanPreferences; import org.floens.chan.utils.ChanPreferences;
import org.floens.chan.utils.Logger;
import org.floens.chan.watch.WatchNotifier; import org.floens.chan.watch.WatchNotifier;
import android.app.Service; import android.app.Service;
@ -28,10 +29,16 @@ public class PinnedService extends Service {
public static void onActivityStart() { public static void onActivityStart() {
activityInForeground = true; activityInForeground = true;
if (instance != null) {
instance.onActivityInForeground();
}
} }
public static void onActivityStop() { public static void onActivityStop() {
activityInForeground = false; activityInForeground = false;
if (instance != null) {
instance.onActivityInBackground();
}
} }
public static void startStopAccordingToSettings(Context context) { public static void startStopAccordingToSettings(Context context) {
@ -105,19 +112,24 @@ public class PinnedService extends Service {
@Override @Override
public void run() { public void run() {
while (running) { while (running) {
Logger.test("Loadthread iteration");
update(); update();
long timeout = activityInForeground ? FOREGROUND_INTERVAL : BACKGROUND_INTERVAL; if (!running)
return;
if (!running) return; long timeout = activityInForeground ? FOREGROUND_INTERVAL : BACKGROUND_INTERVAL;
try { try {
Thread.sleep(timeout); Thread.sleep(timeout);
} catch (InterruptedException e) { } catch (InterruptedException e) {
if (!running) {
return; return;
} }
} }
} }
}
}); });
loadThread.start(); loadThread.start();
@ -125,6 +137,16 @@ public class PinnedService extends Service {
} }
} }
private void onActivityInForeground() {
if (loadThread != null) {
loadThread.interrupt();
}
}
private void onActivityInBackground() {
}
private void update() { private void update() {
List<Pin> pins = PinnedManager.getInstance().getPins(); List<Pin> pins = PinnedManager.getInstance().getPins();
for (Pin pin : pins) { for (Pin pin : pins) {
@ -139,7 +161,3 @@ public class PinnedService extends Service {
return null; return null;
} }
} }

@ -31,13 +31,9 @@ public class PinWatcher implements Loader.LoaderListener {
} }
public void update() { public void update() {
Logger.test("PinWatcher update"); // Logger.test("PinWatcher update");
if (!isError) { if (!isError) {
if (loader.getTimeUntilReload() < -1000000L) {
Logger.test("Here: " + loader.getTimeUntilReload());
}
if (loader.getTimeUntilReload() < 0L) { if (loader.getTimeUntilReload() < 0L) {
loader.requestNextDataResetTimer(); loader.requestNextDataResetTimer();
} }

Loading…
Cancel
Save