diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 51f34289d1fe7..c128efc8cd7b3 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -80,7 +80,6 @@ import java.io.FileOutputStream; import java.io.IOException; import java.net.URLDecoder; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; /** @@ -207,6 +206,11 @@ public class WebView extends AbsoluteLayout static final String LOGTAG = "webview"; + static class ScaleLimitData { + int mMinScale; + int mMaxScale; + } + private static class ExtendedZoomControls extends FrameLayout { public ExtendedZoomControls(Context context, AttributeSet attrs) { super(context, attrs); @@ -1190,9 +1194,9 @@ public class WebView extends AbsoluteLayout public void postUrl(String url, byte[] postData) { if (URLUtil.isNetworkUrl(url)) { switchOutDrawHistory(); - HashMap arg = new HashMap(); - arg.put("url", url); - arg.put("data", postData); + WebViewCore.PostUrlData arg = new WebViewCore.PostUrlData(); + arg.mUrl = url; + arg.mPostData = postData; mWebViewCore.sendMessage(EventHub.POST_URL, arg); clearTextEntry(); } else { @@ -1243,12 +1247,12 @@ public class WebView extends AbsoluteLayout return; } switchOutDrawHistory(); - HashMap arg = new HashMap(); - arg.put("baseUrl", baseUrl); - arg.put("data", data); - arg.put("mimeType", mimeType); - arg.put("encoding", encoding); - arg.put("failUrl", failUrl); + WebViewCore.BaseUrlData arg = new WebViewCore.BaseUrlData(); + arg.mBaseUrl = baseUrl; + arg.mData = data; + arg.mMimeType = mimeType; + arg.mEncoding = encoding; + arg.mFailUrl = failUrl; mWebViewCore.sendMessage(EventHub.LOAD_DATA, arg); clearTextEntry(); } @@ -2316,10 +2320,9 @@ public class WebView extends AbsoluteLayout * @param interfaceName The name to used to expose the class in Javascript */ public void addJavascriptInterface(Object obj, String interfaceName) { - // Use Hashmap rather than Bundle as Bundles can't cope with Objects - HashMap arg = new HashMap(); - arg.put("object", obj); - arg.put("interfaceName", interfaceName); + WebViewCore.JSInterfaceData arg = new WebViewCore.JSInterfaceData(); + arg.mObject = obj; + arg.mInterfaceName = interfaceName; mWebViewCore.sendMessage(EventHub.ADD_JS_INTERFACE, arg); } @@ -3013,10 +3016,8 @@ public class WebView extends AbsoluteLayout String name = nativeFocusCandidateName(); if (mWebViewCore.getSettings().getSaveFormData() && name != null) { - HashMap data = new HashMap(); - data.put("text", text); Message update = mPrivateHandler.obtainMessage( - REQUEST_FORM_DATA, nodePointer, 0, data); + REQUEST_FORM_DATA, nodePointer); RequestFormData updater = new RequestFormData(name, getUrl(), update); Thread t = new Thread(updater); @@ -3073,7 +3074,7 @@ public class WebView extends AbsoluteLayout if (pastEntries.size() > 0) { AutoCompleteAdapter adapter = new AutoCompleteAdapter(mContext, pastEntries); - ((HashMap) mUpdateMessage.obj).put("adapter", adapter); + mUpdateMessage.obj = adapter; mUpdateMessage.sendToTarget(); } } @@ -4516,10 +4517,10 @@ public class WebView extends AbsoluteLayout /* package */ void replaceTextfieldText(int oldStart, int oldEnd, String replace, int newStart, int newEnd) { - HashMap arg = new HashMap(); - arg.put("replace", replace); - arg.put("start", Integer.valueOf(newStart)); - arg.put("end", Integer.valueOf(newEnd)); + WebViewCore.ReplaceTextData arg = new WebViewCore.ReplaceTextData(); + arg.mReplace = replace; + arg.mNewStart = newStart; + arg.mNewEnd = newEnd; mTextGeneration++; mWebViewCore.sendMessage(EventHub.REPLACE_TEXT, oldStart, oldEnd, arg); } @@ -4528,9 +4529,9 @@ public class WebView extends AbsoluteLayout if (nativeCursorWantsKeyEvents() && !nativeCursorMatchesFocus()) { mWebViewCore.sendMessage(EventHub.CLICK); } - HashMap arg = new HashMap(); - arg.put("event", event); - arg.put("currentText", currentText); + WebViewCore.JSKeyData arg = new WebViewCore.JSKeyData(); + arg.mEvent = event; + arg.mCurrentText = currentText; // Increase our text generation number, and pass it to webcore thread mTextGeneration++; mWebViewCore.sendMessage(EventHub.PASS_TO_JS, mTextGeneration, 0, arg); @@ -4699,8 +4700,8 @@ public class WebView extends AbsoluteLayout if (mNativeClass == 0) { break; } - HashMap scaleLimit = (HashMap) msg.obj; - int minScale = (Integer) scaleLimit.get("minScale"); + ScaleLimitData scaleLimit = (ScaleLimitData) msg.obj; + int minScale = scaleLimit.mMinScale; if (minScale == 0) { mMinZoomScale = DEFAULT_MIN_ZOOM_SCALE; mMinZoomScaleFixed = false; @@ -4708,7 +4709,7 @@ public class WebView extends AbsoluteLayout mMinZoomScale = (float) (minScale / 100.0); mMinZoomScaleFixed = true; } - int maxScale = (Integer) scaleLimit.get("maxScale"); + int maxScale = scaleLimit.mMaxScale; if (maxScale == 0) { mMaxZoomScale = DEFAULT_MAX_ZOOM_SCALE; } else { @@ -4767,10 +4768,8 @@ public class WebView extends AbsoluteLayout break; } case REQUEST_FORM_DATA: - HashMap data = (HashMap) msg.obj; + AutoCompleteAdapter adapter = (AutoCompleteAdapter) msg.obj; if (mWebTextView.isSameTextField(msg.arg1)) { - AutoCompleteAdapter adapter = - (AutoCompleteAdapter) data.get("adapter"); mWebTextView.setAdapterCustom(adapter); } break; diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index 066729cad35de..d16057986197d 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -34,7 +34,6 @@ import android.util.SparseBooleanArray; import android.view.KeyEvent; import java.util.ArrayList; -import java.util.HashMap; import junit.framework.Assert; @@ -513,6 +512,14 @@ final class WebViewCore { } } + static class BaseUrlData { + String mBaseUrl; + String mData; + String mMimeType; + String mEncoding; + String mFailUrl; + } + static class CursorData { CursorData() {} CursorData(int frame, int node, int x, int y) { @@ -529,6 +536,27 @@ final class WebViewCore { boolean mIgnoreNullFocus; } + static class JSInterfaceData { + Object mObject; + String mInterfaceName; + } + + static class JSKeyData { + String mCurrentText; + KeyEvent mEvent; + } + + static class PostUrlData { + String mUrl; + byte[] mPostData; + } + + static class ReplaceTextData { + String mReplace; + int mNewStart; + int mNewEnd; + } + static class TouchUpData { int mMoveGeneration; int mFrame; @@ -717,15 +745,13 @@ final class WebViewCore { break; case POST_URL: { - HashMap param = (HashMap) msg.obj; - String url = (String) param.get("url"); - byte[] data = (byte[]) param.get("data"); - mBrowserFrame.postUrl(url, data); + PostUrlData param = (PostUrlData) msg.obj; + mBrowserFrame.postUrl(param.mUrl, param.mPostData); break; } case LOAD_DATA: - HashMap loadParams = (HashMap) msg.obj; - String baseUrl = (String) loadParams.get("baseUrl"); + BaseUrlData loadParams = (BaseUrlData) msg.obj; + String baseUrl = loadParams.mBaseUrl; if (baseUrl != null) { int i = baseUrl.indexOf(':'); if (i > 0) { @@ -749,10 +775,10 @@ final class WebViewCore { } } mBrowserFrame.loadData(baseUrl, - (String) loadParams.get("data"), - (String) loadParams.get("mimeType"), - (String) loadParams.get("encoding"), - (String) loadParams.get("failUrl")); + loadParams.mData, + loadParams.mMimeType, + loadParams.mEncoding, + loadParams.mFailUrl); break; case STOP_LOADING: @@ -874,24 +900,19 @@ final class WebViewCore { break; case REPLACE_TEXT: - HashMap jMap = (HashMap) msg.obj; - String replace = (String) jMap.get("replace"); - int newStart = - ((Integer) jMap.get("start")).intValue(); - int newEnd = - ((Integer) jMap.get("end")).intValue(); - nativeReplaceTextfieldText(msg.arg1, - msg.arg2, replace, newStart, newEnd); + ReplaceTextData rep = (ReplaceTextData) msg.obj; + nativeReplaceTextfieldText(msg.arg1, msg.arg2, + rep.mReplace, rep.mNewStart, rep.mNewEnd); break; case PASS_TO_JS: { - HashMap jsMap = (HashMap) msg.obj; - KeyEvent evt = (KeyEvent) jsMap.get("event"); + JSKeyData jsData = (JSKeyData) msg.obj; + KeyEvent evt = jsData.mEvent; int keyCode = evt.getKeyCode(); int keyValue = evt.getUnicodeChar(); int generation = msg.arg1; passToJs(generation, - (String) jsMap.get("currentText"), + jsData.mCurrentText, keyCode, keyValue, evt.isDown(), @@ -934,12 +955,9 @@ final class WebViewCore { break; case ADD_JS_INTERFACE: - HashMap map = (HashMap) msg.obj; - Object obj = map.get("object"); - String interfaceName = (String) - map.get("interfaceName"); - mBrowserFrame.addJavascriptInterface(obj, - interfaceName); + JSInterfaceData jsData = (JSInterfaceData) msg.obj; + mBrowserFrame.addJavascriptInterface(jsData.mObject, + jsData.mInterfaceName); break; case REQUEST_EXT_REPRESENTATION: @@ -1639,9 +1657,9 @@ final class WebViewCore { // now notify webview if (mWebView != null) { - HashMap scaleLimit = new HashMap(); - scaleLimit.put("minScale", mViewportMinimumScale); - scaleLimit.put("maxScale", mViewportMaximumScale); + WebView.ScaleLimitData scaleLimit = new WebView.ScaleLimitData(); + scaleLimit.mMinScale = mViewportMinimumScale; + scaleLimit.mMaxScale = mViewportMaximumScale; if (mRestoredScale > 0) { Message.obtain(mWebView.mPrivateHandler,