package org.cocoa4android.ns; import java.util.Timer; import java.util.TimerTask; import android.os.Handler; import android.os.Message; public class NSTimer extends NSObject { double timeInterval; Object target; String selector; boolean repeats; NSInvocation invocation; Timer timer = new Timer(); Handler handler; public NSTimer(double timeInterval,Object target,String selector,Object userInfo,boolean repeats){ this.timeInterval = timeInterval; this.target = target; this.selector = selector; this.userInfo = userInfo; this.repeats = repeats; NSMethodSignature sig = class2NSClass(target.getClass()).instanceMethodSignatureForSelector(selector); invocation = NSInvocation.invocationWithMethodSignature(sig); invocation.setTarget(target); } public void fire(){ if (handler!=null) { Message message = new Message(); message.what = 1; handler.sendMessage(message); } } private NSDate fireDate = null; public NSDate fireDate() { return fireDate; } public void setFireDate(NSDate fireDate) { this.fireDate = fireDate; } public void invalidate(){ timer.cancel(); isValid = NO; } private boolean isValid = YES; public boolean isValid(){ return isValid; } public static NSTimer scheduledTimerWithTimeInterval(double timeInterval,Object target,String selector,Object userInfo,boolean repeats) { NSTimer timer = new NSTimer(timeInterval,target,selector,userInfo,repeats); NSRunLoop.currentRunLoop().addTimer(timer, NSDefaultRunLoopMode); return timer; } private Object userInfo; public Object userInfo() { return userInfo; } void startTimer(){ long timeInterval = (long) (this.timeInterval*1000); if (this.repeats) { if (fireDate==null) { this.timer.schedule(new TimerTask() { @Override public void run() { Message message = new Message(); message.what = 1; handler.sendMessage(message); } },timeInterval, timeInterval); }else{ this.timer.schedule(new TimerTask() { @Override public void run() { Message message = new Message(); message.what = 1; handler.sendMessage(message); } },fireDate.getDate(), timeInterval); } }else{ if (fireDate==null) { this.timer.schedule(new TimerTask() { @Override public void run() { Message message = new Message(); message.what = 1; handler.sendMessage(message); } }, timeInterval); }else{ this.timer.schedule(new TimerTask() { @Override public void run() { Message message = new Message(); message.what = 1; handler.sendMessage(message); } },fireDate.getDate()); } } } }