[androidkit] See-through face for CubeActivity

Paint both sides (two passes), and skip a face for inside visibility.

Change-Id: I138d790578c4ce30c7d4df9400485a983c1f9e95
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/414900
Commit-Queue: Florin Malita <fmalita@google.com>
Reviewed-by: Jorge Betancourt <jmbetancourt@google.com>
diff --git a/platform_tools/android/apps/androidkitdemo/src/main/java/org/skia/androidkitdemo1/CubeActivity.java b/platform_tools/android/apps/androidkitdemo/src/main/java/org/skia/androidkitdemo1/CubeActivity.java
index f8d9ec6..88db91b 100644
--- a/platform_tools/android/apps/androidkitdemo/src/main/java/org/skia/androidkitdemo1/CubeActivity.java
+++ b/platform_tools/android/apps/androidkitdemo/src/main/java/org/skia/androidkitdemo1/CubeActivity.java
@@ -34,19 +34,6 @@
 
 import static java.lang.Math.tan;
 
-// TODO: remove after all sides are migrated to something more interesting.
-class SolidColorSample implements Sample {
-    private Paint mPaint = new Paint();
-
-    public SolidColorSample(float r, float g, float b, float a) {
-        mPaint.setColor(r, g, b, a);
-    }
-
-    public void render(Canvas canvas, long t, float left, float top, float right, float bottom) {
-        canvas.drawRect(left, top, right, bottom, mPaint);
-    }
-}
-
 class Face {
     private float rotX;
     private float rotY;
@@ -179,17 +166,15 @@
     private Matrix          mViewMatrix;
     private float           mCubeSideLength;
     private long            mPrevMS;
-
-    private Face[] faces;
+    private Face[]          mFaces;
 
     public CubeRenderer(Resources res) {
         final float rot = (float) Math.PI;
-        faces = new Face[] {
+        mFaces = new Face[] {
             new Face(0, -rot/2, new ImageShaderSample(res, R.raw.brickwork_texture)),
             new Face(0, 0     , new SkottieSample(res, R.raw.im_thirsty)),
             new Face(0, rot   , new RuntimeSample(res, R.raw.runtime_shader1)),
             new Face(rot/2, 0 , new SkottieSample(res, R.raw.permission)),
-            new Face(-rot/2, 0, new SolidColorSample(1, 1, 0, 1)),
             new Face(0, rot/2 , new RuntimeSample(res, R.raw.runtime_shader2)),
         };
     }
@@ -237,12 +222,18 @@
         canvas.concat(mViewMatrix);
         canvas.concat(mVSphere.getMatrix());
 
-        for (Face f : faces) {
-            //TODO: auto restore
+        drawFaces(canvas, ms, false);
+        drawFaces(canvas, ms, true);
+
+        canvas.restore();
+    }
+
+    private void drawFaces(Canvas canvas, long ms, boolean renderFront) {
+        for (Face f : mFaces) {
             canvas.save();
             canvas.concat(f.asMatrix(mCubeSideLength/2));
 
-            if (front(canvas.getLocalToDevice())) {
+            if (front(canvas.getLocalToDevice()) == renderFront) {
                 f.sample.render(canvas, ms,
                                 -mCubeSideLength/2,
                                 -mCubeSideLength/2,
@@ -251,7 +242,6 @@
             }
             canvas.restore();
         }
-        canvas.restore();
     }
 
     @Override