Index: sky/shell/apk/src/org/domokit/sky/shell/PlatformView.java |
diff --git a/sky/shell/apk/src/org/domokit/sky/shell/PlatformView.java b/sky/shell/apk/src/org/domokit/sky/shell/PlatformView.java |
index ac8879d43c07391a0bed1a0b803f0f9ac542581f..0934fc5077905f27d942d1eef154ce830fcf880a 100644 |
--- a/sky/shell/apk/src/org/domokit/sky/shell/PlatformView.java |
+++ b/sky/shell/apk/src/org/domokit/sky/shell/PlatformView.java |
@@ -5,12 +5,22 @@ |
package org.domokit.sky.shell; |
import android.content.Context; |
+import android.view.MotionEvent; |
import android.view.Surface; |
import android.view.SurfaceHolder; |
import android.view.SurfaceView; |
import android.view.View; |
import org.chromium.base.JNINamespace; |
+import org.chromium.mojo.bindings.InterfaceRequest; |
+import org.chromium.mojo.system.Core; |
+import org.chromium.mojo.system.Pair; |
+import org.chromium.mojo.system.impl.CoreImpl; |
+import org.chromium.mojom.sky.EventType; |
+import org.chromium.mojom.sky.InputEvent; |
+import org.chromium.mojom.sky.PointerData; |
+import org.chromium.mojom.sky.PointerKind; |
+import org.chromium.mojom.sky.ViewportObserver; |
/** |
* A view containing Sky |
@@ -18,6 +28,7 @@ import org.chromium.base.JNINamespace; |
@JNINamespace("sky::shell") |
public class PlatformView extends SurfaceView { |
private long mNativePlatformView; |
+ private ViewportObserver.Proxy mViewportObserver; |
private final SurfaceHolder.Callback mSurfaceCallback; |
public PlatformView(Context context) { |
@@ -26,7 +37,7 @@ public class PlatformView extends SurfaceView { |
setFocusable(true); |
setFocusableInTouchMode(true); |
- mNativePlatformView = nativeAttach(); |
+ attach(); |
assert mNativePlatformView != 0; |
final float density = context.getResources().getDisplayMetrics().density; |
@@ -34,8 +45,8 @@ public class PlatformView extends SurfaceView { |
mSurfaceCallback = new SurfaceHolder.Callback() { |
@Override |
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { |
- assert mNativePlatformView != 0; |
- nativeSurfaceSetSize(mNativePlatformView, width, height, density); |
+ assert mViewportObserver != null; |
+ mViewportObserver.onViewportMetricsChanged(width, height, density); |
} |
@Override |
@@ -69,10 +80,45 @@ public class PlatformView extends SurfaceView { |
} |
} |
- private static native long nativeAttach(); |
+ private int getTypeForAction(int maskedAction) { |
+ if (maskedAction == MotionEvent.ACTION_DOWN) |
+ return EventType.POINTER_DOWN; |
+ if (maskedAction == MotionEvent.ACTION_UP) |
+ return EventType.POINTER_UP; |
+ if (maskedAction == MotionEvent.ACTION_MOVE) |
+ return EventType.POINTER_MOVE; |
+ if (maskedAction == MotionEvent.ACTION_CANCEL) |
+ return EventType.POINTER_CANCEL; |
+ return EventType.UNKNOWN; |
+ } |
+ |
+ @Override |
+ public boolean onTouchEvent(MotionEvent event) { |
+ PointerData pointerData = new PointerData(); |
+ pointerData.pointer = event.getPointerId(0); |
+ pointerData.kind = PointerKind.TOUCH; |
+ pointerData.x = event.getX(); |
+ pointerData.y = event.getY(); |
+ |
+ InputEvent inputEvent = new InputEvent(); |
+ inputEvent.type = getTypeForAction(event.getActionMasked()); |
+ inputEvent.timeStamp = event.getEventTime(); |
+ inputEvent.pointerData = pointerData; |
+ |
+ mViewportObserver.onInputEvent(inputEvent); |
+ return true; |
+ } |
+ |
+ private void attach() { |
+ Core core = CoreImpl.getInstance(); |
+ Pair<ViewportObserver.Proxy, InterfaceRequest<ViewportObserver>> result = |
+ ViewportObserver.MANAGER.getInterfaceRequest(core); |
+ mViewportObserver = result.first; |
+ mNativePlatformView = nativeAttach(result.second.passHandle().releaseNativeHandle()); |
+ } |
+ |
+ private static native long nativeAttach(int inputObserverHandle); |
private static native void nativeDetach(long nativePlatformView); |
private static native void nativeSurfaceCreated(long nativePlatformView, Surface surface); |
private static native void nativeSurfaceDestroyed(long nativePlatformView); |
- private static native void nativeSurfaceSetSize( |
- long nativePlatformView, int width, int height, float density); |
} |