Basic changes to get embedded video working.

Add the ViewManager class to handle child views within a WebView. This class
attaches and removes the views in the UI thread. It also scales the layout
params based on the scale of the WebView.
diff --git a/core/java/android/webkit/HTML5VideoViewProxy.java b/core/java/android/webkit/HTML5VideoViewProxy.java
index 973cb010..5b2c0e2 100644
--- a/core/java/android/webkit/HTML5VideoViewProxy.java
+++ b/core/java/android/webkit/HTML5VideoViewProxy.java
@@ -24,6 +24,7 @@
 import android.os.Message;
 import android.util.Log;
 import android.view.View;
+import android.webkit.ViewManager.ChildView;
 import android.widget.MediaController;
 import android.widget.VideoView;
 
@@ -46,8 +47,6 @@
 
     // The singleton instance.
     private static HTML5VideoViewProxy sInstance;
-    // The VideoView driven via this proxy.
-    private VideoView mVideoView;
     // The context object used to initialize the VideoView and the
     // MediaController.
     private Context mContext;
@@ -61,12 +60,6 @@
         super(Looper.getMainLooper());
         // Save the context object.
         mContext = context;
-        // Send a message to the UI thread to create the VideoView.
-        // This need to be done on the UI thread, or else the
-        // event Handlers used by the VideoView and MediaController
-        // will be attached to the wrong thread.
-        Message message = obtainMessage(INIT);
-        sendMessage(message);
     }
 
     @Override
@@ -74,25 +67,22 @@
         // This executes on the UI thread.
         switch (msg.what) {
             case INIT:
+                ChildView child = (ChildView) msg.obj;
                 // Create the video view and set a default controller.
-                mVideoView = new VideoView(mContext);
-                mVideoView.setMediaController(new MediaController(mContext));
+                VideoView v = new VideoView(mContext);
+                // This is needed because otherwise there will be a black square
+                // stuck on the screen.
+                v.setWillNotDraw(false);
+                v.setMediaController(new MediaController(mContext));
+                child.mView = v;
                 break;
             case PLAY:
-                // Check if the fullscreen video view is currently playing.
-                // If it is, ignore the message.
-                if (!mVideoView.isPlaying()) {
-                    HashMap<String, Object> map =
+                HashMap<String, Object> map =
                         (HashMap<String, Object>) msg.obj;
-                    String url = (String) map.get("url");
-                    WebView webview = (WebView) map.get("webview");
-                    WebChromeClient client = webview.getWebChromeClient();
-                    if (client != null) {
-                        mVideoView.setVideoURI(Uri.parse(url));
-                        mVideoView.start();
-                        client.onShowCustomView(mVideoView);
-                    }
-                }
+                String url = (String) map.get("url");
+                VideoView view = (VideoView) map.get("view");
+                view.setVideoURI(Uri.parse(url));
+                view.start();
                 break;
         }
     }
@@ -102,16 +92,35 @@
      * @param url is the URL of the video stream.
      * @param webview is the WebViewCore that is requesting the playback.
      */
-    public void play(String url, WebViewCore webviewCore) {
+    public void play(String url, ChildView child) {
         // We need to know the webview that is requesting the playback.
         Message message = obtainMessage(PLAY);
         HashMap<String, Object> map = new HashMap();
         map.put("url", url);
-        map.put("webview", webviewCore.getWebView());
+        map.put("view", child.mView);
         message.obj = map;
         sendMessage(message);
     }
 
+    public ChildView createView(WebViewCore core) {
+        WebView w = core.getWebView();
+        if (w == null) {
+            return null;
+        }
+        ChildView child = w.mViewManager.createView();
+        sendMessage(obtainMessage(INIT, child));
+        return child;
+    }
+
+    public void attachView(ChildView child, int x, int y, int width,
+            int height) {
+        child.attachView(x, y, width, height);
+    }
+
+    public void removeView(ChildView child) {
+        child.removeView();
+    }
+
     /**
      * The factory for HTML5VideoViewProxy instances. Right now,
      * it only produces a singleton.