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. 37
      Chan/src/org/floens/chan/loader/Loader.java
  3. 2
      Chan/src/org/floens/chan/manager/ThreadManager.java
  4. 32
      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) {
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);

@ -28,6 +28,7 @@ public class Loader {
private final List<Post> cachedPosts = new ArrayList<Post>();
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);
}
}
}

@ -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 {

@ -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<Pin> pins = PinnedManager.getInstance().getPins();
for (Pin pin : pins) {
@ -139,7 +161,3 @@ public class PinnedService extends Service {
return null;
}
}

@ -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();
}

Loading…
Cancel
Save