Port wallpaper chooser change from Launcher to Launcher2.

Change-Id: I8af4dd737ab0533ed0994d81440c06b54d7118d9
diff --git a/src/com/android/launcher2/WallpaperChooser.java b/src/com/android/launcher2/WallpaperChooser.java
index 8919ece..46f770f 100644
--- a/src/com/android/launcher2/WallpaperChooser.java
+++ b/src/com/android/launcher2/WallpaperChooser.java
@@ -23,6 +23,7 @@
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
+import android.os.AsyncTask;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -31,7 +32,6 @@
 import android.view.View.OnClickListener;
 import android.widget.AdapterView;
 import android.widget.BaseAdapter;
-import android.widget.Button;
 import android.widget.Gallery;
 import android.widget.ImageView;
 
@@ -50,6 +50,7 @@
 
     private ArrayList<Integer> mThumbs;
     private ArrayList<Integer> mImages;
+    private AsyncTask<Integer,Void,Bitmap> mLoader;
 
     @Override
     public void onCreate(Bundle icicle) {
@@ -60,17 +61,12 @@
 
         setContentView(R.layout.wallpaper_chooser);
 
-        mOptions = new BitmapFactory.Options();
-        mOptions.inDither = false;
-        mOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;
-
         mGallery = (Gallery) findViewById(R.id.gallery);
         mGallery.setAdapter(new ImageAdapter(this));
         mGallery.setOnItemSelectedListener(this);
         mGallery.setCallbackDuringFling(false);
 
-        Button b = (Button) findViewById(R.id.set);
-        b.setOnClickListener(this);
+        findViewById(R.id.set).setOnClickListener(this);
 
         mImageView = (ImageView) findViewById(R.id.wallpaper);
     }
@@ -109,19 +105,10 @@
     }
 
     public void onItemSelected(AdapterView parent, View v, int position, long id) {
-        final ImageView view = mImageView;
-        Bitmap b = BitmapFactory.decodeResource(getResources(), mImages.get(position), mOptions);
-        view.setImageBitmap(b);
-
-        // Help the GC
-        if (mBitmap != null) {
-            mBitmap.recycle();
+        if (mLoader != null && mLoader.getStatus() != WallpaperLoader.Status.FINISHED) {
+            mLoader.cancel(true);
         }
-        mBitmap = b;
-
-        final Drawable drawable = view.getDrawable();
-        drawable.setFilterBitmap(true);
-        drawable.setDither(true);
+        mLoader = new WallpaperLoader().execute(position);
     }
 
     /*
@@ -185,4 +172,34 @@
     public void onClick(View v) {
         selectWallpaper(mGallery.getSelectedItemPosition());
     }
+
+    class WallpaperLoader extends AsyncTask<Integer, Void, Bitmap> {
+        protected Bitmap doInBackground(Integer... params) {
+            if (isCancelled()) return null;
+            return BitmapFactory.decodeResource(getResources(), mImages.get(params[0]), null);
+        }
+
+        @Override
+        protected void onPostExecute(Bitmap b) {
+            if (b == null) return;
+
+            if (!isCancelled()) {
+                // Help the GC
+                if (mBitmap != null) {
+                    mBitmap.recycle();
+                }
+    
+                final ImageView view = mImageView;
+                view.setImageBitmap(b);
+    
+                mBitmap = b;
+    
+                final Drawable drawable = view.getDrawable();
+                drawable.setFilterBitmap(true);
+                drawable.setDither(true);
+
+                view.postInvalidate();
+            }
+        }
+    }
 }