Make SWEAB work with M38 branch

Change-Id: I01cee135afdcde2f7dab53a9f45c0413a6cb813b
diff --git a/src/com/android/browser/Browser.java b/src/com/android/browser/Browser.java
index 01b9706..5a30fad 100644
--- a/src/com/android/browser/Browser.java
+++ b/src/com/android/browser/Browser.java
@@ -22,6 +22,9 @@
 import android.util.Log;
 import android.os.Process;
 
+import org.chromium.content.browser.ResourceExtractor;
+import org.chromium.base.PathUtils;
+
 import org.codeaurora.swe.Engine;
 
 import com.android.browser.BrowserConfig;
@@ -36,10 +39,15 @@
     // Set to true to enable extra debug logging.
     final static boolean LOGD_ENABLED = true;
 
+    private static final String[] MP_MANDATORY_PAKS = new String[] {
+        "webviewchromium.pak",
+        "icudtl.dat"
+    };
+
     @Override
     public void onCreate() {
         super.onCreate();
-
+        initializeApplicationParameters();
         if (LOGV_ENABLED)
             Log.v(LOGTAG, "Browser.onCreate: this=" + this);
 
@@ -55,7 +63,13 @@
             Engine.initialize(context);
             BrowserSettings.initialize(context);
             Preloader.initialize(context);
-        }
+       }
+
+    }
+
+    public static void initializeApplicationParameters() {
+        ResourceExtractor.setMandatoryPaksToExtract(MP_MANDATORY_PAKS);
+        PathUtils.setPrivateDataDirectorySuffix("android_browser");
     }
 }
 
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index 82109e9..01cd964 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -61,7 +61,6 @@
 import org.json.JSONException;
 import org.json.JSONObject;
 
-import org.codeaurora.net.NetworkServices;
 
 interface BookmarksPageCallbacks {
     // Return true if handled
@@ -436,9 +435,6 @@
         LoaderManager lm = getLoaderManager();
         lm.restartLoader(LOADER_ACCOUNTS, null, this);
 
-        //Notify about anticipated network activity
-        NetworkServices.HintUpcomingUserActivity();
-
         return mRoot;
     }
 
diff --git a/src/com/android/browser/BrowserPreferencesPage.java b/src/com/android/browser/BrowserPreferencesPage.java
index 9e19d11..fb291c9 100644
--- a/src/com/android/browser/BrowserPreferencesPage.java
+++ b/src/com/android/browser/BrowserPreferencesPage.java
@@ -109,7 +109,8 @@
         "com.android.browser.preferences.AdvancedPreferencesFragment",
         "com.android.browser.preferences.BandwidthPreferencesFragment",
         "com.android.browser.preferences.LabPreferencesFragment",
