diff options
author | Teng-Hui Zhu <ztenghui@google.com> | 2010-12-07 17:19:16 -0800 |
---|---|---|
committer | Teng-Hui Zhu <ztenghui@google.com> | 2010-12-08 09:01:41 -0800 |
commit | 5513337a4c812a6ffaed07edcf654c8bf921ad89 (patch) | |
tree | 638a037fcaa5aba26abd75f8b78fa8889e8e34f0 /core | |
parent | 5e17a1a18c47d2e37e8b93582caa30d147924293 (diff) | |
download | frameworks_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.java | 37 |
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(); |