diff options
| author | 2011-06-08 18:00:02 -0700 | |
|---|---|---|
| committer | 2011-06-08 18:00:02 -0700 | |
| commit | 60c84d67c5dc6e1895d49f1050fc6ea55cebef8a (patch) | |
| tree | 8a0863c20dba2024e76c01fdf773fc6aa150e1d1 | |
| parent | 3dd389cf4635b56131f857ebecce3e63af2be658 (diff) | |
Fix initial zoom with loadViewState
Change-Id: I06ee6a44c6e102ed84b44c68a83ab7db29d9f160
| -rw-r--r-- | core/java/android/webkit/WebView.java | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 4aad02256fc9..5eb93857f7ed 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -1818,9 +1818,9 @@ public class WebView extends AbsoluteLayout */ public boolean loadViewState(InputStream stream) { try { - DrawData draw = ViewStateSerializer.deserializeViewState(stream, this); + mLoadedPicture = ViewStateSerializer.deserializeViewState(stream, this); mBlockWebkitViewMessages = true; - setNewPicture(draw); + setNewPicture(mLoadedPicture, true); return true; } catch (IOException e) { Log.w(LOGTAG, "Failed to loadViewState", e); @@ -1835,6 +1835,7 @@ public class WebView extends AbsoluteLayout */ public void clearViewState() { mBlockWebkitViewMessages = false; + mLoadedPicture = null; invalidate(); } @@ -5531,6 +5532,13 @@ public class WebView extends AbsoluteLayout } mZoomManager.onSizeChanged(w, h, ow, oh); + + if (mLoadedPicture != null && mDelaySetPicture == null) { + // Size changes normally result in a new picture + // Re-set the loaded picture to simulate that + // However, do not update the base layer as that hasn't changed + setNewPicture(mLoadedPicture, false); + } } @Override @@ -6504,6 +6512,7 @@ public class WebView extends AbsoluteLayout private boolean mMapTrackballToArrowKeys = true; private DrawData mDelaySetPicture; + private DrawData mLoadedPicture; public void setMapTrackballToArrowKeys(boolean setMap) { checkThread(); @@ -8054,7 +8063,7 @@ public class WebView extends AbsoluteLayout case NEW_PICTURE_MSG_ID: { // called for new content final WebViewCore.DrawData draw = (WebViewCore.DrawData) msg.obj; - setNewPicture(draw); + setNewPicture(draw, true); break; } case WEBCORE_INITIALIZED_MSG_ID: @@ -8064,7 +8073,7 @@ public class WebView extends AbsoluteLayout AssetManager am = mContext.getAssets(); nativeCreate(msg.arg1, drawableDir, am); if (mDelaySetPicture != null) { - setNewPicture(mDelaySetPicture); + setNewPicture(mDelaySetPicture, true); mDelaySetPicture = null; } break; @@ -8377,11 +8386,11 @@ public class WebView extends AbsoluteLayout } } - void setNewPicture(final WebViewCore.DrawData draw) { + void setNewPicture(final WebViewCore.DrawData draw, boolean updateBaseLayer) { if (mNativeClass == 0) { if (mDelaySetPicture != null) { - throw new IllegalStateException( - "Tried to setNewPicture with a delay picture already set! (memory leak)"); + throw new IllegalStateException("Tried to setNewPicture with" + + " a delay picture already set! (memory leak)"); } // Not initialized yet, delay set mDelaySetPicture = draw; @@ -8389,9 +8398,11 @@ public class WebView extends AbsoluteLayout } WebViewCore.ViewState viewState = draw.mViewState; boolean isPictureAfterFirstLayout = viewState != null; - setBaseLayer(draw.mBaseLayer, draw.mInvalRegion, - getSettings().getShowVisualIndicator(), - isPictureAfterFirstLayout); + if (updateBaseLayer) { + setBaseLayer(draw.mBaseLayer, draw.mInvalRegion, + getSettings().getShowVisualIndicator(), + isPictureAfterFirstLayout); + } final Point viewSize = draw.mViewSize; if (isPictureAfterFirstLayout) { // Reset the last sent data here since dealing with new page. |