diff -r ed1d52c5aa94 -r 763d3961400b 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