aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/java/com/libmailcore/MainThreadUtils.java
diff options
context:
space:
mode:
authorGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2015-01-04 00:21:01 -0800
committerGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2015-01-04 00:21:01 -0800
commit8aa7e6dc95a3794d92b248e172df1b4a1c8a5271 (patch)
tree19d12d60e67b0fe56e3356733b5e0c5218633009 /src/java/com/libmailcore/MainThreadUtils.java
parent631c541e7b5ef5ac0930e6b1ace7afab0c52b298 (diff)
Added java bindings for Android
Diffstat (limited to 'src/java/com/libmailcore/MainThreadUtils.java')
-rw-r--r--src/java/com/libmailcore/MainThreadUtils.java64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/java/com/libmailcore/MainThreadUtils.java b/src/java/com/libmailcore/MainThreadUtils.java
new file mode 100644
index 00000000..00a9ead2
--- /dev/null
+++ b/src/java/com/libmailcore/MainThreadUtils.java
@@ -0,0 +1,64 @@
+package com.libmailcore;
+
+import android.os.Handler;
+import android.os.Looper;
+import android.util.Log;
+import java.util.HashMap;
+
+public class MainThreadUtils {
+ private static volatile MainThreadUtils instance = new MainThreadUtils();
+ private Handler handler;
+ private HashMap<Long, Runnable> runnablesForIdentifiers = new HashMap<Long, Runnable>();
+
+ static public MainThreadUtils singleton() {
+ return instance;
+ }
+
+ // private constructor
+ private MainThreadUtils() {
+ System.loadLibrary("MailCore");
+ handler = new Handler(Looper.getMainLooper());
+ setupNative();
+ }
+
+ private native void setupNative();
+
+ private native void runIdentifier(long identifier);
+ private native void runIdentifierAndNotify(long identifier);
+
+ private void runOnMainThread(final long identifier) {
+ handler.post(new Runnable() {
+ @Override
+ public void run() {
+ runIdentifier(identifier);
+ }
+ });
+ }
+
+ private void runOnMainThreadAndWait(final long identifier) {
+ handler.post(new Runnable() {
+ @Override
+ public void run() {
+ runIdentifierAndNotify(identifier);
+ }
+ });
+ }
+
+ private void runAfterDelay(final long identifier, int milliseconds) {
+ Runnable runnable = new Runnable() {
+ @Override
+ public void run() {
+ runnablesForIdentifiers.remove(new Long(identifier));
+ runIdentifier(identifier);
+ }
+ };
+ runnablesForIdentifiers.put(new Long(identifier), runnable);
+ handler.postDelayed(runnable, milliseconds);
+ }
+
+ private void cancelDelayedRun(final long identifier) {
+ Runnable runnable = runnablesForIdentifiers.get(new Long(identifier));
+ runnablesForIdentifiers.remove(new Long(identifier));
+ handler.removeCallbacks(runnable);
+ }
+}