Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Side by Side Diff: chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWindowManager.java

Issue 2570623003: [Chromecast] Turn CastContentWindow into an abstract interface. (Closed)
Patch Set: Fix browser test Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 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.chromecast.shell;
6
7 import android.content.Context;
8 import android.graphics.Color;
9 import android.util.AttributeSet;
10 import android.view.LayoutInflater;
11 import android.widget.FrameLayout;
12
13 import org.chromium.base.annotations.CalledByNative;
14 import org.chromium.base.annotations.JNINamespace;
15 import org.chromium.content.browser.ContentViewCore;
16 import org.chromium.content.browser.ContentViewRenderView;
17 import org.chromium.ui.base.WindowAndroid;
18
19 /**
20 * Container and generator of CastWindow instances.
21 */
22 @JNINamespace("chromecast::shell")
23 public class CastWindowManager extends FrameLayout {
24 private static final String TAG = "CastWindowManager";
25
26 private WindowAndroid mWindow;
27 private CastWindowAndroid mActiveCastWindow;
28
29 // The target for all content rendering.
30 private ContentViewRenderView mContentViewRenderView;
31
32 /**
33 * Delegate to deliver events from the native window.
34 */
35 public interface Delegate {
36 public void onCreated();
37 public void onClosed();
38 }
39 private Delegate mDelegate;
40
41 /**
42 * Constructor for inflating via XML.
43 */
44 public CastWindowManager(Context context, AttributeSet attrs) {
45 super(context, attrs);
46 nativeInit(this);
47 }
48
49 /**
50 * @param delegate Delegate to handle events.
51 */
52 public void setDelegate(Delegate delegate) {
53 mDelegate = delegate;
54 }
55
56 /**
57 * @param window Represents the activity window.
58 */
59 public void setWindow(WindowAndroid window) {
60 assert window != null;
61 mWindow = window;
62 mContentViewRenderView = new ContentViewRenderView(getContext()) {
63 @Override
64 protected void onReadyToRender() {
65 setOverlayVideoMode(true);
66 }
67 };
68 mContentViewRenderView.onNativeLibraryLoaded(window);
69 // Setting the background color to black avoids rendering a white splash screen
70 // before the players are loaded. See crbug/307113 for details.
71 mContentViewRenderView.setSurfaceViewBackgroundColor(Color.BLACK);
72 }
73
74 /**
75 * @return The window used to generate all shells.
76 */
77 public WindowAndroid getWindow() {
78 return mWindow;
79 }
80
81 /**
82 * @return The currently visible shell view or null if one is not showing.
83 */
84 public CastWindowAndroid getActiveCastWindow() {
85 return mActiveCastWindow;
86 }
87
88 /**
89 * Creates a new shell pointing to the specified URL.
90 * @param url The URL the shell should load upon creation.
91 * @return Pointer of native cast shell instance.
92 */
93 public long launchCastWindow(String url) {
94 return nativeLaunchCastWindow(url);
95 }
96
97 /**
98 * Stops a native cast shell instance created by {@link #launchCastWindow(St ring)}.
99 * @param nativeCastWindow Pointer of native cast shell instance returned
100 * by {@link #launchCastWindow(String)}.
101 * @param gracefully Whether or not to call RVH::ClosePage to deliver unload event.
102 * @see #launchCastWindow(String)
103 */
104 public void stopCastWindow(long nativeCastWindow, boolean gracefully) {
105 nativeStopCastWindow(nativeCastWindow, gracefully);
106 }
107
108 @SuppressWarnings("unused")
109 @CalledByNative
110 private Object createCastWindow() {
111 assert mContentViewRenderView != null;
112 LayoutInflater inflater =
113 (LayoutInflater) getContext().getSystemService(Context.LAYOUT_IN FLATER_SERVICE);
114 CastWindowAndroid shellView =
115 (CastWindowAndroid) inflater.inflate(R.layout.cast_window_view, null);
116 shellView.setWindow(mWindow);
117
118 if (mActiveCastWindow != null) closeCastWindow(mActiveCastWindow);
119
120 shellView.setContentViewRenderView(mContentViewRenderView);
121 addView(shellView, new FrameLayout.LayoutParams(
122 FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams. MATCH_PARENT));
123 mActiveCastWindow = shellView;
124 ContentViewCore contentViewCore = mActiveCastWindow.getContentViewCore() ;
125 if (contentViewCore != null) {
126 mContentViewRenderView.setCurrentContentViewCore(contentViewCore);
127 contentViewCore.onShow();
128 }
129
130 if (mDelegate != null) {
131 mDelegate.onCreated();
132 }
133
134 return shellView;
135 }
136
137 @SuppressWarnings("unused")
138 @CalledByNative
139 private void closeCastWindow(CastWindowAndroid shellView) {
140 if (shellView == mActiveCastWindow) mActiveCastWindow = null;
141 ContentViewCore contentViewCore = shellView.getContentViewCore();
142 if (contentViewCore != null) contentViewCore.onHide();
143 shellView.setContentViewRenderView(null);
144 shellView.setWindow(null);
145 removeView(shellView);
146 mContentViewRenderView.destroy();
147 mContentViewRenderView = null;
148 if (mDelegate != null) {
149 mDelegate.onClosed();
150 }
151 }
152
153 private static native void nativeInit(Object shellManagerInstance);
154 private static native long nativeLaunchCastWindow(String url);
155 private static native void nativeStopCastWindow(long pointerOfNativeCastWind ow,
156 boolean gracefully);
157 public static native void nativeEnableDevTools(boolean enable);
158 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698