package com.alexkorovyansky.wearpomodoro.helpers;
import android.os.Handler;
import android.os.Looper;
import java.util.HashMap;
import java.util.Map;
public class UITimer {
public static abstract class Task {
UITimer uiTimer;
String tag;
public abstract void run();
public UITimer uiTimer() {
return uiTimer;
}
public String tag() {
return tag;
}
public void cancelTask() {
uiTimer.cancel(tag);
}
}
private Handler handler;
private Map<String, Runnable> runnablesMap;
public UITimer() {
this.handler = new Handler(Looper.myLooper());
this.runnablesMap = new HashMap<String, Runnable>();
}
public void schedule(final Task task, int delayMs, String tag) {
schedule(task, delayMs, -1, tag);
}
public void schedule(final Task task, int delayMs, final int periodMs, String tag) {
cancel(tag);
task.uiTimer = this;
task.tag = tag;
Runnable periodRunnable = new Runnable() {
@Override
public void run() {
if (periodMs > 0) {
handler.postDelayed(this, periodMs);
}
task.run();
}
};
runnablesMap.put(tag, periodRunnable);
handler.postDelayed(periodRunnable, delayMs);
}
public boolean cancel(String tag) {
Runnable runnable = runnablesMap.remove(tag);
if (runnable != null) {
handler.removeCallbacks(runnable);
return true;
}
return false;
}
public void cancelAll() {
for (Runnable runnable: runnablesMap.values()) {
handler.removeCallbacks(runnable);
}
runnablesMap.clear();
}
}