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

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

Issue 1159113006: [Android] A prototype of the interactive media notification. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed tests and Min's nits Created 5 years, 6 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.content.Context; 8 import android.content.Context;
9 import android.content.Intent; 9 import android.content.Intent;
10 import android.graphics.Rect; 10 import android.graphics.Rect;
(...skipping 17 matching lines...) Expand all
28 import org.chromium.chrome.browser.EmptyTabObserver; 28 import org.chromium.chrome.browser.EmptyTabObserver;
29 import org.chromium.chrome.browser.FrozenNativePage; 29 import org.chromium.chrome.browser.FrozenNativePage;
30 import org.chromium.chrome.browser.IntentHandler.TabOpenType; 30 import org.chromium.chrome.browser.IntentHandler.TabOpenType;
31 import org.chromium.chrome.browser.NativePage; 31 import org.chromium.chrome.browser.NativePage;
32 import org.chromium.chrome.browser.Tab; 32 import org.chromium.chrome.browser.Tab;
33 import org.chromium.chrome.browser.TabObserver; 33 import org.chromium.chrome.browser.TabObserver;
34 import org.chromium.chrome.browser.TabState; 34 import org.chromium.chrome.browser.TabState;
35 import org.chromium.chrome.browser.TabUma; 35 import org.chromium.chrome.browser.TabUma;
36 import org.chromium.chrome.browser.TabUma.TabCreationState; 36 import org.chromium.chrome.browser.TabUma.TabCreationState;
37 import org.chromium.chrome.browser.UrlConstants; 37 import org.chromium.chrome.browser.UrlConstants;
38 import org.chromium.chrome.browser.UrlUtilities;
38 import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator; 39 import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator;
39 import org.chromium.chrome.browser.contextmenu.ContextMenuParams; 40 import org.chromium.chrome.browser.contextmenu.ContextMenuParams;
40 import org.chromium.chrome.browser.contextmenu.ContextMenuPopulator; 41 import org.chromium.chrome.browser.contextmenu.ContextMenuPopulator;
41 import org.chromium.chrome.browser.contextualsearch.ContextualSearchTabHelper; 42 import org.chromium.chrome.browser.contextualsearch.ContextualSearchTabHelper;
42 import org.chromium.chrome.browser.crash.MinidumpUploadService; 43 import org.chromium.chrome.browser.crash.MinidumpUploadService;
43 import org.chromium.chrome.browser.dom_distiller.ReaderModeActivityDelegate; 44 import org.chromium.chrome.browser.dom_distiller.ReaderModeActivityDelegate;
44 import org.chromium.chrome.browser.dom_distiller.ReaderModeManager; 45 import org.chromium.chrome.browser.dom_distiller.ReaderModeManager;
45 import org.chromium.chrome.browser.download.ChromeDownloadDelegate; 46 import org.chromium.chrome.browser.download.ChromeDownloadDelegate;
46 import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler; 47 import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler;
47 import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler.Overrid eUrlLoadingResult; 48 import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler.Overrid eUrlLoadingResult;
48 import org.chromium.chrome.browser.externalnav.ExternalNavigationParams; 49 import org.chromium.chrome.browser.externalnav.ExternalNavigationParams;
49 import org.chromium.chrome.browser.fullscreen.FullscreenManager; 50 import org.chromium.chrome.browser.fullscreen.FullscreenManager;
50 import org.chromium.chrome.browser.media.MediaNotificationService; 51 import org.chromium.chrome.browser.media.MediaNotificationService;
52 import org.chromium.chrome.browser.media.ui.MediaInfo;
53 import org.chromium.chrome.browser.media.ui.NotificationMediaPlaybackControls;
51 import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; 54 import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings;
52 import org.chromium.chrome.browser.ntp.NativePageAssassin; 55 import org.chromium.chrome.browser.ntp.NativePageAssassin;
53 import org.chromium.chrome.browser.ntp.NativePageFactory; 56 import org.chromium.chrome.browser.ntp.NativePageFactory;
54 import org.chromium.chrome.browser.omnibox.geo.GeolocationHeader; 57 import org.chromium.chrome.browser.omnibox.geo.GeolocationHeader;
55 import org.chromium.chrome.browser.policy.PolicyAuditor; 58 import org.chromium.chrome.browser.policy.PolicyAuditor;
56 import org.chromium.chrome.browser.policy.PolicyAuditor.AuditEvent; 59 import org.chromium.chrome.browser.policy.PolicyAuditor.AuditEvent;
57 import org.chromium.chrome.browser.preferences.PrefServiceBridge; 60 import org.chromium.chrome.browser.preferences.PrefServiceBridge;
58 import org.chromium.chrome.browser.rlz.RevenueStats; 61 import org.chromium.chrome.browser.rlz.RevenueStats;
59 import org.chromium.chrome.browser.search_engines.TemplateUrlService; 62 import org.chromium.chrome.browser.search_engines.TemplateUrlService;
60 import org.chromium.chrome.browser.tab.BackgroundContentViewHelper.BackgroundCon tentViewDelegate; 63 import org.chromium.chrome.browser.tab.BackgroundContentViewHelper.BackgroundCon tentViewDelegate;
(...skipping 16 matching lines...) Expand all
77 import org.chromium.content_public.browser.LoadUrlParams; 80 import org.chromium.content_public.browser.LoadUrlParams;
78 import org.chromium.content_public.browser.NavigationController; 81 import org.chromium.content_public.browser.NavigationController;
79 import org.chromium.content_public.browser.WebContents; 82 import org.chromium.content_public.browser.WebContents;
80 import org.chromium.content_public.browser.WebContentsObserver; 83 import org.chromium.content_public.browser.WebContentsObserver;
81 import org.chromium.content_public.common.ConsoleMessageLevel; 84 import org.chromium.content_public.common.ConsoleMessageLevel;
82 import org.chromium.content_public.common.Referrer; 85 import org.chromium.content_public.common.Referrer;
83 import org.chromium.ui.WindowOpenDisposition; 86 import org.chromium.ui.WindowOpenDisposition;
84 import org.chromium.ui.base.PageTransition; 87 import org.chromium.ui.base.PageTransition;
85 import org.chromium.ui.base.WindowAndroid; 88 import org.chromium.ui.base.WindowAndroid;
86 89
90 import java.net.URI;
91 import java.net.URISyntaxException;
87 import java.util.Locale; 92 import java.util.Locale;
88 93
89 /** 94 /**
90 * A representation of a Tab for Chrome. This manages wrapping a WebContents and interacting with 95 * A representation of a Tab for Chrome. This manages wrapping a WebContents and interacting with
91 * most of Chromium while representing a consistent version of web content to th e front end. 96 * most of Chromium while representing a consistent version of web content to th e front end.
92 */ 97 */
93 public class ChromeTab extends Tab { 98 public class ChromeTab extends Tab {
Ted C 2015/06/26 00:43:55 ChromeTab is going away, you should probably just
whywhat 2015/06/26 19:29:32 Ack.
94 public static final int NTP_TAB_ID = -2; 99 public static final int NTP_TAB_ID = -2;
95 100
96 private static final String TAG = "ChromeTab"; 101 private static final String TAG = "cr.ChromeTab";
97 102
98 // URL didFailLoad error code. Should match the value in net_error_list.h. 103 // URL didFailLoad error code. Should match the value in net_error_list.h.
99 public static final int BLOCKED_BY_ADMINISTRATOR = -22; 104 public static final int BLOCKED_BY_ADMINISTRATOR = -22;
100 105
101 public static final String PAGESPEED_PASSTHROUGH_HEADER = "Chrome-Proxy: pas s-through"; 106 public static final String PAGESPEED_PASSTHROUGH_HEADER = "Chrome-Proxy: pas s-through";
102 107
103 private static final int MSG_ID_ENABLE_FULLSCREEN_AFTER_LOAD = 1; 108 private static final int MSG_ID_ENABLE_FULLSCREEN_AFTER_LOAD = 1;
104 109
105 /** The maximum amount of time to wait for a page to load before entering fu llscreen. -1 means 110 /** The maximum amount of time to wait for a page to load before entering fu llscreen. -1 means
106 * wait until the page finishes loading. */ 111 * wait until the page finishes loading. */
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 @Override 356 @Override
352 protected TabChromeWebContentsDelegateAndroid createWebContentsDelegate() { 357 protected TabChromeWebContentsDelegateAndroid createWebContentsDelegate() {
353 return new TabChromeWebContentsDelegateAndroidImpl(); 358 return new TabChromeWebContentsDelegateAndroidImpl();
354 } 359 }
355 360
356 /** 361 /**
357 * An implementation for this tab's web contents delegate. 362 * An implementation for this tab's web contents delegate.
358 */ 363 */
359 public class TabChromeWebContentsDelegateAndroidImpl 364 public class TabChromeWebContentsDelegateAndroidImpl
360 extends TabChromeWebContentsDelegateAndroid { 365 extends TabChromeWebContentsDelegateAndroid {
366 private NotificationMediaPlaybackControls.Listener mControlsListener =
Ted C 2015/06/26 00:43:55 I'd rather not see this logic within tab. I think
whywhat 2015/06/26 19:29:32 Ack. I'll need a tab id though to be able to come
Ted C 2015/06/30 04:56:13 Per my follow up comment, there is no reason you c
367 new NotificationMediaPlaybackControls.Listener() {
368 @Override
369 public void onPlay() {
370 TabChromeWebContentsDelegateAndroidImpl
371 .nativeOnMediaControlsResume(getWebContents());
372 }
373
374 @Override
375 public void onPause() {
376 TabChromeWebContentsDelegateAndroidImpl
377 .nativeOnMediaControlsPause(getWebContents());
378 }
379 };
380
361 /** 381 /**
362 * This method is meant to be overridden by DocumentTab because the 382 * This method is meant to be overridden by DocumentTab because the
363 * TabModelSelector returned by the activity is not correct. 383 * TabModelSelector returned by the activity is not correct.
364 * TODO(dfalcantara): remove this when DocumentActivity.getTabModelSelec tor() 384 * TODO(dfalcantara): remove this when DocumentActivity.getTabModelSelec tor()
365 * will return the right TabModelSelector. 385 * will return the right TabModelSelector.
366 */ 386 */
367 protected TabModel getTabModel() { 387 protected TabModel getTabModel() {
368 return mActivity.getTabModelSelector().getModel(isIncognito()); 388 return mActivity.getTabModelSelector().getModel(isIncognito());
369 } 389 }
370 390
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 // interfere with other parts of the activity (e.g. the URL bar) . 503 // interfere with other parts of the activity (e.g. the URL bar) .
484 if (event.getKeyCode() == KeyEvent.KEYCODE_ESCAPE && event.hasNo Modifiers()) { 504 if (event.getKeyCode() == KeyEvent.KEYCODE_ESCAPE && event.hasNo Modifiers()) {
485 WebContents wc = getWebContents(); 505 WebContents wc = getWebContents();
486 if (wc != null) wc.stop(); 506 if (wc != null) wc.stop();
487 return; 507 return;
488 } 508 }
489 } 509 }
490 handleMediaKey(event); 510 handleMediaKey(event);
491 } 511 }
492 512
513 @Override
514 public void updateMediaControls(boolean isControllable, boolean isPaused ) {
515 NotificationMediaPlaybackControls notificationControls =
516 NotificationMediaPlaybackControls.getOrCreate(getApplication Context());
517 if (!isControllable) {
518 notificationControls.hide(getId());
519 notificationControls.removeListener(mControlsListener);
520 return;
521 }
522 notificationControls.addListener(mControlsListener);
523 String origin = getUrl();
524 try {
525 origin = UrlUtilities.getOriginForDisplay(new URI(getUrl()), tru e);
526 } catch (URISyntaxException e) {
527 Log.e(TAG, "Wrong syntax for the tab URL when playing media. Sho wing the URL.");
528 }
529 notificationControls.show(new MediaInfo(getTitle(), isPaused, origin , getId()));
530 }
531
493 /** 532 /**
494 * Redispatches unhandled media keys. This allows bluetooth headphones w ith play/pause or 533 * Redispatches unhandled media keys. This allows bluetooth headphones w ith play/pause or
495 * other buttons to function correctly. 534 * other buttons to function correctly.
496 */ 535 */
497 @TargetApi(19) 536 @TargetApi(19)
498 private void handleMediaKey(KeyEvent e) { 537 private void handleMediaKey(KeyEvent e) {
499 if (Build.VERSION.SDK_INT < 19) return; 538 if (Build.VERSION.SDK_INT < 19) return;
500 switch (e.getKeyCode()) { 539 switch (e.getKeyCode()) {
501 case KeyEvent.KEYCODE_MUTE: 540 case KeyEvent.KEYCODE_MUTE:
502 case KeyEvent.KEYCODE_HEADSETHOOK: 541 case KeyEvent.KEYCODE_HEADSETHOOK:
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 private boolean isCapturingVideo() { 573 private boolean isCapturingVideo() {
535 return !isClosing() && super.nativeIsCapturingVideo(getWebContents() ); 574 return !isClosing() && super.nativeIsCapturingVideo(getWebContents() );
536 } 575 }
537 576
538 /** 577 /**
539 * @return Whether audio is being played. 578 * @return Whether audio is being played.
540 */ 579 */
541 private boolean hasAudibleAudio() { 580 private boolean hasAudibleAudio() {
542 return !isClosing() && super.nativeHasAudibleAudio(getWebContents()) ; 581 return !isClosing() && super.nativeHasAudibleAudio(getWebContents()) ;
543 } 582 }
544
545 } 583 }
546 584
547 /** 585 /**
548 * Check whether the context menu download should be intercepted. 586 * Check whether the context menu download should be intercepted.
549 * 587 *
550 * @param url URL to be downloaded. 588 * @param url URL to be downloaded.
551 * @return whether the download should be intercepted. 589 * @return whether the download should be intercepted.
552 */ 590 */
553 protected boolean shouldInterceptContextMenuDownload(String url) { 591 protected boolean shouldInterceptContextMenuDownload(String url) {
554 return mDownloadDelegate.shouldInterceptContextMenuDownload(url); 592 return mDownloadDelegate.shouldInterceptContextMenuDownload(url);
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
879 public void didDetachInterstitialPage() { 917 public void didDetachInterstitialPage() {
880 if (!maybeShowNativePage(getUrl(), false)) { 918 if (!maybeShowNativePage(getUrl(), false)) {
881 showRenderedPage(); 919 showRenderedPage();
882 } 920 }
883 } 921 }
884 922
885 @Override 923 @Override
886 public void destroy() { 924 public void destroy() {
887 MediaNotificationService.updateMediaNotificationForTab( 925 MediaNotificationService.updateMediaNotificationForTab(
888 getApplicationContext(), getId(), false, false, false, g etUrl()); 926 getApplicationContext(), getId(), false, false, false, g etUrl());
927 NotificationMediaPlaybackControls notificationControls =
928 NotificationMediaPlaybackControls.getOrCreate(getApplica tionContext());
929 notificationControls.hide(getId());
Ted C 2015/06/26 00:43:55 should this be removing the listener as well? Sho
whywhat 2015/06/26 19:29:32 I've put the listener to MediaInfo so now there's
889 super.destroy(); 930 super.destroy();
890 } 931 }
891 }; 932 };
892 } 933 }
893 934
894 @Override 935 @Override
895 protected void didStartPageLoad(String validatedUrl, boolean showingErrorPag e) { 936 protected void didStartPageLoad(String validatedUrl, boolean showingErrorPag e) {
896 if (mBackgroundContentViewHelper.isPageSwappingInProgress()) { 937 if (mBackgroundContentViewHelper.isPageSwappingInProgress()) {
897 mLoadProgressAtViewSwapInTime = 0; 938 mLoadProgressAtViewSwapInTime = 0;
898 } 939 }
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
1400 didFinishPageLoad(); 1441 didFinishPageLoad();
1401 } 1442 }
1402 } 1443 }
1403 }; 1444 };
1404 1445
1405 @VisibleForTesting 1446 @VisibleForTesting
1406 public OverrideUrlLoadingResult getLastOverrideUrlLoadingResultForTests() { 1447 public OverrideUrlLoadingResult getLastOverrideUrlLoadingResultForTests() {
1407 return mLastOverrideUrlLoadingResult; 1448 return mLastOverrideUrlLoadingResult;
1408 } 1449 }
1409 } 1450 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698