* Use cached resources for widgets
diff --git a/core/java/android/app/ApplicationContext.java b/core/java/android/app/ApplicationContext.java
index 38ea686..afb2fe9 100644
--- a/core/java/android/app/ApplicationContext.java
+++ b/core/java/android/app/ApplicationContext.java
@@ -1341,21 +1341,8 @@
         if (pi != null) {
             ApplicationContext c = new ApplicationContext();
             c.mRestricted = (flags & CONTEXT_RESTRICTED) == CONTEXT_RESTRICTED;
-            c.init(pi, null, mMainThread);
+            c.init(pi, null, mMainThread, mResources);
             if (c.mResources != null) {
-                Resources newRes = c.mResources;
-                if (mResources.getCompatibilityInfo().applicationScale !=
-                    newRes.getCompatibilityInfo().applicationScale) {
-                    DisplayMetrics dm = mMainThread.getDisplayMetricsLocked(false);
-                    c.mResources = new Resources(newRes.getAssets(), dm,
-                            newRes.getConfiguration(),
-                            mResources.getCompatibilityInfo().copy());
-                    if (DEBUG) {
-                        Log.d(TAG, "loaded context has different scaling. Using container's" +
-                                " compatiblity info:" + mResources.getDisplayMetrics());
-                    }
-
-                }
                 return c;
             }
         }
@@ -1417,8 +1404,24 @@
 
     final void init(ActivityThread.PackageInfo packageInfo,
             IBinder activityToken, ActivityThread mainThread) {
+        init(packageInfo, activityToken, mainThread, null);
+    }
+
+    final void init(ActivityThread.PackageInfo packageInfo,
+                IBinder activityToken, ActivityThread mainThread,
+                Resources container) {
         mPackageInfo = packageInfo;
         mResources = mPackageInfo.getResources(mainThread);
+
+        if (container != null && container.getCompatibilityInfo().applicationScale !=
+            mResources.getCompatibilityInfo().applicationScale) {
+            if (DEBUG) {
+                Log.d(TAG, "loaded context has different scaling. Using container's" +
+                        " compatiblity info:" + container.getDisplayMetrics());
+            }
+            mResources = mainThread.getTopLevelResources(
+                    mPackageInfo.getResDir(), container.getCompatibilityInfo().copy());
+        }
         mMainThread = mainThread;
         mContentResolver = new ApplicationContentResolver(this, mainThread);