From 58d7c7f6b35d43c5ce9e635c0d6e83d06216cf05 Mon Sep 17 00:00:00 2001 From: kenkeiras Date: Mon, 3 Jul 2017 20:26:38 +0200 Subject: [PATCH] Working OpenGLES demo. --- .gitignore | 12 ++ app/.gitignore | 1 + app/build.gradle | 30 ++++ app/proguard-rules.pro | 25 +++ .../minicards/ExampleInstrumentedTest.java | 26 +++ app/src/main/AndroidManifest.xml | 27 +++ .../minicards/TestActivity.java | 22 +++ .../minicards/rendering/MyGLSurfaceView.java | 20 +++ .../minicards/rendering/MyGlRenderer.java | 45 +++++ .../minicards/rendering/Square.java | 67 ++++++++ .../minicards/rendering/Triangle.java | 80 +++++++++ app/src/main/res/layout/activity_test.xml | 18 ++ app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3358 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5084 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2386 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 3179 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4648 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7381 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7008 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 11545 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9442 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 16109 bytes app/src/main/res/values/colors.xml | 6 + app/src/main/res/values/strings.xml | 3 + app/src/main/res/values/styles.xml | 11 ++ .../minicards/ExampleUnitTest.java | 17 ++ build.gradle | 27 +++ gradle.properties | 17 ++ gradlew | 160 ++++++++++++++++++ gradlew.bat | 90 ++++++++++ settings.gradle | 1 + 31 files changed, 705 insertions(+) create mode 100644 .gitignore create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/com/codigoparallevar/minicards/ExampleInstrumentedTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/codigoparallevar/minicards/TestActivity.java create mode 100644 app/src/main/java/com/codigoparallevar/minicards/rendering/MyGLSurfaceView.java create mode 100644 app/src/main/java/com/codigoparallevar/minicards/rendering/MyGlRenderer.java create mode 100644 app/src/main/java/com/codigoparallevar/minicards/rendering/Square.java create mode 100644 app/src/main/java/com/codigoparallevar/minicards/rendering/Triangle.java create mode 100644 app/src/main/res/layout/activity_test.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/styles.xml create mode 100644 app/src/test/java/com/codigoparallevar/minicards/ExampleUnitTest.java create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa85625 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +*.iml +.idea +.gradle +gradle +*.log +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures +.externalNativeBuild diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..b63a610 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,30 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 25 + buildToolsVersion "25.0.3" + defaultConfig { + applicationId "com.codigoparallevar.minicards" + minSdkVersion 15 + targetSdkVersion 25 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { + exclude group: 'com.android.support', module: 'support-annotations' + }) + implementation 'com.android.support:appcompat-v7:25.4.0' + testImplementation 'junit:junit:4.12' + implementation 'com.android.support.constraint:constraint-layout:1.0.2' +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..3721c37 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,25 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /home/kenkeiras/android-sdk-linux/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/app/src/androidTest/java/com/codigoparallevar/minicards/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/codigoparallevar/minicards/ExampleInstrumentedTest.java new file mode 100644 index 0000000..462e2a4 --- /dev/null +++ b/app/src/androidTest/java/com/codigoparallevar/minicards/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.codigoparallevar.minicards; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.codigoparallevar.minicards", appContext.getPackageName()); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..693f631 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/codigoparallevar/minicards/TestActivity.java b/app/src/main/java/com/codigoparallevar/minicards/TestActivity.java new file mode 100644 index 0000000..9945027 --- /dev/null +++ b/app/src/main/java/com/codigoparallevar/minicards/TestActivity.java @@ -0,0 +1,22 @@ +package com.codigoparallevar.minicards; + +import android.opengl.GLSurfaceView; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; + +import com.codigoparallevar.minicards.rendering.MyGLSurfaceView; + +public class TestActivity extends AppCompatActivity { + + private GLSurfaceView mGLView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Create a GLSurfaceView instance and set it + // as the ContentView for this Activity. + mGLView = new MyGLSurfaceView(this); + setContentView(mGLView); + } +} diff --git a/app/src/main/java/com/codigoparallevar/minicards/rendering/MyGLSurfaceView.java b/app/src/main/java/com/codigoparallevar/minicards/rendering/MyGLSurfaceView.java new file mode 100644 index 0000000..d482f6c --- /dev/null +++ b/app/src/main/java/com/codigoparallevar/minicards/rendering/MyGLSurfaceView.java @@ -0,0 +1,20 @@ +package com.codigoparallevar.minicards.rendering; + +import android.content.Context; +import android.opengl.GLSurfaceView; + +public class MyGLSurfaceView extends GLSurfaceView { + + private final MyGlRenderer mRenderer; + + public MyGLSurfaceView(Context context) { + super(context); + + setEGLContextClientVersion(2); + + mRenderer = new MyGlRenderer(); + + setRenderer(mRenderer); + setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); + } +} diff --git a/app/src/main/java/com/codigoparallevar/minicards/rendering/MyGlRenderer.java b/app/src/main/java/com/codigoparallevar/minicards/rendering/MyGlRenderer.java new file mode 100644 index 0000000..5531c8f --- /dev/null +++ b/app/src/main/java/com/codigoparallevar/minicards/rendering/MyGlRenderer.java @@ -0,0 +1,45 @@ +package com.codigoparallevar.minicards.rendering; + +import android.opengl.GLES20; +import android.opengl.GLSurfaceView; +import android.util.Log; + +import javax.microedition.khronos.egl.EGLConfig; +import javax.microedition.khronos.opengles.GL10; + +class MyGlRenderer implements GLSurfaceView.Renderer { + + private Triangle mTriangle; + private Square mSquare; + + @Override + public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) { + GLES20.glClearColor(0.75f, 0.81f, 1.0f, 1.0f); + + mTriangle = new Triangle(); + mSquare = new Square(); + } + + @Override + public void onSurfaceChanged(GL10 gl10, int width, int height) { + GLES20.glViewport(0, 0, width, height); + } + + @Override + public void onDrawFrame(GL10 gl10) { + GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); + mTriangle.draw(); + } + + public static int loadShader(int type, String shaderCode){ + // create a vertex shader type (GLES20.GL_VERTEX_SHADER) + // or a fragment shader type (GLES20.GL_FRAGMENT_SHADER) + int shader = GLES20.glCreateShader(type); + + // add the source code to the shader and compile it + GLES20.glShaderSource(shader, shaderCode); + GLES20.glCompileShader(shader); + + return shader; + } +} diff --git a/app/src/main/java/com/codigoparallevar/minicards/rendering/Square.java b/app/src/main/java/com/codigoparallevar/minicards/rendering/Square.java new file mode 100644 index 0000000..42846b7 --- /dev/null +++ b/app/src/main/java/com/codigoparallevar/minicards/rendering/Square.java @@ -0,0 +1,67 @@ +package com.codigoparallevar.minicards.rendering; + +import android.opengl.GLES20; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.FloatBuffer; +import java.nio.ShortBuffer; +import java.sql.SQLInvalidAuthorizationSpecException; + +public class Square { + + private final String vertexShaderCode = + "attribute vec4 vPosition;" + + "void main(){" + + "gl_Position = vPosition;" + + "}"; + + private final String fragmentShaderCode = + "precision medium float;" + + "uniform vec4 vColor;" + + "void main(){" + + "gl_FragColor = vColor;" + + "}"; + private final int mProgram; + + + private FloatBuffer vertexBuffer; + private ShortBuffer drawListBuffer; + + static final int COORDS_PER_VERTEX = 3; + static float squareCoords[] = { + -0.5f, 0.5f, 0.0f, // top left + -0.5f, -0.5f, 0.0f, // bottom left + 0.5f, -0.5f, 0.0f, // bottom right + 0.5f, 0.5f, 0.0f, // top right + }; + + private short drawOrder[] = { 0, 1, 2, 0, 2, 3 }; // order to draw vertices + + public Square(){ + ByteBuffer bb = ByteBuffer.allocateDirect(squareCoords.length * 4); + bb.order(ByteOrder.nativeOrder()); + + vertexBuffer = bb.asFloatBuffer(); + vertexBuffer.put(squareCoords); + vertexBuffer.position(0); + + ByteBuffer dlb = ByteBuffer.allocateDirect(drawOrder.length * 2); + dlb.order(ByteOrder.nativeOrder()); + drawListBuffer = dlb.asShortBuffer(); + drawListBuffer.put(drawOrder); + drawListBuffer.position(0); + + + int vertexShader = MyGlRenderer.loadShader(GLES20.GL_VERTEX_SHADER, + vertexShaderCode); + int fragmentShader = MyGlRenderer.loadShader(GLES20.GL_FRAGMENT_SHADER, + fragmentShaderCode); + + mProgram = GLES20.glCreateProgram(); + GLES20.glAttachShader(mProgram, vertexShader); + GLES20.glAttachShader(mProgram, fragmentShader); + + GLES20.glLinkProgram(mProgram); + } +} diff --git a/app/src/main/java/com/codigoparallevar/minicards/rendering/Triangle.java b/app/src/main/java/com/codigoparallevar/minicards/rendering/Triangle.java new file mode 100644 index 0000000..d4c9a93 --- /dev/null +++ b/app/src/main/java/com/codigoparallevar/minicards/rendering/Triangle.java @@ -0,0 +1,80 @@ +package com.codigoparallevar.minicards.rendering; + +import android.opengl.GLES20; +import android.util.Log; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.FloatBuffer; + +public class Triangle { + + private final String vertexShaderCode = + "attribute vec4 vPosition;" + + "void main(){" + + "gl_Position = vPosition;" + + "}"; + + private final String fragmentShaderCode = + "precision mediump float;" + + "uniform vec4 vColor;" + + "void main(){" + + "gl_FragColor = vColor;" + + "}"; + + private FloatBuffer vertexBuffer; + private final int mProgram; + + static final int COORDS_PER_VERTEX = 3; + static float triangleCoords[] = { + 0.0f, 0.622008459f, 0.0f, // top + -0.5f, -0.311004243f, 0.0f, // bottom left + 0.5f, -0.311004243f, 0.0f // bottom right + }; + + // Set color with red, green, blue and alpha (opacity) values + float color[] = { 0.63671875f, 0.76953125f, 0.22265625f, 1.0f }; + private int mPositionHandle; + private int mColorHandle; + + private final int vertexCount = triangleCoords.length / COORDS_PER_VERTEX; + private final int vertexStride = COORDS_PER_VERTEX * 4; // 4 bytes per vertex + + public Triangle(){ + ByteBuffer bb = ByteBuffer.allocateDirect(triangleCoords.length * 4); + bb.order(ByteOrder.nativeOrder()); + + vertexBuffer = bb.asFloatBuffer(); + vertexBuffer.put(triangleCoords); + vertexBuffer.position(0); + + int vertexShader = MyGlRenderer.loadShader(GLES20.GL_VERTEX_SHADER, + vertexShaderCode); + int fragmentShader = MyGlRenderer.loadShader(GLES20.GL_FRAGMENT_SHADER, + fragmentShaderCode); + + mProgram = GLES20.glCreateProgram(); + GLES20.glAttachShader(mProgram, vertexShader); + GLES20.glAttachShader(mProgram, fragmentShader); + + GLES20.glLinkProgram(mProgram); + } + + public void draw(){ + GLES20.glUseProgram(mProgram); + + mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition"); + GLES20.glEnableVertexAttribArray(mPositionHandle); + + GLES20.glVertexAttribPointer(mPositionHandle, COORDS_PER_VERTEX, + GLES20.GL_FLOAT, false, + vertexStride, vertexBuffer); + + mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor"); + + GLES20.glUniform4fv(mColorHandle, 1, color, 0); + Log.d("Triangle", "VB "+ vertexBuffer.get(1)); + GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount); + GLES20.glDisableVertexAttribArray(mPositionHandle); + } +} diff --git a/app/src/main/res/layout/activity_test.xml b/app/src/main/res/layout/activity_test.xml new file mode 100644 index 0000000..ef2448d --- /dev/null +++ b/app/src/main/res/layout/activity_test.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..550730310e5f66436525e196a5884166c4a3fb48 GIT binary patch literal 3358 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..8fab6a3a5b8342cacf009fd1a5481eb3c7faa5ac GIT binary patch literal 5084 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 Ef@vV1$N&HU literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..1eecc0e7d5b0129aff2236d3c4ed2592543a8fe0 GIT binary patch literal 3179 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 R`1$|<002ovPDHLkV1k6j8%Y2F literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..ec87dcebee2b6e52f988e50e087a7dbcfc4321a4 GIT binary patch literal 4648 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..05ca079ca743343d5b2d6037aa42047efa865269 GIT binary patch literal 7381 zcmV;`94h09P)U=_s%3yLVN{D^>21B6i0GbMd8lSw8CN$4GR zQBigkcUKXA1Oa82q@!!@zgqZ00w)|x>_}jww)BP98uB4g?!W9}yW$NJQ zio*E86$NYK_Ei^6-K9SgtuOl5;EJLz23HhbM|_X?k;nJ!v&zEDl!nsMHFPcIL3vT0 z=AzTR=eDMW-L)R(*fEQWkFM3ZkE_wl8&jiEjH}U}9$TaR4gq7UHL&pTE=btFgZ(cB z@tBsbF?`15^#PZ+W**(k+z_Zt_dfGNN6Ehe^Ygp=m#Pv1N>!zZs|X0tDox<8Ro0_L z*Nv~%)&*!4b@ZM=qiiq%|2d_hv~&&kUTKjhf3H%yH!8 zq_W6BP=H2xOH8;qS}A}zm>_gd;eIFpP?@M~R7Rn^*7~Qr<|QURT$|$>Sel!J)^?LD z{^9-ARB7feY>|E&1uzkV%0OjFz%ubI;wF`q%51GJcZJonP>+8FXjStAN|oo0u0~Op zu&=tFtWGMSw^0BPS^$-aHwaz`<$3?o+yz2CSe@E@YY;}N`0^>u?S~a9GZ1fdGmyZw zfVL$7-vUJL3HY*?QC$puLz^AYi8`$SZSFKI{1;-Y7gx9~3t)svYq(5xvR2nN;_r}ezJTjP^c~s zg3$#@!Cb7wu*zb|>8J0mfC)9FlG9UKx<+bxDhriKYI>?G)tOpCKw;)Vr^Smq{W{T+ zCRx$Z}YLaLbjlotX((a``Kn$uY)j6U(zb-(d09kH^Mu?7X?>K>1*k7$!D|EQz z7yrOp&u>fs)+gZm2LBQ{_{z5=-quzi^!9-zim5`VNdi#k^jj5x>Mle^{zcg!OWQc> zwnRokFYl9^M$-$I#j){kT>x%?#!Yj}a?`%>NL)40v5^r?Kyi~$?E*@aI?noy1C#p# z2-6jcI{y;v4|29uB3JE2ygA1D1B$cfi55>9?+aii0C7V7Vqq5eZQJmeV_E^sq?cgozw?XZ`BgVZ%A|GohER@Sgp_5Q^<;FGo? zg@vXq7J$Dnpdi&3GrrC;FHtny7oZ6Nh$H;oPnCMZYwfCFer(XOrM{o6Kh2i)OBMhJ zE7SK>KFf&7;sz-t@a2kg$)#pN{Q^uYddj>g(&_ z7UExD{TH79%R$5U*76l&#fihP1oLProd8Np*Vs>IEZ?fPkHYzz*P#x}M!5X#O*E37 zqVk!RaV|ffMRm89H*rOr&8$#=Jt6UxAmVaybH)bzrm1!@y4-cNdm%<&&_K=98fYew zCbMWh#qhbFP+&mPskfk^p}_#E6S1icCRbK~Fc9vPxL#hiB zbLN|qa<<3ZDQ=SIi3H#8mzO!mTHN0f0fIG3(4GAVe!6wbLWKPnKZ9{-N%lk#1PH|c zqsj|l45t4*ww}qm${6T>`i#B{Y)SzBK9iB)xBvZx1^M6o@-w8Jeh&gm6s;1#U&DLo`k8TB+#Z z@_bl&d_SapcnT`coq@l6c?nKm`wyJG{uO+New#r5(`U!=J3XdJMFPo%MB%m8$~6*Q z2$64ImS5`XAPesksa3IZ2b9QLEP!!zEC-*|H!G0S4o#1a`6ebQ)8s{+mMt5c&Y-g18nym7GqHSu%ZEy#NR zT^L@XWMwiDzyU5u%;7Lq`e`S3_pUbGkP!U@rfm)!TU~O)Q39}5P|URg8Q%)1vO}

