Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: adblockplussbrowser/src/main/java/org/adblockplus/sbrowser/contentblocker/engine/EngineService.java

Issue 29716681: Issue 6454 - IllegalStateException crash (Closed)
Patch Set: Adjusting engine check Created March 9, 2018, 11:42 a.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « adblockplussbrowser/src/main/java/org/adblockplus/sbrowser/contentblocker/engine/EngineManager.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: adblockplussbrowser/src/main/java/org/adblockplus/sbrowser/contentblocker/engine/EngineService.java
===================================================================
deleted file mode 100644
--- a/adblockplussbrowser/src/main/java/org/adblockplus/sbrowser/contentblocker/engine/EngineService.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * This file is part of Adblock Plus <https://adblockplus.org/>,
- * Copyright (C) 2006-present eyeo GmbH
- *
- * Adblock Plus is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3 as
- * published by the Free Software Foundation.
- *
- * Adblock Plus is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package org.adblockplus.sbrowser.contentblocker.engine;
-
-import java.util.concurrent.LinkedBlockingQueue;
-
-import android.app.Service;
-import android.content.Context;
-import android.content.Intent;
-import android.os.IBinder;
-import android.util.Log;
-
-public final class EngineService extends Service
-{
- private static final String TAG = EngineService.class.getSimpleName();
-
- private volatile Engine engine = null;
- private volatile boolean isInitialized = false;
- private Throwable failureCause = null;
- private static final LinkedBlockingQueue<EngineCreatedCallbackWrapper> ON_CREATED_CALLBACKS =
- new LinkedBlockingQueue<>();
-
- @Override
- public int onStartCommand(Intent intent, int flags, int startId)
- {
- return Service.START_NOT_STICKY;
- }
-
- /**
- * The callback gets executed on the UI thread.
- *
- * @param context
- * @param callback
- */
- 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(new EngineCreatedCallbackWrapper(callback, runOnUiThread));
- }
-
- @Override
- public void onCreate()
- {
- super.onCreate();
- startDaemonThread(new Initializer(this));
- startDaemonThread(new CreationNotifier(this));
- }
-
- @Override
- public IBinder onBind(Intent intent)
- {
- return null;
- }
-
- private static void startDaemonThread(final Runnable runnable)
- {
- final Thread t = new Thread(runnable);
- t.setDaemon(true);
- t.start();
- }
-
- private static class Initializer implements Runnable
- {
- private final EngineService service;
-
- public Initializer(final EngineService service)
- {
- this.service = service;
- }
-
- @Override
- public void run()
- {
- try
- {
- this.service.engine = Engine.create(this.service.getApplicationContext());
- }
- catch (Throwable t)
- {
- Log.e(TAG, "Initialization failed: " + t.getMessage(), t);
- this.service.failureCause = t;
- }
- finally
- {
- this.service.isInitialized = true;
- }
- }
- }
-
- private static class CreationNotifier implements Runnable
- {
- private static final String TAG = CreationNotifier.class.getSimpleName();
- private final EngineService service;
-
- public CreationNotifier(final EngineService service)
- {
- this.service = service;
- }
-
- @Override
- public void run()
- {
- try
- {
- while (!this.service.isInitialized)
- {
- Thread.sleep(250);
- }
-
- for (;;)
- {
- final EngineCreatedCallbackWrapper wrapper = EngineService.ON_CREATED_CALLBACKS.take();
- if (wrapper != null)
- {
- if (wrapper.runOnUiThread)
- {
- Engine.runOnUiThread(new Runnable()
- {
- 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);
- }
- }
- }
- }
- catch (final Throwable t)
- {
- Log.e(TAG, "Notifier died: " + t.getMessage(), t);
- }
- }
- }
-
- public interface OnEngineCreatedCallback
- {
- 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;
- }
- }
-}
« no previous file with comments | « adblockplussbrowser/src/main/java/org/adblockplus/sbrowser/contentblocker/engine/EngineManager.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld