project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/util/TickHandler.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/util/TickHandler.java Sat Aug 18 00:47:51 2012 +0200
@@ -0,0 +1,54 @@
+package org.hedgewars.hedgeroid.util;
+
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+
+/**
+ * This class handles regularly calling a specified runnable
+ * on the looper provided in the constructor. The first call
+ * occurs without delay (though still via the looper), all
+ * following calls are delayed by (approximately) the interval.
+ * The interval can be changed at any time, which will cause
+ * an immediate execution of the runnable again.
+ */
+public class TickHandler extends Handler {
+ private final Runnable callback;
+ private int messageId;
+ private long interval;
+ private boolean running;
+
+ public TickHandler(Looper looper, long interval, Runnable callback) {
+ super(looper);
+ this.callback = callback;
+ this.interval = interval;
+ }
+
+ public synchronized void stop() {
+ messageId++;
+ running = false;
+ }
+
+ public synchronized void start() {
+ messageId++;
+ sendMessage(obtainMessage(messageId));
+ running = true;
+ }
+
+ public synchronized void setInterval(long interval) {
+ this.interval = interval;
+ if(running) {
+ start();
+ }
+ }
+
+ @Override
+ public synchronized void handleMessage(Message msg) {
+ if(msg.what == messageId) {
+ callback.run();
+ }
+ if(msg.what == messageId) {
+ sendMessageDelayed(obtainMessage(messageId), interval);
+ }
+ }
+}
\ No newline at end of file