-        "com.android.browser.preferences.AboutPreferencesFragment"));
+        "com.android.browser.preferences.AboutPreferencesFragment",
+        "com.android.browser.AutoFillSettingsFragment"));
 
     @Override
     protected boolean isValidFragment(String fragmentName) {
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 14a0793..ea1a60c 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -601,13 +601,29 @@
     }
 
     private void shareCurrentPage(Tab tab) {
-        if (tab != null) {
-            sharePage(mActivity, tab.getTitle(),
-                    tab.getUrl(), tab.getFavicon(),
-                    createScreenshot(tab.getWebView(),
-                            getDesiredThumbnailWidth(mActivity),
-                            getDesiredThumbnailHeight(mActivity)));
-        }
+        if (tab == null || tab.getWebView() == null)
+            return;
+
+        final Tab mytab = tab;
+        final ValueCallback<Bitmap> onScreenshot =  new ValueCallback<Bitmap>() {
+            @Override
+            public void onReceiveValue(Bitmap bitmap) {
+                sharePage(mActivity, mytab.getTitle(), mytab.getUrl(),
+                          mytab.getFavicon(), bitmap);
+            }
+        };
+
+        createScreenshotAsync(
+            tab.getWebView(),
+            getDesiredThumbnailWidth(mActivity),
+            getDesiredThumbnailHeight(mActivity),
+            new ValueCallback<Bitmap>() {
+                @Override
+                public void onReceiveValue(Bitmap bitmap) {
+                    sharePage(mActivity, mytab.getTitle(), mytab.getUrl(),
+                          mytab.getFavicon(), bitmap);
+                }
+            });
     }
 
     /**
@@ -2145,10 +2161,21 @@
 
     @Override
     public void bookmarkCurrentPage() {
-        Intent bookmarkIntent = createBookmarkCurrentPageIntent(false);
-        if (bookmarkIntent != null) {
-            mActivity.startActivity(bookmarkIntent);
-        }
+        WebView w = getCurrentTopWebView();
+        if (w == null)
+            return;
+
+        final Intent i = createBookmarkCurrentPageIntent(false);
+        createScreenshotAsync(
+            w, getDesiredThumbnailWidth(mActivity),
+            getDesiredThumbnailHeight(mActivity),
+            new ValueCallback<Bitmap>() {
+                @Override
+                    public void onReceiveValue(Bitmap bitmap) {
+                    i.putExtra(BrowserContract.Bookmarks.THUMBNAIL, bitmap);
+                    mActivity.startActivity(i);
+                }
+            });
     }
 
     private void goLive() {
@@ -2378,9 +2405,7 @@
                         settings.getUserAgentString());
             }
         }
-        i.putExtra(BrowserContract.Bookmarks.THUMBNAIL,
-                createScreenshot(w, getDesiredThumbnailWidth(mActivity),
-                getDesiredThumbnailHeight(mActivity)));
+        //SWE: Thumbnail will need to be set asynchronously
         i.putExtra(BrowserContract.Bookmarks.FAVICON, w.getFavicon());
         if (editExisting) {
             i.putExtra(AddBookmarkPage.CHECK_FOR_DUPE, true);
@@ -2472,6 +2497,27 @@
         return sThumbnailBitmap;
     }
 
+    static void createScreenshotAsync(WebView view, int width, int height,
+                                        final ValueCallback<Bitmap> cb) {
+        if (view == null || width == 0 || height == 0) {
+            return;
+        }
+
+        view.getContentBitmapAsync(
+            (float) width / view.getWidth(),
+            new Rect(),
+            new ValueCallback<Bitmap>() {
+                @Override
+                public void onReceiveValue(Bitmap bitmap) {
+                    Log.e("sudheer", "screensot bitmap: w: " + bitmap.getWidth()
+                          + " h: " + bitmap.getHeight());
+                    if (bitmap != null)
+                        bitmap = bitmap.copy(Bitmap.Config.RGB_565, false);
+                    cb.onReceiveValue(bitmap);
+                }});
+    }
+
+
     private void updateScreenshot(Tab tab) {
         // If this is a bookmarked site, add a screenshot to the database.
         // FIXME: Would like to make sure there is actually something to
diff --git a/src/com/android/browser/LocationButton.java b/src/com/android/browser/LocationButton.java
index e805e43..15371ef 100644
--- a/src/com/android/browser/LocationButton.java
+++ b/src/com/android/browser/LocationButton.java
@@ -71,7 +71,8 @@
     @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
-        init();
+        //SWE-FIXME : Enable once SWE geolocation api works.
+        //init();
     }
 
     private void init() {
diff --git a/src/com/android/browser/NavigationBarBase.java b/src/com/android/browser/NavigationBarBase.java
index 100e8d7..a8f52fe 100644
--- a/src/com/android/browser/NavigationBarBase.java
+++ b/src/com/android/browser/NavigationBarBase.java
@@ -75,7 +75,8 @@
     protected void onFinishInflate() {
         super.onFinishInflate();
         mLockIcon = (ImageView) findViewById(R.id.lock);
-        mLocationButton = (LocationButton) findViewById(R.id.location_button);
+        //SWE-FIXME
+        //mLocationButton = (LocationButton) findViewById(R.id.location_button);
         mFavicon = (ImageView) findViewById(R.id.favicon);
         mUrlInput = (UrlInputView) findViewById(R.id.url);
         mUrlInput.setUrlInputListener(this);
@@ -397,7 +398,8 @@
     }
 
     public void onTabDataChanged(Tab tab) {
-        mLocationButton.onTabDataChanged(tab);
+        //SWE-FIXME
+        //mLocationButton.onTabDataChanged(tab);
     }
 
     public void onVoiceResult(String s) {
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index 78b3cc8..c789eba 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -25,6 +25,7 @@
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Matrix;
+import android.graphics.Rect;
 import android.os.Message;
 import android.util.Log;
 import android.util.TypedValue;
@@ -35,6 +36,7 @@
 import android.view.MenuItem;
 import android.view.View;
 import android.view.accessibility.AccessibilityEvent;
+import android.webkit.ValueCallback;
 import org.codeaurora.swe.WebView;
 import android.widget.ImageView;
 
@@ -122,7 +124,7 @@
             if (mAnimScreen == null) {
                 mAnimScreen = new AnimScreen(mActivity);
                 // initialize bitmaps
-                mAnimScreen.set(getTitleBar(), getWebView());
+                //mAnimScreen.set(getTitleBar(), getWebView());
             }
         }
     }
@@ -271,6 +273,19 @@
         mShowNav = true;
         dismissIME();
         mUiController.setBlockEvents(true);
+
+        getWebView()
+            .getContentBitmapAsync(1.0f,
+                new Rect(),
+                new ValueCallback<Bitmap>() {
+                    @Override
+                    public void onReceiveValue(Bitmap bitmap) {
+                        onShowNavScreenContinue(bitmap);
+                    }});
+    }
+
+    void onShowNavScreenContinue(Bitmap viewportBitmap) {
+
         if (mNavScreen == null) {
             mNavScreen = new NavScreen(mActivity, mUiController, this);
             mCustomViewContainer.addView(mNavScreen, COVER_SCREEN_PARAMS);
@@ -287,7 +302,7 @@
             mAnimScreen.mTitle.setAlpha(1f);
             mAnimScreen.setScaleFactor(1f);
         }
-        mAnimScreen.set(getTitleBar(), getWebView());
+        mAnimScreen.set(getTitleBar(), viewportBitmap);
         if (mAnimScreen.mMain.getParent() == null) {
             mCustomViewContainer.addView(mAnimScreen.mMain, COVER_SCREEN_PARAMS);
         }
@@ -383,7 +398,7 @@
         }
         int width = mContentView.getWidth();
         int height = mContentView.getHeight();
-        Bitmap bm = tab.getFullScreenshot();
+        Bitmap bm = tab.getScreenshot();
         if (bm == null)
             bm = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
         mAnimScreen.set(bm);
@@ -503,6 +518,7 @@
         mNavScreen.setVisibility(View.GONE);
         mCustomViewContainer.setAlpha(1f);
         mCustomViewContainer.setVisibility(View.GONE);
+        mAnimScreen.set(null);
     }
 
     @Override
@@ -543,8 +559,8 @@
             setScaleFactor(getScaleFactor());
         }
 
-        public void set(TitleBar tbar, WebView web) {
-            if (tbar == null || web == null) {
+        public void set(TitleBar tbar, Bitmap viewportBitmap) {
+            if (tbar == null) {
                 return;
             }
             int embTbarHeight = tbar.getEmbeddedHeight();
@@ -566,29 +582,8 @@
             }
             mTitle.setImageBitmap(mTitleBarBitmap);
             mTitle.setVisibility(View.VISIBLE);
-            // SWE: WebView.draw() wouldn't draw anything if SurfaceView is enabled.
-            if (mContentBitmap != null) {
-                mContentBitmap.recycle();
-                mContentBitmap = null;
-            }
-            mContentBitmap = web.getViewportBitmap();
-            if (mContentBitmap == null) {
-                int h = web.getHeight() - embTbarHeight;
-                if (mContentBitmap == null
-                        || mContentBitmap.getWidth() != web.getWidth()
-                        || mContentBitmap.getHeight() != h) {
-                    mContentBitmap = safeCreateBitmap(web.getWidth(), h);
-                }
-                if (mContentBitmap != null) {
-                        Canvas c = new Canvas(mContentBitmap);
-                        int tx = web.getScrollX();
-                        int ty = web.getScrollY();
-                        c.translate(-tx, -ty - embTbarHeight);
-                        web.draw(c);
-                        c.setBitmap(null);
-                }
-            }
-            mContent.setImageBitmap(mContentBitmap);
+
+            mContent.setImageBitmap(viewportBitmap);
         }
 
         private Bitmap safeCreateBitmap(int width, int height) {
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 4f183fe..5e71aca 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -33,6 +33,7 @@
 import android.graphics.Picture;
 import android.graphics.PorterDuff;
 import android.graphics.PorterDuffXfermode;
+import android.graphics.Rect;
 import android.net.Uri;
 import android.net.http.SslError;
 import android.os.Bundle;
@@ -1965,8 +1966,9 @@
         values.put(Snapshots.BACKGROUND, web.getPageBackgroundColor());
         values.put(Snapshots.DATE_CREATED, System.currentTimeMillis());
         values.put(Snapshots.FAVICON, compressBitmap(getFavicon()));
-        Bitmap screenshot = web.getViewportBitmap();
-        values.put(Snapshots.THUMBNAIL, compressBitmap(screenshot));
+        Bitmap screenshot = getScreenshot();
+        if (screenshot != null)
+            values.put(Snapshots.THUMBNAIL, compressBitmap(screenshot));
         return values;
     }
 
@@ -2046,44 +2048,26 @@
         if (mMainView.getContentWidth() <= 0 || mMainView.getContentHeight() <= 0) {
             return;
         }
+
+        mMainView
+            .getContentBitmapAsync(
+                 (float) mCaptureWidth / mMainView.getWidth(),
+                 new Rect(),
+                 new ValueCallback<Bitmap>() {
+                     @Override
+                     public void onReceiveValue(Bitmap bitmap) {
+                         onCaptureCallback(bitmap);
+                     }});
+    }
+
+    private void onCaptureCallback(Bitmap bitmap) {
+        if (mCapture == null || bitmap == null)
+            return;
+
         Canvas c = new Canvas(mCapture);
-        int state = c.save();
-        float scale = 0;
-        Bitmap screenShot = mMainView.getViewportBitmap();
-        if (mScreenShot != null) {
-            mScreenShot.recycle();
-            mScreenShot = null;
-        }
-        mScreenShot = screenShot;
-        if (screenShot != null) {
-            //scale based on device orientation
-            if (screenShot.getHeight() > screenShot.getWidth()){
-                scale = (float) mCaptureWidth / screenShot.getWidth();
-            } else {
-                scale = (float) mCaptureHeight / screenShot.getHeight();
-            }
-            mCapture.eraseColor(Color.WHITE);
-            c.scale(scale, scale);
-            c.drawBitmap(screenShot, 0, 0, null);
-        } else {
-            final int left = mMainView.getViewScrollX();
-            final int top = mMainView.getViewScrollY() +  mMainView.getVisibleTitleHeight();
+        mCapture.eraseColor(Color.WHITE);
+        c.drawBitmap(bitmap, 0, 0, null);
 
-            if (mMainView.getHeight() > mMainView.getWidth()){
-                scale = mCaptureWidth / (float) mMainView.getWidth();
-            } else {
-                scale = mCaptureHeight / (float) mMainView.getHeight();
-            }
-
-            c.translate(-left, -top);
-            c.scale(scale, scale, left, top);
-            if (mMainView instanceof BrowserWebView) {
-                ((BrowserWebView)mMainView).drawContent(c);
-             } else {
-                mMainView.draw(c);
-             }
-        }
-        c.restoreToCount(state);
         // manually anti-alias the edges for the tilt
         c.drawRect(0, 0, 1, mCapture.getHeight(), sAlphaPaint);
         c.drawRect(mCapture.getWidth() - 1, 0, mCapture.getWidth(),
diff --git a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
index e693297..9c96768 100644
--- a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
+++ b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
@@ -160,14 +160,15 @@
                 }
             }
         });
-        GeolocationPermissions.getInstance().getOrigins(new ValueCallback<Set<String> >() {
+        //SWE-FIXME : Uncomment when geolocation is working.
+        /*GeolocationPermissions.getInstance().getOrigins(new ValueCallback<Set<String> >() {
             @Override
             public void onReceiveValue(Set<String> geolocationOrigins) {
                 if ((geolocationOrigins != null) && !geolocationOrigins.isEmpty()) {
                     websiteSettings.setEnabled(true);
                 }
             }
-        });
+        });*/
     }
 
     @Override