Also provide the name of the wallpaper that's being backed up.
diff --git a/src/com/android/launcher/WallpaperChooser.java b/src/com/android/launcher/WallpaperChooser.java
index c88a02a..70396d0 100644
--- a/src/com/android/launcher/WallpaperChooser.java
+++ b/src/com/android/launcher/WallpaperChooser.java
@@ -17,7 +17,15 @@
 package com.android.launcher;
 
 import android.app.Activity;
+import android.app.IWallpaperService;
+import android.content.res.Resources;
+import android.graphics.BitmapFactory;
+import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
+import android.os.ParcelFileDescriptor;
+import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -29,13 +37,10 @@
 import android.widget.Button;
 import android.widget.Gallery;
 import android.widget.ImageView;
-import android.graphics.BitmapFactory;
-import android.graphics.Bitmap;
-import android.graphics.drawable.Drawable;
-import android.content.res.Resources;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.FileOutputStream;
 import java.util.ArrayList;
 import java.util.Collections;
 
@@ -85,6 +90,7 @@
 
     private ArrayList<Integer> mThumbs;
     private ArrayList<Integer> mImages;
+    private ArrayList<String> mNames;
 
     @Override
     public void onCreate(Bundle icicle) {
@@ -118,6 +124,12 @@
         Collections.addAll(mImages, IMAGE_IDS);
 
         final Resources resources = getResources();
+
+        mNames = new ArrayList<String>(IMAGE_IDS.length + 4);
+        for (int res: mImages) {
+            mNames.add("res:" + resources.getResourceName(res));
+        }
+
         final String[] extras = resources.getStringArray(R.array.extra_wallpapers);
         final String packageName = getApplication().getPackageName();
 
@@ -130,6 +142,7 @@
                 if (thumbRes != 0) {
                     mThumbs.add(thumbRes);
                     mImages.add(res);
+                    mNames.add("res:" + extra);
                 }
             }
         }
@@ -170,7 +183,7 @@
         mIsWallpaperSet = true;
         try {
             InputStream stream = getResources().openRawResource(mImages.get(position));
-            setWallpaper(stream);
+            setWallpaper(stream, mNames.get(position));
             setResult(RESULT_OK);
             finish();
         } catch (IOException e) {
@@ -218,4 +231,34 @@
     public void onClick(View v) {
         selectWallpaper(mGallery.getSelectedItemPosition());
     }
+
+    private void setWallpaper(InputStream data, String name) throws IOException {
+        try {
+            IWallpaperService svc = IWallpaperService.Stub.asInterface(
+                    ServiceManager.getService(WALLPAPER_SERVICE));
+            ParcelFileDescriptor fd = svc.setWallpaper(name);
+            if (fd == null) {
+                return;
+            }
+            FileOutputStream fos = null;
+            try {
+                fos = new ParcelFileDescriptor.AutoCloseOutputStream(fd);
+                setWallpaper(data, fos);
+            } finally {
+                if (fos != null) {
+                    fos.close();
+                }
+            }
+        } catch (RemoteException e) {
+        }
+    }
+
+    private void setWallpaper(InputStream data, FileOutputStream fos)
+            throws IOException {
+        byte[] buffer = new byte[32768];
+        int amt;
+        while ((amt=data.read(buffer)) > 0) {
+            fos.write(buffer, 0, amt);
+        }
+    }
 }