use webview proxy in nav screen

Change-Id: If5c914dfad48cd4b13cd5fe81374e8adc35060f9
diff --git a/src/com/android/browser/NavTabView.java b/src/com/android/browser/NavTabView.java
index ec42c94..061e024 100644
--- a/src/com/android/browser/NavTabView.java
+++ b/src/com/android/browser/NavTabView.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.content.res.Resources;
+import android.graphics.Canvas;
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.util.TypedValue;
@@ -32,21 +33,23 @@
 
 public class NavTabView extends LinearLayout {
 
-    Tab mTab;
-    BrowserWebView mWebView;
-    ImageButton mForward;
-    ImageButton mRefresh;
-    ImageView mFavicon;
-    ImageButton mClose;
-    FrameLayout mContainer;
-    TextView mTitle;
-    View mTitleBar;
-    OnClickListener mClickListener;
-    boolean mHighlighted;
-    Drawable mTitleBg;
-    Drawable mUrlBg;
-    float mMediumTextSize;
-    float mSmallTextSize;
+    private Tab mTab;
+    private BrowserWebView mWebView;
+    private WebProxyView mProxy;
+    private ImageButton mForward;
+    private ImageButton mRefresh;
+    private ImageView mFavicon;
+    private ImageButton mClose;
+    private FrameLayout mContainer;
+    private TextView mTitle;
+    private View mTitleBar;
+    private OnClickListener mClickListener;
+    private boolean mHighlighted;
+    private Drawable mTitleBg;
+    private Drawable mUrlBg;
+    private float mMediumTextSize;
+    private float mSmallTextSize;
+    private boolean mPaused;
 
     public NavTabView(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
@@ -82,6 +85,20 @@
         setState(false);
     }
 
+    protected void pause() {
+        mPaused = true;
+        mWebView.onPause();
+    }
+
+    protected void resume() {
+        mPaused = false;
+        mWebView.onResume();
+    }
+
+    protected boolean isPaused() {
+        return mPaused;
+    }
+
     protected boolean isRefresh(View v) {
         return v == mRefresh;
     }
@@ -99,7 +116,7 @@
     }
 
     protected boolean isWebView(View v) {
-        return v == mWebView;
+        return v == mProxy;
     }
 
     protected void setHighlighted(boolean highlighted) {
@@ -153,8 +170,8 @@
         if (web == null) return;
         mWebView = web;
         removeFromParent(mWebView);
-        mWebView.setNavMode(true);
-        mContainer.addView(mWebView, 0);
+        mProxy = new WebProxyView(mContext, mWebView);
+        mContainer.addView(mProxy, 0);
         if (mWebView != null) {
             mForward.setVisibility(mWebView.canGoForward()
                     ? View.VISIBLE : View.GONE);
@@ -174,15 +191,39 @@
         mRefresh.setOnClickListener(mClickListener);
         mForward.setOnClickListener(mClickListener);
         mClose.setOnClickListener(mClickListener);
-        if (mWebView != null) {
-            mWebView.setOnClickListener(mClickListener);
+        if (mProxy != null) {
+            mProxy.setOnClickListener(mClickListener);
         }
     }
 
+    @Override
+    public void onDetachedFromWindow() {
+        mWebView.setProxyView(null);
+    }
+
     private static void removeFromParent(View v) {
         if (v.getParent() != null) {
             ((ViewGroup) v.getParent()).removeView(v);
         }
     }
 
+    static class WebProxyView extends View {
+
+        private BrowserWebView mWeb;
+
+        public WebProxyView(Context context, BrowserWebView web) {
+            super(context);
+            setWillNotDraw(false);
+            mWeb = web;
+            mWeb.setProxyView(this);
+
+        }
+
+        public void onDraw(Canvas c) {
+            c.translate(-mWeb.getScrollX(), -mWeb.getScrollY());
+            mWeb.onDraw(c);
+        }
+
+    }
+
 }