Index: chrome/android/java_staging/src/org/chromium/chrome/browser/tab/ChromeTab.java |
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/tab/ChromeTab.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/tab/ChromeTab.java |
index 6dfc91faf32ececb5d716fed66408a0f5b97dc10..60acf36e0078b6b48c17e2e638bcccfd7c1e6470 100644 |
--- a/chrome/android/java_staging/src/org/chromium/chrome/browser/tab/ChromeTab.java |
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/tab/ChromeTab.java |
@@ -37,6 +37,7 @@ import org.chromium.chrome.browser.TabState; |
import org.chromium.chrome.browser.TabUma; |
import org.chromium.chrome.browser.TabUma.TabCreationState; |
import org.chromium.chrome.browser.UrlConstants; |
+import org.chromium.chrome.browser.UrlUtilities; |
import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator; |
import org.chromium.chrome.browser.contextmenu.ContextMenuParams; |
import org.chromium.chrome.browser.contextmenu.ContextMenuPopulator; |
@@ -50,6 +51,9 @@ import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler.Overrid |
import org.chromium.chrome.browser.externalnav.ExternalNavigationParams; |
import org.chromium.chrome.browser.fullscreen.FullscreenManager; |
import org.chromium.chrome.browser.media.MediaNotificationService; |
+import org.chromium.chrome.browser.media.ui.MediaInfo; |
+import org.chromium.chrome.browser.media.ui.MediaPlaybackControls; |
+import org.chromium.chrome.browser.media.ui.NotificationMediaPlaybackControls; |
import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; |
import org.chromium.chrome.browser.ntp.NativePageAssassin; |
import org.chromium.chrome.browser.ntp.NativePageFactory; |
@@ -86,6 +90,8 @@ import org.chromium.ui.WindowOpenDisposition; |
import org.chromium.ui.base.PageTransition; |
import org.chromium.ui.base.WindowAndroid; |
+import java.net.URI; |
+import java.net.URISyntaxException; |
import java.util.Locale; |
/** |
@@ -95,7 +101,7 @@ import java.util.Locale; |
public class ChromeTab extends Tab { |
public static final int NTP_TAB_ID = -2; |
- private static final String TAG = "ChromeTab"; |
+ private static final String TAG = "cr.ChromeTab"; |
// URL didFailLoad error code. Should match the value in net_error_list.h. |
public static final int BLOCKED_BY_ADMINISTRATOR = -22; |
@@ -360,6 +366,29 @@ public class ChromeTab extends Tab { |
*/ |
public class TabChromeWebContentsDelegateAndroidImpl |
extends TabChromeWebContentsDelegateAndroid { |
+ private MediaPlaybackControls.Listener mControlsListener = |
+ new MediaPlaybackControls.Listener() { |
+ @Override |
+ public void onPlay() { |
+ TabChromeWebContentsDelegateAndroidImpl |
+ .nativeOnMediaControlsResume(getWebContents()); |
+ NotificationMediaPlaybackControls notificationControls = |
+ NotificationMediaPlaybackControls.getOrCreate(getApplicationContext()); |
+ notificationControls.onPlaybackStateChanged( |
+ MediaInfo.PAUSED, MediaInfo.PLAYING); |
+ } |
+ |
+ @Override |
+ public void onPause() { |
+ TabChromeWebContentsDelegateAndroidImpl |
+ .nativeOnMediaControlsPause(getWebContents()); |
+ NotificationMediaPlaybackControls notificationControls = |
+ NotificationMediaPlaybackControls.getOrCreate(getApplicationContext()); |
+ notificationControls.onPlaybackStateChanged( |
+ MediaInfo.PLAYING, MediaInfo.PAUSED); |
+ } |
+ }; |
+ |
/** |
* This method is meant to be overridden by DocumentTab because the |
* TabModelSelector returned by the activity is not correct. |
@@ -492,6 +521,32 @@ public class ChromeTab extends Tab { |
handleMediaKey(event); |
} |
+ @Override |
+ public void showMediaControls(boolean isPaused) { |
+ NotificationMediaPlaybackControls notificationControls = |
+ NotificationMediaPlaybackControls.getOrCreate(getApplicationContext()); |
+ notificationControls.addListener(mControlsListener); |
+ String originForDisplay = getUrl(); |
mlamouri (slow - plz ping)
2015/06/18 16:43:22
That means that we show the origin of the top fram
mlamouri (slow - plz ping)
2015/06/22 14:34:17
You didn't address that, did you? Maybe we should
whywhat
2015/06/23 19:39:10
It would be confusing for the user to see "youtube
|
+ try { |
+ originForDisplay = UrlUtilities.getOriginForDisplay(new URI(getUrl()), true); |
+ } catch (URISyntaxException e) { |
+ Log.e(TAG, "Wrong syntax for the tab URL when playing media. Showing the URL."); |
+ } |
+ notificationControls.show(new MediaInfo( |
+ getTitle(), |
+ isPaused ? MediaInfo.PAUSED : MediaInfo.PLAYING, |
+ originForDisplay, |
+ getId())); |
+ } |
+ |
+ @Override |
+ public void hideMediaControls() { |
+ NotificationMediaPlaybackControls notificationControls = |
+ NotificationMediaPlaybackControls.getOrCreate(getApplicationContext()); |
+ notificationControls.hide(getId()); |
+ notificationControls.removeListener(mControlsListener); |
+ } |
+ |
/** |
* Redispatches unhandled media keys. This allows bluetooth headphones with play/pause or |
* other buttons to function correctly. |
@@ -543,7 +598,6 @@ public class ChromeTab extends Tab { |
private boolean hasAudibleAudio() { |
return !isClosing() && super.nativeHasAudibleAudio(getWebContents()); |
} |
- |
} |
/** |
@@ -888,6 +942,9 @@ public class ChromeTab extends Tab { |
public void destroy() { |
MediaNotificationService.updateMediaNotificationForTab( |
getApplicationContext(), getId(), false, false, false, getUrl()); |
+ NotificationMediaPlaybackControls notificationControls = |
+ NotificationMediaPlaybackControls.getOrCreate(getApplicationContext()); |
+ notificationControls.hide(getId()); |
super.destroy(); |
} |
}; |