aboutsummaryrefslogtreecommitdiffhomepage
path: root/android_sample/SampleApp/src/com
diff options
context:
space:
mode:
authorGravatar djsollen@google.com <djsollen@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-06-13 16:58:40 +0000
committerGravatar djsollen@google.com <djsollen@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-06-13 16:58:40 +0000
commite32b5837c3f35b80502759f3de3e8cadf6625f4e (patch)
tree9073864ddc2d7ec2d5b83fb1c318218f41dc7d89 /android_sample/SampleApp/src/com
parentfc0685652ea1617b93aed84c7674fcafd55a30f6 (diff)
Updates to the Android SampleApp
Diffstat (limited to 'android_sample/SampleApp/src/com')
-rw-r--r--android_sample/SampleApp/src/com/skia/sampleapp/SampleApp.java149
-rw-r--r--android_sample/SampleApp/src/com/skia/sampleapp/SampleView.java111
2 files changed, 214 insertions, 46 deletions
diff --git a/android_sample/SampleApp/src/com/skia/sampleapp/SampleApp.java b/android_sample/SampleApp/src/com/skia/sampleapp/SampleApp.java
index b02c4d7fe4..fe733603eb 100644
--- a/android_sample/SampleApp/src/com/skia/sampleapp/SampleApp.java
+++ b/android_sample/SampleApp/src/com/skia/sampleapp/SampleApp.java
@@ -19,94 +19,151 @@ package com.skia.sampleapp;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
+import android.opengl.GLSurfaceView;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
import android.util.AttributeSet;
import android.view.KeyEvent;
+import android.view.Menu;
+import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
+import javax.microedition.khronos.egl.EGLConfig;
+import javax.microedition.khronos.opengles.GL10;
+
public class SampleApp extends Activity
{
private TextView mTitle;
-
- public class SampleView extends View {
- public SampleView(Context context) {
- super(context);
- createOSWindow(this);
- }
-
- @Override
- protected void onDraw(Canvas canvas) {
- drawToCanvas(canvas);
- }
-
- @Override
- protected void onSizeChanged(int w, int h, int oldw, int oldh) {
- updateSize(w, h);
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- final int x = (int) event.getX();
- final int y = (int) event.getY();
- final int action = event.getAction();
- handleClick(x, y, action);
- return true;
- }
- }
+ private SampleView mView;
@Override
- public void onCreate(Bundle savedInstanceState)
- {
+ public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- init();
setContentView(R.layout.layout);
mTitle = (TextView) findViewById(R.id.title_view);
LinearLayout holder = (LinearLayout) findViewById(R.id.holder);
- View view = new SampleView(this);
- holder.addView(view, new LinearLayout.LayoutParams(
+ mView = new SampleView(this);
+
+ holder.addView(mView, new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
+
+ mTitle.setVisibility(View.GONE);
+ getActionBar().setDisplayShowHomeEnabled(false);
+
}
@Override
- public void onDestroy()
- {
- term();
+ public void onDestroy() {
+ mView.queueEvent(new Runnable() {
+ @Override
+ public void run() {
+ term();
+ }
+ });
super.onDestroy();
}
@Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.sample, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.overview:
+ mView.queueEvent(new Runnable() {
+ @Override
+ public void run() {
+ handleKeyDown(KeyEvent.KEYCODE_BACK, 0);
+ }
+ });
+ return true;
+ case R.id.next:
+ mView.queueEvent(new Runnable() {
+ @Override
+ public void run() {
+ handleKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, 0);
+ }
+ });
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ @Override
public boolean dispatchKeyEvent(KeyEvent event) {
+ final int keycode = event.getKeyCode();
+ if (keycode == KeyEvent.KEYCODE_BACK) {
+ if (event.getAction() == KeyEvent.ACTION_UP) {
+ finish();
+ }
+ return true;
+ }
switch (event.getAction()) {
case KeyEvent.ACTION_DOWN:
- int uni = event.getUnicodeChar(event.getMetaState());
- return handleKeyDown(event.getKeyCode(), uni);
+ final int uni = event.getUnicodeChar(event.getMetaState());
+ mView.queueEvent(new Runnable() {
+ @Override
+ public void run() {
+ handleKeyDown(keycode, uni);
+ }
+ });
+
+ return true;
case KeyEvent.ACTION_UP:
- return handleKeyUp(event.getKeyCode());
+ mView.queueEvent(new Runnable() {
+ @Override
+ public void run() {
+ handleKeyUp(keycode);
+ }
+ });
+ return true;
default:
return false;
}
}
+ private static final int SET_TITLE = 1;
+
+ private Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case SET_TITLE:
+ mTitle.setText((String) msg.obj);
+ SampleApp.this.getActionBar().setSubtitle((String) msg.obj);
+ break;
+ default:
+ break;
+ }
+ }
+ };
+
@Override
public void setTitle(CharSequence title) {
- mTitle.setText(title);
+ mHandler.obtainMessage(SET_TITLE, title).sendToTarget();
}
- private native void drawToCanvas(Canvas canvas);
- private native void init();
- private native void term();
+ native void draw();
+ native void init();
+ native void term();
// Currently depends on init having already been called.
- private native void createOSWindow(SampleView view);
- private native void updateSize(int w, int h);
- private native void handleClick(int x, int y, int state);
- private native boolean handleKeyDown(int key, int uni);
- private native boolean handleKeyUp(int key);
+ native void createOSWindow(GLSurfaceView view);
+ native void updateSize(int w, int h);
+ native void handleClick(int x, int y, int state);
+ native boolean handleKeyDown(int key, int uni);
+ native boolean handleKeyUp(int key);
+ native void zoom(float factor);
static {
System.loadLibrary("skia-sample");
diff --git a/android_sample/SampleApp/src/com/skia/sampleapp/SampleView.java b/android_sample/SampleApp/src/com/skia/sampleapp/SampleView.java
new file mode 100644
index 0000000000..0d76dcea93
--- /dev/null
+++ b/android_sample/SampleApp/src/com/skia/sampleapp/SampleView.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2011 Skia
+ *
+ * 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.
+ */
+
+package com.skia.sampleapp;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.opengl.GLSurfaceView;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.util.AttributeSet;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
+import android.view.ScaleGestureDetector;
+import android.view.ScaleGestureDetector.OnScaleGestureListener;
+
+import javax.microedition.khronos.egl.EGLConfig;
+import javax.microedition.khronos.opengles.GL10;
+
+public class SampleView extends GLSurfaceView implements OnScaleGestureListener {
+
+ private final SampleApp mApp;
+ private ScaleGestureDetector mDetector;
+ public SampleView(SampleApp app) {
+ super(app);
+ mApp = app;
+ setEGLContextClientVersion(2);
+ setEGLConfigChooser(8,8,8,8,0,8);
+ setRenderer(new SampleView.Renderer());
+ setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
+ mDetector = new ScaleGestureDetector(app, this);
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ mDetector.onTouchEvent(event);
+ if (mDetector.isInProgress()) {
+ return true;
+ }
+
+ final int x = (int) event.getX();
+ final int y = (int) event.getY();
+ final int action = event.getAction();
+ queueEvent(new Runnable() {
+ @Override
+ public void run() {
+ mApp.handleClick(x, y, action);
+ }
+ });
+
+ return true;
+ }
+ // ScaleGestureDetector.OnScaleGestureListener implementation
+ @Override
+ public boolean onScaleBegin(ScaleGestureDetector detector) {
+ return true;
+ }
+
+ @Override
+ public boolean onScale(ScaleGestureDetector detector) {
+ if (detector.getScaleFactor() != 1) {
+ final float difference = detector.getCurrentSpan() - detector.getPreviousSpan();
+ queueEvent(new Runnable() {
+ @Override
+ public void run() {
+ mApp.zoom(difference * .03f);
+ }
+ });
+
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void onScaleEnd(ScaleGestureDetector detector) {
+
+ }
+
+ private class Renderer implements GLSurfaceView.Renderer {
+ public void onDrawFrame(GL10 gl) {
+ mApp.draw();
+ }
+
+ public void onSurfaceChanged(GL10 gl, int width, int height) {
+ mApp.updateSize(width, height);
+ }
+
+ public void onSurfaceCreated(GL10 gl, EGLConfig config) {
+ gl.glClearStencil(0);
+ gl.glClear(gl.GL_STENCIL_BUFFER_BIT);
+ mApp.init();
+ mApp.createOSWindow(SampleView.this);
+ }
+ }
+} \ No newline at end of file