diff options
author | Jean-Baptiste Queru <jbq@google.com> | 2009-11-12 18:45:53 -0800 |
---|---|---|
committer | Jean-Baptiste Queru <jbq@google.com> | 2009-11-13 13:53:39 -0800 |
commit | 9db3d07b9620b4269ab33f78604a36327e536ce1 (patch) | |
tree | 41e294f34b9695187af098cd42167489fb0c8fb0 /core/java/android/webkit/ViewManager.java | |
parent | 6c63ee4fc4acae4bbbbd2a49e0a68206221f0de0 (diff) | |
download | frameworks_base-9db3d07b9620b4269ab33f78604a36327e536ce1.zip frameworks_base-9db3d07b9620b4269ab33f78604a36327e536ce1.tar.gz frameworks_base-9db3d07b9620b4269ab33f78604a36327e536ce1.tar.bz2 |
eclair snapshot
Diffstat (limited to 'core/java/android/webkit/ViewManager.java')
-rw-r--r-- | core/java/android/webkit/ViewManager.java | 157 |
1 files changed, 157 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..6a838c3 --- /dev/null +++ b/core/java/android/webkit/ViewManager.java @@ -0,0 +1,157 @@ +/* + * 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(ctvD(width), ctvD(height), + ctvX(x), ctvY(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 { + attachViewOnUIThread(lp); + } + } + }); + } + + void attachViewOnUIThread(AbsoluteLayout.LayoutParams lp) { + mWebView.addView(mView, lp); + mChildren.add(this); + } + + void removeView() { + if (mView == null) { + return; + } + mWebView.mPrivateHandler.post(new Runnable() { + public void run() { + removeViewOnUIThread(); + } + }); + } + + void removeViewOnUIThread() { + mWebView.removeView(mView); + mChildren.remove(this); + } + } + + ViewManager(WebView w) { + mWebView = w; + } + + ChildView createView() { + return new ChildView(); + } + + /** + * Shorthand for calling mWebView.contentToViewDimension. Used when + * obtaining a view dimension from a content dimension, whether it be in x + * or y. + */ + private int ctvD(int val) { + return mWebView.contentToViewDimension(val); + } + + /** + * Shorthand for calling mWebView.contentToViewX. Used when obtaining a + * view x coordinate from a content x coordinate. + */ + private int ctvX(int val) { + return mWebView.contentToViewX(val); + } + + /** + * Shorthand for calling mWebView.contentToViewY. Used when obtaining a + * view y coordinate from a content y coordinate. + */ + private int ctvY(int val) { + return mWebView.contentToViewY(val); + } + + void scaleAll() { + for (ChildView v : mChildren) { + View view = v.mView; + AbsoluteLayout.LayoutParams lp = + (AbsoluteLayout.LayoutParams) view.getLayoutParams(); + lp.width = ctvD(v.width); + lp.height = ctvD(v.height); + lp.x = ctvX(v.x); + lp.y = ctvY(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; + } +} |