auto import from //depot/cupcake/@135843
diff --git a/simulator/app/LoadableImage.cpp b/simulator/app/LoadableImage.cpp
new file mode 100644
index 0000000..e5bd0f3
--- /dev/null
+++ b/simulator/app/LoadableImage.cpp
@@ -0,0 +1,100 @@
+//
+// Copyright 2005 The Android Open Source Project
+//
+// Simple class to hold an image that can be loaded and unloaded.
+//
+
+// For compilers that support precompilation, include "wx/wx.h".
+#include "wx/wxprec.h"
+
+// Otherwise, include all standard headers
+#ifndef WX_PRECOMP
+# include "wx/wx.h"
+#endif
+#include "wx/image.h"   // needed for Windows build
+
+#include "LoadableImage.h"
+#include "AssetStream.h"
+#include "MyApp.h"
+
+#include <utils.h>
+
+#include <stdio.h>
+
+
+/*
+ * Load the image.
+ */
+bool LoadableImage::Create(const char* fileName, int x, int y)
+{
+    if (fileName == NULL || x < 0 || y < 0) {
+        fprintf(stderr, "bad params to %s\n", __PRETTY_FUNCTION__);
+        return false;
+    }
+
+    delete[] mName;
+    mName = android::strdupNew(fileName);
+
+    mX = x;
+    mY = y;
+
+    return true;
+}
+
+/*
+ * Load the bitmap.
+ */
+bool LoadableImage::LoadResources(void)
+{
+    if (mName == NULL)
+        return false;
+
+    if (mpBitmap != NULL)       // already loaded?
+        return true;
+
+    //printf("LoadResources: '%s'\n", (const char*) mName);
+#ifdef BEFORE_ASSET
+    wxImage img(mName);
+#else
+    android::AssetManager* pAssetMgr = ((MyApp*)wxTheApp)->GetAssetManager();
+    android::Asset* pAsset;
+
+    pAsset = pAssetMgr->open(mName, android::Asset::ACCESS_RANDOM);
+    if (pAsset == NULL) {
+        fprintf(stderr, "ERROR: unable to load '%s'\n", mName);
+        return false;
+    } else {
+        //printf("--- opened asset '%s'\n",
+        //    (const char*) pAsset->getAssetSource());
+    }
+    AssetStream astr(pAsset);
+
+    wxImage img(astr);
+#endif
+
+    mWidth = img.GetWidth();
+    mHeight = img.GetHeight();
+    if (mWidth <= 0 || mHeight <= 0) {
+        /* image failed to load or decode */
+        fprintf(stderr, "ERROR: unable to load/decode '%s'\n", mName);
+        //delete img;
+        return false;
+    }
+
+    mpBitmap = new wxBitmap(img);
+
+    //delete img;
+
+    return true;
+}
+
+/*
+ * Unload the bitmap.
+ */
+bool LoadableImage::UnloadResources(void)
+{
+    delete mpBitmap;
+    mpBitmap = NULL;
+    return true;
+}
+