summaryrefslogtreecommitdiffstats
path: root/core/java/android/webkit/ViewManager.java
diff options
context:
space:
mode:
authorPatrick Scott <phanna@android.com>2009-07-02 08:56:10 -0400
committerPatrick Scott <phanna@android.com>2009-07-06 14:08:45 -0400
commit0a5ce01eda210f83619ada0603a80fd883512fe9 (patch)
tree2fd3ae3be6730a58e97a5448dde5505e423d609b /core/java/android/webkit/ViewManager.java
parent3042bb623870b877e18dabb07c31b5b8f45afa1d (diff)
downloadframeworks_base-0a5ce01eda210f83619ada0603a80fd883512fe9.zip
frameworks_base-0a5ce01eda210f83619ada0603a80fd883512fe9.tar.gz
frameworks_base-0a5ce01eda210f83619ada0603a80fd883512fe9.tar.bz2
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.
Diffstat (limited to 'core/java/android/webkit/ViewManager.java')
-rw-r--r--core/java/android/webkit/ViewManager.java129
1 files changed, 129 insertions, 0 deletions
diff --git a/core/java/android/webkit/ViewManager.java b/core/java/android/webkit/ViewManager.java
new file mode 100644
index 0000000..476e85c
--- /dev/null
+++ b/core/java/android/webkit/ViewManager.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.webkit;
+
+import android.content.Context;
+import android.view.View;
+import android.widget.AbsoluteLayout;
+
+import java.util.ArrayList;
+
+class ViewManager {
+ private final WebView mWebView;
+ private final ArrayList<ChildView> mChildren = new ArrayList<ChildView>();
+ private boolean mHidden;
+
+ class ChildView {
+ int x;
+ int y;
+ int width;
+ int height;
+ View mView; // generic view to show
+
+ ChildView() {
+ }
+
+ void setBounds(int x, int y, int width, int height) {
+ this.x = x;
+ this.y = y;
+ this.width = width;
+ this.height = height;
+ }
+
+ void attachView(int x, int y, int width, int height) {
+ if (mView == null) {
+ return;
+ }
+ setBounds(x, y, width, height);
+ final AbsoluteLayout.LayoutParams lp =
+ new AbsoluteLayout.LayoutParams(ctv(width), ctv(height),
+ ctv(x), ctv(y));
+ mWebView.mPrivateHandler.post(new Runnable() {
+ public void run() {
+ // This method may be called multiple times. If the view is
+ // already attached, just set the new LayoutParams,
+ // otherwise attach the view and add it to the list of
+ // children.
+ if (mView.getParent() != null) {
+ mView.setLayoutParams(lp);
+ } else {
+ mWebView.addView(mView, lp);
+ mChildren.add(ChildView.this);
+ }
+ }
+ });
+ }
+
+ void removeView() {
+ if (mView == null) {
+ return;
+ }
+ mWebView.mPrivateHandler.post(new Runnable() {
+ public void run() {
+ mWebView.removeView(mView);
+ mChildren.remove(ChildView.this);
+ }
+ });
+ }
+ }
+
+ ViewManager(WebView w) {
+ mWebView = w;
+ }
+
+ ChildView createView() {
+ return new ChildView();
+ }
+
+ // contentToView shorthand.
+ private int ctv(int val) {
+ return mWebView.contentToView(val);
+ }
+
+ void scaleAll() {
+ for (ChildView v : mChildren) {
+ View view = v.mView;
+ AbsoluteLayout.LayoutParams lp =
+ (AbsoluteLayout.LayoutParams) view.getLayoutParams();
+ lp.width = ctv(v.width);
+ lp.height = ctv(v.height);
+ lp.x = ctv(v.x);
+ lp.y = ctv(v.y);
+ view.setLayoutParams(lp);
+ }
+ }
+
+ void hideAll() {
+ if (mHidden) {
+ return;
+ }
+ for (ChildView v : mChildren) {
+ v.mView.setVisibility(View.GONE);
+ }
+ mHidden = true;
+ }
+
+ void showAll() {
+ if (!mHidden) {
+ return;
+ }
+ for (ChildView v : mChildren) {
+ v.mView.setVisibility(View.VISIBLE);
+ }
+ mHidden = false;
+ }
+}