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
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user