diff options
Diffstat (limited to 'navit/android/src/org/navitproject/navit/NavitWatch.java')
-rw-r--r-- | navit/android/src/org/navitproject/navit/NavitWatch.java | 153 |
1 files changed, 80 insertions, 73 deletions
diff --git a/navit/android/src/org/navitproject/navit/NavitWatch.java b/navit/android/src/org/navitproject/navit/NavitWatch.java index ebe5c8727..5f13c83a3 100644 --- a/navit/android/src/org/navitproject/navit/NavitWatch.java +++ b/navit/android/src/org/navitproject/navit/NavitWatch.java @@ -19,84 +19,91 @@ package org.navitproject.navit; -import java.lang.Thread; import android.os.Handler; import android.os.Message; import android.util.Log; +import java.lang.Thread; + public class NavitWatch implements Runnable { - private Thread thread; - private static Handler handler =new Handler() { - public void handleMessage(Message m) { - Log.e("NavitWatch","Handler received message"); - } - }; - private boolean removed; - private int watch_func; - private int watch_fd; - private int watch_cond; - private int watch_callbackid; - private boolean callback_pending; - private Runnable callback_runnable; - public native void poll(int func, int fd, int cond); - public native void WatchCallback(int id); + private Thread thread; + private static Handler handler = new Handler() { + public void handleMessage(Message m) { + Log.e("NavitWatch","Handler received message"); + } + }; + private boolean removed; + private int watch_func; + private int watch_fd; + private int watch_cond; + private int watch_callbackid; + private boolean callback_pending; + private Runnable callback_runnable; + + public native void poll(int func, int fd, int cond); + + public native void WatchCallback(int id); + + NavitWatch(int func, int fd, int cond, int callbackid) { + // Log.e("NavitWatch","Creating new thread for "+fd+" "+cond+" from current thread " + // + java.lang.Thread.currentThread().getName()); + watch_func = func; + watch_fd = fd; + watch_cond = cond; + watch_callbackid = callbackid; + final NavitWatch navitwatch = this; + callback_runnable = new Runnable() { + public void run() { + navitwatch.callback(); + } + }; + thread = new Thread(this, "poll thread"); + thread.start(); + } + + public void run() { + for (;;) { + // Log.e("NavitWatch","Polling "+watch_fd+" "+watch_cond + " from " + // + java.lang.Thread.currentThread().getName()); + poll(watch_func, watch_fd, watch_cond); + // Log.e("NavitWatch","poll returned"); + if (removed) { + break; + } + callback_pending = true; + handler.post(callback_runnable); + try { + // Log.e("NavitWatch","wait"); + synchronized (this) { + if (callback_pending) { + this.wait(); + } + } + // Log.e("NavitWatch","wait returned"); + } catch (Exception e) { + Log.e("NavitWatch","Exception " + e.getMessage()); + } + if (removed) { + break; + } + } + } + + public void callback() { + // Log.e("NavitWatch","Calling Callback"); + if (!removed) { + WatchCallback(watch_callbackid); + } + synchronized (this) { + callback_pending = false; + // Log.e("NavitWatch","Waking up"); + this.notify(); + } + } - NavitWatch(int func, int fd, int cond, int callbackid) - { - // Log.e("NavitWatch","Creating new thread for "+fd+" "+cond+" from current thread " + java.lang.Thread.currentThread().getName()); - watch_func=func; - watch_fd=fd; - watch_cond=cond; - watch_callbackid=callbackid; - final NavitWatch navitwatch=this; - callback_runnable = new Runnable() { - public void run() - { - navitwatch.callback(); - } - }; - thread = new Thread(this, "poll thread"); - thread.start(); - } - public void run() - { - for (;;) { - // Log.e("NavitWatch","Polling "+watch_fd+" "+watch_cond + " from " + java.lang.Thread.currentThread().getName()); - poll(watch_func, watch_fd, watch_cond); - // Log.e("NavitWatch","poll returned"); - if (removed) - break; - callback_pending=true; - handler.post(callback_runnable); - try { - // Log.e("NavitWatch","wait"); - synchronized(this) { - if (callback_pending) - this.wait(); - } - // Log.e("NavitWatch","wait returned"); - } catch (Exception e) { - Log.e("NavitWatch","Exception "+e.getMessage()); - } - if (removed) - break; - } - } - public void callback() - { - // Log.e("NavitWatch","Calling Callback"); - if (!removed) - WatchCallback(watch_callbackid); - synchronized(this) { - callback_pending=false; - // Log.e("NavitWatch","Waking up"); - this.notify(); - } - } - public void remove() - { - removed=true; - thread.interrupt(); - } + public void remove() { + removed = true; + thread.interrupt(); + } } |