Use ids rather than Meshes when specifying default / loading geometries.

This allows them to be reloaded when required, thus fixing
http:/b/3237395

Change-Id: I9eea73d85a8c272debbfb45d5577ded185cf8112
diff --git a/carousel/java/com/android/ex/carousel/CarouselController.java b/carousel/java/com/android/ex/carousel/CarouselController.java
index d432e28..40853d5 100644
--- a/carousel/java/com/android/ex/carousel/CarouselController.java
+++ b/carousel/java/com/android/ex/carousel/CarouselController.java
@@ -59,8 +59,8 @@
     private Bitmap mBackgroundBitmap;
     private Bitmap mDefaultLineBitmap = Bitmap.createBitmap(
             new int[] {0x00000000, 0xffffffff, 0x00000000}, 0, 3, 3, 1, Bitmap.Config.ARGB_4444);
-    private Mesh mDefaultGeometry;
-    private Mesh mLoadingGeometry;
+    private int mDefaultGeometry;
+    private int mLoadingGeometry;
     private float[] mDefaultCardMatrix;
     private int mCardCount = 0;
     private int mVisibleSlots = 0;
@@ -144,13 +144,11 @@
      * @param resId
      * @return the loaded mesh or null if it cannot be loaded
      */
-    public Mesh loadGeometry(Resources res, int resId) {
-        FileA3D model = FileA3D.createFromResource(mRS, res, resId);
-        FileA3D.IndexEntry entry = model.getIndexEntry(0);
-        if(entry == null || entry.getClassID() != FileA3D.ClassID.MESH) {
-            return null;
+    public Mesh loadGeometry(int resId) {
+        if (mRenderScript != null) {
+          return mRenderScript.loadGeometry(resId);
         }
-        return (Mesh) entry.getObject();
+        return null;
     }
 
     /**
@@ -477,9 +475,10 @@
      *
      * @param mesh
      */
-    public void setDefaultGeometry(Mesh mesh) {
-        mDefaultGeometry = mesh;
+    public void setDefaultGeometry(int resId) {
+        mDefaultGeometry = resId;
         if (mRenderScript != null) {
+            Mesh mesh = mRenderScript.loadGeometry(resId);
             mRenderScript.setDefaultGeometry(mesh);
         }
     }
@@ -505,11 +504,12 @@
      * simple planar geometry is used, consider enabling depth test with
      * {@link CarouselView#setForceBlendCardsWithZ(boolean)}
      *
-     * @param mesh
+     * @param resId
      */
-    public void setLoadingGeometry(Mesh mesh) {
-        mLoadingGeometry = mesh;
+    public void setLoadingGeometry(int resId) {
+        mLoadingGeometry = resId;
         if (mRenderScript != null) {
+            Mesh mesh = mRenderScript.loadGeometry(resId);
             mRenderScript.setLoadingGeometry(mesh);
         }
     }
diff --git a/carousel/java/com/android/ex/carousel/CarouselRS.java b/carousel/java/com/android/ex/carousel/CarouselRS.java
index 1e9175c..a5e53d2 100644
--- a/carousel/java/com/android/ex/carousel/CarouselRS.java
+++ b/carousel/java/com/android/ex/carousel/CarouselRS.java
@@ -752,4 +752,19 @@
             throw new IllegalArgumentException("Unknown configuration");
         }
     }
+
+    public Mesh loadGeometry(int resId) {
+        if (resId == 0) {
+          return null;
+        }
+        FileA3D model = FileA3D.createFromResource(mRS, mRes, resId);
+        if (model == null) {
+          return null;
+        }
+        FileA3D.IndexEntry entry = model.getIndexEntry(0);
+        if(entry == null || entry.getClassID() != FileA3D.ClassID.MESH) {
+            return null;
+        }
+        return (Mesh) entry.getObject();
+    }
 }
diff --git a/carousel/java/com/android/ex/carousel/CarouselView.java b/carousel/java/com/android/ex/carousel/CarouselView.java
index cd1a919..471e827 100644
--- a/carousel/java/com/android/ex/carousel/CarouselView.java
+++ b/carousel/java/com/android/ex/carousel/CarouselView.java
@@ -188,13 +188,13 @@
      * @return the loaded mesh or null if it cannot be loaded
      */
     public Mesh loadGeometry(int resId) {
-        return mController.loadGeometry(mContext.getResources(), resId);
+        return mController.loadGeometry(resId);
     }
 
     /**
-     * Load A3D file from resource.  If resId == 0, will clear geometry for this item.
+     * Set the geometry for a given item.
      * @param n
-     * @param resId
+     * @param mesh
      */
     public void setGeometryForItem(int n, Mesh mesh) {
         mController.setGeometryForItem(n, mesh);
@@ -408,10 +408,10 @@
      * simple planar geometry is used, consider enabling depth test with
      * {@link CarouselView#setForceBlendCardsWithZ(boolean)}
      *
-     * @param mesh
+     * @param resId
      */
-    public void setDefaultGeometry(Mesh mesh) {
-        mController.setDefaultGeometry(mesh);
+    public void setDefaultGeometry(int resId) {
+        mController.setDefaultGeometry(resId);
     }
 
     /**
@@ -432,10 +432,10 @@
      * simple planar geometry is used, consider enabling depth test with
      * {@link CarouselView#setForceBlendCardsWithZ(boolean)}
      *
-     * @param mesh
+     * @param resId
      */
-    public void setLoadingGeometry(Mesh mesh) {
-        mController.setLoadingGeometry(mesh);
+    public void setLoadingGeometry(int resId) {
+        mController.setLoadingGeometry(resId);
     }
 
     /**