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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroid.java

Issue 2807663002: 📺 Move fullscreen web content to a new Activity. (Closed)
Patch Set: Considered other ChromeActivity subclasses. Created 3 years, 8 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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.chrome.browser.tab; 5 package org.chromium.chrome.browser.tab;
6 6
7 import android.annotation.TargetApi; 7 import android.annotation.TargetApi;
8 import android.app.Activity; 8 import android.app.Activity;
9 import android.app.ActivityManager; 9 import android.app.ActivityManager;
10 import android.content.Context; 10 import android.content.Context;
11 import android.content.Intent; 11 import android.content.Intent;
12 import android.graphics.Rect; 12 import android.graphics.Rect;
13 import android.graphics.RectF; 13 import android.graphics.RectF;
14 import android.media.AudioManager; 14 import android.media.AudioManager;
15 import android.os.Build; 15 import android.os.Build;
16 import android.os.Handler; 16 import android.os.Handler;
17 import android.util.Pair; 17 import android.util.Pair;
18 import android.view.KeyEvent; 18 import android.view.KeyEvent;
19 import android.view.View; 19 import android.view.View;
20 20
21 import org.chromium.base.Log; 21 import org.chromium.base.Log;
22 import org.chromium.base.ObserverList.RewindableIterator; 22 import org.chromium.base.ObserverList.RewindableIterator;
23 import org.chromium.base.annotations.CalledByNative; 23 import org.chromium.base.annotations.CalledByNative;
24 import org.chromium.blink_public.platform.WebDisplayMode; 24 import org.chromium.blink_public.platform.WebDisplayMode;
25 import org.chromium.chrome.R; 25 import org.chromium.chrome.R;
26 import org.chromium.chrome.browser.AppHooks; 26 import org.chromium.chrome.browser.AppHooks;
27 import org.chromium.chrome.browser.ChromeTabbedActivity;
28 import org.chromium.chrome.browser.FullscreenWebContentsActivity;
27 import org.chromium.chrome.browser.RepostFormWarningDialog; 29 import org.chromium.chrome.browser.RepostFormWarningDialog;
28 import org.chromium.chrome.browser.document.DocumentUtils; 30 import org.chromium.chrome.browser.document.DocumentUtils;
29 import org.chromium.chrome.browser.document.DocumentWebContentsDelegate; 31 import org.chromium.chrome.browser.document.DocumentWebContentsDelegate;
30 import org.chromium.chrome.browser.findinpage.FindMatchRectsDetails; 32 import org.chromium.chrome.browser.findinpage.FindMatchRectsDetails;
31 import org.chromium.chrome.browser.findinpage.FindNotificationDetails; 33 import org.chromium.chrome.browser.findinpage.FindNotificationDetails;
32 import org.chromium.chrome.browser.fullscreen.FullscreenManager; 34 import org.chromium.chrome.browser.fullscreen.FullscreenManager;
33 import org.chromium.chrome.browser.media.MediaCaptureNotificationService; 35 import org.chromium.chrome.browser.media.MediaCaptureNotificationService;
34 import org.chromium.chrome.browser.media.VideoPersister; 36 import org.chromium.chrome.browser.media.VideoPersister;
37 import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
35 import org.chromium.chrome.browser.policy.PolicyAuditor; 38 import org.chromium.chrome.browser.policy.PolicyAuditor;
36 import org.chromium.chrome.browser.policy.PolicyAuditor.AuditEvent; 39 import org.chromium.chrome.browser.policy.PolicyAuditor.AuditEvent;
37 import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator; 40 import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
38 import org.chromium.chrome.browser.tabmodel.TabModel; 41 import org.chromium.chrome.browser.tabmodel.TabModel;
39 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; 42 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
40 import org.chromium.chrome.browser.tabmodel.TabModelUtils; 43 import org.chromium.chrome.browser.tabmodel.TabModelUtils;
41 import org.chromium.chrome.browser.tabmodel.TabWindowManager; 44 import org.chromium.chrome.browser.tabmodel.TabWindowManager;
42 import org.chromium.components.web_contents_delegate_android.WebContentsDelegate Android; 45 import org.chromium.components.web_contents_delegate_android.WebContentsDelegate Android;
43 import org.chromium.content.browser.ActivityContentVideoViewEmbedder; 46 import org.chromium.content.browser.ActivityContentVideoViewEmbedder;
44 import org.chromium.content.browser.ContentVideoViewEmbedder; 47 import org.chromium.content.browser.ContentVideoViewEmbedder;
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 210
208 @Override 211 @Override
209 public void showRepostFormWarningDialog() { 212 public void showRepostFormWarningDialog() {
210 mTab.resetSwipeRefreshHandler(); 213 mTab.resetSwipeRefreshHandler();
211 if (mTab.getActivity() == null) return; 214 if (mTab.getActivity() == null) return;
212 RepostFormWarningDialog warningDialog = new RepostFormWarningDialog(mTab ); 215 RepostFormWarningDialog warningDialog = new RepostFormWarningDialog(mTab );
213 warningDialog.show(mTab.getActivity().getFragmentManager(), null); 216 warningDialog.show(mTab.getActivity().getFragmentManager(), null);
214 } 217 }
215 218
216 @Override 219 @Override
217 public void toggleFullscreenModeForTab(boolean enableFullscreen) { 220 public void toggleFullscreenModeForTab(final boolean enableFullscreen) {
218 if (!VideoPersister.getInstance().shouldDelayFullscreenModeChange(mTab, enableFullscreen)) { 221 // TODO(peconn): Change this to the flag.
219 mTab.toggleFullscreenMode(enableFullscreen); 222 final boolean useFullscreenActivity = true;
223 if (useFullscreenActivity && mTab.getActivity().supportsFullscreenActivi ty()) {
224 if (mTab.getFullscreenManager() == null) {
225 Log.d(TAG, "Cannot toggle fullscreen, Manager is null.");
226 return;
227 }
228
229 Class<? extends Activity> targetActivity;
230 if (enableFullscreen) {
231 targetActivity = FullscreenWebContentsActivity.class;
232 } else {
233 targetActivity = MultiWindowUtils.getSenderActivity(mTab.getActi vity());
234 if (targetActivity == null) {
235 Log.w(TAG, "Tab exiting fullscreen without sender Activity." );
236 targetActivity = ChromeTabbedActivity.class;
237 }
238 }
239
240 if (mTab.getFullscreenManager().getTab() == mTab) {
241 mTab.getFullscreenManager().setTab(null);
242 }
243
244 MultiWindowUtils.moveTabToActivity(
Theresa 2017/04/12 22:29:11 Does the fullscreen activity sit on top of the par
PEConn 2017/04/13 14:45:57 I was planning on having the fullscreen Activity b
Theresa 2017/04/13 15:22:09 I don't think Android will kill the background act
245 mTab.getActivity(), mTab, targetActivity, new Runnable() {
246 @Override
247 public void run() {
248 // The Tab's FullscreenManager changes when it is mo ved.
249 mTab.getFullscreenManager().setTab(mTab);
250
251 mTab.toggleFullscreenMode(enableFullscreen);
252 }
253 });
254 } else {
255 if (!VideoPersister.getInstance().shouldDelayFullscreenModeChange(
256 mTab, enableFullscreen)) {
257 mTab.toggleFullscreenMode(enableFullscreen);
258 }
220 } 259 }
221 } 260 }
222 261
223 @Override 262 @Override
224 public void navigationStateChanged(int flags) { 263 public void navigationStateChanged(int flags) {
225 if ((flags & InvalidateTypes.TAB) != 0) { 264 if ((flags & InvalidateTypes.TAB) != 0) {
226 int mediaType = MediaCaptureNotificationService.getMediaType( 265 int mediaType = MediaCaptureNotificationService.getMediaType(
227 isCapturingAudio(), isCapturingVideo(), isCapturingScreen()) ; 266 isCapturingAudio(), isCapturingVideo(), isCapturingScreen()) ;
228 MediaCaptureNotificationService.updateMediaNotificationForTab( 267 MediaCaptureNotificationService.updateMediaNotificationForTab(
229 mTab.getApplicationContext(), mTab.getId(), mediaType, mTab. getUrl()); 268 mTab.getApplicationContext(), mTab.getId(), mediaType, mTab. getUrl());
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 }; 558 };
520 } 559 }
521 560
522 private static native void nativeOnRendererUnresponsive(WebContents webConte nts); 561 private static native void nativeOnRendererUnresponsive(WebContents webConte nts);
523 private static native void nativeOnRendererResponsive(WebContents webContent s); 562 private static native void nativeOnRendererResponsive(WebContents webContent s);
524 private static native boolean nativeIsCapturingAudio(WebContents webContents ); 563 private static native boolean nativeIsCapturingAudio(WebContents webContents );
525 private static native boolean nativeIsCapturingVideo(WebContents webContents ); 564 private static native boolean nativeIsCapturingVideo(WebContents webContents );
526 private static native boolean nativeIsCapturingScreen(WebContents webContent s); 565 private static native boolean nativeIsCapturingScreen(WebContents webContent s);
527 private static native void nativeNotifyStopped(WebContents webContents); 566 private static native void nativeNotifyStopped(WebContents webContents);
528 } 567 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698