OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.android_webview; | 5 package org.chromium.android_webview; |
6 | 6 |
7 import android.content.Context; | 7 import android.content.Context; |
8 import android.view.KeyEvent; | 8 import android.view.KeyEvent; |
9 import android.view.View; | 9 import android.view.View; |
10 import android.webkit.URLUtil; | 10 import android.webkit.URLUtil; |
11 import android.webkit.WebChromeClient; | 11 import android.webkit.WebChromeClient; |
12 import android.widget.FrameLayout; | 12 import android.widget.FrameLayout; |
13 | 13 |
14 import org.chromium.content.browser.ContentVideoView; | |
15 import org.chromium.content.browser.ContentVideoViewClient; | 14 import org.chromium.content.browser.ContentVideoViewClient; |
16 import org.chromium.content.browser.ContentViewClient; | 15 import org.chromium.content.browser.ContentViewClient; |
17 | 16 |
18 /** | 17 /** |
19 * ContentViewClient implementation for WebView | 18 * ContentViewClient implementation for WebView |
20 */ | 19 */ |
21 public class AwContentViewClient extends ContentViewClient implements ContentVid
eoViewClient { | 20 public class AwContentViewClient extends ContentViewClient implements ContentVid
eoViewClient { |
22 private AwContentsClient mAwContentsClient; | 21 private final AwContentsClient mAwContentsClient; |
23 private AwSettings mAwSettings; | 22 private final AwSettings mAwSettings; |
24 private AwContents mAwContents; | 23 private final AwContents mAwContents; |
25 private Context mContext; | 24 private final Context mContext; |
| 25 private FrameLayout mCustomView; |
26 | 26 |
27 public AwContentViewClient( | 27 public AwContentViewClient(AwContentsClient awContentsClient, AwSettings awS
ettings, |
28 AwContentsClient awContentsClient, AwSettings awSettings, AwContents
awContents, | 28 AwContents awContents, Context context) { |
29 Context context) { | |
30 mAwContentsClient = awContentsClient; | 29 mAwContentsClient = awContentsClient; |
31 mAwSettings = awSettings; | 30 mAwSettings = awSettings; |
32 mAwContents = awContents; | 31 mAwContents = awContents; |
33 mContext = context; | 32 mContext = context; |
34 } | 33 } |
35 | 34 |
36 @Override | 35 @Override |
37 public void onBackgroundColorChanged(int color) { | 36 public void onBackgroundColorChanged(int color) { |
38 mAwContentsClient.onBackgroundColorChanged(color); | 37 mAwContentsClient.onBackgroundColorChanged(color); |
39 } | 38 } |
(...skipping 19 matching lines...) Expand all Loading... |
59 return this; | 58 return this; |
60 } | 59 } |
61 | 60 |
62 @Override | 61 @Override |
63 public boolean shouldBlockMediaRequest(String url) { | 62 public boolean shouldBlockMediaRequest(String url) { |
64 return mAwSettings != null ? | 63 return mAwSettings != null ? |
65 mAwSettings.getBlockNetworkLoads() && URLUtil.isNetworkUrl(url)
: true; | 64 mAwSettings.getBlockNetworkLoads() && URLUtil.isNetworkUrl(url)
: true; |
66 } | 65 } |
67 | 66 |
68 @Override | 67 @Override |
69 public void enterFullscreenVideo(View view) { | 68 public void enterFullscreenVideo(View videoView) { |
70 final FrameLayout viewGroup = new FrameLayout(mContext); | 69 // enterFullscreenVideo will only be called after enterFullscreen. |
71 viewGroup.addView(view); | 70 assert mCustomView != null; |
72 viewGroup.addOnAttachStateChangeListener(new View.OnAttachStateChangeLis
tener() { | 71 mCustomView.addView(videoView, 0); |
73 @Override | |
74 public void onViewDetachedFromWindow(View v) { | |
75 // Intentional no-op (see onDestroyContentVideoView). | |
76 } | |
77 | |
78 @Override | |
79 public void onViewAttachedToWindow(View v) { | |
80 if (mAwContents.isFullScreen()) { | |
81 return; | |
82 } | |
83 View fullscreenView = mAwContents.enterFullScreen(); | |
84 if (fullscreenView != null) { | |
85 viewGroup.addView(fullscreenView); | |
86 } | |
87 } | |
88 }); | |
89 WebChromeClient.CustomViewCallback cb = new WebChromeClient.CustomViewCa
llback() { | |
90 @Override | |
91 public void onCustomViewHidden() { | |
92 ContentVideoView contentVideoView = ContentVideoView.getContentV
ideoView(); | |
93 if (contentVideoView != null) | |
94 contentVideoView.exitFullscreen(false); | |
95 } | |
96 }; | |
97 mAwContentsClient.onShowCustomView(viewGroup, cb); | |
98 } | 72 } |
99 | 73 |
100 @Override | 74 @Override |
101 public void exitFullscreenVideo() { | 75 public void exitFullscreenVideo() { |
102 mAwContents.exitFullScreen(); | 76 // Intentional no-op |
103 mAwContentsClient.onHideCustomView(); | |
104 } | 77 } |
105 | 78 |
106 @Override | 79 @Override |
107 public View getVideoLoadingProgressView() { | 80 public View getVideoLoadingProgressView() { |
108 return mAwContentsClient.getVideoLoadingProgressView(); | 81 return mAwContentsClient.getVideoLoadingProgressView(); |
109 } | 82 } |
| 83 |
| 84 /** |
| 85 * Called to show the web contents in fullscreen mode. |
| 86 * |
| 87 * <p>If entering fullscreen on a video element the web contents will contai
n just |
| 88 * the html5 video controls. {@link #enterFullscreenVideo(View)} will be cal
led later |
| 89 * once the ContentVideoView, which contains the hardware accelerated fullsc
reen video, |
| 90 * is ready to be shown. |
| 91 */ |
| 92 public void enterFullscreen() { |
| 93 if (mAwContents.isFullScreen()) { |
| 94 return; |
| 95 } |
| 96 View fullscreenView = mAwContents.enterFullScreen(); |
| 97 if (fullscreenView == null) { |
| 98 return; |
| 99 } |
| 100 WebChromeClient.CustomViewCallback cb = new WebChromeClient.CustomViewCa
llback() { |
| 101 @Override |
| 102 public void onCustomViewHidden() { |
| 103 mAwContents.requestExitFullscreen(); |
| 104 } |
| 105 }; |
| 106 mCustomView = new FrameLayout(mContext); |
| 107 mCustomView.addView(fullscreenView); |
| 108 mAwContentsClient.onShowCustomView(mCustomView, cb); |
| 109 } |
| 110 |
| 111 /** |
| 112 * Called to show the web contents in embedded mode. |
| 113 */ |
| 114 public void exitFullscreen() { |
| 115 if (mCustomView != null) { |
| 116 mAwContents.exitFullScreen(); |
| 117 mAwContentsClient.onHideCustomView(); |
| 118 mCustomView = null; |
| 119 } |
| 120 } |
110 } | 121 } |
OLD | NEW |