Upstream version 11.39.266.0
[platform/framework/web/crosswalk.git] / src / mojo / services / native_viewport / android / src / org / chromium / mojo / PlatformViewportAndroid.java
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.
4
5 package org.chromium.mojo;
6
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;
13
14 import org.chromium.base.CalledByNative;
15 import org.chromium.base.JNINamespace;
16
17 /**
18  * Exposes SurfaceView to native code.
19  */
20 @JNINamespace("mojo")
21 public class PlatformViewportAndroid extends SurfaceView {
22
23     private long mNativeMojoViewport;
24     private final SurfaceHolder.Callback mSurfaceCallback;
25
26     @SuppressWarnings("unused")
27     @CalledByNative
28     public static void createForActivity(Activity activity, long nativeViewport) {
29         activity.setContentView(new PlatformViewportAndroid(activity, nativeViewport));
30     }
31
32     public PlatformViewportAndroid(Context context, long nativeViewport) {
33         super(context);
34
35         mNativeMojoViewport = nativeViewport;
36         assert mNativeMojoViewport != 0;
37
38         mSurfaceCallback = new SurfaceHolder.Callback() {
39             @Override
40             public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
41                 assert mNativeMojoViewport != 0;
42                 nativeSurfaceSetSize(mNativeMojoViewport, width, height);
43             }
44
45             @Override
46             public void surfaceCreated(SurfaceHolder holder) {
47                 assert mNativeMojoViewport != 0;
48                 nativeSurfaceCreated(mNativeMojoViewport, holder.getSurface());
49             }
50
51             @Override
52             public void surfaceDestroyed(SurfaceHolder holder) {
53                 assert mNativeMojoViewport != 0;
54                 nativeSurfaceDestroyed(mNativeMojoViewport);
55             }
56         };
57         getHolder().addCallback(mSurfaceCallback);
58
59     }
60
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;
66     }
67
68     @Override
69     public boolean onTouchEvent(MotionEvent event) {
70         return nativeTouchEvent(mNativeMojoViewport,
71                                 event.getPointerId(0),
72                                 event.getAction(),
73                                 event.getX(), event.getY(),
74                                 event.getEventTime());
75     }
76
77     private static native void nativeDestroy(long nativePlatformViewportAndroid);
78     private static native void nativeSurfaceCreated(
79         long nativePlatformViewportAndroid, Surface surface);
80     private static native void nativeSurfaceDestroyed(
81         long nativePlatformViewportAndroid);
82     private static native void nativeSurfaceSetSize(
83         long nativePlatformViewportAndroid,
84         int width, int height);
85     private static native boolean nativeTouchEvent(
86         long nativePlatformViewportAndroid,
87         int pointerId,
88         int action,
89         float x, float y,
90         long timeMs);
91 };