diff --git a/core/java/android/webkit/L10nUtils.java b/core/java/android/webkit/L10nUtils.java index 43a747ad66420..f59d7d0d6a082 100644 --- a/core/java/android/webkit/L10nUtils.java +++ b/core/java/android/webkit/L10nUtils.java @@ -18,8 +18,9 @@ package android.webkit; import android.content.Context; -import java.util.List; -import java.util.Vector; +import java.lang.ref.SoftReference; +import java.util.Map; +import java.util.HashMap; /** * @hide @@ -71,20 +72,32 @@ public class L10nUtils { com.android.internal.R.string.autofill_card_ignored_re // IDS_AUTOFILL_CARD_IGNORED_RE }; - private static List mStrings; + private static Context mApplicationContext; + private static Map > mStrings; - public static void loadStrings(Context context) { - if (mStrings != null) { - return; + public static void setApplicationContext(Context applicationContext) { + mApplicationContext = applicationContext.getApplicationContext(); + } + + private static String loadString(int id) { + if (mStrings == null) { + mStrings = new HashMap >(mIdsArray.length); } - mStrings = new Vector(mIdsArray.length); - for (int i = 0; i < mIdsArray.length; i++) { - mStrings.add(context.getResources().getString(mIdsArray[i])); - } + String localisedString = mApplicationContext.getResources().getString(mIdsArray[id]); + mStrings.put(id, new SoftReference(localisedString)); + return localisedString; } public static String getLocalisedString(int id) { - return mStrings.get(id); + if (mStrings == null) { + // This is the first time we need a localised string. + // loadString will create the Map. + return loadString(id); + } + + SoftReference ref = mStrings.get(id); + boolean needToLoad = ref == null || ref.get() == null; + return needToLoad ? loadString(id) : ref.get(); } } diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 98fc29022a93c..9be911c2302d5 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -987,7 +987,7 @@ public class WebView extends AbsoluteLayout mCallbackProxy = new CallbackProxy(context, this); mViewManager = new ViewManager(this); - L10nUtils.loadStrings(context); + L10nUtils.setApplicationContext(context.getApplicationContext()); mWebViewCore = new WebViewCore(context, this, mCallbackProxy, javaScriptInterfaces); mDatabase = WebViewDatabase.getInstance(context); mScroller = new OverScroller(context, null, 0, 0, false); //TODO Use OverScroller's flywheel