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

Unified 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: Added browser tests 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 side-by-side diff with in-line comments
Download patch
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();
}
};

Powered by Google App Engine
This is Rietveld 408576698