From bae77ff8fe587e981caa44ba27f5371b7a6664f6 Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Mon, 30 Apr 2018 23:51:01 +0200 Subject: properly cancel pending searchs and scroll to bottom after refresh --- .../utils/SerialSingleThreadExecutor.java | 37 ++++++++++++++++------ 1 file changed, 28 insertions(+), 9 deletions(-) (limited to 'src/main/java/de/pixart/messenger/utils/SerialSingleThreadExecutor.java') diff --git a/src/main/java/de/pixart/messenger/utils/SerialSingleThreadExecutor.java b/src/main/java/de/pixart/messenger/utils/SerialSingleThreadExecutor.java index 1a1280d5a..500b03c5b 100644 --- a/src/main/java/de/pixart/messenger/utils/SerialSingleThreadExecutor.java +++ b/src/main/java/de/pixart/messenger/utils/SerialSingleThreadExecutor.java @@ -11,10 +11,10 @@ import de.pixart.messenger.Config; public class SerialSingleThreadExecutor implements Executor { + final ArrayDeque tasks = new ArrayDeque<>(); private final Executor executor = Executors.newSingleThreadExecutor(); - final ArrayDeque tasks = new ArrayDeque<>(); - protected Runnable active; private final String name; + protected Runnable active; public SerialSingleThreadExecutor(String name) { this(name, false); @@ -28,13 +28,7 @@ public class SerialSingleThreadExecutor implements Executor { } public synchronized void execute(final Runnable r) { - tasks.offer(() -> { - try { - r.run(); - } finally { - scheduleNext(); - } - }); + tasks.offer(new Runner(r)); if (active == null) { scheduleNext(); } @@ -49,4 +43,29 @@ public class SerialSingleThreadExecutor implements Executor { } } } + + private class Runner implements Runnable, Cancellable { + + private final Runnable runnable; + + private Runner(Runnable runnable) { + this.runnable = runnable; + } + + @Override + public void cancel() { + if (runnable instanceof Cancellable) { + ((Cancellable) runnable).cancel(); + } + } + + @Override + public void run() { + try { + runnable.run(); + } finally { + scheduleNext(); + } + } + } } \ No newline at end of file -- cgit v1.2.3