Browse Source

added opengl view with spinning triangle to Home

Fabio Arnold 10 years ago
parent
commit
c85e0b6c98

+ 3 - 0
AndroidManifest.xml

@@ -15,6 +15,9 @@
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    
+    <!-- Tell the system this app requires OpenGL ES 2.0. -->
+	<uses-feature android:glEsVersion="0x00020000" android:required="true" />
 
     <application
         android:allowBackup="true"

+ 53 - 47
res/layout/fragment_home.xml

@@ -1,119 +1,125 @@
 <?xml version="1.0" encoding="utf-8"?>
-
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical" android:layout_width="match_parent"
+    android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:weightSum="1">
+    android:orientation="vertical"
+    android:weightSum="1" >
 
-    <Space
+    <FrameLayout
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_weight="0.93" />
+        android:layout_height="match_parent"
+        android:layout_weight="1" >
+
+        <de.tudarmstadt.informatik.hostage.ui2.fragment.HomeGLSurfaceView
+            android:id="@+id/surfaceview"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+    </FrameLayout>
 
     <TextView
+        android:id="@+id/textView"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:text="Current connection"
-        android:id="@+id/textView"
-        android:layout_weight="0"
+        android:layout_marginBottom="5dp"
         android:layout_marginLeft="15dp"
-        android:layout_marginTop="5dp"
         android:layout_marginRight="15dp"
-        android:layout_marginBottom="5dp"
+        android:layout_marginTop="5dp"
+        android:layout_weight="0"
+        android:text="Current connection"
         android:textStyle="bold" />
 
     <View
         android:layout_width="fill_parent"
         android:layout_height="1dp"
-        android:background="@android:color/darker_gray"
         android:layout_marginLeft="15dp"
-        android:layout_marginRight="15dp" />
+        android:layout_marginRight="15dp"
+        android:background="@android:color/darker_gray" />
 
     <LinearLayout
-        android:orientation="vertical"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginRight="15dp"
         android:layout_marginLeft="15dp"
-        android:weightSum="1">
+        android:layout_marginRight="15dp"
+        android:orientation="vertical"
+        android:weightSum="1" >
 
         <TextView
+            android:id="@+id/textView2"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceLarge"
-            android:text="Eduroam"
-            android:id="@+id/textView2"
             android:layout_gravity="center_horizontal"
             android:layout_marginTop="20dp"
+            android:text="Eduroam"
+            android:textAppearance="?android:attr/textAppearanceLarge"
             android:textSize="26sp" />
 
         <TextView
+            android:id="@+id/textView3"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:textAppearance="@android:style/TextAppearance.Holo.Small"
-            android:text="Insecure"
-            android:id="@+id/textView3"
             android:layout_gravity="center_horizontal"
-            android:textSize="13sp"
-            android:textColor="@color/holo_red" />
+            android:text="Insecure"
+            android:textAppearance="@android:style/TextAppearance.Holo.Small"
+            android:textColor="@color/holo_red"
+            android:textSize="13sp" />
 
         <TextView
+            android:id="@+id/textView4"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="125 attacks recorded"
-            android:id="@+id/textView4"
             android:layout_gravity="center_horizontal"
-            android:textSize="11sp"
-            android:textColor="@color/holo_red" />
+            android:text="125 attacks recorded"
+            android:textColor="@color/holo_red"
+            android:textSize="11sp" />
 
         <RelativeLayout
             android:layout_width="match_parent"
             android:layout_height="79dp"
-            android:layout_weight="0.32">
+            android:layout_weight="0.32" >
 
             <TextView
+                android:id="@+id/textView5"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:textAppearance="?android:attr/textAppearanceSmall"
+                android:layout_centerHorizontal="true"
+                android:layout_centerVertical="true"
                 android:text="This network is monitored by HosTaGe"
-                android:id="@+id/textView5"
-                android:textSize="11sp"
+                android:textAppearance="?android:attr/textAppearanceSmall"
                 android:textColor="@color/holo_dark_green"
-                android:layout_centerVertical="true"
-                android:layout_centerHorizontal="true" />
+                android:textSize="11sp" />
 
             <Button
+                android:id="@+id/button"
                 style="?android:attr/buttonStyleSmall"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:text="Stop monitoring"
-                android:id="@+id/button"
-                android:layout_gravity="right"
-                android:textSize="12dp"
-                android:layout_alignParentBottom="true"
+                android:layout_alignEnd="@+id/textView5"
                 android:layout_alignLeft="@+id/textView5"
+                android:layout_alignParentBottom="true"
+                android:layout_alignRight="@+id/textView5"
                 android:layout_alignStart="@+id/textView5"
                 android:layout_below="@+id/imageView"
-                android:layout_alignRight="@+id/textView5"
-                android:layout_alignEnd="@+id/textView5" />
+                android:layout_gravity="right"
+                android:text="Stop monitoring"
+                android:textSize="12dp" />
 
             <ImageView
+                android:id="@+id/imageView"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:id="@+id/imageView"
-                android:src="@android:drawable/presence_online"
                 android:layout_centerVertical="true"
+                android:layout_marginRight="19dp"
                 android:layout_toLeftOf="@+id/textView5"
-                android:layout_marginRight="19dp" />
-
+                android:src="@android:drawable/presence_online" />
         </RelativeLayout>
     </LinearLayout>
 
     <View
         android:layout_width="fill_parent"
         android:layout_height="1dp"
