1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 package org.chromium.mojo;
7 import android.app.Activity;
8 import android.content.Context;
9 import android.view.MotionEvent;
10 import android.view.Surface;
11 import android.view.SurfaceHolder;
12 import android.view.SurfaceView;
14 import org.chromium.base.CalledByNative;
15 import org.chromium.base.JNINamespace;
18 * Exposes SurfaceView to native code.
20 @JNINamespace("mojo::services")
21 public class NativeViewportAndroid extends SurfaceView {
23 private long mNativeMojoViewport;
24 private final SurfaceHolder.Callback mSurfaceCallback;
26 @SuppressWarnings("unused")
28 public static void createForActivity(Activity activity, long nativeViewport) {
29 activity.setContentView(new NativeViewportAndroid(activity, nativeViewport));
32 public NativeViewportAndroid(Context context, long nativeViewport) {
35 mNativeMojoViewport = nativeViewport;
36 assert mNativeMojoViewport != 0;
38 mSurfaceCallback = new SurfaceHolder.Callback() {
40 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
41 assert mNativeMojoViewport != 0;
42 nativeSurfaceSetSize(mNativeMojoViewport, width, height);
46 public void surfaceCreated(SurfaceHolder holder) {
47 assert mNativeMojoViewport != 0;
48 nativeSurfaceCreated(mNativeMojoViewport, holder.getSurface());
52 public void surfaceDestroyed(SurfaceHolder holder) {
53 assert mNativeMojoViewport != 0;
54 nativeSurfaceDestroyed(mNativeMojoViewport);
57 getHolder().addCallback(mSurfaceCallback);
61 // TODO(abarth): Someone needs to call destroy at some point.
62 public void destroy() {
63 getHolder().removeCallback(mSurfaceCallback);
64 nativeDestroy(mNativeMojoViewport);
65 mNativeMojoViewport = 0;
69 public boolean onTouchEvent(MotionEvent event) {
70 return nativeTouchEvent(mNativeMojoViewport,
71 event.getPointerId(0),
73 event.getX(), event.getY(),
74 event.getEventTime());
77 private static native void nativeDestroy(long nativeNativeViewportAndroid);
78 private static native void nativeSurfaceCreated(
79 long nativeNativeViewportAndroid, Surface surface);
80 private static native void nativeSurfaceDestroyed(
81 long nativeNativeViewportAndroid);
82 private static native void nativeSurfaceSetSize(
83 long nativeNativeViewportAndroid,
84 int width, int height);
85 private static native boolean nativeTouchEvent(
86 long nativeNativeViewportAndroid,