Chromium Code Reviews| 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..1d948af80f235002c37b17cc2fe3dd74d0d22099 |
| --- /dev/null |
| +++ b/blimp/client/android/java/src/org/chromium/blimp/BlimpView.java |
| @@ -0,0 +1,128 @@ |
| +// 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; |
| + |
| + /** |
| + * 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); |
| + } |
| + |
| + /** |
| + * 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; |
| + 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); |
| + } |
| + |
| + // SurfaceView overrides |
|
Wez
2015/09/03 00:49:27
nit: .
David Trainor- moved to gerrit
2015/09/03 06:33:21
Done.
|
| + @Override |
| + protected void onFinishInflate() { |
| + super.onFinishInflate(); |
| + |
| + setZOrderMediaOverlay(true); |
| + setVisibility(GONE); |
| + } |
| + |
| + // SurfaceHolder.Callback2 implementation |
|
Wez
2015/09/03 00:49:27
nit: implementation -> interface?
David Trainor- moved to gerrit
2015/09/03 06:33:21
Done.
|
| + @Override |
| + public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { |
| + if (mNativeBlimpViewPtr == 0) return; |
| + nativeOnSurfaceChanged(mNativeBlimpViewPtr, format, width, height, holder.getSurface()); |
| + } |
| + |
| + @Override |
| + public void surfaceCreated(SurfaceHolder holder) { |
| + if (mNativeBlimpViewPtr == 0) return; |
| + nativeOnSurfaceCreated(mNativeBlimpViewPtr); |
| + } |
| + |
| + @Override |
| + public void surfaceDestroyed(SurfaceHolder holder) { |
| + if (mNativeBlimpViewPtr == 0) return; |
| + nativeOnSurfaceDestroyed(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 nativeOnSurfaceChanged( |
| + long nativeBlimpView, int format, int width, int height, Surface surface); |
| + private native void nativeOnSurfaceCreated(long nativeBlimpView); |
| + private native void nativeOnSurfaceDestroyed(long nativeBlimpView); |
| + private native void nativeSetVisibility(long nativeBlimpView, boolean visible); |
| +} |