-        android:background="@android:color/darker_gray"
         android:layout_marginLeft="15dp"
         android:layout_marginRight="15dp"
-        android:layout_marginTop="10dp" />
+        android:layout_marginTop="10dp"
+        android:background="@android:color/darker_gray" />
+
 </LinearLayout>

+ 2 - 0
src/de/tudarmstadt/informatik/hostage/ui2/activity/MainActivity.java

@@ -83,6 +83,8 @@ public class MainActivity extends Activity {
             }
         };
         mDrawerLayout.setDrawerListener(mDrawerToggle);
+        
+        //HomeGLSurfaceView surfaceView = (HomeGLSurfaceView)findViewById(R.id.surfaceview);
 
         if (savedInstanceState == null) {
             // on first time display view for first nav item

+ 87 - 0
src/de/tudarmstadt/informatik/hostage/ui2/fragment/HomeGLRenderer.java

@@ -0,0 +1,87 @@
+package de.tudarmstadt.informatik.hostage.ui2.fragment;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.FloatBuffer;
+
+import javax.microedition.khronos.egl.EGLConfig;
+import javax.microedition.khronos.opengles.GL10;
+
+import android.opengl.GLES20;
+import android.opengl.GLSurfaceView.Renderer;
+import android.opengl.Matrix;
+
+public class HomeGLRenderer implements Renderer {
+	public static int loadShader(int type, String source) {
+		int shader = GLES20.glCreateShader(type);
+		GLES20.glShaderSource(shader, source);
+		GLES20.glCompileShader(shader);
+		return shader;
+	}
+	
+	public static int loadProgram(String vertexSource, String fragmentSource) {
+		int program = GLES20.glCreateProgram();
+		GLES20.glAttachShader(program, loadShader(GLES20.GL_VERTEX_SHADER, vertexSource));
+		GLES20.glAttachShader(program, loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentSource));
+		GLES20.glLinkProgram(program);
+		return program;
+	}
+	
+	private int program;
+	private FloatBuffer vertexBuffer;
+	private float [] mvp;
+
+	public HomeGLRenderer() {}
+	
+	public void onSurfaceCreated(GL10 arg0, EGLConfig arg1) {
+		GLES20.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
+
+		final float [] positions = {
+				0.0f, 0.5f, 0.0f, 1.0f,
+				0.5f, -0.5f, 0.0f, 1.0f,
+				-0.5f, -0.5f, 0.0f, 1.0f,
+		};
+		ByteBuffer bb = ByteBuffer.allocateDirect(4 * positions.length);
+		bb.order(ByteOrder.nativeOrder());
+		vertexBuffer = bb.asFloatBuffer();
+		vertexBuffer.put(positions);
+		vertexBuffer.position(0);
+		
+		mvp = new float[16];
+		Matrix.setIdentityM(mvp, 0);
+		
+		final String vertexSource =
+				"uniform mat4 mvp;" +
+				"attribute vec4 position;" +
+				"void main() {" +
+				"	gl_Position = mvp * position;" +
+				"}";
+		final String fragmentSource =
+				"precision mediump float;" +
+				"uniform vec4 color;" +
+				"void main() {" +
+				"	gl_FragColor = color;" +
+				"}";
+		program = loadProgram(vertexSource, fragmentSource);
+	}
+	
+	public void onDrawFrame(GL10 arg0) {
+		GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
+		GLES20.glUseProgram(program);
+		int positionAttribLoc = GLES20.glGetAttribLocation(program, "position");
+		int colorUniformLoc = GLES20.glGetUniformLocation(program, "color");
+		int mvpUniformLoc = GLES20.glGetUniformLocation(program, "mvp");
+		float [] color = {0.0f, 1.0f, 0.0f, 1.0f};
+		GLES20.glUniform4fv(colorUniformLoc, 1, color, 0);
+		Matrix.rotateM(mvp, 0, 4.0f, 0.0f, 0.0f, 1.0f);
+		GLES20.glUniformMatrix4fv(mvpUniformLoc, 1, false, mvp, 0);
+		GLES20.glEnableVertexAttribArray(positionAttribLoc);
+		GLES20.glVertexAttribPointer(positionAttribLoc, 4, GLES20.GL_FLOAT, false, 0, vertexBuffer);
+		GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3);
+		GLES20.glDisableVertexAttribArray(positionAttribLoc);
+	}
+
+	public void onSurfaceChanged(GL10 arg0, int width, int height) {
+		GLES20.glViewport(0, 0, width, height);
+	}
+}

+ 24 - 0
src/de/tudarmstadt/informatik/hostage/ui2/fragment/HomeGLSurfaceView.java

@@ -0,0 +1,24 @@
+package de.tudarmstadt.informatik.hostage.ui2.fragment;
+
+import android.content.Context;
+import android.opengl.GLSurfaceView;
+import android.util.AttributeSet;
+import android.util.Log;
+
+public class HomeGLSurfaceView extends GLSurfaceView {
+
+	public HomeGLSurfaceView(Context context) {
+		super(context);
+		Log.d("gl", "constructor w/o attr");
+		// TODO Auto-generated constructor stub
+	}
+
+	public HomeGLSurfaceView(Context context, AttributeSet attrs) {
+		super(context, attrs);
+		Log.d("gl", "constructor attr");
+		setEGLContextClientVersion(2); // OpenGL ES 2.0
+        setRenderer(new HomeGLRenderer());
+		// TODO Auto-generated constructor stub
+	}
+
+}