Commit 0c219f1c authored by Evan Stade's avatar Evan Stade Committed by Commit Bot

Revert "WebLayer: hook up volume control for Media Router"

This reverts commit 657b47a9.

Reason for revert: breaks regular media session notifications on WebLayer

Original change's description:
> WebLayer: hook up volume control for Media Router
>
> Using the phone's volume button when casting should change the casting
> volume.
>
> Bug: 1057099
> Change-Id: I50971df97df598922c6da683cbfd376d2e42859f
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2515282
> Commit-Queue: Evan Stade <estade@chromium.org>
> Reviewed-by: Thomas Guilbert <tguilbert@chromium.org>
> Reviewed-by: Mounir Lamouri <mlamouri@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#825152}

TBR=estade@chromium.org,mlamouri@chromium.org,tguilbert@chromium.org

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: 1057099
Change-Id: I1d560a9ec4bebd02c7c47b59c760fbb05904c63f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2533806Reviewed-by: default avatarEvan Stade <estade@chromium.org>
Commit-Queue: Evan Stade <estade@chromium.org>
Cr-Commit-Position: refs/heads/master@{#826609}
parent bac61d9d
......@@ -11,10 +11,12 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioManager;
import android.os.IBinder;
import android.support.v4.media.session.MediaSessionCompat;
import android.util.SparseArray;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.mediarouter.media.MediaRouter;
import org.chromium.base.ContextUtils;
import org.chromium.chrome.R;
......@@ -220,6 +222,20 @@ class ChromeMediaNotificationControllerDelegate implements MediaNotificationCont
return createNotificationWrapperBuilder(mNotificationId);
}
@Override
public void onMediaSessionUpdated(MediaSessionCompat session) {
try {
// Tell the MediaRouter about the session, so that Chrome can control the volume
// on the remote cast device (if any).
// Pre-MR1 versions of JB do not have the complete MediaRouter APIs,
// so getting the MediaRouter instance will throw an exception.
MediaRouter.getInstance(getContext()).setMediaSessionCompat(session);
} catch (NoSuchMethodError e) {
// Do nothing. Chrome can't be casting without a MediaRouter, so there is nothing
// to do here.
}
}
@Override
public void logNotificationShown(NotificationWrapper notification) {
NotificationUmaTracker.getInstance().onNotificationShown(
......
......@@ -24,14 +24,12 @@ android_library("java") {
"//components/browser_ui/notifications/android:java",
"//components/embedder_support/android:browser_context_java",
"//components/favicon/android:java",
"//components/media_router/browser/android:media_router_utils_java",
"//components/url_formatter/android:url_formatter_java",
"//content/public/android:content_java",
"//services/media_session/public/cpp/android:media_session_java",
"//services/media_session/public/mojom:mojom_java",
"//third_party/android_deps:android_support_v4_java",
"//third_party/android_deps:androidx_annotation_annotation_java",
"//third_party/android_deps:androidx_mediarouter_mediarouter_java",
"//ui/android:ui_full_java",
"//url:gurl_java",
]
......
include_rules = [
"+components/embedder_support/android",
"+components/favicon/android",
"+components/media_router/browser/android/java/src/org/chromium/components/media_router/MediaRouterUtils.java",
"+components/url_formatter/android",
"+content/public/android",
"+services/media_session/public/cpp/android",
......
......@@ -23,7 +23,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import androidx.mediarouter.media.MediaRouter;
import org.chromium.base.CollectionUtil;
import org.chromium.base.ContextUtils;
......@@ -33,7 +32,6 @@ import org.chromium.components.browser_ui.notifications.NotificationManagerProxy
import org.chromium.components.browser_ui.notifications.NotificationManagerProxyImpl;
import org.chromium.components.browser_ui.notifications.NotificationWrapper;
import org.chromium.components.browser_ui.notifications.NotificationWrapperBuilder;
import org.chromium.components.media_router.MediaRouterUtils;
import org.chromium.media_session.mojom.MediaSessionAction;
import org.chromium.services.media_session.MediaMetadata;
......@@ -298,6 +296,9 @@ public class MediaNotificationController {
/** Returns a builder suitable as a starting point for creating the notification. */
NotificationWrapperBuilder createNotificationWrapperBuilder();
/** Called when the Android MediaSession has been updated. */
void onMediaSessionUpdated(MediaSessionCompat session);
/** Called when a notification has been shown and should be logged in UMA. */
void logNotificationShown(NotificationWrapper notification);
}
......@@ -628,8 +629,7 @@ public class MediaNotificationController {
activateAndroidMediaSession(mMediaNotificationInfo.instanceId);
MediaRouter.getInstance(MediaRouterUtils.getContextForCasting())
.setMediaSessionCompat(mMediaSession);
mDelegate.onMediaSessionUpdated(mMediaSession);
mMediaSession.setMetadata(createMetadata());
......
......@@ -11,7 +11,6 @@ android_library("java") {
resources_package = "org.chromium.components.media_router"
deps = [
":java_resources",
":media_router_utils_java",
"$google_play_services_package:google_play_services_base_java",
"$google_play_services_package:google_play_services_basement_java",
"$google_play_services_package:google_play_services_cast_framework_java",
......@@ -73,15 +72,6 @@ android_library("java") {
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
}
android_library("media_router_utils_java") {
sources =
[ "java/src/org/chromium/components/media_router/MediaRouterUtils.java" ]
deps = [
"$google_play_services_package:google_play_services_cast_framework_java",
"//base:base_java",
]
}
generate_jni("jni_headers") {
sources = [
"java/src/org/chromium/components/media_router/BrowserMediaRouter.java",
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.components.media_router;
import android.app.Application;
import android.content.Context;
import android.content.ContextWrapper;
import org.chromium.base.ContextUtils;
/** Utility methods for Media Router. */
public class MediaRouterUtils {
/**
* Helper method to return the {@link Context} instance to be used for {@link MediaRouter} and
* {@link CastContext}.
*/
public static Context getContextForCasting() {
Context context = ContextUtils.getApplicationContext();
// The GMS Cast framework assumes the passed {@link Context} returns an instance of {@link
// Application} from {@link getApplicationContext()}, so we make sure to remove any
// wrappers.
while (!(context.getApplicationContext() instanceof Application)) {
if (context instanceof ContextWrapper) {
context = ((ContextWrapper) context).getBaseContext();
} else {
return null;
}
}
return context;
}
}
......@@ -4,15 +4,30 @@
package org.chromium.components.media_router.caf;
import android.app.Application;
import android.content.Context;
import android.content.ContextWrapper;
import com.google.android.gms.cast.framework.CastContext;
import org.chromium.components.media_router.MediaRouterUtils;
import org.chromium.base.ContextUtils;
/** Utility methods for Cast. */
public class CastUtils {
/** Helper method to return the {@link CastContext} instance. */
public static CastContext getCastContext() {
return CastContext.getSharedInstance(MediaRouterUtils.getContextForCasting());
Context context = ContextUtils.getApplicationContext();
// The GMS Cast framework assumes the passed {@link Context} returns an instance of {@link
// Application} from {@link getApplicationContext()}, so we make sure to remove any
// wrappers.
while (!(context.getApplicationContext() instanceof Application)) {
if (context instanceof ContextWrapper) {
context = ((ContextWrapper) context).getBaseContext();
} else {
return null;
}
}
return CastContext.getSharedInstance(context);
}
/**
......
......@@ -10,6 +10,7 @@ import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.support.v4.media.session.MediaSessionCompat;
import androidx.fragment.app.FragmentManager;
......@@ -138,6 +139,11 @@ public class MediaRouterClientImpl extends MediaRouterClient {
return MediaSessionNotificationHelper.createNotificationWrapperBuilder(mNotificationId);
}
@Override
public void onMediaSessionUpdated(MediaSessionCompat session) {
// TODO(estade): implement.
}
@Override
public void logNotificationShown(NotificationWrapper notification) {}
}
......
......@@ -6,6 +6,7 @@ package org.chromium.weblayer_private.media;
import android.app.Service;
import android.content.Intent;
import android.support.v4.media.session.MediaSessionCompat;
import org.chromium.components.browser_ui.media.MediaNotificationController;
import org.chromium.components.browser_ui.media.MediaNotificationInfo;
......@@ -97,6 +98,11 @@ public class MediaSessionManager {
getNotificationId());
}
@Override
public void onMediaSessionUpdated(MediaSessionCompat session) {
// This is only relevant when casting.
}
@Override
public void logNotificationShown(NotificationWrapper notification) {}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment