Revamped EngineInitializer

Also contains gyp changes to add a instrumentation test
target for Browser

Change-Id: I2ea26a4a57d9101c54f80f148c9333088016e141
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 9b310e2..f1fc421 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -36,7 +36,6 @@
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
 import android.view.Window;
 
 import org.chromium.base.VisibleForTesting;
@@ -50,7 +49,7 @@
 import org.codeaurora.swe.CookieManager;
 import org.codeaurora.swe.WebView;
 
-public class BrowserActivity extends Activity implements ViewTreeObserver.OnPreDrawListener {
+public class BrowserActivity extends Activity {
 
     public static final String ACTION_SHOW_BOOKMARKS = "show_bookmarks";
     public static final String ACTION_SHOW_BROWSER = "show_browser";
@@ -84,7 +83,10 @@
     };
 
     private Bundle mSavedInstanceState;
-    private EngineInitializer mEngineInitializer;
+    private EngineInitializer.ActivityScheduler mActivityScheduler;
+    public EngineInitializer.ActivityScheduler getScheduler() {
+        return mActivityScheduler;
+    }
 
     @Override
     public void onCreate(Bundle icicle) {
@@ -115,8 +117,7 @@
         }
         */
 
-        mEngineInitializer = EngineInitializer.getInstance();
-        mEngineInitializer.onActivityCreate(BrowserActivity.this);
+        mActivityScheduler = EngineInitializer.onActivityCreate(BrowserActivity.this);
 
         Thread.setDefaultUncaughtExceptionHandler(new CrashLogExceptionHandler(this));
 
@@ -128,23 +129,9 @@
         ViewGroup topLayout = (ViewGroup) findViewById(R.id.main_content);
         topLayout.requestTransparentRegion(topLayout);
 
-        // Add pre-draw listener to start the controller after engine initialization.
-        final ViewTreeObserver observer = getWindow().getDecorView().getViewTreeObserver();
-        observer.addOnPreDrawListener(this);
-
-        mEngineInitializer.initializeResourceExtractor(this);
+        EngineInitializer.onPostActivityCreate(BrowserActivity.this);
     }
 
-    @Override
-    public boolean onPreDraw()
-    {
-        final ViewTreeObserver observer = getWindow().getDecorView().getViewTreeObserver();
-        observer.removeOnPreDrawListener(this);
-        mEngineInitializer.onPreDraw();
-        return true;
-    }
-
-
     public static boolean isTablet(Context context) {
         return context.getResources().getBoolean(R.bool.isTablet);
     }
@@ -166,7 +153,7 @@
         return controller;
     }
 
-    public void onEngineInitializationComplete() {
+    public void startController() {
         Intent intent = (mSavedInstanceState == null) ? getIntent() : null;
         mController.start(intent);
     }
@@ -180,7 +167,7 @@
     @Override
     protected void onNewIntent(Intent intent) {
         if (shouldIgnoreIntents()) return;
-        mEngineInitializer.onNewIntent(intent);
+        EngineInitializer.onNewIntent(BrowserActivity.this, intent);
         // Note: Do not add any more application logic in this method.
         //       Move any additional app logic into handleOnNewIntent().
     }
@@ -221,7 +208,7 @@
     @Override
     protected void onStart() {
         super.onStart();
-        mEngineInitializer.onActivityStart();
+        EngineInitializer.onActivityStart(BrowserActivity.this);
     }
 
     @Override
@@ -230,7 +217,7 @@
         if (LOGV_ENABLED) {
             Log.v(LOGTAG, "BrowserActivity.onResume: this=" + this);
         }
-        mEngineInitializer.onActivityResume();
+        EngineInitializer.onActivityResume(BrowserActivity.this);
         // Note: Do not add any more application logic in this method.
         //       Move any additional app logic into handleOnResume().
     }
@@ -245,12 +232,17 @@
 
     @Override
     protected void onStop() {
-        mEngineInitializer.onActivityStop();
+        EngineInitializer.onActivityStop(BrowserActivity.this);
         super.onStop();
         // Note: Do not add any more application logic in this method.
         //       Move any additional app logic into handleOnStop().
     }
 
+    protected void handleOnStop() {
+        CookieManager.getInstance().flushCookieStore();
+        mController.onPause();
+    }
+
     @Override
     public boolean onMenuOpened(int featureId, Menu menu) {
         if (Window.FEATURE_OPTIONS_PANEL == featureId) {
@@ -285,7 +277,7 @@
 
     @Override
     protected void onPause() {
-        mEngineInitializer.onActivityPause();
+        EngineInitializer.onActivityPause(BrowserActivity.this);
         super.onPause();
         // Note: Do not add any more application logic in this method.
         //       Move any additional app logic into handleOnPause().
@@ -295,21 +287,13 @@
         // Note: Intentionally left blank
     }
 
-    protected void handleOnStop() {
-        CookieManager.getInstance().flushCookieStore();
-        mController.onPause();
-    }
-
     @Override
     protected void onDestroy() {
         if (LOGV_ENABLED) {
             Log.v(LOGTAG, "BrowserActivity.onDestroy: this=" + this);
         }
         super.onDestroy();
-        // mEngineInitializer can be null if onCreate is not called before onDestroy
-        // it happens when starting the activity with an intent while the screen is locked.
-        if (mEngineInitializer != null)
-            mEngineInitializer.onActivityDestroy();
+        EngineInitializer.onActivityDestroy(BrowserActivity.this);
         mController.onDestroy();
         mController = NullController.INSTANCE;
         if (!Locale.getDefault().equals(mCurrentLocale) || killOnExitDialog) {
@@ -402,7 +386,7 @@
     @Override
     protected void onActivityResult (int requestCode, int resultCode,
                                      Intent intent) {
-        mEngineInitializer.onActivityResult(requestCode, resultCode, intent);
+        EngineInitializer.onActivityResult(BrowserActivity.this, requestCode, resultCode, intent);
     }
 
     protected void handleOnActivityResult (int requestCode, int resultCode, Intent intent) {