Index: blimp/client/android/java/src/org/chromium/blimp/BlimpView.java |
diff --git a/blimp/client/android/java/src/org/chromium/blimp/BlimpView.java b/blimp/client/android/java/src/org/chromium/blimp/BlimpView.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b358ae7dc7cbc358cc5cffbb6d2f99f89e383225 |
--- /dev/null |
+++ b/blimp/client/android/java/src/org/chromium/blimp/BlimpView.java |
@@ -0,0 +1,127 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.blimp; |
+ |
+import android.content.Context; |
+import android.graphics.Point; |
+import android.os.Build; |
+import android.util.AttributeSet; |
+import android.view.Surface; |
+import android.view.SurfaceHolder; |
+import android.view.SurfaceView; |
+import android.view.WindowManager; |
+ |
+import org.chromium.base.annotations.JNINamespace; |
+ |
+/** |
+ * A {@link View} that will visually represent the Blimp rendered content. This {@link View} starts |
+ * a native compositor. |
+ */ |
+@JNINamespace("blimp") |
+public class BlimpView extends SurfaceView implements SurfaceHolder.Callback2 { |
+ private long mNativeBlimpViewPtr; |
Wez
2015/08/27 02:01:51
n00b: Is mFoo the preferred form for member variab
David Trainor- moved to gerrit
2015/08/28 01:23:46
Ah yeah that's part of the Android style guide (ht
Wez
2015/09/03 00:49:26
Acknowledged.
|
+ |
+ /** |
+ * Builds a new {@link BlimpView}. |
+ * @param context A {@link Context} instance. |
+ * @param attrs An {@link AttributeSet} instance. |
+ */ |
+ public BlimpView(Context context, AttributeSet attrs) { |
+ super(context, attrs); |
+ } |
+ |
+ @Override |
+ protected void onFinishInflate() { |
Wez
2015/08/27 02:01:51
Add a comment to clarify which interface this is o
David Trainor- moved to gerrit
2015/08/28 01:23:46
It's overriding a base class method. I can move i
Wez
2015/09/03 00:49:27
Acknowledged.
|
+ super.onFinishInflate(); |
+ |
+ setZOrderMediaOverlay(true); |
+ setVisibility(GONE); |
+ } |
+ |
+ /** |
+ * Starts up rendering for this {@link View}. This will start up the native compositor and will |
+ * display it's contents. |
+ */ |
+ public void initializeRenderer() { |
+ assert mNativeBlimpViewPtr == 0; |
+ |
+ WindowManager windowManager = |
+ (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); |
+ Point displaySize = new Point(); |
+ windowManager.getDefaultDisplay().getSize(displaySize); |
+ Point physicalSize = new Point(); |
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { |
+ windowManager.getDefaultDisplay().getRealSize(physicalSize); |
+ } |
+ // TODO(dtrainor): Change 1.f to dpToPx once native fully supports dp. |
+ float compositorDensity = 1.f; |
+ mNativeBlimpViewPtr = nativeInit( |
+ physicalSize.x, physicalSize.y, displaySize.x, displaySize.y, compositorDensity); |
+ getHolder().addCallback(this); |
+ setVisibility(VISIBLE); |
+ } |
+ |
+ /** |
+ * Stops rendering for this {@link View} and destroys all internal state. This {@link View} |
+ * should not be used after this. |
+ */ |
+ public void destroyRenderer() { |
+ getHolder().removeCallback(this); |
+ if (mNativeBlimpViewPtr != 0) { |
+ nativeDestroy(mNativeBlimpViewPtr); |
+ mNativeBlimpViewPtr = 0; |
+ } |
+ } |
+ |
+ /** |
+ * Triggers a redraw of the native compositor, pushing a new frame. |
+ */ |
+ public void setNeedsComposite() { |
+ if (mNativeBlimpViewPtr == 0) return; |
Wez
2015/08/27 02:01:51
nit: Braces, here and below
David Trainor- moved to gerrit
2015/08/28 01:23:46
See java style guide comment above.
Wez
2015/09/03 00:49:27
Acknowledged.
|
+ nativeSetNeedsComposite(mNativeBlimpViewPtr); |
+ } |
+ |
+ /** |
+ * Toggles whether or not the native compositor draws to this {@link View} or not. |
+ * @param visible Whether or not the compositor should draw or not. |
+ */ |
+ public void setCompositorVisibility(boolean visible) { |
+ if (mNativeBlimpViewPtr == 0) return; |
+ nativeSetVisibility(mNativeBlimpViewPtr, visible); |
+ } |
+ |
+ // SurfaceHolder.Callback2 Implementation ------------------------------------------------------ |
Wez
2015/08/27 02:01:51
n00b nit: I thought this trailing --- thing was fr
David Trainor- moved to gerrit
2015/08/28 01:23:45
I think it helps see a clear break in between sect
Wez
2015/09/03 00:49:27
My personal preference is to do that with a larger
David Trainor- moved to gerrit
2015/09/03 06:33:21
I removed them all. I think you're right and this
|
+ @Override |
+ public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { |
+ if (mNativeBlimpViewPtr == 0) return; |
+ nativeSurfaceChanged(mNativeBlimpViewPtr, format, width, height, holder.getSurface()); |
+ } |
+ |
+ @Override |
+ public void surfaceCreated(SurfaceHolder holder) { |
+ if (mNativeBlimpViewPtr == 0) return; |
+ nativeSurfaceCreated(mNativeBlimpViewPtr); |
+ } |
+ |
+ @Override |
+ public void surfaceDestroyed(SurfaceHolder holder) { |
+ if (mNativeBlimpViewPtr == 0) return; |
+ nativeSurfaceDestroyed(mNativeBlimpViewPtr); |
+ } |
+ |
+ @Override |
+ public void surfaceRedrawNeeded(SurfaceHolder holder) {} |
+ |
+ // Native Methods ------------------------------------------------------------------------------ |
+ private native long nativeInit(int physicalWidth, int physicalHeight, int displayWidth, |
+ int displayHeight, float dpToPixel); |
+ private native void nativeDestroy(long nativeBlimpView); |
+ private native void nativeSetNeedsComposite(long nativeBlimpView); |
+ private native void nativeSurfaceChanged( |
+ long nativeBlimpView, int format, int width, int height, Surface surface); |
+ private native void nativeSurfaceCreated(long nativeBlimpView); |
+ private native void nativeSurfaceDestroyed(long nativeBlimpView); |
+ private native void nativeSetVisibility(long nativeBlimpView, boolean visible); |
+} |