summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorTeng-Hui Zhu <ztenghui@google.com>2010-12-07 17:19:16 -0800
committerTeng-Hui Zhu <ztenghui@google.com>2010-12-08 09:01:41 -0800
commit5513337a4c812a6ffaed07edcf654c8bf921ad89 (patch)
tree638a037fcaa5aba26abd75f8b78fa8889e8e34f0 /core
parent5e17a1a18c47d2e37e8b93582caa30d147924293 (diff)
downloadframeworks_base-5513337a4c812a6ffaed07edcf654c8bf921ad89.zip
frameworks_base-5513337a4c812a6ffaed07edcf654c8bf921ad89.tar.gz
frameworks_base-5513337a4c812a6ffaed07edcf654c8bf921ad89.tar.bz2
Webview listen to Scroll event to update the viewport
In the case of unchanged layout, like replying in email/gmail, scrolling should cause a viewport calculation update. Otherwise, the content will be skewed. Also, rename the mListener to mGlobalLayoutListener to avoid confusion with added listener. bug : 3143829 Change-Id: I7f5ee2e2cc9524e21cfffeef40b8650b6ee9a387
Diffstat (limited to 'core')
-rw-r--r--core/java/android/webkit/WebView.java37
1 files changed, 30 insertions, 7 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 050141f..c6cf918 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -322,8 +322,19 @@ public class WebView extends AbsoluteLayout
}
}
+ private class InnerScrollChangedListener implements ViewTreeObserver.OnScrollChangedListener {
+ public void onScrollChanged() {
+ if (isShown()) {
+ setGLRectViewport();
+ }
+ }
+ }
+
// The listener to capture global layout change event.
- private InnerGlobalLayoutListener mListener = null;
+ private InnerGlobalLayoutListener mGlobalLayoutListener = null;
+
+ // The listener to capture scroll event.
+ private InnerScrollChangedListener mScrollChangedListener = null;
// if AUTO_REDRAW_HACK is true, then the CALL key will toggle redrawing
// the screen all-the-time. Good for profiling our drawing code
@@ -4746,9 +4757,15 @@ public class WebView extends AbsoluteLayout
super.onAttachedToWindow();
if (hasWindowFocus()) setActive(true);
final ViewTreeObserver treeObserver = getViewTreeObserver();
- if (treeObserver != null && mListener == null) {
- mListener = new InnerGlobalLayoutListener();
- treeObserver.addOnGlobalLayoutListener(mListener);
+ if (treeObserver != null) {
+ if (mGlobalLayoutListener == null) {
+ mGlobalLayoutListener = new InnerGlobalLayoutListener();
+ treeObserver.addOnGlobalLayoutListener(mGlobalLayoutListener);
+ }
+ if (mScrollChangedListener == null) {
+ mScrollChangedListener = new InnerScrollChangedListener();
+ treeObserver.addOnScrollChangedListener(mScrollChangedListener);
+ }
}
}
@@ -4759,9 +4776,15 @@ public class WebView extends AbsoluteLayout
if (hasWindowFocus()) setActive(false);
final ViewTreeObserver treeObserver = getViewTreeObserver();
- if (treeObserver != null && mListener != null) {
- treeObserver.removeGlobalOnLayoutListener(mListener);
- mListener = null;
+ if (treeObserver != null) {
+ if (mGlobalLayoutListener != null) {
+ treeObserver.removeGlobalOnLayoutListener(mGlobalLayoutListener);
+ mGlobalLayoutListener = null;
+ }
+ if (mScrollChangedListener != null) {
+ treeObserver.removeOnScrollChangedListener(mScrollChangedListener);
+ mScrollChangedListener = null;
+ }
}
super.onDetachedFromWindow();