Index: src/org/adblockplus/sbrowser/contentblocker/engine/EngineService.java |
diff --git a/src/org/adblockplus/sbrowser/contentblocker/engine/EngineService.java b/src/org/adblockplus/sbrowser/contentblocker/engine/EngineService.java |
index df8740283a9213e63416e1dee584265e6b08f0c9..845474948fc1285a25f65e60d6d8ceb1e1bb0080 100644 |
--- a/src/org/adblockplus/sbrowser/contentblocker/engine/EngineService.java |
+++ b/src/org/adblockplus/sbrowser/contentblocker/engine/EngineService.java |
@@ -32,8 +32,8 @@ public final class EngineService extends Service |
private volatile Engine engine = null; |
private volatile boolean isInitialized = false; |
private Throwable failureCause = null; |
- private static final LinkedBlockingQueue<OnEngineCreatedCallback> ON_CREATED_CALLBACKS = |
- new LinkedBlockingQueue<EngineService.OnEngineCreatedCallback>(); |
+ private static final LinkedBlockingQueue<EngineCreatedCallbackWrapper> ON_CREATED_CALLBACKS = |
+ new LinkedBlockingQueue<EngineCreatedCallbackWrapper>(); |
@Override |
public int onStartCommand(Intent intent, int flags, int startId) |
@@ -49,8 +49,21 @@ public final class EngineService extends Service |
*/ |
public static void startService(final Context context, final OnEngineCreatedCallback callback) |
{ |
+ startService(context, callback, true); |
+ } |
+ |
+ /** |
+ * |
+ * @param context |
+ * @param callback |
+ * @param runOnUiThread |
+ * {@code true} if the callback should be executed on the UI thread |
+ */ |
+ public static void startService(final Context context, final OnEngineCreatedCallback callback, |
+ final boolean runOnUiThread) |
+ { |
context.startService(new Intent(context, EngineService.class)); |
- ON_CREATED_CALLBACKS.offer(callback); |
+ ON_CREATED_CALLBACKS.offer(new EngineCreatedCallbackWrapper(callback, runOnUiThread)); |
} |
@Override |
@@ -67,11 +80,6 @@ public final class EngineService extends Service |
return null; |
} |
- public interface OnEngineCreatedCallback |
- { |
- public void onEngineCreated(Engine engine, boolean success); |
- } |
- |
private static void startDaemonThread(final Runnable runnable) |
{ |
final Thread t = new Thread(runnable); |
@@ -129,19 +137,28 @@ public final class EngineService extends Service |
for (;;) |
{ |
- final OnEngineCreatedCallback callback = EngineService.ON_CREATED_CALLBACKS.take(); |
- if (callback != null) |
+ final EngineCreatedCallbackWrapper wrapper = EngineService.ON_CREATED_CALLBACKS.take(); |
+ if (wrapper != null) |
{ |
- Engine.runOnUiThread(new Runnable() |
+ if (wrapper.runOnUiThread) |
{ |
- private final EngineService service = CreationNotifier.this.service; |
- |
- @Override |
- public void run() |
+ Engine.runOnUiThread(new Runnable() |
{ |
- callback.onEngineCreated(this.service.engine, this.service.failureCause == null); |
- } |
- }); |
+ private final EngineService service = CreationNotifier.this.service; |
+ |
+ @Override |
+ public void run() |
+ { |
+ wrapper.callback.onEngineCreated(this.service.engine, |
+ this.service.failureCause == null); |
+ } |
+ }); |
+ } |
+ else |
+ { |
+ wrapper.callback.onEngineCreated(this.service.engine, |
+ this.service.failureCause == null); |
+ } |
} |
} |
} |
@@ -151,4 +168,22 @@ public final class EngineService extends Service |
} |
} |
} |
+ |
+ public interface OnEngineCreatedCallback |
+ { |
+ public void onEngineCreated(Engine engine, boolean success); |
+ } |
+ |
+ private static class EngineCreatedCallbackWrapper |
+ { |
+ final OnEngineCreatedCallback callback; |
+ final boolean runOnUiThread; |
+ |
+ public EngineCreatedCallbackWrapper(final OnEngineCreatedCallback callback, |
+ final boolean runOnUiThread) |
+ { |
+ this.callback = callback; |
+ this.runOnUiThread = runOnUiThread; |
+ } |
+ } |
} |