am 34d723d8: Merge change I32371166 into eclair

Merge commit '34d723d8fa75e8f97401311e03b3839246143018' into eclair-plus-aosp

* commit '34d723d8fa75e8f97401311e03b3839246143018':
  Fix issue #2239203: Setting large background causes OOME and soft-reboot spiral
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index e98b286..f606346 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -195,7 +195,12 @@
                 if (mDefaultWallpaper != null) {
                     return mDefaultWallpaper;
                 }
-                mWallpaper = getCurrentWallpaperLocked(context);
+                mWallpaper = null;
+                try {
+                    mWallpaper = getCurrentWallpaperLocked(context);
+                } catch (OutOfMemoryError e) {
+                    Log.w(TAG, "No memory load current wallpaper", e);
+                }
                 if (mWallpaper == null && returnDefault) {
                     mDefaultWallpaper = getDefaultWallpaperLocked(context);
                     return mDefaultWallpaper;
@@ -279,7 +284,12 @@
                     } catch (IOException e) {
                     }
                     
-                    return generateBitmap(context, bm, width, height);
+                    try {
+                        return generateBitmap(context, bm, width, height);
+                    } catch (OutOfMemoryError e) {
+                        Log.w(TAG, "Can't generate default bitmap", e);
+                        return bm;
+                    }
                 }
             } catch (RemoteException e) {
             }
diff --git a/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java b/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java
index c09ecfb..251ecbc 100644
--- a/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java
+++ b/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java
@@ -24,6 +24,7 @@
 import android.os.HandlerThread;
 import android.os.Process;
 import android.service.wallpaper.WallpaperService;
+import android.util.Log;
 import android.view.MotionEvent;
 import android.view.SurfaceHolder;
 import android.content.Context;
@@ -134,8 +135,8 @@
                     final Drawable background = mBackground;
                     final int dw = frame.width();
                     final int dh = frame.height();
-                    final int bw = mBackground.getIntrinsicWidth();
-                    final int bh = mBackground.getIntrinsicHeight();
+                    final int bw = background != null ? background.getIntrinsicWidth() : 0;
+                    final int bh = background != null ? background.getIntrinsicHeight() : 0;
                     final int availw = dw-bw;
                     final int availh = dh-bh;
                     int xPixels = availw < 0 ? (int)(availw*mXOffset+.5f) : (availw/2);
@@ -148,7 +149,9 @@
                         c.drawColor(0xff000000);
                         c.restore();
                     }
-                    background.draw(c);
+                    if (background != null) {
+                        background.draw(c);
+                    }
                 }
                 sh.unlockCanvasAndPost(c);
             }
@@ -156,7 +159,11 @@
 
         void updateWallpaper() {
             synchronized (mLock) {
-                mBackground = mWallpaperManager.getFastDrawable();
+                try {
+                    mBackground = mWallpaperManager.getFastDrawable();
+                } catch (RuntimeException e) {
+                    Log.w("ImageWallpaper", "Unable to load wallpaper!", e);
+                }
             }
         }
     }