diff options
| author | Patrick Scott <phanna@android.com> | 2009-07-02 08:56:10 -0400 |
|---|---|---|
| committer | Patrick Scott <phanna@android.com> | 2009-07-06 14:08:45 -0400 |
| commit | 0a5ce01eda210f83619ada0603a80fd883512fe9 (patch) | |
| tree | 2fd3ae3be6730a58e97a5448dde5505e423d609b /core/java/android/webkit/ViewManager.java | |
| parent | 3042bb623870b877e18dabb07c31b5b8f45afa1d (diff) | |
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.java | 129 |
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 000000000000..476e85cdef90 --- /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; + } +} |
