API review cleanup.

Change-Id: Ieae7d450308b5637ed4253fe9baed3634c6ed141
diff --git a/graphics/java/android/renderscript/Allocation.java b/graphics/java/android/renderscript/Allocation.java
index bad1208..074e423 100644
--- a/graphics/java/android/renderscript/Allocation.java
+++ b/graphics/java/android/renderscript/Allocation.java
@@ -84,24 +84,38 @@
         mRS.nAllocationUploadToBufferObject(getID());
     }
 
-    public void data(int[] d) {
+
+    public void copyFrom(BaseObj[] d) {
         mRS.validate();
-        subData1D(0, mType.getElementCount(), d);
-    }
-    public void data(short[] d) {
-        mRS.validate();
-        subData1D(0, mType.getElementCount(), d);
-    }
-    public void data(byte[] d) {
-        mRS.validate();
-        subData1D(0, mType.getElementCount(), d);
-    }
-    public void data(float[] d) {
-        mRS.validate();
-        subData1D(0, mType.getElementCount(), d);
+        if (d.length != mType.getCount()) {
+            throw new RSIllegalArgumentException("Array size mismatch, allocation sizeX = " +
+                                                 mType.getCount() + ", array length = " + d.length);
+        }
+        int i[] = new int[d.length];
+        for (int ct=0; ct < d.length; ct++) {
+            i[ct] = d[ct].getID();
+        }
+        subData1D(0, mType.getCount(), i);
     }
 
-    public void updateFromBitmap(Bitmap b) {
+    public void copyFrom(int[] d) {
+        mRS.validate();
+        subData1D(0, mType.getCount(), d);
+    }
+    public void copyFrom(short[] d) {
+        mRS.validate();
+        subData1D(0, mType.getCount(), d);
+    }
+    public void copyFrom(byte[] d) {
+        mRS.validate();
+        subData1D(0, mType.getCount(), d);
+    }
+    public void copyFrom(float[] d) {
+        mRS.validate();
+        subData1D(0, mType.getCount(), d);
+    }
+
+    public void copyFrom(Bitmap b) {
 
         mRS.validate();
         if(mType.getX() != b.getWidth() ||
@@ -153,8 +167,8 @@
         if(count < 1) {
             throw new RSIllegalArgumentException("Count must be >= 1.");
         }
-        if((off + count) > mType.getElementCount()) {
-            throw new RSIllegalArgumentException("Overflow, Available count " + mType.getElementCount() +
+        if((off + count) > mType.getCount()) {
+            throw new RSIllegalArgumentException("Overflow, Available count " + mType.getCount() +
                                                ", got " + count + " at offset " + off + ".");
         }
         if((len) < dataSize) {
@@ -205,7 +219,7 @@
     }
 
     public synchronized void resize(int dimX) {
-        if ((mType.getY() > 0)|| (mType.getZ() > 0) || mType.getFaces() || mType.getLOD()) {
+        if ((mType.getY() > 0)|| (mType.getZ() > 0) || mType.hasFaces() || mType.hasMipmaps()) {
             throw new RSInvalidStateException("Resize only support for 1D allocations at this time.");
         }
         mRS.nAllocationResize1D(getID(), dimX);
@@ -340,7 +354,7 @@
 
         rs.validate();
         Type.Builder b = new Type.Builder(rs, e);
-        b.add(Dimension.X, count);
+        b.setX(count);
         Type t = b.create();
 
         int id = rs.nAllocationCreateTyped(t.getID());
@@ -370,11 +384,9 @@
     static private Type typeFromBitmap(RenderScript rs, Bitmap b, boolean mip) {
         Element e = elementFromBitmap(rs, b);
         Type.Builder tb = new Type.Builder(rs, e);
-        tb.add(Dimension.X, b.getWidth());
-        tb.add(Dimension.Y, b.getHeight());
-        if (mip) {
-            tb.add(Dimension.LOD, 1);
-        }
+        tb.setX(b.getWidth());
+        tb.setY(b.getHeight());
+        tb.setMipmaps(mip);
         return tb.create();
     }
 
@@ -414,12 +426,10 @@
 
         Element e = elementFromBitmap(rs, b);
         Type.Builder tb = new Type.Builder(rs, e);
-        tb.add(Dimension.X, width);
-        tb.add(Dimension.Y, width);
-        tb.add(Dimension.FACE, 1);
-        if (genMips) {
-            tb.add(Dimension.LOD, 1);
-        }
+        tb.setX(width);
+        tb.setY(width);
+        tb.setFaces(true);
+        tb.setMipmaps(genMips);
         Type t = tb.create();
 
         int id = rs.nAllocationCubeCreateFromBitmap(dstFmt.getID(), genMips, b);
@@ -477,7 +487,7 @@
         try {
             allocArray = str.getBytes("UTF-8");
             Allocation alloc = Allocation.createSized(rs, Element.U8(rs), allocArray.length);
-            alloc.data(allocArray);
+            alloc.copyFrom(allocArray);
             return alloc;
         }
         catch (Exception e) {
diff --git a/graphics/java/android/renderscript/BaseObj.java b/graphics/java/android/renderscript/BaseObj.java
index 78b5617..c02435f 100644
--- a/graphics/java/android/renderscript/BaseObj.java
+++ b/graphics/java/android/renderscript/BaseObj.java
@@ -48,13 +48,19 @@
      *
      * @return int
      */
-    public int getID() {
+    int getID() {
         if (mDestroyed) {
             throw new RSInvalidStateException("using a destroyed object.");
         }
         return mID;
     }
 
+    void checkValid() {
+        if (mID == 0) {
+            throw new RSIllegalArgumentException("Invalid object.");
+        }
+    }
+
     private int mID;
     private boolean mDestroyed;
     private String mName;
diff --git a/graphics/java/android/renderscript/Element.java b/graphics/java/android/renderscript/Element.java
index 4b007f2..7e89a56 100644
--- a/graphics/java/android/renderscript/Element.java
+++ b/graphics/java/android/renderscript/Element.java
@@ -477,10 +477,6 @@
 
     }
 
-    public void destroy() {
-        super.destroy();
-    }
-
     /**
      * Create a custom Element of the specified DataType.  The DataKind will be
      * set to USER and the vector size to 1 indicating non-vector.
@@ -489,7 +485,7 @@
      * @param dt The DataType for the new element.
      * @return Element
      */
-    public static Element createUser(RenderScript rs, DataType dt) {
+    static Element createUser(RenderScript rs, DataType dt) {
         DataKind dk = DataKind.USER;
         boolean norm = false;
         int vecSize = 1;
@@ -510,7 +506,7 @@
      */
     public static Element createVector(RenderScript rs, DataType dt, int size) {
         if (size < 2 || size > 4) {
-            throw new RSIllegalArgumentException("Vector size out of rance 2-4.");
+            throw new RSIllegalArgumentException("Vector size out of range 2-4.");
         }
         DataKind dk = DataKind.USER;
         boolean norm = false;
@@ -603,7 +599,7 @@
          * @param name
          * @param arraySize
          */
-        public void add(Element element, String name, int arraySize) {
+        public Builder add(Element element, String name, int arraySize) {
             if (arraySize < 1) {
                 throw new RSIllegalArgumentException("Array size cannot be less than 1.");
             }
@@ -622,6 +618,7 @@
             mElementNames[mCount] = name;
             mArraySizes[mCount] = arraySize;
             mCount++;
+            return this;
         }
 
         /**
@@ -630,8 +627,8 @@
          * @param element
          * @param name
          */
-        public void add(Element element, String name) {
-            add(element, name, 1);
+        public Builder add(Element element, String name) {
+            return add(element, name, 1);
         }
 
         /**
diff --git a/graphics/java/android/renderscript/Mesh.java b/graphics/java/android/renderscript/Mesh.java
index 4187992..9176bc8 100644
--- a/graphics/java/android/renderscript/Mesh.java
+++ b/graphics/java/android/renderscript/Mesh.java
@@ -174,7 +174,7 @@
 
         Type newType(Element e, int size) {
             Type.Builder tb = new Type.Builder(mRS, e);
-            tb.add(Dimension.X, size);
+            tb.setX(size);
             return tb.create();
         }
 
@@ -466,12 +466,12 @@
 
             Mesh sm = smb.create();
 
-            sm.getVertexAllocation(0).data(mVtxData);
+            sm.getVertexAllocation(0).copyFrom(mVtxData);
             if(uploadToBufferObject) {
                 sm.getVertexAllocation(0).uploadToBufferObject();
             }
 
-            sm.getIndexAllocation(0).data(mIndexData);
+            sm.getIndexAllocation(0).copyFrom(mIndexData);
             sm.getIndexAllocation(0).uploadToBufferObject();
 
             return sm;
diff --git a/graphics/java/android/renderscript/Program.java b/graphics/java/android/renderscript/Program.java
index 22f3fc5..c3536c3 100644
--- a/graphics/java/android/renderscript/Program.java
+++ b/graphics/java/android/renderscript/Program.java
@@ -87,7 +87,7 @@
         if ((slot < 0) || (slot >= mTextureCount)) {
             throw new IllegalArgumentException("Slot ID out of range.");
         }
-        if (va != null && va.getType().getFaces() &&
+        if (va != null && va.getType().hasFaces() &&
             mTextures[slot] != TextureType.TEXTURE_CUBE) {
             throw new IllegalArgumentException("Cannot bind cubemap to 2d texture slot");
         }
diff --git a/graphics/java/android/renderscript/ProgramFragment.java b/graphics/java/android/renderscript/ProgramFragment.java
index faaf980..074c393 100644
--- a/graphics/java/android/renderscript/ProgramFragment.java
+++ b/graphics/java/android/renderscript/ProgramFragment.java
@@ -208,7 +208,7 @@
                 Element.Builder b = new Element.Builder(mRS);
                 b.add(Element.F32_4(mRS), "Color");
                 Type.Builder typeBuilder = new Type.Builder(mRS, b.create());
-                typeBuilder.add(Dimension.X, 1);
+                typeBuilder.setX(1);
                 constType = typeBuilder.create();
                 addConstant(constType);
             }
@@ -220,7 +220,7 @@
                 Allocation constantData = Allocation.createTyped(mRS,constType);
                 float[] data = new float[4];
                 data[0] = data[1] = data[2] = data[3] = 1.0f;
-                constantData.data(data);
+                constantData.copyFrom(data);
                 pf.bindConstants(constantData, 0);
             }
             return pf;
diff --git a/graphics/java/android/renderscript/ProgramVertex.java b/graphics/java/android/renderscript/ProgramVertex.java
index 998e05e..5d41f63 100644
--- a/graphics/java/android/renderscript/ProgramVertex.java
+++ b/graphics/java/android/renderscript/ProgramVertex.java
@@ -95,7 +95,7 @@
             b.add(Element.MATRIX4X4(rs), "MVP");
 
             Type.Builder typeBuilder = new Type.Builder(rs, b.create());
-            typeBuilder.add(Dimension.X, 1);
+            typeBuilder.setX(1);
             return typeBuilder.create();
         }
 
@@ -153,7 +153,7 @@
             Type constInputType = ProgramVertex.Builder.getConstantInputType(rs);
             mAlloc = Allocation.createTyped(rs, constInputType);
             int bufferSize = constInputType.getElement().getSizeBytes()*
-                             constInputType.getElementCount();
+                             constInputType.getCount();
             mIOBuffer = new FieldPacker(bufferSize);
             loadModelview(new Matrix4f());
             loadProjection(new Matrix4f());
@@ -170,7 +170,7 @@
             for(int i = 0; i < 16; i ++) {
                 mIOBuffer.addF32(m.mMat[i]);
             }
-            mAlloc.data(mIOBuffer.getData());
+            mAlloc.copyFrom(mIOBuffer.getData());
         }
 
         public void loadModelview(Matrix4f m) {
diff --git a/graphics/java/android/renderscript/RSSurfaceView.java b/graphics/java/android/renderscript/RSSurfaceView.java
index 2540d01..0211a4a 100644
--- a/graphics/java/android/renderscript/RSSurfaceView.java
+++ b/graphics/java/android/renderscript/RSSurfaceView.java
@@ -69,7 +69,6 @@
      * not normally called or subclassed by clients of RSSurfaceView.
      */
     public void surfaceCreated(SurfaceHolder holder) {
-        Log.v(RenderScript.LOG_TAG, "surfaceCreated");
         mSurfaceHolder = holder;
     }
 
@@ -79,9 +78,8 @@
      */
     public void surfaceDestroyed(SurfaceHolder holder) {
         // Surface will be destroyed when we return
-        Log.v(RenderScript.LOG_TAG, "surfaceDestroyed");
         if (mRS != null) {
-            mRS.contextSetSurface(0, 0, null);
+            mRS.setSurface(null, 0, 0);
         }
     }
 
@@ -90,23 +88,21 @@
      * not normally called or subclassed by clients of RSSurfaceView.
      */
     public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
-        Log.v(RenderScript.LOG_TAG, "surfaceChanged");
         if (mRS != null) {
-            mRS.contextSetSurface(w, h, holder.getSurface());
+            mRS.setSurface(holder, w, h);
         }
     }
 
-    /**
+   /**
      * Inform the view that the activity is paused. The owner of this view must
      * call this method when the activity is paused. Calling this method will
      * pause the rendering thread.
      * Must not be called before a renderer has been set.
      */
-    public void onPause() {
+    public void pause() {
         if(mRS != null) {
             mRS.pause();
         }
-        //Log.v(RenderScript.LOG_TAG, "onPause");
     }
 
     /**
@@ -116,49 +112,29 @@
      * thread.
      * Must not be called before a renderer has been set.
      */
-    public void onResume() {
+    public void resume() {
         if(mRS != null) {
             mRS.resume();
         }
-        //Log.v(RenderScript.LOG_TAG, "onResume");
     }
 
-    /**
-     * Queue a runnable to be run on the GL rendering thread. This can be used
-     * to communicate with the Renderer on the rendering thread.
-     * Must not be called before a renderer has been set.
-     * @param r the runnable to be run on the GL rendering thread.
-     */
-    public void queueEvent(Runnable r) {
-        //Log.v(RenderScript.LOG_TAG, "queueEvent");
+    public RenderScriptGL createRenderScriptGL(RenderScriptGL.SurfaceConfig sc) {
+        RenderScriptGL rs = new RenderScriptGL(sc);
+        setRenderScriptGL(rs);
+        return rs;
     }
 
-    /**
-     * This method is used as part of the View class and is not normally
-     * called or subclassed by clients of RSSurfaceView.
-     * Must not be called before a renderer has been set.
-     */
-    @Override
-    protected void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-    }
-
-    // ----------------------------------------------------------------------
-
-    public RenderScriptGL createRenderScript(RenderScriptGL.SurfaceConfig sc) {
-        Log.v(RenderScript.LOG_TAG, "createRenderScript");
-        mRS = new RenderScriptGL(sc);
-        return mRS;
-    }
-
-    public void destroyRenderScript() {
-        Log.v(RenderScript.LOG_TAG, "destroyRenderScript");
+    public void destroyRenderScriptGL() {
         mRS.destroy();
         mRS = null;
     }
 
-    public void createRenderScript(RenderScriptGL rs) {
+    public void setRenderScriptGL(RenderScriptGL rs) {
         mRS = rs;
     }
+
+    public RenderScriptGL getRenderScriptGL() {
+        return mRS;
+    }
 }
 
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index f16e045..6ff894d 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -38,9 +38,9 @@
  **/
 public class RenderScript {
     static final String LOG_TAG = "RenderScript_jni";
-    protected static final boolean DEBUG  = false;
+    static final boolean DEBUG  = false;
     @SuppressWarnings({"UnusedDeclaration", "deprecation"})
-    protected static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
+    static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
 
 
 
@@ -49,8 +49,8 @@
      * field offsets.
      */
     @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
-    protected static boolean sInitialized;
-    native protected static void _nInit();
+    static boolean sInitialized;
+    native static void _nInit();
 
 
     static {
@@ -183,9 +183,9 @@
         rsnElementGetSubElements(mContext, id, IDs, names);
     }
 
-    native int rsnTypeCreate(int con, int eid, int[] dims, int[] vals);
-    synchronized int nTypeCreate(int eid, int[] dims, int[] vals) {
-        return rsnTypeCreate(mContext, eid, dims, vals);
+    native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces);
+    synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces) {
+        return rsnTypeCreate(mContext, eid, x, y, z, mips, faces);
     }
     native void rsnTypeGetNativeData(int con, int id, int[] typeData);
     synchronized void nTypeGetNativeData(int id, int[] typeData) {
@@ -525,10 +525,10 @@
     }
 
 
-    protected int     mDev;
-    protected int     mContext;
+    int     mDev;
+    int     mContext;
     @SuppressWarnings({"FieldCanBeLocal"})
-    protected MessageThread mMessageThread;
+    MessageThread mMessageThread;
 
     Element mElement_U8;
     Element mElement_I8;
@@ -604,7 +604,7 @@
      * in the script.
      *
      */
-    public static class RSMessage implements Runnable {
+    public static class RSMessageHandler implements Runnable {
         protected int[] mData;
         protected int mID;
         protected int mLength;
@@ -617,7 +617,14 @@
      * sent from sendToClient by scripts from this context.
      *
      */
-    public RSMessage mMessageCallback = null;
+    RSMessageHandler mMessageCallback = null;
+
+    public void setMessageHandler(RSMessageHandler msg) {
+        mMessageCallback = msg;
+    }
+    public RSMessageHandler getMessageHandler() {
+        return mMessageCallback;
+    }
 
     /**
      * Runtime error base class.  An application should derive from this class
@@ -625,7 +632,7 @@
      * the fields in this class will be filled and the run method called.
      *
      */
-    public static class RSAsyncError implements Runnable {
+    public static class RSErrorHandler implements Runnable {
         protected String mErrorMessage;
         protected int mErrorNum;
         public void run() {
@@ -639,7 +646,14 @@
      * This will cause program termaination.
      *
      */
-    public RSAsyncError mErrorCallback = null;
+    RSErrorHandler mErrorCallback = null;
+
+    public void setErrorHandler(RSErrorHandler msg) {
+        mErrorCallback = msg;
+    }
+    public RSErrorHandler getErrorHandler() {
+        return mErrorCallback;
+    }
 
     /**
      * RenderScript worker threads priority enumeration.  The default value is
@@ -648,6 +662,7 @@
      * processes.
      */
     public enum Priority {
+        // Remap these numbers to opaque...
         LOW (5),     //ANDROID_PRIORITY_BACKGROUND + 5
         NORMAL (-4);  //ANDROID_PRIORITY_DISPLAY
 
@@ -669,23 +684,23 @@
      *
      * @param p New priority to be set.
      */
-    public void contextSetPriority(Priority p) {
+    public void setPriority(Priority p) {
         validate();
         nContextSetPriority(p.mID);
     }
 
-    protected static class MessageThread extends Thread {
+    static class MessageThread extends Thread {
         RenderScript mRS;
         boolean mRun = true;
-        int[] auxData = new int[2];
+        int[] mAuxData = new int[2];
 
-        public static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
-        public static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
-        public static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
-        public static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
-        public static final int RS_MESSAGE_TO_CLIENT_USER = 4;
+        static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
+        static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
+        static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
+        static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
+        static final int RS_MESSAGE_TO_CLIENT_USER = 4;
 
-        public static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
+        static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
 
         MessageThread(RenderScript rs) {
             super("RSMessageThread");
@@ -700,9 +715,9 @@
             mRS.nContextInitToClient(mRS.mContext);
             while(mRun) {
                 rbuf[0] = 0;
-                int msg = mRS.nContextPeekMessage(mRS.mContext, auxData, true);
-                int size = auxData[1];
-                int subID = auxData[0];
+                int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData, true);
+                int size = mAuxData[1];
+                int subID = mAuxData[0];
 
                 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
                     if ((size>>2) >= rbuf.length) {
@@ -775,12 +790,10 @@
      * Print the currently available debugging information about the state of
      * the RS context to the log.
      *
-     *
-     * @param bits Currently ignored.
      */
-    public void contextDump(int bits) {
+    public void contextDump() {
         validate();
-        nContextDump(bits);
+        nContextDump(0);
     }
 
     /**
@@ -817,7 +830,7 @@
         return mContext != 0;
     }
 
-    protected int safeID(BaseObj o) {
+    int safeID(BaseObj o) {
         if(o != null) {
             return o.getID();
         }
diff --git a/graphics/java/android/renderscript/RenderScriptGL.java b/graphics/java/android/renderscript/RenderScriptGL.java
index 181d4bd..4a1c40a 100644
--- a/graphics/java/android/renderscript/RenderScriptGL.java
+++ b/graphics/java/android/renderscript/RenderScriptGL.java
@@ -45,6 +45,9 @@
      * Class which is used to describe a pixel format for a graphical buffer.
      * This is used to describe the intended format of the display surface.
      *
+     * The configuration is described by pairs of minimum and preferred bit
+     * depths for each component within the config and additional structural
+     * information.
      */
     public static class SurfaceConfig {
         int mDepthMin       = 0;
@@ -81,38 +84,75 @@
                 throw new RSIllegalArgumentException("Minimum value provided out of range.");
             }
             if (upref < umin) {
-                throw new RSIllegalArgumentException("Prefered must be >= Minimum.");
+                throw new RSIllegalArgumentException("preferred must be >= Minimum.");
             }
         }
 
-        public void setColor(int minimum, int prefered) {
-            validateRange(minimum, prefered, 5, 8);
+        /**
+         * Set the per-component bit depth for color (red, green, blue).  This
+         * configures the surface for an unsigned integer buffer type.
+         *
+         * @param minimum
+         * @param preferred
+         */
+        public void setColor(int minimum, int preferred) {
+            validateRange(minimum, preferred, 5, 8);
             mColorMin = minimum;
-            mColorPref = prefered;
+            mColorPref = preferred;
         }
-        public void setAlpha(int minimum, int prefered) {
-            validateRange(minimum, prefered, 0, 8);
+
+        /**
+         * Set the bit depth for alpha. This configures the surface for
+         * an unsigned integer buffer type.
+         *
+         * @param minimum
+         * @param preferred
+         */
+        public void setAlpha(int minimum, int preferred) {
+            validateRange(minimum, preferred, 0, 8);
             mAlphaMin = minimum;
-            mAlphaPref = prefered;
+            mAlphaPref = preferred;
         }
-        public void setDepth(int minimum, int prefered) {
-            validateRange(minimum, prefered, 0, 24);
+
+         /**
+         * Set the bit depth for the depth buffer. This configures the
+         * surface for an unsigned integer buffer type.  If a minimum of 0
+         * is specified then its possible no depth buffer will be
+         * allocated.
+         *
+         * @param minimum
+         * @param preferred
+         */
+        public void setDepth(int minimum, int preferred) {
+            validateRange(minimum, preferred, 0, 24);
             mDepthMin = minimum;
-            mDepthPref = prefered;
+            mDepthPref = preferred;
         }
-        public void setSamples(int minimum, int prefered, float Q) {
-            validateRange(minimum, prefered, 0, 24);
+
+        /**
+         * Configure the multisample rendering.
+         *
+         * @param minimum The required number of samples, must be at least 1.
+         * @param preferred The targe number of samples, must be at least
+         *                  minimum
+         * @param Q  The quality of samples, range 0-1.  Used to decide between
+         *           different formats which have the same number of samples but
+         *           different rendering quality.
+         */
+        public void setSamples(int minimum, int preferred, float Q) {
+            validateRange(minimum, preferred, 1, 32);
             if (Q < 0.0f || Q > 1.0f) {
                 throw new RSIllegalArgumentException("Quality out of 0-1 range.");
             }
             mSamplesMin = minimum;
-            mSamplesPref = prefered;
+            mSamplesPref = preferred;
             mSamplesQ = Q;
         }
     };
 
     SurfaceConfig mSurfaceConfig;
-
+/*
+    // Keep?
     public void configureSurface(SurfaceHolder sh) {
         if (mSurfaceConfig.mAlphaMin > 1) {
             sh.setFormat(PixelFormat.RGBA_8888);
@@ -123,7 +163,14 @@
 
     public void checkSurface(SurfaceHolder sh) {
     }
+*/
 
+    /**
+     * Construct a new RenderScriptGL context.
+     *
+     *
+     * @param sc The desired format of the primart rendering surface.
+     */
     public RenderScriptGL(SurfaceConfig sc) {
         mSurfaceConfig = new SurfaceConfig(sc);
 
@@ -146,54 +193,113 @@
         Element.initPredefined(this);
     }
 
-    public void contextSetSurface(int w, int h, Surface sur) {
-        mSurface = sur;
+    /**
+     * Bind an os surface
+     *
+     *
+     * @param w
+     * @param h
+     * @param sur
+     */
+    public void setSurface(SurfaceHolder sur, int w, int h) {
+        validate();
+        if (sur != null) {
+            mSurface = sur.getSurface();
+        } else {
+            mSurface = null;
+        }
         mWidth = w;
         mHeight = h;
-        validate();
         nContextSetSurface(w, h, mSurface);
     }
 
+    /**
+     * return the height of the last set surface.
+     *
+     * @return int
+     */
     public int getHeight() {
         return mHeight;
     }
 
+    /**
+     * return the width of the last set surface.
+     *
+     * @return int
+     */
     public int getWidth() {
         return mWidth;
     }
 
-    void pause() {
+    /**
+     * Temporarly halt calls to the root rendering script.
+     *
+     */
+    public void pause() {
         validate();
         nContextPause();
     }
 
-    void resume() {
+    /**
+     * Resume calls to the root rendering script.
+     *
+     */
+    public void resume() {
         validate();
         nContextResume();
     }
 
 
-    public void contextBindRootScript(Script s) {
+    /**
+     * Set the script to handle calls to render the primary surface.
+     *
+     * @param s Graphics script to process rendering requests.
+     */
+    public void bindRootScript(Script s) {
         validate();
         nContextBindRootScript(safeID(s));
     }
 
-    public void contextBindProgramStore(ProgramStore p) {
+    /**
+     * Set the default ProgramStore object seen as the parent state by the root
+     * rendering script.
+     *
+     * @param p
+     */
+    public void bindProgramStore(ProgramStore p) {
         validate();
         nContextBindProgramStore(safeID(p));
     }
 
-    public void contextBindProgramFragment(ProgramFragment p) {
+    /**
+     * Set the default ProgramFragment object seen as the parent state by the
+     * root rendering script.
+     *
+     * @param p
+     */
+    public void bindProgramFragment(ProgramFragment p) {
         validate();
         nContextBindProgramFragment(safeID(p));
     }
 
-    public void contextBindProgramRaster(ProgramRaster p) {
+    /**
+     * Set the default ProgramRaster object seen as the parent state by the
+     * root rendering script.
+     *
+     * @param p
+     */
+    public void bindProgramRaster(ProgramRaster p) {
         validate();
         nContextBindProgramRaster(safeID(p));
     }
 
-    public void contextBindProgramVertex(ProgramVertex p) {
+    /**
+     * Set the default ProgramVertex object seen as the parent state by the
+     * root rendering script.
+     *
+     * @param p
+     */
+    public void bindProgramVertex(ProgramVertex p) {
         validate();
         nContextBindProgramVertex(safeID(p));
     }
diff --git a/graphics/java/android/renderscript/Sampler.java b/graphics/java/android/renderscript/Sampler.java
index b627207..9fbc09a 100644
--- a/graphics/java/android/renderscript/Sampler.java
+++ b/graphics/java/android/renderscript/Sampler.java
@@ -31,6 +31,9 @@
 /**
  * @hide
  *
+ * Sampler object which defines how data is extracted from textures.  Samplers
+ * are attached to Program objects (currently only fragment) when those objects
+ * need to access texture data.
  **/
 public class Sampler extends BaseObj {
     public enum Value {
@@ -50,6 +53,14 @@
         super(id, rs);
     }
 
+    /**
+     * Retrieve a sampler with min and mag set to nearest and wrap modes set to
+     * clamp.
+     *
+     * @param rs
+     *
+     * @return Sampler
+     */
     public static Sampler CLAMP_NEAREST(RenderScript rs) {
         if(rs.mSampler_CLAMP_NEAREST == null) {
             Builder b = new Builder(rs);
@@ -62,6 +73,14 @@
         return rs.mSampler_CLAMP_NEAREST;
     }
 
+    /**
+     * Retrieve a sampler with min and mag set to linear and wrap modes set to
+     * clamp.
+     *
+     * @param rs
+     *
+     * @return Sampler
+     */
     public static Sampler CLAMP_LINEAR(RenderScript rs) {
         if(rs.mSampler_CLAMP_LINEAR == null) {
             Builder b = new Builder(rs);
@@ -74,6 +93,14 @@
         return rs.mSampler_CLAMP_LINEAR;
     }
 
+    /**
+     * Retrieve a sampler with ag set to linear, min linear mipmap linear, and
+     * to and wrap modes set to clamp.
+     *
+     * @param rs
+     *
+     * @return Sampler
+     */
     public static Sampler CLAMP_LINEAR_MIP_LINEAR(RenderScript rs) {
         if(rs.mSampler_CLAMP_LINEAR_MIP_LINEAR == null) {
             Builder b = new Builder(rs);
@@ -86,6 +113,14 @@
         return rs.mSampler_CLAMP_LINEAR_MIP_LINEAR;
     }
 
+    /**
+     * Retrieve a sampler with min and mag set to nearest and wrap modes set to
+     * wrap.
+     *
+     * @param rs
+     *
+     * @return Sampler
+     */
     public static Sampler WRAP_NEAREST(RenderScript rs) {
         if(rs.mSampler_WRAP_NEAREST == null) {
             Builder b = new Builder(rs);
@@ -98,6 +133,14 @@
         return rs.mSampler_WRAP_NEAREST;
     }
 
+    /**
+     * Retrieve a sampler with min and mag set to nearest and wrap modes set to
+     * wrap.
+     *
+     * @param rs
+     *
+     * @return Sampler
+     */
     public static Sampler WRAP_LINEAR(RenderScript rs) {
         if(rs.mSampler_WRAP_LINEAR == null) {
             Builder b = new Builder(rs);
@@ -110,6 +153,14 @@
         return rs.mSampler_WRAP_LINEAR;
     }
 
+    /**
+     * Retrieve a sampler with ag set to linear, min linear mipmap linear, and
+     * to and wrap modes set to wrap.
+     *
+     * @param rs
+     *
+     * @return Sampler
+     */
     public static Sampler WRAP_LINEAR_MIP_LINEAR(RenderScript rs) {
         if(rs.mSampler_WRAP_LINEAR_MIP_LINEAR == null) {
             Builder b = new Builder(rs);
@@ -123,6 +174,11 @@
     }
 
 
+    /**
+     * Builder for creating non-standard samplers.  Usefull if mix and match of
+     * wrap modes is necesary or if anisotropic filtering is desired.
+     *
+     */
     public static class Builder {
         RenderScript mRS;
         Value mMin;
diff --git a/graphics/java/android/renderscript/Type.java b/graphics/java/android/renderscript/Type.java
index 44aee63..859369c 100644
--- a/graphics/java/android/renderscript/Type.java
+++ b/graphics/java/android/renderscript/Type.java
@@ -42,7 +42,7 @@
     int mDimX;
     int mDimY;
     int mDimZ;
-    boolean mDimLOD;
+    boolean mDimMipmaps;
     boolean mDimFaces;
     int mElementCount;
     Element mElement;
@@ -88,8 +88,8 @@
      *
      * @return boolean
      */
-    public boolean getLOD() {
-        return mDimLOD;
+    public boolean hasMipmaps() {
+        return mDimMipmaps;
     }
 
     /**
@@ -97,7 +97,7 @@
      *
      * @return boolean
      */
-    public boolean getFaces() {
+    public boolean hasFaces() {
         return mDimFaces;
     }
 
@@ -106,31 +106,31 @@
      *
      * @return int
      */
-    public int getElementCount() {
+    public int getCount() {
         return mElementCount;
     }
 
     void calcElementCount() {
-        boolean hasLod = getLOD();
+        boolean hasLod = hasMipmaps();
         int x = getX();
         int y = getY();
         int z = getZ();
         int faces = 1;
-        if(getFaces()) {
+        if (hasFaces()) {
             faces = 6;
         }
-        if(x == 0) {
+        if (x == 0) {
             x = 1;
         }
-        if(y == 0) {
+        if (y == 0) {
             y = 1;
         }
-        if(z == 0) {
+        if (z == 0) {
             z = 1;
         }
 
         int count = x * y * z * faces;
-        if(hasLod && (x > 1) && (y > 1) && (z > 1)) {
+        if (hasLod && (x > 1) && (y > 1) && (z > 1)) {
             if(x > 1) {
                 x >>= 1;
             }
@@ -151,10 +151,6 @@
         super(id, rs);
     }
 
-    protected void finalize() throws Throwable {
-        super.finalize();
-    }
-
     @Override
     void updateFromNative() {
         // We have 6 integer to obtain mDimX; mDimY; mDimZ;
@@ -165,7 +161,7 @@
         mDimX = dataBuffer[0];
         mDimY = dataBuffer[1];
         mDimZ = dataBuffer[2];
-        mDimLOD = dataBuffer[3] == 1 ? true : false;
+        mDimMipmaps = dataBuffer[3] == 1 ? true : false;
         mDimFaces = dataBuffer[4] == 1 ? true : false;
 
         int elementID = dataBuffer[5];
@@ -182,15 +178,13 @@
      */
     public static class Builder {
         RenderScript mRS;
-        Dimension[] mDimensions;
-        int[] mDimensionValues;
-        int mEntryCount;
-        Element mElement;
+        int mDimX = 1;
+        int mDimY;
+        int mDimZ;
+        boolean mDimMipmaps;
+        boolean mDimFaces;
 
-        class Entry {
-            Dimension mDim;
-            int mValue;
-        }
+        Element mElement;
 
         /**
          * Create a new builder object.
@@ -199,13 +193,8 @@
          * @param e The element for the type to be created.
          */
         public Builder(RenderScript rs, Element e) {
-            if(e.getID() == 0) {
-                throw new RSIllegalArgumentException("Invalid element.");
-            }
-
+            e.checkValid();
             mRS = rs;
-            mDimensions = new Dimension[4];
-            mDimensionValues = new int[4];
             mElement = e;
         }
 
@@ -216,76 +205,67 @@
          * @param d
          * @param value
          */
-        public void add(Dimension d, int value) {
+        public Builder setX(int value) {
             if(value < 1) {
-                throw new RSIllegalArgumentException("Values of less than 1 for Dimensions are not valid.");
+                throw new RSIllegalArgumentException("Values of less than 1 for Dimension X are not valid.");
             }
-            if(mDimensions.length >= mEntryCount) {
-                Dimension[] dn = new Dimension[mEntryCount + 8];
-                System.arraycopy(mDimensions, 0, dn, 0, mEntryCount);
-                mDimensions = dn;
-
-                int[] in = new int[mEntryCount + 8];
-                System.arraycopy(mDimensionValues, 0, in, 0, mEntryCount);
-                mDimensionValues = in;
-            }
-            mDimensions[mEntryCount] = d;
-            mDimensionValues[mEntryCount] = value;
-            mEntryCount++;
+            mDimX = value;
+            return this;
         }
 
+        public Builder setY(int value) {
+            if(value < 1) {
+                throw new RSIllegalArgumentException("Values of less than 1 for Dimension Y are not valid.");
+            }
+            mDimY = value;
+            return this;
+        }
+
+        public Builder setMipmaps(boolean value) {
+            mDimMipmaps = value;
+            return this;
+        }
+
+        public Builder setFaces(boolean value) {
+            mDimFaces = value;
+            return this;
+        }
+
+
         /**
          * Validate structure and create a new type.
          *
          * @return Type
          */
         public Type create() {
-            int dims[] = new int[mEntryCount];
-            for (int ct=0; ct < mEntryCount; ct++) {
-                dims[ct] = mDimensions[ct].mID;
-            }
-
-            int id = mRS.nTypeCreate(mElement.getID(), dims, mDimensionValues);
-            Type t = new Type(id, mRS);
-            t.mElement = mElement;
-
-            for(int ct=0; ct < mEntryCount; ct++) {
-                if(mDimensions[ct] == Dimension.X) {
-                    t.mDimX = mDimensionValues[ct];
-                }
-                if(mDimensions[ct] == Dimension.Y) {
-                    t.mDimY = mDimensionValues[ct];
-                }
-                if(mDimensions[ct] == Dimension.Z) {
-                    t.mDimZ = mDimensionValues[ct];
-                }
-                if(mDimensions[ct] == Dimension.LOD) {
-                    t.mDimLOD = mDimensionValues[ct] != 0;
-                }
-                if(mDimensions[ct] == Dimension.FACE) {
-                    t.mDimFaces = mDimensionValues[ct] != 0;
-                }
-            }
-
-            if (t.mDimZ > 0) {
-                if ((t.mDimX < 1) || (t.mDimY < 1)) {
+            if (mDimZ > 0) {
+                if ((mDimX < 1) || (mDimY < 1)) {
                     throw new RSInvalidStateException("Both X and Y dimension required when Z is present.");
                 }
-                if (t.mDimFaces) {
+                if (mDimFaces) {
                     throw new RSInvalidStateException("Cube maps not supported with 3D types.");
                 }
             }
-            if (t.mDimY > 0) {
-                if (t.mDimX < 1) {
+            if (mDimY > 0) {
+                if (mDimX < 1) {
                     throw new RSInvalidStateException("X dimension required when Y is present.");
                 }
             }
-            if (t.mDimFaces) {
-                if (t.mDimY < 1) {
+            if (mDimFaces) {
+                if (mDimY < 1) {
                     throw new RSInvalidStateException("Cube maps require 2D Types.");
                 }
             }
 
+            int id = mRS.nTypeCreate(mElement.getID(), mDimX, mDimY, mDimZ, mDimMipmaps, mDimFaces);
+            Type t = new Type(id, mRS);
+            t.mElement = mElement;
+            t.mDimX = mDimX;
+            t.mDimY = mDimY;
+            t.mDimZ = mDimZ;
+            t.mDimMipmaps = mDimMipmaps;
+            t.mDimFaces = mDimFaces;
+
             t.calcElementCount();
             return t;
         }