Switch to ViewTunnel to handle phone ui

Change-Id: Ic81f39594cb9b9e1f909f671c2237bf02e90103b
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index 73c1b99..a9ae25a 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -17,12 +17,17 @@
 package com.android.browser;
 
 import android.app.Activity;
+import android.content.Context;
+import android.graphics.PixelFormat;
 import android.util.Log;
 import android.view.ActionMode;
 import android.view.Gravity;
 import android.view.KeyEvent;
 import android.view.Menu;
+import android.view.MotionEvent;
 import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
 import android.webkit.WebView;
 
 /**
@@ -34,6 +39,7 @@
 
     private TitleBar mTitleBar;
     private ActiveTabsPage mActiveTabsPage;
+    private TouchProxy mTitleOverlay;
 
     boolean mExtendedMenuOpen;
     boolean mOptionsMenuOpen;
@@ -140,7 +146,7 @@
     }
 
     @Override
-    void showTitleBar() {
+    protected void showTitleBar() {
         if (canShowTitleBar()) {
             setTitleGravity(Gravity.TOP);
             super.showTitleBar();
@@ -191,8 +197,14 @@
     @Override
     public void onOptionsMenuOpened() {
         mOptionsMenuOpen = true;
-        // options menu opened, show fake title bar
+        // options menu opened, show title bar
         showTitleBar();
+        if (mTitleOverlay == null) {
+            // This assumes that getTitleBar always returns the same View
+            mTitleOverlay = new TouchProxy(mActivity, getTitleBar());
+        }
+        mActivity.getWindowManager().addView(mTitleOverlay,
+                mTitleOverlay.getWindowLayoutParams());
     }
 
     @Override
@@ -206,7 +218,8 @@
     @Override
     public void onOptionsMenuClosed(boolean inLoad) {
         mOptionsMenuOpen = false;
-        if (!inLoad) {
+        mActivity.getWindowManager().removeView(mTitleOverlay);
+        if (!inLoad && !getTitleBar().hasFocus()) {
             hideTitleBar();
         }
     }
@@ -241,4 +254,29 @@
         return false;
     }
 
+    static class TouchProxy extends View {
+
+        View mTarget;
+
+        TouchProxy(Context context, View target) {
+            super(context);
+            mTarget = target;
+        }
+
+        @Override
+        public boolean dispatchTouchEvent(MotionEvent event) {
+            return mTarget.dispatchTouchEvent(event);
+        }
+
+        WindowManager.LayoutParams getWindowLayoutParams() {
+            WindowManager.LayoutParams params =
+                new WindowManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
+                        ViewGroup.LayoutParams.WRAP_CONTENT,
+                        WindowManager.LayoutParams.TYPE_APPLICATION,
+                        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
+                        PixelFormat.TRANSPARENT);
+            params.gravity = Gravity.TOP;
+            return params;
+        }
+    }
 }