HWg8C^o)QF79Mg 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 Hu0mjf20Ao4 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..6f67f21bac1024e18e1584913e5bcd5e1395456a GIT binary patch literal 7008 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 LNkvXXu0mjfne+ST literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..0327e13fa7927a4a05b16efa6db900c7b5591043 GIT binary patch literal 9442 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

Be^f zfRdLN6alsV)L|yGBJVmqC~k(FK*38<#T=R1Oynm+YqR(y^(|TCcEq~4fXG-qgMlKv$7!Xnz#e*&>wVzIO}hMS`O#lzNacDdh8uzBwQq)L48r0 z#r;|IK^ORlw)-mtt{e_h%++1fllfQYYX*-e2XS{_+TZum4WohfScXGv|qXPQ> zq_!gwR7q&9rSx!Gdb`QaW8t63d=jA-WFDewzvyJ!rQ>noWb^7vJ?X|RFaF@wE-pPh z3Ou!SY2GjRnE>_t#>7UwX?O0p7djz0q0mrC&~TU|Lf6K7!=RdNC&wh;MV0hdm~koB zJED?U+USq#(oJ(?s)W+D@sAzX6RE!qLr%+<5CJtn6u6er*^q$(oZWw3513^MC0VOC z%%|W7g}SuX9@}m<`iAZVEeRIKf9C(n<}4Nv-z@&ZBdOq3F42A&TEgMM!(0>Kb;2e* zcysxmT07|LuWpK<7JQR*4m@}gK+18(f{5W2B2eaK0Rz1E4BN24s4v-X@wBXp#a=Ir z=Ac0PdH%2!NhHkVRGNaqK8EkRDZv1GZVcURk2kSl3v*+o?Hx+ z;<$SmGdxv}-!BOpFc+o-?HTuj_LXP_b%qWxAKZK>tooDSI9;cgzB~njj@ulA}%Zb6a`i+tI?#xY!bH5Z1O9OpZ-cJmB z7_2Swq%g%e1Xa!Ytf|_iG9;#Jl`O5m<1qtkY|-dzrKd|x?Ddu@Vq%*J$9Zpkr#XfOim3a4mhe5>ie0?Ytz}E;@63Y;T_@H zDAvflL}A3~vIE8JLDNcc;r{-gEvi5g6eKbG2=v*={*?J=d$C~8$@=an^#ZE=y+B$Y zQO)K}<^3kYN{{*dSsEz+bcs{xK&JPosTF-n4@w|y!_FUj{r%cwrlu(M`=9-LB|13V zsir{BW_Hmj9IHfaHO7`4}hH-YSznD7c z>o(A^y|6V9G+80$%oOZa_ItmYGeT4oNIk3e?h=;4rMUf*C`qht_UEMPTcoV0`t2SR zm+w?SZz?2OVg6l(aBCUJJz%wKjBZ8$kk|QvCj;Y;3-kiB*Y^p-X|?@1(b%Sr$JHc5r&lJ0oH2d2 z-ba?=9porCR}Jdq1EhHibg}#&5Lc*q+T(YY8pLu_U-#h6z;lY<_+s`H>jyTrIqYYj`uOWA$}3+orj|4 zBcXp>v9Nv~uRTLB9Z1)@`S|W6V*Z^O#2>SQZg_7Td2n;=X;5w*T~nsQ;iR6f_|Ciy zc8h{@J|_i(RFc4>KgX^EV{oW->xr8IM_72{K99g+euwI;paV*q*D)QGU*cU}I7wN`T$ zb4Vz<03@wpx10LXJ8hf^rfNt|edkubmS?$uMNM`jv2G?}TFK`3 zO>2k+Jz9)mB4|^vFhP0oEfa-?XPj~`v36XVO z4LDV8uf_p*(ZC>-grBz7>PCjdSPd>#Ym)!uVByw+K|_axOMX@WwUHru6cm?{6aM~s ziRm)yVPa`PFG@k*tmhpcI>SV?4~|0S+M&Y@*eWmSIgw*Q*E=Q`{Wr}VndkBSA198* zbvc{%YaJ%Xsn%nIPh${Ks{vJpzO$CS569+P*^6HcelE+{8b=?us8WYCEZ@9s%{dW& zRE(-Py6RiAr?DmbVRwp$aD)diH|~$ z<&QobV|JQ|j#zY* zlS;eH>}lHxaQngGmI^;9nVSV91IGz_UCvtGh?U2fg+!d0yPa97U4-6zRIj_~d0Vz~ zI&Y;rb!9sDNkQx`yV9OiAA1~>_xl3VYGU})H!B=k@S-e#VcoAhPz^FByU|;i=)0uG zLb&yZUs>n^N2_z=KMGg9O0ON{kC(%qGQ=Mb87Z*2z`mpxXVyf#c6c%|1o6xy;0T$Kzg?Ee6y5{Tyj literal 0 HcmV?d00001 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..3ab3e9c --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #3F51B5 + #303F9F + #FF4081 + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..7922b7f --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + mini-cards + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..5885930 --- /dev/null +++ b/app/src/main/res/values/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/app/src/test/java/com/codigoparallevar/minicards/ExampleUnitTest.java b/app/src/test/java/com/codigoparallevar/minicards/ExampleUnitTest.java new file mode 100644 index 0000000..81198b1 --- /dev/null +++ b/app/src/test/java/com/codigoparallevar/minicards/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.codigoparallevar.minicards; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..01b4799 --- /dev/null +++ b/build.gradle @@ -0,0 +1,27 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + + repositories { + google() + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:3.0.0-alpha4' + + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..aac7c9b --- /dev/null +++ b/gradle.properties @@ -0,0 +1,17 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx1536m + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..9d82f78 --- /dev/null +++ b/gradlew @@ -0,0 +1,160 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..aec9973 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..e7b4def --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +include ':app'