| Index: src/org/adblockplus/sbrowser/contentblocker/ContentBlockerContentProvider.java | 
| =================================================================== | 
| --- a/src/org/adblockplus/sbrowser/contentblocker/ContentBlockerContentProvider.java | 
| +++ b/src/org/adblockplus/sbrowser/contentblocker/ContentBlockerContentProvider.java | 
| @@ -22,30 +22,28 @@ import java.io.FileNotFoundException; | 
| import java.io.IOException; | 
|  | 
| import org.adblockplus.adblockplussbrowser.R; | 
| import org.adblockplus.sbrowser.contentblocker.engine.Engine; | 
| import org.adblockplus.sbrowser.contentblocker.engine.EngineService; | 
|  | 
| import android.content.ContentProvider; | 
| import android.content.ContentValues; | 
| +import android.content.Intent; | 
| import android.content.SharedPreferences; | 
| import android.database.Cursor; | 
| import android.net.Uri; | 
| import android.os.Bundle; | 
| import android.os.ParcelFileDescriptor; | 
| import android.preference.PreferenceManager; | 
| import android.util.Log; | 
|  | 
| -public class ContentBlockerContentProvider extends ContentProvider implements | 
| -    EngineService.OnEngineCreatedCallback | 
| +public class ContentBlockerContentProvider extends ContentProvider | 
| { | 
| private static final String TAG = ContentBlockerContentProvider.class.getSimpleName(); | 
| -  private volatile Engine engine = null; | 
| -  private volatile boolean engineInitDone = false; | 
|  | 
| @Override | 
| public Bundle call(String method, String arg, Bundle extras) | 
| { | 
| // As of SBC interface v1.4 we return `null` here to signal that we do not | 
| // use encryption | 
| return null; | 
| } | 
| @@ -76,60 +74,36 @@ public class ContentBlockerContentProvid | 
| .commit(); | 
| } | 
| } | 
|  | 
| @Override | 
| public ParcelFileDescriptor openFile(final Uri uri, final String mode) | 
| throws FileNotFoundException | 
| { | 
| -    if (!this.engineInitDone) | 
| -    { | 
| -      Log.i(TAG, "Engine not ready yet, waiting..."); | 
| -      while (!this.engineInitDone) | 
| -      { | 
| -        try | 
| -        { | 
| -          Thread.sleep(10); | 
| -        } | 
| -        catch (InterruptedException e) | 
| -        { | 
| -          Log.e(TAG, "Interrupted: " + e.getMessage(), e); | 
| -          return null; | 
| -        } | 
| -      } | 
| -      Log.i(TAG, "Engine ready"); | 
| -    } | 
| - | 
| -    if (this.engine == null) | 
| -    { | 
| -      Log.e(TAG, "Engine failed to initialize"); | 
| -      return null; | 
| -    } | 
| - | 
| try | 
| { | 
| this.setApplicationActivated(); | 
| Log.d(TAG, "Writing filters..."); | 
| -      final File filterFile = this.engine.createAndWriteFile(); | 
| +      final File filterFile = Engine.getOrCreateCachedFilterFile(getContext()); | 
| Log.d(TAG, "Delivering filters..."); | 
| return ParcelFileDescriptor.open(filterFile, ParcelFileDescriptor.MODE_READ_ONLY); | 
| } | 
| catch (IOException e) | 
| { | 
| Log.e(TAG, "File creation failed: " + e.getMessage(), e); | 
| return null; | 
| } | 
| } | 
|  | 
| @Override | 
| public boolean onCreate() | 
| { | 
| Log.i(TAG, "onCreate() called"); | 
| -    EngineService.startService(this.getContext().getApplicationContext(), this, false); | 
| +    getContext().startService(new Intent(getContext(), EngineService.class)); | 
| Log.i(TAG, "Requested service startup"); | 
| return true; | 
| } | 
|  | 
| @Override | 
| public Cursor query(final Uri uri, final String[] projection, final String selection, | 
| final String[] selectionArgs, final String sortOrder) | 
| { | 
| @@ -155,20 +129,9 @@ public class ContentBlockerContentProvid | 
| } | 
|  | 
| @Override | 
| public int update(final Uri uri, final ContentValues values, final String selection, | 
| final String[] selectionArgs) | 
| { | 
| return 0; | 
| } | 
| - | 
| -  @Override | 
| -  public void onEngineCreated(Engine engine, boolean success) | 
| -  { | 
| -    Log.i(TAG, "Service started, success: " + success); | 
| -    this.engineInitDone = true; | 
| -    if (success) | 
| -    { | 
| -      this.engine = engine; | 
| -    } | 
| -  } | 
| } | 
|  |