From 55e553525d0cf90c261f841c561be50eb7814fd7 Mon Sep 17 00:00:00 2001 From: ziadb Date: Fri, 27 Jul 2018 13:16:21 -0400 Subject: SkAR Java: DrawManager dox and minor changes, removed unnecessary files Bug: skia: Change-Id: If1a92c5b70d99233208f7db74f5dda9641b1c65b Reviewed-on: https://skia-review.googlesource.com/144027 Reviewed-by: Mike Reed --- .../apps/skar_java/src/main/AndroidManifest.xml | 4 +- .../skar_java/src/main/assets/shaders/plane.frag | 31 ----- .../skar_java/src/main/assets/shaders/plane.vert | 40 ------ .../src/main/assets/shaders/point_cloud.frag | 21 --- .../src/main/assets/shaders/point_cloud.vert | 28 ---- .../src/main/assets/shaders/screenquad.frag | 3 +- .../src/main/assets/shaders/screenquad.vert | 2 +- .../skar/examples/helloskar/app/HelloCanvasAR.java | 1 + .../examples/helloskar/rendering/DrawManager.java | 152 +++++++++++++++------ .../src/main/res/layout/activity_main.xml | 3 +- .../apps/skar_java/src/main/res/menu/main_menu.xml | 17 +++ .../skar_java/src/main/res/menu/platte_bar.xml | 17 +++ .../apps/skar_java/src/main/res/values/strings.xml | 9 +- .../apps/skar_java/src/main/res/values/styles.xml | 5 +- 14 files changed, 162 insertions(+), 171 deletions(-) delete mode 100644 platform_tools/android/apps/skar_java/src/main/assets/shaders/plane.frag delete mode 100644 platform_tools/android/apps/skar_java/src/main/assets/shaders/plane.vert delete mode 100644 platform_tools/android/apps/skar_java/src/main/assets/shaders/point_cloud.frag delete mode 100644 platform_tools/android/apps/skar_java/src/main/assets/shaders/point_cloud.vert diff --git a/platform_tools/android/apps/skar_java/src/main/AndroidManifest.xml b/platform_tools/android/apps/skar_java/src/main/AndroidManifest.xml index efd40d18ed..e4dbca5f3f 100644 --- a/platform_tools/android/apps/skar_java/src/main/AndroidManifest.xml +++ b/platform_tools/android/apps/skar_java/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ + + diff --git a/platform_tools/android/apps/skar_java/src/main/assets/shaders/plane.frag b/platform_tools/android/apps/skar_java/src/main/assets/shaders/plane.frag deleted file mode 100644 index d0a4708895..0000000000 --- a/platform_tools/android/apps/skar_java/src/main/assets/shaders/plane.frag +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -precision highp float; -uniform sampler2D u_Texture; -uniform vec4 u_dotColor; -uniform vec4 u_lineColor; -uniform vec4 u_gridControl; // dotThreshold, lineThreshold, lineFadeShrink, occlusionShrink -varying vec3 v_TexCoordAlpha; - -void main() { - vec4 control = texture2D(u_Texture, v_TexCoordAlpha.xy); - float dotScale = v_TexCoordAlpha.z; - float lineFade = max(0.0, u_gridControl.z * v_TexCoordAlpha.z - (u_gridControl.z - 1.0)); - vec3 color = (control.r * dotScale > u_gridControl.x) ? u_dotColor.rgb - : (control.g > u_gridControl.y) ? u_lineColor.rgb * lineFade - : (u_lineColor.rgb * 0.25 * lineFade) ; - gl_FragColor = vec4(color, v_TexCoordAlpha.z * u_gridControl.w); -} diff --git a/platform_tools/android/apps/skar_java/src/main/assets/shaders/plane.vert b/platform_tools/android/apps/skar_java/src/main/assets/shaders/plane.vert deleted file mode 100644 index 9ac5a6db27..0000000000 --- a/platform_tools/android/apps/skar_java/src/main/assets/shaders/plane.vert +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -uniform mat4 u_Model; -uniform mat4 u_ModelViewProjection; -uniform mat2 u_PlaneUvMatrix; -uniform vec3 u_Normal; - -attribute vec3 a_XZPositionAlpha; // (x, z, alpha) - -varying vec3 v_TexCoordAlpha; - -void main() { - vec4 local_pos = vec4(a_XZPositionAlpha.x, 0.0, a_XZPositionAlpha.y, 1.0); - vec4 world_pos = u_Model * local_pos; - - // Construct two vectors that are orthogonal to the normal. - // This arbitrary choice is not co-linear with either horizontal - // or vertical plane normals. - const vec3 arbitrary = vec3(1.0, 1.0, 0.0); - vec3 vec_u = normalize(cross(u_Normal, arbitrary)); - vec3 vec_v = normalize(cross(u_Normal, vec_u)); - - // Project vertices in world frame onto vec_u and vec_v. - vec2 uv = vec2(dot(world_pos.xyz, vec_u), dot(world_pos.xyz, vec_v)); - v_TexCoordAlpha = vec3(u_PlaneUvMatrix * uv, a_XZPositionAlpha.z); - gl_Position = u_ModelViewProjection * local_pos; -} diff --git a/platform_tools/android/apps/skar_java/src/main/assets/shaders/point_cloud.frag b/platform_tools/android/apps/skar_java/src/main/assets/shaders/point_cloud.frag deleted file mode 100644 index 463d0526e4..0000000000 --- a/platform_tools/android/apps/skar_java/src/main/assets/shaders/point_cloud.frag +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -precision mediump float; -varying vec4 v_Color; - -void main() { - gl_FragColor = v_Color; -} diff --git a/platform_tools/android/apps/skar_java/src/main/assets/shaders/point_cloud.vert b/platform_tools/android/apps/skar_java/src/main/assets/shaders/point_cloud.vert deleted file mode 100644 index 627fc1a6f3..0000000000 --- a/platform_tools/android/apps/skar_java/src/main/assets/shaders/point_cloud.vert +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -uniform mat4 u_ModelViewProjection; -uniform vec4 u_Color; -uniform float u_PointSize; - -attribute vec4 a_Position; - -varying vec4 v_Color; - -void main() { - v_Color = u_Color; - gl_Position = u_ModelViewProjection * vec4(a_Position.xyz, 1.0); - gl_PointSize = u_PointSize; -} diff --git a/platform_tools/android/apps/skar_java/src/main/assets/shaders/screenquad.frag b/platform_tools/android/apps/skar_java/src/main/assets/shaders/screenquad.frag index 800d723a80..9efaf99b4c 100644 --- a/platform_tools/android/apps/skar_java/src/main/assets/shaders/screenquad.frag +++ b/platform_tools/android/apps/skar_java/src/main/assets/shaders/screenquad.frag @@ -1,5 +1,5 @@ /* - * Copyright 2017 Google Inc. All Rights Reserved. + * Copyright 2018 Google LLC All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -12,6 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + #extension GL_OES_EGL_image_external : require precision mediump float; diff --git a/platform_tools/android/apps/skar_java/src/main/assets/shaders/screenquad.vert b/platform_tools/android/apps/skar_java/src/main/assets/shaders/screenquad.vert index 01c93e3d48..e0e1d1dd4d 100644 --- a/platform_tools/android/apps/skar_java/src/main/assets/shaders/screenquad.vert +++ b/platform_tools/android/apps/skar_java/src/main/assets/shaders/screenquad.vert @@ -1,5 +1,5 @@ /* - * Copyright 2017 Google Inc. All Rights Reserved. + * Copyright 2018 Google LLC All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/app/HelloCanvasAR.java b/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/app/HelloCanvasAR.java index 78791fae93..10527c79de 100644 --- a/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/app/HelloCanvasAR.java +++ b/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/app/HelloCanvasAR.java @@ -514,6 +514,7 @@ public class HelloCanvasAR extends AppCompatActivity implements GLSurfaceView.Re private void drawFingerPainting(Canvas canvas) { drawManager.fingerPainting.setSmoothness(drawManager.drawSmoothPainting); + drawManager.fingerPainting.buildPath(); drawManager.drawFingerPainting(canvas); } diff --git a/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/rendering/DrawManager.java b/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/rendering/DrawManager.java index 35bcf70fec..16310bddc1 100644 --- a/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/rendering/DrawManager.java +++ b/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/rendering/DrawManager.java @@ -46,7 +46,7 @@ import java.util.Collection; /** * Sample class that handles drawing different types of geometry using the matrices provided - * by ARCore. The matrices are handled by SkARMatrix in order to be passed to the drawing + * by ARCore. The matrices are handled by CanvasMatrixUtil in order to be passed to the drawing * Canvas. */ @@ -59,15 +59,32 @@ public class DrawManager { public DrawManager.DrawingType currentDrawabletype = DrawManager.DrawingType.circle; public boolean drawSmoothPainting = true; + // Camera matrices + viewport info private float[] projectionMatrix = new float[16]; private float[] viewMatrix = new float[16]; private float viewportWidth; private float viewportHeight; + + // Paint modifiers private ColorFilter lightFilter; private BitmapShader planeShader; + + // Drawables info public ArrayList modelMatrices = new ArrayList<>(); public FingerPainting fingerPainting = new FingerPainting(false); + /************ Initilization calls ****************************/ + public void initializePlaneShader(Context context, String gridDistanceTextureName) + throws IOException { + // Read the texture. + Bitmap planeTexture = + BitmapFactory.decodeStream(context.getAssets().open(gridDistanceTextureName)); + // Set up the shader + planeShader = new BitmapShader(planeTexture, Shader.TileMode.REPEAT, + Shader.TileMode.REPEAT);); + } + + /************ ARCore onDrawFrame() calls ********************/ public void updateViewport(float width, float height) { viewportWidth = width; viewportHeight = height; @@ -85,11 +102,14 @@ public class DrawManager { lightFilter = PaintUtil.createLightCorrectionColorFilter(colorCorr); } + /********** 2D objects drawing functions **********************/ + // Sample function for drawing a circle public void drawCircle(Canvas canvas) { if (modelMatrices.isEmpty()) { return; } + Paint p = new Paint(); p.setColorFilter(lightFilter); p.setARGB(180, 100, 0, 0); @@ -103,7 +123,8 @@ public class DrawManager { canvas.restore(); } - // Sample function for drawing an animated round rect + // Sample function for drawing an animated round rect. + // Radius parameter is animated by the application public void drawAnimatedRoundRect(Canvas canvas, float radius) { if (modelMatrices.isEmpty()) { return; @@ -127,6 +148,7 @@ public class DrawManager { Paint p = new Paint(); p.setColorFilter(lightFilter); p.setARGB(180, 0, 0, 255); + canvas.save(); canvas.setMatrix(CanvasMatrixUtil.createPerspectiveMatrix(modelMatrices.get(0), viewMatrix, projectionMatrix, viewportWidth, viewportHeight)); @@ -146,22 +168,23 @@ public class DrawManager { p.setARGB(255, 0, 255, 0); p.setTextSize(textSize); + // TODO: Remove scale matrix and scale text directly. Potential unfixed bug in versions < P float[] scaleMatrix = getTextScaleMatrix(textSize); float[] rotateMatrix = CanvasMatrixUtil.createXYtoXZRotationMatrix(); float[][] matrices = { scaleMatrix, rotateMatrix, modelMatrices.get(0), viewMatrix, - projectionMatrix, - CanvasMatrixUtil.createViewportMatrix(viewportWidth, viewportHeight)}; + projectionMatrix, + CanvasMatrixUtil.createViewportMatrix(viewportWidth, + viewportHeight)}; canvas.save(); - canvas.setMatrix(CanvasMatrixUtil.createMatrixFrom4x4(CanvasMatrixUtil.multiplyMatrices4x4(matrices))); + canvas.setMatrix(CanvasMatrixUtil.createMatrixFrom4x4( + CanvasMatrixUtil.multiplyMatrices4x4(matrices))); canvas.drawText(text, 0, 0, p); canvas.restore(); } + // Sample function for drawing a built FingerPainting object public void drawFingerPainting(Canvas canvas) { - // Build the path before rendering - fingerPainting.buildPath(); - // If path empty, return if (fingerPainting.getPaths().isEmpty()) { return; @@ -169,20 +192,24 @@ public class DrawManager { // Get finger painting model matrix float[] model = fingerPainting.getModelMatrix(); - float[] in = new float[16]; - Matrix.setIdentityM(in, 0); - Matrix.translateM(in, 0, model[12], model[13], model[14]); + float[] modelTranslate = new float[16]; // stores translate components of model matrix + Matrix.setIdentityM(modelTranslate, 0); + Matrix.translateM(modelTranslate, 0, model[12], model[13], model[14]); + // Rotation onto plane float[] initRot = CanvasMatrixUtil.createXYtoXZRotationMatrix(); + // Arbitrary scale for the finger painting float[] scale = new float[16]; float s = 0.001f; Matrix.setIdentityM(scale, 0); Matrix.scaleM(scale, 0, s, s, s); - // Matrix = mvpv - float[][] matrices = {scale, initRot, in, viewMatrix, projectionMatrix, CanvasMatrixUtil.createViewportMatrix(viewportWidth, viewportHeight)}; - android.graphics.Matrix mvpv = CanvasMatrixUtil.createMatrixFrom4x4(CanvasMatrixUtil.multiplyMatrices4x4(matrices)); + // Matrix = mvpv (model, view, projection, viewport) + float[][] matrices = {scale, initRot, modelTranslate, viewMatrix, projectionMatrix, + CanvasMatrixUtil.createViewportMatrix(viewportWidth, viewportHeight)}; + android.graphics.Matrix mvpv = + CanvasMatrixUtil.createMatrixFrom4x4(CanvasMatrixUtil.multiplyMatrices4x4(matrices)); // Paint set up Paint p = new Paint(); @@ -194,11 +221,12 @@ public class DrawManager { if (bp.path.isEmpty()) { continue; } + p.setColor(bp.color); // Scaling issues appear to happen when drawing a Path and transforming the Canvas - // directly with a matrix on Android versions less than P. Ideally we would - // switch true to be (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) + // directly with a matrix on Android versions less than P. + // TODO: Ideally switch true to be (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) if (true) { // Transform applied through canvas @@ -221,14 +249,19 @@ public class DrawManager { } + /*********************** AR Environment drawing functions *************************/ + // Sample function for drawing the AR point cloud public void drawPointCloud(Canvas canvas, PointCloud cloud) { FloatBuffer points = cloud.getPoints(); int numberOfPoints = points.remaining() / 4; - float[][] matrices = {viewMatrix, projectionMatrix, CanvasMatrixUtil.createViewportMatrix(viewportWidth, viewportHeight)}; + // Build vpv matrix + float[][] matrices = {viewMatrix, projectionMatrix, + CanvasMatrixUtil.createViewportMatrix(viewportWidth, viewportHeight)}; float[] vpv = CanvasMatrixUtil.multiplyMatrices4x4(matrices); + // Transform points on CPU float[] pointsToDraw = new float[numberOfPoints * 2]; for (int i = 0; i < numberOfPoints; i++) { float[] point = {points.get(i * 4), points.get(i * 4 + 1), points.get(i * 4 + 2), 1}; @@ -243,10 +276,7 @@ public class DrawManager { p.setStrokeWidth(6.0f); canvas.save(); - float[] id = new float[16]; - Matrix.setIdentityM(id, 0); - android.graphics.Matrix identity = CanvasMatrixUtil.createMatrixFrom4x4(id); - canvas.setMatrix(identity); + canvas.setMatrix(new android.graphics.Matrix()); canvas.drawPoints(pointsToDraw, p); canvas.restore(); } @@ -277,15 +307,18 @@ public class DrawManager { float[] initRot = CanvasMatrixUtil.createXYtoXZRotationMatrix(); // Matrix = mvpv - float[][] matrices = {initRot, model, viewMatrix, projectionMatrix, CanvasMatrixUtil.createViewportMatrix(viewportWidth, viewportHeight)}; - android.graphics.Matrix mvpv = CanvasMatrixUtil.createMatrixFrom4x4(CanvasMatrixUtil.multiplyMatrices4x4(matrices)); + float[][] matrices = {initRot, model, viewMatrix, projectionMatrix, + CanvasMatrixUtil.createViewportMatrix(viewportWidth, + viewportHeight)}; + android.graphics.Matrix mvpv = CanvasMatrixUtil.createMatrixFrom4x4( + CanvasMatrixUtil.multiplyMatrices4x4(matrices)); - drawPlaneAsPath(canvas, mvpv, plane); + drawPlaneOutline(canvas, mvpv, plane); } } - // Helper function that draws an AR plane using a path - private void drawPlaneAsPath(Canvas canvas, android.graphics.Matrix mvpv, Plane plane) { + // Helper function that draws an AR plane's outline using a path + private void drawPlaneOutline(Canvas canvas, android.graphics.Matrix mvpv, Plane plane) { int vertsSize = plane.getPolygon().limit() / 2; FloatBuffer polygon = plane.getPolygon(); polygon.rewind(); @@ -300,24 +333,66 @@ public class DrawManager { // Set up paint Paint p = new Paint(); + p.setColor(Color.RED); + p.setAlpha(100); + p.setStrokeWidth(0.01f); + p.setStyle(Paint.Style.STROKE); + + // Scaling issues appear to happen when drawing a Path and transforming the Canvas + // directly with a matrix on Android versions less than P. + // TODO: Ideally switch true to be (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) + + if (true) { + // Draw dest path + canvas.save(); + canvas.setMatrix(mvpv); + canvas.drawPath(pathSrc, p); + canvas.restore(); + } else { + // Build destination path by transforming source path + Path pathDst = new Path(); + pathSrc.transform(mvpv, pathDst); - if (false) { - //p.setShader(planeShader); - p.setColorFilter(new PorterDuffColorFilter(Color.argb(0.4f, 1, 0, 0), - PorterDuff.Mode.SRC_ATOP)); + // Draw dest path + canvas.save(); + canvas.setMatrix(new android.graphics.Matrix()); + canvas.drawPath(pathDst, p); + canvas.restore(); + } + } + + // Helper function that draws an AR plane using a path + initialized shader + private void drawPlaneWithShader(Canvas canvas, android.graphics.Matrix mvpv, Plane plane) { + int vertsSize = plane.getPolygon().limit() / 2; + FloatBuffer polygon = plane.getPolygon(); + polygon.rewind(); + + // Build source path from polygon data + Path pathSrc = new Path(); + pathSrc.moveTo(polygon.get(0), polygon.get(1)); + for (int i = 1; i < vertsSize; i++) { + pathSrc.lineTo(polygon.get(i * 2), polygon.get(i * 2 + 1)); } + pathSrc.close(); + // Set up paint + Paint p = new Paint(); + p.setShader(planeShader); + p.setColorFilter(new PorterDuffColorFilter(Color.argb(0.4f, 1, 0, 0), + PorterDuff.Mode.SRC_ATOP)); p.setColor(Color.RED); p.setAlpha(100); p.setStrokeWidth(0.01f); - p.setStyle(Paint.Style.STROKE); - + // Scaling issues appear to happen when drawing a Path and transforming the Canvas + // directly with a matrix on Android versions less than P. + // TODO: Ideally switch true to be (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) if (true) { // Shader local matrix android.graphics.Matrix lm = new android.graphics.Matrix(); lm.setScale(0.00005f, 0.00005f); planeShader.setLocalMatrix(lm); + // Draw dest path canvas.save(); canvas.setMatrix(mvpv); @@ -342,15 +417,9 @@ public class DrawManager { } } - public void initializePlaneShader(Context context, String gridDistanceTextureName) throws IOException { - // Read the texture. - Bitmap planeTexture = - BitmapFactory.decodeStream(context.getAssets().open(gridDistanceTextureName)); - // Set up the shader - planeShader = new BitmapShader(planeTexture, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); - planeShader.setLocalMatrix(new android.graphics.Matrix()); - } - + /*************** Misc helpers *************************************/ + // Returns a scale matrix for drawing text given the size of the text. Workaround that solves + // a text size bug not fixed in Android versions < P private float[] getTextScaleMatrix(float size) { float scaleFactor = 1 / (size * 10); float[] initScale = new float[16]; @@ -364,6 +433,7 @@ public class DrawManager { float cameraX = cameraPose.tx(); float cameraY = cameraPose.ty(); float cameraZ = cameraPose.tz(); + // Get transformed Y axis of plane's coordinate system. planePose.getTransformedAxis(1, 1.0f, normal, 0); // Compute dot product of plane's normal with vector from camera to plane center. diff --git a/platform_tools/android/apps/skar_java/src/main/res/layout/activity_main.xml b/platform_tools/android/apps/skar_java/src/main/res/layout/activity_main.xml index a08144af30..a642a815ef 100644 --- a/platform_tools/android/apps/skar_java/src/main/res/layout/activity_main.xml +++ b/platform_tools/android/apps/skar_java/src/main/res/layout/activity_main.xml @@ -1,5 +1,5 @@ + + + + diff --git a/platform_tools/android/apps/skar_java/src/main/res/menu/platte_bar.xml b/platform_tools/android/apps/skar_java/src/main/res/menu/platte_bar.xml index c3e9f0c66d..0e28cae592 100644 --- a/platform_tools/android/apps/skar_java/src/main/res/menu/platte_bar.xml +++ b/platform_tools/android/apps/skar_java/src/main/res/menu/platte_bar.xml @@ -1,4 +1,21 @@ + + + + - HelloSkAR Java + Hello CanvasAR diff --git a/platform_tools/android/apps/skar_java/src/main/res/values/styles.xml b/platform_tools/android/apps/skar_java/src/main/res/values/styles.xml index 60e8bdafbb..12b2281b57 100644 --- a/platform_tools/android/apps/skar_java/src/main/res/values/styles.xml +++ b/platform_tools/android/apps/skar_java/src/main/res/values/styles.xml @@ -1,5 +1,5 @@ + -- cgit v1.2.3