| Index: chromecast/shell/android/apk/src/org/chromium/chromecast/shell/CastWindowManager.java
|
| diff --git a/chromecast/shell/android/apk/src/org/chromium/chromecast/shell/CastWindowManager.java b/chromecast/shell/android/apk/src/org/chromium/chromecast/shell/CastWindowManager.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a8aca376072896409ea770f3fd27dccda5e1e3c3
|
| --- /dev/null
|
| +++ b/chromecast/shell/android/apk/src/org/chromium/chromecast/shell/CastWindowManager.java
|
| @@ -0,0 +1,155 @@
|
| +// Copyright 2014 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.chromecast.shell;
|
| +
|
| +import android.content.Context;
|
| +import android.graphics.Color;
|
| +import android.util.AttributeSet;
|
| +import android.view.LayoutInflater;
|
| +import android.widget.FrameLayout;
|
| +
|
| +import org.chromium.base.CalledByNative;
|
| +import org.chromium.base.JNINamespace;
|
| +import org.chromium.content.browser.ContentViewCore;
|
| +import org.chromium.content.browser.ContentViewRenderView;
|
| +import org.chromium.ui.base.WindowAndroid;
|
| +
|
| +/**
|
| + * Container and generator of CastWindow instances.
|
| + */
|
| +@JNINamespace("chromecast::shell")
|
| +public class CastWindowManager extends FrameLayout {
|
| + private static final String TAG = "CastWindowManager";
|
| +
|
| + private WindowAndroid mWindow;
|
| + private CastWindowAndroid mActiveCastWindow;
|
| +
|
| + // The target for all content rendering.
|
| + private ContentViewRenderView mContentViewRenderView;
|
| +
|
| + /**
|
| + * Delegate to deliver events from the native window.
|
| + */
|
| + public interface Delegate {
|
| + public void onCreated();
|
| + public void onClosed();
|
| + }
|
| + private Delegate mDelegate;
|
| +
|
| + /**
|
| + * Constructor for inflating via XML.
|
| + */
|
| + public CastWindowManager(Context context, AttributeSet attrs) {
|
| + super(context, attrs);
|
| + nativeInit(this);
|
| + }
|
| +
|
| + /**
|
| + * @param delegate Delegate to handle events.
|
| + */
|
| + public void setDelegate(Delegate delegate) {
|
| + mDelegate = delegate;
|
| + }
|
| +
|
| + /**
|
| + * @param window Represents the activity window.
|
| + */
|
| + public void setWindow(WindowAndroid window) {
|
| + assert window != null;
|
| + mWindow = window;
|
| + mContentViewRenderView = new ContentViewRenderView(getContext()) {
|
| + @Override
|
| + protected void onReadyToRender() {
|
| + setOverlayVideoMode(true);
|
| + }
|
| + };
|
| + mContentViewRenderView.onNativeLibraryLoaded(window);
|
| + // Setting the background color to black avoids rendering a white splash screen
|
| + // before the players are loaded. See crbug/307113 for details.
|
| + mContentViewRenderView.setSurfaceViewBackgroundColor(Color.BLACK);
|
| + }
|
| +
|
| + /**
|
| + * @return The window used to generate all shells.
|
| + */
|
| + public WindowAndroid getWindow() {
|
| + return mWindow;
|
| + }
|
| +
|
| + /**
|
| + * @return The currently visible shell view or null if one is not showing.
|
| + */
|
| + public CastWindowAndroid getActiveCastWindow() {
|
| + return mActiveCastWindow;
|
| + }
|
| +
|
| + /**
|
| + * Creates a new shell pointing to the specified URL.
|
| + * @param url The URL the shell should load upon creation.
|
| + * @return Pointer of native cast shell instance.
|
| + */
|
| + public long launchCastWindow(String url) {
|
| + return nativeLaunchCastWindow(url);
|
| + }
|
| +
|
| + /**
|
| + * Stops a native cast shell instance created by {@link #launchCastWindow(String)}.
|
| + * @param nativeCastWindow Pointer of native cast shell instance returned
|
| + * by {@link #launchCastWindow(String)}.
|
| + * @see #launchCastWindow(String)
|
| + */
|
| + public void stopCastWindow(long nativeCastWindow) {
|
| + nativeStopCastWindow(nativeCastWindow);
|
| + }
|
| +
|
| + @SuppressWarnings("unused")
|
| + @CalledByNative
|
| + private Object createCastWindow() {
|
| + assert mContentViewRenderView != null;
|
| + LayoutInflater inflater =
|
| + (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
| + CastWindowAndroid shellView =
|
| + (CastWindowAndroid) inflater.inflate(R.layout.cast_window_view, null);
|
| + shellView.setWindow(mWindow);
|
| +
|
| + if (mActiveCastWindow != null) closeCastWindow(mActiveCastWindow);
|
| +
|
| + shellView.setContentViewRenderView(mContentViewRenderView);
|
| + addView(shellView, new FrameLayout.LayoutParams(
|
| + FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
|
| + mActiveCastWindow = shellView;
|
| + ContentViewCore contentViewCore = mActiveCastWindow.getContentViewCore();
|
| + if (contentViewCore != null) {
|
| + mContentViewRenderView.setCurrentContentViewCore(contentViewCore);
|
| + contentViewCore.onShow();
|
| + }
|
| +
|
| + if (mDelegate != null) {
|
| + mDelegate.onCreated();
|
| + }
|
| +
|
| + return shellView;
|
| + }
|
| +
|
| + @SuppressWarnings("unused")
|
| + @CalledByNative
|
| + private void closeCastWindow(CastWindowAndroid shellView) {
|
| + if (shellView == mActiveCastWindow) mActiveCastWindow = null;
|
| + ContentViewCore contentViewCore = shellView.getContentViewCore();
|
| + if (contentViewCore != null) contentViewCore.onHide();
|
| + shellView.setContentViewRenderView(null);
|
| + shellView.setWindow(null);
|
| + removeView(shellView);
|
| +
|
| + if (mDelegate != null) {
|
| + mDelegate.onClosed();
|
| + }
|
| + }
|
| +
|
| + private static native void nativeInit(Object shellManagerInstance);
|
| + private static native long nativeLaunchCastWindow(String url);
|
| + private static native void nativeStopCastWindow(long pointerOfNativeCastWindow);
|
| + public static native void nativeEnableDevTools(boolean enable);
|
| +}
|
|
|