Added UI thread methods to AndroidExecutor.

This commit is contained in:
akwizgran
2016-08-20 17:06:52 +01:00
parent dbdf567d4e
commit 28be7d5de3
10 changed files with 97 additions and 45 deletions

View File

@@ -1,5 +1,6 @@
package org.briarproject.system;
import android.app.Application;
import android.os.Handler;
import android.os.Looper;
@@ -16,18 +17,21 @@ import javax.inject.Inject;
class AndroidExecutorImpl implements AndroidExecutor {
private final Handler uiHandler;
private final Runnable loop;
private final AtomicBoolean started = new AtomicBoolean(false);
private final CountDownLatch startLatch = new CountDownLatch(1);
private volatile Handler handler = null;
private volatile Handler backgroundHandler = null;
@Inject
AndroidExecutorImpl() {
AndroidExecutorImpl(Application app) {
uiHandler = new Handler(app.getApplicationContext().getMainLooper());
loop = new Runnable() {
@Override
public void run() {
Looper.prepare();
handler = new Handler();
backgroundHandler = new Handler();
startLatch.countDown();
Looper.loop();
}
@@ -46,14 +50,28 @@ class AndroidExecutorImpl implements AndroidExecutor {
}
}
public <V> Future<V> submit(Callable<V> c) {
@Override
public <V> Future<V> runOnBackgroundThread(Callable<V> c) {
FutureTask<V> f = new FutureTask<>(c);
execute(f);
runOnBackgroundThread(f);
return f;
}
public void execute(Runnable r) {
@Override
public void runOnBackgroundThread(Runnable r) {
startIfNecessary();
handler.post(r);
backgroundHandler.post(r);
}
@Override
public <V> Future<V> runOnUiThread(Callable<V> c) {
FutureTask<V> f = new FutureTask<>(c);
runOnUiThread(f);
return f;
}
@Override
public void runOnUiThread(Runnable r) {
uiHandler.post(r);
}
}