bromite/build/patches/Remove-dependency-on-com.google.android.gms.cast.patch
2021-01-26 01:12:38 +01:00

1628 lines
70 KiB
Diff

From: Wengling Chen <feiyu2817@gmail.com>
Date: Sat, 2 Nov 2019 08:00:04 +0100
Subject: Remove dependency on com.google.android.gms.cast
---
chrome/android/BUILD.gn | 8 --
chrome/android/java/AndroidManifest.xml | 16 ---
.../settings/PasswordSettings.java | 14 ---
.../modules/chrome_feature_modules.gni | 3 -
.../media_router/browser/android/BUILD.gn | 9 --
.../media_router/CastSessionUtil.java | 35 ------
.../components/media_router/MediaSink.java | 44 +-------
.../media_router/MediaStatusBridge.java | 40 ++-----
.../caf/BaseNotificationController.java | 46 --------
.../caf/BaseSessionController.java | 100 +----------------
.../caf/CafBaseMediaRouteProvider.java | 103 +-----------------
.../caf/CafMediaRouteProvider.java | 16 ---
.../media_router/caf/CafMessageHandler.java | 97 +----------------
.../media_router/caf/CastMediaSource.java | 10 +-
.../media_router/caf/CastOptionsProvider.java | 22 +---
.../caf/CastSessionController.java | 84 --------------
.../media_router/caf/CastUtils.java | 18 ---
.../CafExpandedControllerActivity.java | 33 +-----
.../CafRemotingMediaRouteProvider.java | 2 +-
.../remoting/FlingingControllerAdapter.java | 74 -------------
.../caf/remoting/RemotingMediaSource.java | 8 +-
.../remoting/RemotingSessionController.java | 26 -----
.../test/android/cast_emulator/BUILD.gn | 1 -
third_party/android_deps/BUILD.gn | 39 -------
24 files changed, 29 insertions(+), 819 deletions(-)
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -280,13 +280,10 @@ android_library("chrome_java") {
":usage_stats_proto_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",
- "$google_play_services_package:google_play_services_cast_java",
"$google_play_services_package:google_play_services_tasks_java",
"//base:base_java",
"//base:jni_java",
"//chrome/android/features/keyboard_accessory:public_java",
- "//chrome/android/modules/cablev2_authenticator/public:java",
"//chrome/android/modules/image_editor/provider:java",
"//chrome/android/modules/stack_unwinder/provider:java",
"//chrome/android/webapk/libs/client:client_java",
@@ -770,8 +767,6 @@ junit_binary("chrome_junit_tests") {
":partner_location_descriptor_proto_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",
- "$google_play_services_package:google_play_services_cast_java",
"//base:base_java",
"//base:base_java_test_support",
"//base:base_junit_test_support",
@@ -987,8 +982,6 @@ android_library("chrome_test_java") {
":partner_location_descriptor_proto_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",
- "$google_play_services_package:google_play_services_cast_java",
"$google_play_services_package:google_play_services_tasks_java",
"//base:base_java",
"//base:base_java_test_support",
@@ -2136,7 +2129,6 @@ android_library("base_module_java") {
# Deps to pull services into base module.
# TODO(crbug.com/1126301): Consider moving these to the chrome module to
# reduce base dex size.
- "$google_play_services_package:google_play_services_cast_framework_java",
"//components/background_task_scheduler:background_task_scheduler_java",
"//components/payments/content/android:service_java",
"//third_party/android_sdk/androidx_browser:androidx_browser_java",
diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml
--- a/chrome/android/java/AndroidManifest.xml
+++ b/chrome/android/java/AndroidManifest.xml
@@ -711,16 +711,6 @@ by a child template that "extends" this file.
</intent-filter>
</activity>
- <activity android:name="org.chromium.components.media_router.caf.remoting.CafExpandedControllerActivity"
- android:theme="@style/Theme.Chromium.Activity"
- android:label="Chrome.CafExpandedControllerActivity"
- android:hardwareAccelerated="true"
- android:launchMode="singleTask"
- android:noHistory="true"
- android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
- android:excludeFromRecents="true">
- </activity>
-
<!-- This activity is used to restart the main Chrome process. Should never be exported. -->
<activity android:name="org.chromium.chrome.browser.BrowserRestartActivity"
android:launchMode="singleInstance"
@@ -1188,12 +1178,6 @@ by a child template that "extends" this file.
<meta-data android:name="com.google.ar.core" android:value="optional" />
{% endif %}
- <!-- Cast support -->
- <meta-data
- android:name=
- "com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
- android:value="org.chromium.components.media_router.caf.CastOptionsProvider"/>
-
{% block base_application_definitions %}
{% endblock %}
{% block extra_application_definitions_for_test %}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java
@@ -41,7 +41,6 @@ import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.settings.ChromeManagedPreferenceDelegate;
import org.chromium.chrome.browser.settings.SettingsLauncher;
import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
-import org.chromium.chrome.browser.webauthn.CableAuthenticatorModuleProvider;
import org.chromium.components.browser_ui.settings.ChromeBasePreference;
import org.chromium.components.browser_ui.settings.ChromeSwitchPreference;
import org.chromium.components.browser_ui.settings.SearchUtils;
@@ -559,19 +558,6 @@ public class PasswordSettings
}
private void displaySecurityKeyLink() {
- if (mSecurityKey == null) {
- mSecurityKey = new ChromeBasePreference(getStyledContext());
- mSecurityKey.setKey(PREF_KEY_SECURITY_KEY_LINK);
- mSecurityKey.setTitle(R.string.phone_as_security_key_text);
- mSecurityKey.setOnPreferenceClickListener(preference -> {
- SettingsLauncher settingsLauncher = new SettingsLauncherImpl();
- settingsLauncher.launchSettingsActivity(
- getActivity(), CableAuthenticatorModuleProvider.class, null);
- return true;
- });
- mSecurityKey.setOrder(ORDER_SECURITY_KEY);
- }
- getPreferenceScreen().addPreference(mSecurityKey);
}
private Context getStyledContext() {
diff --git a/chrome/android/modules/chrome_feature_modules.gni b/chrome/android/modules/chrome_feature_modules.gni
--- a/chrome/android/modules/chrome_feature_modules.gni
+++ b/chrome/android/modules/chrome_feature_modules.gni
@@ -8,8 +8,6 @@ import(
import("//chrome/android/features/dev_ui/dev_ui_module.gni")
import("//chrome/android/features/tab_ui/tab_ui_module.gni")
import("//chrome/android/modules/buildflags.gni")
-import(
- "//chrome/android/modules/cablev2_authenticator/cablev2_authenticator_module.gni")
import("//chrome/android/modules/extra_icu/extra_icu_module.gni")
import("//chrome/android/modules/stack_unwinder/stack_unwinder_module.gni")
import("//chrome/android/modules/test_dummy/test_dummy_module.gni")
@@ -68,7 +66,6 @@ if (!disable_autofill_assistant_dfm) {
if (!disable_tab_ui_dfm) {
monochrome_module_descs += [ tab_ui_module_desc ]
}
-monochrome_module_descs += [ cablev2_authenticator_module_desc ]
# Modules shipped in Trichrome (Android Q+).
trichrome_module_descs = monochrome_module_descs
diff --git a/components/media_router/browser/android/BUILD.gn b/components/media_router/browser/android/BUILD.gn
--- a/components/media_router/browser/android/BUILD.gn
+++ b/components/media_router/browser/android/BUILD.gn
@@ -11,10 +11,6 @@ android_library("java") {
resources_package = "org.chromium.components.media_router"
deps = [
":java_resources",
- "$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",
- "$google_play_services_package:google_play_services_cast_java",
"//base:base_java",
"//base:jni_java",
"//components/browser_ui/media/android:java",
@@ -75,8 +71,6 @@ android_library("java") {
android_library("cast_options_provider_java") {
sources = [ "java/src/org/chromium/components/media_router/caf/CastOptionsProvider.java" ]
deps = [
- "$google_play_services_package:google_play_services_cast_framework_java",
- "$google_play_services_package:google_play_services_cast_java",
]
}
@@ -142,9 +136,6 @@ java_library("junit") {
deps = [
":java",
":test_support_java",
- "$google_play_services_package:google_play_services_basement_java",
- "$google_play_services_package:google_play_services_cast_framework_java",
- "$google_play_services_package:google_play_services_cast_java",
"//base:base_java",
"//base:base_java_test_support",
"//base:base_junit_test_support",
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/CastSessionUtil.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/CastSessionUtil.java
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/CastSessionUtil.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/CastSessionUtil.java
@@ -4,9 +4,6 @@
package org.chromium.components.media_router;
-import com.google.android.gms.cast.CastDevice;
-import com.google.android.gms.cast.RemoteMediaPlayer;
-
import org.chromium.components.browser_ui.media.MediaNotificationInfo;
import org.chromium.services.media_session.MediaMetadata;
@@ -18,36 +15,4 @@ public class CastSessionUtil {
// The value is borrowed from the Android Cast SDK code to match their behavior.
public static final double MIN_VOLUME_LEVEL_DELTA = 1e-7;
-
- /**
- * Builds a MediaMetadata from the given CastDevice and MediaPlayer, and sets it on the builder
- */
- public static void setNotificationMetadata(MediaNotificationInfo.Builder builder,
- CastDevice castDevice, RemoteMediaPlayer mediaPlayer) {
- MediaMetadata notificationMetadata = new MediaMetadata("", "", "");
- builder.setMetadata(notificationMetadata);
-
- if (castDevice != null) notificationMetadata.setTitle(castDevice.getFriendlyName());
-
- if (mediaPlayer == null) return;
-
- com.google.android.gms.cast.MediaInfo info = mediaPlayer.getMediaInfo();
- if (info == null) return;
-
- com.google.android.gms.cast.MediaMetadata metadata = info.getMetadata();
- if (metadata == null) return;
-
- String title = metadata.getString(com.google.android.gms.cast.MediaMetadata.KEY_TITLE);
- if (title != null) notificationMetadata.setTitle(title);
-
- String artist = metadata.getString(com.google.android.gms.cast.MediaMetadata.KEY_ARTIST);
- if (artist == null) {
- artist = metadata.getString(com.google.android.gms.cast.MediaMetadata.KEY_ALBUM_ARTIST);
- }
- if (artist != null) notificationMetadata.setArtist(artist);
-
- String album =
- metadata.getString(com.google.android.gms.cast.MediaMetadata.KEY_ALBUM_TITLE);
- if (album != null) notificationMetadata.setAlbum(album);
- }
}
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/MediaSink.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/MediaSink.java
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/MediaSink.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/MediaSink.java
@@ -8,41 +8,24 @@ import androidx.annotation.Nullable;
import androidx.mediarouter.media.MediaRouter;
import androidx.mediarouter.media.MediaRouter.RouteInfo;
-import com.google.android.gms.cast.CastDevice;
-
/**
* A common descriptor of a device that can present some URI.
*/
public class MediaSink {
private static final String CAST_SINK_URN_PREFIX = "urn:x-org.chromium:media:sink:cast-";
- private final String mId;
- private final String mName;
- private final CastDevice mDevice;
-
- /**
- * Constructor.
- * @param id A unique identifier of the sink.
- * @param name A user friendly name of the sink.
- * @param device {@link CastDevice} corresponding to this sink.
- */
- public MediaSink(String id, String name, CastDevice device) {
- mId = id;
- mName = name;
- mDevice = device;
- }
/**
* @return The unique identifier of the sink.
*/
public String getId() {
- return mId;
+ return "";
}
/**
* @return The user friendly name of the sink.
*/
public String getName() {
- return mName;
+ return "";
}
/**
@@ -52,17 +35,8 @@ public class MediaSink {
return CAST_SINK_URN_PREFIX + getId();
}
- public CastDevice getDevice() {
- return mDevice;
- }
-
@Override
public boolean equals(Object o) {
- if (o == this) return true;
- if (o instanceof MediaSink) {
- MediaSink other = (MediaSink) o;
- return mId.equals(other.getId()) && mName.equals(other.getName());
- }
return false;
}
@@ -70,23 +44,15 @@ public class MediaSink {
public int hashCode() {
final int prime = 31;
int result = 1;
- result = prime * result + ((mId == null) ? 0 : mId.hashCode());
- result = prime * result + ((mName == null) ? 0 : mName.hashCode());
return result;
}
- @Override
- public String toString() {
- return String.format("MediaSink: %s, %s", getId(), getName());
- }
-
/**
* @param route The route information provided by Android.
* @return A new MediaSink instance corresponding to the specified {@link RouteInfo}.
*/
public static MediaSink fromRoute(MediaRouter.RouteInfo route) {
- return new MediaSink(
- route.getId(), route.getName(), CastDevice.getFromBundle(route.getExtras()));
+ return null;
}
/**
@@ -97,10 +63,6 @@ public class MediaSink {
*/
@Nullable
public static MediaSink fromSinkId(String sinkId, MediaRouter router) {
- for (MediaRouter.RouteInfo route : router.getRoutes()) {
- MediaSink sink = MediaSink.fromRoute(route);
- if (sink.getId().equals(sinkId)) return sink;
- }
return null;
}
}
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/MediaStatusBridge.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/MediaStatusBridge.java
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/MediaStatusBridge.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/MediaStatusBridge.java
@@ -4,10 +4,6 @@
package org.chromium.components.media_router;
-import com.google.android.gms.cast.MediaInfo;
-import com.google.android.gms.cast.MediaMetadata;
-import com.google.android.gms.cast.MediaStatus;
-
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
@@ -17,11 +13,6 @@ import org.chromium.base.annotations.JNINamespace;
*/
@JNINamespace("media_router")
public class MediaStatusBridge {
- private MediaStatus mStatus;
-
- public MediaStatusBridge(MediaStatus status) {
- mStatus = status;
- }
/**
* Gets the play state of the stream. Return values are defined as such:
@@ -34,7 +25,7 @@ public class MediaStatusBridge {
*/
@CalledByNative
public int playerState() {
- return mStatus.getPlayerState();
+ return 0;
}
/**
@@ -48,7 +39,7 @@ public class MediaStatusBridge {
*/
@CalledByNative
public int idleReason() {
- return mStatus.getIdleReason();
+ return 0;
}
/**
@@ -57,13 +48,7 @@ public class MediaStatusBridge {
*/
@CalledByNative
public String title() {
- MediaInfo info = mStatus.getMediaInfo();
- if (info == null) return "";
-
- MediaMetadata metadata = info.getMetadata();
- if (metadata == null) return "";
-
- return metadata.getString(MediaMetadata.KEY_TITLE);
+ return "";
}
/**
@@ -71,7 +56,7 @@ public class MediaStatusBridge {
*/
@CalledByNative
public boolean canPlayPause() {
- return mStatus.isMediaCommandSupported(MediaStatus.COMMAND_PAUSE);
+ return false;
}
/**
@@ -79,7 +64,7 @@ public class MediaStatusBridge {
*/
@CalledByNative
public boolean canMute() {
- return mStatus.isMediaCommandSupported(MediaStatus.COMMAND_TOGGLE_MUTE);
+ return false;
}
/**
@@ -87,7 +72,7 @@ public class MediaStatusBridge {
*/
@CalledByNative
public boolean canSetVolume() {
- return mStatus.isMediaCommandSupported(MediaStatus.COMMAND_SET_VOLUME);
+ return false;
}
/**
@@ -95,7 +80,7 @@ public class MediaStatusBridge {
*/
@CalledByNative
public boolean canSeek() {
- return mStatus.isMediaCommandSupported(MediaStatus.COMMAND_SEEK);
+ return false;
}
/**
@@ -103,7 +88,7 @@ public class MediaStatusBridge {
*/
@CalledByNative
public boolean isMuted() {
- return mStatus.isMute();
+ return false;
}
/**
@@ -113,7 +98,7 @@ public class MediaStatusBridge {
*/
@CalledByNative
public double volume() {
- return mStatus.getStreamVolume();
+ return 0.0;
}
/**
@@ -122,10 +107,7 @@ public class MediaStatusBridge {
*/
@CalledByNative
public long duration() {
- MediaInfo info = mStatus.getMediaInfo();
- if (info == null) return 0;
-
- return info.getStreamDuration();
+ return 0;
}
/**
@@ -133,6 +115,6 @@ public class MediaStatusBridge {
*/
@CalledByNative
public long currentTime() {
- return mStatus.getStreamPosition();
+ return 0;
}
}
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/BaseNotificationController.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/BaseNotificationController.java
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/BaseNotificationController.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/BaseNotificationController.java
@@ -6,10 +6,6 @@ package org.chromium.components.media_router.caf;
import android.content.Intent;
-import com.google.android.gms.cast.CastDevice;
-import com.google.android.gms.cast.MediaStatus;
-import com.google.android.gms.cast.framework.media.RemoteMediaClient;
-
import org.chromium.components.browser_ui.media.MediaNotificationInfo;
import org.chromium.components.browser_ui.media.MediaNotificationListener;
import org.chromium.components.browser_ui.media.MediaNotificationManager;
@@ -61,20 +57,6 @@ public abstract class BaseNotificationController
public void onStatusUpdated() {
if (mNotificationBuilder == null) return;
if (!mSessionController.isConnected()) return;
-
- MediaStatus mediaStatus = mSessionController.getRemoteMediaClient().getMediaStatus();
- if (mediaStatus == null) return;
-
- int playerState = mediaStatus.getPlayerState();
- if (playerState == MediaStatus.PLAYER_STATE_PAUSED
- || playerState == MediaStatus.PLAYER_STATE_PLAYING) {
- mNotificationBuilder.setPaused(playerState != MediaStatus.PLAYER_STATE_PLAYING);
- mNotificationBuilder.setActions(
- MediaNotificationInfo.ACTION_STOP | MediaNotificationInfo.ACTION_PLAY_PAUSE);
- } else {
- mNotificationBuilder.setActions(MediaNotificationInfo.ACTION_STOP);
- }
- MediaRouterClient.getInstance().showNotification(mNotificationBuilder.build());
}
/** Called when media metadata updated. */
@@ -90,30 +72,6 @@ public abstract class BaseNotificationController
mNotificationBuilder.setMetadata(notificationMetadata);
if (!mSessionController.isConnected()) return;
-
- CastDevice castDevice = mSessionController.getSession().getCastDevice();
- if (castDevice != null) notificationMetadata.setTitle(castDevice.getFriendlyName());
-
- RemoteMediaClient remoteMediaClient = mSessionController.getRemoteMediaClient();
-
- com.google.android.gms.cast.MediaInfo info = remoteMediaClient.getMediaInfo();
- if (info == null) return;
-
- com.google.android.gms.cast.MediaMetadata metadata = info.getMetadata();
- if (metadata == null) return;
-
- String title = metadata.getString(com.google.android.gms.cast.MediaMetadata.KEY_TITLE);
- if (title != null) notificationMetadata.setTitle(title);
-
- String artist = metadata.getString(com.google.android.gms.cast.MediaMetadata.KEY_ARTIST);
- if (artist == null) {
- artist = metadata.getString(com.google.android.gms.cast.MediaMetadata.KEY_ALBUM_ARTIST);
- }
- if (artist != null) notificationMetadata.setArtist(artist);
-
- String album =
- metadata.getString(com.google.android.gms.cast.MediaMetadata.KEY_ALBUM_TITLE);
- if (album != null) notificationMetadata.setAlbum(album);
}
/////////////////////////////////////////////////////////////////////////////////////////////
@@ -122,15 +80,11 @@ public abstract class BaseNotificationController
@Override
public void onPlay(int actionSource) {
if (!mSessionController.isConnected()) return;
-
- mSessionController.getRemoteMediaClient().play();
}
@Override
public void onPause(int actionSource) {
if (!mSessionController.isConnected()) return;
-
- mSessionController.getRemoteMediaClient().pause();
}
@Override
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/BaseSessionController.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/BaseSessionController.java
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/BaseSessionController.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/BaseSessionController.java
@@ -6,12 +6,7 @@ package org.chromium.components.media_router.caf;
import androidx.annotation.Nullable;
-import com.google.android.gms.cast.CastDevice;
-import com.google.android.gms.cast.framework.CastSession;
-import com.google.android.gms.cast.framework.media.RemoteMediaClient;
-
import org.chromium.base.Log;
-import org.chromium.components.media_router.CastSessionUtil;
import org.chromium.components.media_router.FlingingController;
import org.chromium.components.media_router.MediaSink;
import org.chromium.components.media_router.MediaSource;
@@ -42,15 +37,12 @@ public abstract class BaseSessionController {
void onMetadataUpdated();
}
- private CastSession mCastSession;
private final CafBaseMediaRouteProvider mProvider;
private CreateRouteRequestInfo mRouteCreationInfo;
- private final RemoteMediaClient.Callback mRemoteMediaClientCallback;
private final List<Callback> mCallbacks = new ArrayList<>();
public BaseSessionController(CafBaseMediaRouteProvider provider) {
mProvider = provider;
- mRemoteMediaClientCallback = new RemoteMediaClientCallback();
}
public void addCallback(Callback callback) {
@@ -63,9 +55,6 @@ public abstract class BaseSessionController {
public void requestSessionLaunch() {
mRouteCreationInfo = mProvider.getPendingCreateRouteRequestInfo();
- CastUtils.getCastContext().setReceiverApplicationId(
- mRouteCreationInfo.source.getApplicationId());
-
// When the user clicks a route on the MediaRouteChooserDialog, we intercept the click event
// and do not select the route. Instead the route selection is postponed to here. This will
// trigger CAF to launch the session.
@@ -84,69 +73,22 @@ public abstract class BaseSessionController {
return mRouteCreationInfo;
}
- public CastSession getSession() {
- return mCastSession;
- }
-
- public RemoteMediaClient getRemoteMediaClient() {
- return isConnected() ? mCastSession.getRemoteMediaClient() : null;
- }
-
public abstract BaseNotificationController getNotificationController();
public void endSession() {
- CastUtils.getCastContext().getSessionManager().endCurrentSession(/* stopCasting= */ true);
- CastUtils.getCastContext().setReceiverApplicationId(null);
}
public List<String> getCapabilities() {
List<String> capabilities = new ArrayList<>();
- if (mCastSession == null || !mCastSession.isConnected()) return capabilities;
- CastDevice device = mCastSession.getCastDevice();
- if (device.hasCapability(CastDevice.CAPABILITY_AUDIO_IN)) {
- capabilities.add("audio_in");
- }
- if (device.hasCapability(CastDevice.CAPABILITY_AUDIO_OUT)) {
- capabilities.add("audio_out");
- }
- if (device.hasCapability(CastDevice.CAPABILITY_VIDEO_IN)) {
- capabilities.add("video_in");
- }
- if (device.hasCapability(CastDevice.CAPABILITY_VIDEO_OUT)) {
- capabilities.add("video_out");
- }
return capabilities;
}
public boolean isConnected() {
- return mCastSession != null && mCastSession.isConnected();
+ return false;
}
private void updateRemoteMediaClient(String message) {
if (!isConnected()) return;
-
- mCastSession.getRemoteMediaClient().onMessageReceived(
- mCastSession.getCastDevice(), CastSessionUtil.MEDIA_NAMESPACE, message);
- }
-
- /** Attaches the controller to the current {@link CastSession}. */
- public void attachToCastSession(CastSession session) {
- mCastSession = session;
- RemoteMediaClient uncheckedRemoteMediaClient = mCastSession.getRemoteMediaClient();
- if (uncheckedRemoteMediaClient != null) {
- uncheckedRemoteMediaClient.registerCallback(mRemoteMediaClientCallback);
- }
- }
-
- /** Detaches the controller from any {@link CastSession}. */
- public void detachFromCastSession() {
- if (mCastSession == null) return;
-
- RemoteMediaClient uncheckedRemoteMediaClient = mCastSession.getRemoteMediaClient();
- if (uncheckedRemoteMediaClient != null) {
- uncheckedRemoteMediaClient.unregisterCallback(mRemoteMediaClientCallback);
- }
- mCastSession = null;
}
/** Called when session started. */
@@ -163,50 +105,12 @@ public abstract class BaseSessionController {
return mProvider;
}
- /**
- * All sub-classes need to register this method to listen to messages of the namespaces they are
- * interested in.
- */
- protected void onMessageReceived(CastDevice castDevice, String namespace, String message) {
- Log.d(TAG,
- "Received message from Cast device: namespace=\"" + namespace + "\" message=\""
- + message + "\"");
- if (CastSessionUtil.MEDIA_NAMESPACE.equals(namespace)) {
- updateRemoteMediaClient(message);
- }
- }
-
- private class RemoteMediaClientCallback extends RemoteMediaClient.Callback {
- @Override
- public void onStatusUpdated() {
- BaseSessionController.this.onStatusUpdated();
- }
-
- @Override
- public void onMetadataUpdated() {
- BaseSessionController.this.onMetadataUpdated();
- }
- }
-
- protected void onStatusUpdated() {
- notifyCallback((Callback callback) -> callback.onStatusUpdated());
- }
-
- protected void onMetadataUpdated() {
- notifyCallback((Callback callback) -> callback.onMetadataUpdated());
- }
-
- @Nullable
- public FlingingController getFlingingController() {
- return null;
- }
-
/**
* Helper message to get the session ID of the attached session. For stubbing in tests as
* {@link CastSession#getSessionId()} is final.
*/
public String getSessionId() {
- return isConnected() ? getSession().getSessionId() : null;
+ return null;
}
private void notifyCallback(NotifyCallbackAction action) {
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafBaseMediaRouteProvider.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafBaseMediaRouteProvider.java
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafBaseMediaRouteProvider.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafBaseMediaRouteProvider.java
@@ -12,9 +12,6 @@ import androidx.mediarouter.media.MediaRouteSelector;
import androidx.mediarouter.media.MediaRouter;
import androidx.mediarouter.media.MediaRouter.RouteInfo;
-import com.google.android.gms.cast.framework.CastSession;
-import com.google.android.gms.cast.framework.SessionManagerListener;
-
import org.chromium.base.Log;
import org.chromium.components.media_router.DiscoveryCallback;
import org.chromium.components.media_router.DiscoveryDelegate;
@@ -37,7 +34,7 @@ import java.util.Set;
* A base provider containing common implementation for CAF-based {@link MediaRouteProvider}s.
*/
public abstract class CafBaseMediaRouteProvider
- implements MediaRouteProvider, DiscoveryDelegate, SessionManagerListener<CastSession> {
+ implements MediaRouteProvider, DiscoveryDelegate {
private static final String TAG = "CafMR";
protected static final List<MediaSink> NO_SINKS = Collections.emptyList();
@@ -153,7 +150,6 @@ public abstract class CafBaseMediaRouteProvider
// current session and clean up the routes (can't wait for session ending as the signal
// might be delayed).
sessionController().endSession();
- handleSessionEnd();
}
if (mPendingCreateRouteRequestInfo != null) {
cancelPendingRequest("Request replaced");
@@ -182,9 +178,6 @@ public abstract class CafBaseMediaRouteProvider
mManager.onRouteRequestError("The sink does not exist", nativeRequestId);
}
- CastUtils.getCastContext().getSessionManager().addSessionManagerListener(
- this, CastSession.class);
-
mPendingCreateRouteRequestInfo = new CreateRouteRequestInfo(source, sink, presentationId,
origin, tabId, isOffTheRecord, nativeRequestId, targetRouteInfo);
@@ -211,100 +204,6 @@ public abstract class CafBaseMediaRouteProvider
removeRoute(routeId, /* error= */ null);
}
- ///////////////////////////////////////////////////////
- // SessionManagerListener implementation begin
- ///////////////////////////////////////////////////////
-
- @Override
- public final void onSessionStarting(CastSession session) {
- // The session is not connected yet at this point so this is no-op.
- }
-
- @Override
- public void onSessionStartFailed(CastSession session, int error) {
- removeAllRoutes("Launch error");
- cancelPendingRequest("Launch error");
- }
-
- @Override
- public void onSessionStarted(CastSession session, String sessionId) {
- Log.d(TAG, "onSessionStarted");
-
- if (session != CastUtils.getCastContext().getSessionManager().getCurrentCastSession()) {
- // Sometimes the session start signal might come in for an earlier launch request, which
- // should be ignored.
- return;
- }
-
- if (session == sessionController().getSession() || mPendingCreateRouteRequestInfo == null) {
- // Early return for any possible case that the session start signal comes in twice for
- // the same session.
- return;
- }
- handleSessionStart(session, sessionId);
- }
-
- @Override
- public final void onSessionResumed(CastSession session, boolean wasSuspended) {
- sessionController().attachToCastSession(session);
- }
-
- @Override
- public final void onSessionResuming(CastSession session, String sessionId) {}
-
- @Override
- public final void onSessionResumeFailed(CastSession session, int error) {}
-
- @Override
- public final void onSessionEnding(CastSession session) {
- handleSessionEnd();
- }
-
- @Override
- public final void onSessionEnded(CastSession session, int error) {
- Log.d(TAG, "Session ended with error code " + error);
- handleSessionEnd();
- }
-
- @Override
- public final void onSessionSuspended(CastSession session, int reason) {
- sessionController().detachFromCastSession();
- }
-
- ///////////////////////////////////////////////////////
- // SessionManagerListener implementation end
- ///////////////////////////////////////////////////////
-
- protected void handleSessionStart(CastSession session, String sessionId) {
- sessionController().attachToCastSession(session);
- sessionController().onSessionStarted();
-
- MediaSink sink = mPendingCreateRouteRequestInfo.sink;
- MediaSource source = mPendingCreateRouteRequestInfo.source;
- MediaRoute route = new MediaRoute(
- sink.getId(), source.getSourceId(), mPendingCreateRouteRequestInfo.presentationId);
- addRoute(route, mPendingCreateRouteRequestInfo.origin, mPendingCreateRouteRequestInfo.tabId,
- mPendingCreateRouteRequestInfo.nativeRequestId, /* wasLaunched= */ true);
-
- mPendingCreateRouteRequestInfo = null;
- }
-
- private void handleSessionEnd() {
- if (mPendingCreateRouteRequestInfo != null) {
- // The Cast SDK notifies about session ending when a route is unselected, even when
- // there's no current session. Because CastSessionController unselects the route to set
- // the receiver app ID, this needs to be guarded by a pending request null check to make
- // sure the listener is not unregistered during a session relaunch.
- return;
- }
- sessionController().onSessionEnded();
- sessionController().detachFromCastSession();
- getAndroidMediaRouter().selectRoute(getAndroidMediaRouter().getDefaultRoute());
- terminateAllRoutes();
- CastUtils.getCastContext().getSessionManager().removeSessionManagerListener(
- this, CastSession.class);
- }
-
private void cancelPendingRequest(String error) {
if (mPendingCreateRouteRequestInfo == null) return;
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafMediaRouteProvider.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafMediaRouteProvider.java
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafMediaRouteProvider.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafMediaRouteProvider.java
@@ -11,8 +11,6 @@ import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.mediarouter.media.MediaRouter;
-import com.google.android.gms.cast.framework.CastSession;
-
import org.chromium.base.Log;
import org.chromium.components.media_router.BrowserMediaRouter;
import org.chromium.components.media_router.ClientRecord;
@@ -147,20 +145,6 @@ public class CafMediaRouteProvider extends CafBaseMediaRouteProvider {
return mMessageHandler;
}
- @Override
- protected void handleSessionStart(CastSession session, String sessionId) {
- super.handleSessionStart(session, sessionId);
-
- for (ClientRecord clientRecord : mClientIdToRecords.values()) {
- // Should be exactly one instance of MediaRoute/ClientRecord at this moment.
- mMessageHandler.sendReceiverActionToClient(clientRecord.routeId,
- sessionController().getSink(), clientRecord.clientId, "cast");
- }
-
- mMessageHandler.onSessionStarted();
- sessionController().getSession().getRemoteMediaClient().requestStatus();
- }
-
@Override
protected void addRoute(
MediaRoute route, String origin, int tabId, int nativeRequestId, boolean wasLaunched) {
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafMessageHandler.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafMessageHandler.java
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafMessageHandler.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafMessageHandler.java
@@ -13,10 +13,6 @@ import android.util.SparseArray;
import androidx.annotation.VisibleForTesting;
import androidx.collection.ArrayMap;
-import com.google.android.gms.cast.ApplicationMetadata;
-import com.google.android.gms.common.api.PendingResult;
-import com.google.android.gms.common.api.Status;
-
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@@ -345,49 +341,7 @@ public class CafMessageHandler {
final int sequenceNumber) throws JSONException {
if (volumeMessage == null) return false;
if (!mSessionController.isConnected()) return false;
- boolean shouldWaitForVolumeChange = false;
- try {
- if (!volumeMessage.isNull("muted")) {
- boolean newMuted = volumeMessage.getBoolean("muted");
- if (mSessionController.getSession().isMute() != newMuted) {
- mSessionController.getSession().setMute(newMuted);
- shouldWaitForVolumeChange = true;
- }
- }
- if (!volumeMessage.isNull("level")) {
- double newLevel = volumeMessage.getDouble("level");
- double currentLevel = mSessionController.getSession().getVolume();
- if (!Double.isNaN(currentLevel)
- && Math.abs(currentLevel - newLevel)
- > CastSessionUtil.MIN_VOLUME_LEVEL_DELTA) {
- mSessionController.getSession().setVolume(newLevel);
- shouldWaitForVolumeChange = true;
- }
- }
- } catch (IOException | IllegalStateException e) {
- Log.e(TAG, "Failed to send volume command: " + e);
- return false;
- }
-
- // For each successful volume message we need to respond with an empty "v2_message" so the
- // Cast Web SDK can call the success callback of the page. If we expect the volume to change
- // as the result of the command, we're relying on {@link Cast.CastListener#onVolumeChanged}
- // to get called by the Android Cast SDK when the receiver status is updated. We keep the
- // sequence number until then. If the volume doesn't change as the result of the command, we
- // won't get notified by the Android SDK
- if (shouldWaitForVolumeChange) {
- mVolumeRequests.add(new RequestRecord(clientId, sequenceNumber));
- } else {
- // It's usually bad to have request and response on the same call stack so post the
- // response to the Android message loop.
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- onVolumeChanged(clientId, sequenceNumber);
- }
- });
- }
- return true;
+ return false;
}
@VisibleForTesting
@@ -675,19 +629,11 @@ public class CafMessageHandler {
try {
// "volume" is a part of "receiver" initialized below.
JSONObject jsonVolume = new JSONObject();
- jsonVolume.put("level", mSessionController.getSession().getVolume());
- jsonVolume.put("muted", mSessionController.getSession().isMute());
// "receiver" is a part of "message" initialized below.
JSONObject jsonReceiver = new JSONObject();
- jsonReceiver.put(
- "label", mSessionController.getSession().getCastDevice().getDeviceId());
- jsonReceiver.put("friendlyName",
- mSessionController.getSession().getCastDevice().getFriendlyName());
jsonReceiver.put("capabilities", toJSONArray(mSessionController.getCapabilities()));
jsonReceiver.put("volume", jsonVolume);
- jsonReceiver.put(
- "isActiveInput", mSessionController.getSession().getActiveInputState());
jsonReceiver.put("displayStatus", null);
jsonReceiver.put("receiverType", "cast");
@@ -700,23 +646,14 @@ public class CafMessageHandler {
JSONObject jsonMessage = new JSONObject();
jsonMessage.put("sessionId", mSessionController.getSessionId());
- jsonMessage.put("statusText", mSessionController.getSession().getApplicationStatus());
jsonMessage.put("receiver", jsonReceiver);
jsonMessage.put("namespaces", jsonNamespaces);
jsonMessage.put("media", toJSONArray(new ArrayList<>()));
jsonMessage.put("status", "connected");
jsonMessage.put("transportId", "web-4");
- ApplicationMetadata applicationMetadata =
- mSessionController.getSession().getApplicationMetadata();
- if (applicationMetadata != null) {
- jsonMessage.put("appId", applicationMetadata.getApplicationId());
- } else {
- jsonMessage.put("appId",
- mSessionController.getRouteCreationInfo().source.getApplicationId());
- }
- jsonMessage.put("displayName",
- mSessionController.getSession().getCastDevice().getFriendlyName());
+ jsonMessage.put("appId",
+ mSessionController.getRouteCreationInfo().source.getApplicationId());
return jsonMessage.toString();
} catch (JSONException e) {
@@ -797,32 +734,6 @@ public class CafMessageHandler {
boolean sendStringCastMessage(
String message, String namespace, String clientId, int sequenceNumber) {
if (!mSessionController.isConnected()) return false;
-
- PendingResult<Status> pendingResult =
- mSessionController.getSession().sendMessage(namespace, message);
- if (!TextUtils.equals(namespace, CastSessionUtil.MEDIA_NAMESPACE)) {
- // Media commands wait for the media status update as a result.
- pendingResult.setResultCallback(
- (Status result) -> onSendAppMessageResult(result, clientId, sequenceNumber));
- }
- return true;
- }
-
- /**
- * Notifies a client that an app message has been sent.
- * @param clientId The client id the message is sent from.
- * @param sequenceNumber The sequence number of the message.
- */
- void onSendAppMessageResult(Status result, String clientId, int sequenceNumber) {
- if (!result.isSuccess()) {
- // TODO(avayvod): should actually report back to the page.
- // See https://crbug.com/550445.
- Log.e(TAG, "Failed to send the message: " + result);
- return;
- }
-
- // App messages wait for the empty message with the sequence
- // number.
- sendEnclosedMessageToClient(clientId, "app_message", null, sequenceNumber);
+ return false;
}
}
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastMediaSource.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastMediaSource.java
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastMediaSource.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastMediaSource.java
@@ -9,8 +9,6 @@ import android.net.Uri;
import androidx.annotation.Nullable;
import androidx.mediarouter.media.MediaRouteSelector;
-import com.google.android.gms.cast.CastMediaControlIntent;
-
import org.chromium.components.media_router.MediaSource;
import java.util.Arrays;
@@ -106,13 +104,7 @@ public class CastMediaSource implements MediaSource {
*/
@Override
public MediaRouteSelector buildRouteSelector() {
- try {
- return new MediaRouteSelector.Builder()
- .addControlCategory(CastMediaControlIntent.categoryForCast(mApplicationId))
- .build();
- } catch (IllegalArgumentException e) {
- return null;
- }
+ return null;
}
/**
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastOptionsProvider.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastOptionsProvider.java
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastOptionsProvider.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastOptionsProvider.java
@@ -6,28 +6,8 @@ package org.chromium.components.media_router.caf;
import android.content.Context;
-import com.google.android.gms.cast.LaunchOptions;
-import com.google.android.gms.cast.framework.CastOptions;
-import com.google.android.gms.cast.framework.OptionsProvider;
-import com.google.android.gms.cast.framework.SessionProvider;
-
import java.util.List;
/** {@link OptionsProvider} implementation for Chrome MR. */
-public class CastOptionsProvider implements OptionsProvider {
- @Override
- public CastOptions getCastOptions(Context context) {
- return new CastOptions.Builder()
- .setCastMediaOptions(null)
- .setEnableReconnectionService(false)
- .setLaunchOptions(new LaunchOptions.Builder().setRelaunchIfRunning(true).build())
- .setResumeSavedSession(false)
- .setStopReceiverApplicationWhenEndingSession(true)
- .build();
- }
-
- @Override
- public List<SessionProvider> getAdditionalSessionProviders(Context context) {
- return null;
- }
+public class CastOptionsProvider {
}
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastSessionController.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastSessionController.java
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastSessionController.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastSessionController.java
@@ -7,11 +7,6 @@ package org.chromium.components.media_router.caf;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
-import com.google.android.gms.cast.ApplicationMetadata;
-import com.google.android.gms.cast.Cast;
-import com.google.android.gms.cast.CastDevice;
-import com.google.android.gms.cast.framework.CastSession;
-
import org.chromium.base.Log;
import java.util.ArrayList;
@@ -24,12 +19,10 @@ public class CastSessionController extends BaseSessionController {
private static final String TAG = "CafSessionCtrl";
private List<String> mNamespaces = new ArrayList<String>();
- private CastListener mCastListener;
private CafNotificationController mNotificationController;
public CastSessionController(CafBaseMediaRouteProvider provider) {
super(provider);
- mCastListener = new CastListener();
mNotificationController = new CafNotificationController(this);
}
@@ -37,30 +30,6 @@ public class CastSessionController extends BaseSessionController {
return mNamespaces;
}
- /**
- * Init nested fields for testing. The reason is that nested classes are bound to the original
- * instance instead of the spyed instance.
- */
- void initNestedFieldsForTesting() {
- mCastListener = new CastListener();
- }
-
- @Override
- public void attachToCastSession(CastSession session) {
- super.attachToCastSession(session);
- getSession().addCastListener(mCastListener);
- updateNamespaces();
- }
-
- @Override
- public void detachFromCastSession() {
- if (getSession() == null) return;
-
- mNamespaces.clear();
- getSession().removeCastListener(mCastListener);
- super.detachFromCastSession();
- }
-
@Override
public void onSessionEnded() {
getMessageHandler().onSessionEnded();
@@ -72,24 +41,6 @@ public class CastSessionController extends BaseSessionController {
return mNotificationController;
}
- private class CastListener extends Cast.Listener {
- @Override
- public void onApplicationStatusChanged() {
- CastSessionController.this.onApplicationStatusChanged();
- }
-
- @Override
- public void onApplicationMetadataChanged(ApplicationMetadata metadata) {
- CastSessionController.this.onApplicationStatusChanged();
- }
-
- @Override
- public void onVolumeChanged() {
- CastSessionController.this.onApplicationStatusChanged();
- getMessageHandler().onVolumeChanged();
- }
- }
-
private void onApplicationStatusChanged() {
updateNamespaces();
@@ -100,53 +51,18 @@ public class CastSessionController extends BaseSessionController {
@VisibleForTesting
void updateNamespaces() {
if (!isConnected()) return;
-
- if (getSession().getApplicationMetadata() == null
- || getSession().getApplicationMetadata().getSupportedNamespaces() == null) {
- return;
- }
-
- Set<String> namespacesToAdd =
- new HashSet<>(getSession().getApplicationMetadata().getSupportedNamespaces());
- Set<String> namespacesToRemove = new HashSet<String>(mNamespaces);
-
- namespacesToRemove.removeAll(namespacesToAdd);
- namespacesToAdd.removeAll(mNamespaces);
-
- for (String namespace : namespacesToRemove) unregisterNamespace(namespace);
- for (String namespace : namespacesToAdd) registerNamespace(namespace);
}
private void registerNamespace(String namespace) {
assert !mNamespaces.contains(namespace);
if (!isConnected()) return;
-
- try {
- getSession().setMessageReceivedCallbacks(namespace, this::onMessageReceived);
- mNamespaces.add(namespace);
- } catch (Exception e) {
- Log.e(TAG, "Failed to register namespace listener for %s", namespace, e);
- }
}
private void unregisterNamespace(String namespace) {
assert mNamespaces.contains(namespace);
if (!isConnected()) return;
-
- try {
- getSession().removeMessageReceivedCallbacks(namespace);
- mNamespaces.remove(namespace);
- } catch (Exception e) {
- Log.e(TAG, "Failed to remove the namespace listener for %s", namespace, e);
- }
- }
-
- @Override
- protected void onMessageReceived(CastDevice castDevice, String namespace, String message) {
- super.onMessageReceived(castDevice, namespace, message);
- getMessageHandler().onMessageReceived(namespace, message);
}
@NonNull
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastUtils.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastUtils.java
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastUtils.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastUtils.java
@@ -8,28 +8,10 @@ import android.app.Application;
import android.content.Context;
import android.content.ContextWrapper;
-import com.google.android.gms.cast.framework.CastContext;
-
import org.chromium.base.ContextUtils;
/** Utility methods for Cast. */
public class CastUtils {
- /** Helper method to return the {@link CastContext} instance. */
- public static CastContext getCastContext() {
- 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);
- }
-
/**
* Compares two origins. Empty origin strings correspond to unique origins in
* url::Origin.
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafExpandedControllerActivity.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafExpandedControllerActivity.java
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafExpandedControllerActivity.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafExpandedControllerActivity.java
@@ -45,53 +45,36 @@ public class CafExpandedControllerActivity
@Override
public void play() {
if (!mSessionController.isConnected()) return;
-
- mSessionController.getSession().getRemoteMediaClient().play();
}
@Override
public void pause() {
if (!mSessionController.isConnected()) return;
-
- mSessionController.getSession().getRemoteMediaClient().pause();
}
@Override
public long getDuration() {
- if (!mSessionController.isConnected()) return 0;
- return mSessionController.getFlingingController().getDuration();
+ return 0;
}
@Override
public long getPosition() {
- if (!mSessionController.isConnected()) return 0;
- return mSessionController.getFlingingController().getApproximateCurrentTime();
+ return 0;
}
@Override
public void seekTo(long pos) {
- if (!mSessionController.isConnected()) return;
-
- mSessionController.getSession().getRemoteMediaClient().seek(pos);
}
@Override
public boolean isPlaying() {
- if (!mSessionController.isConnected()) return false;
-
- return mSessionController.getSession().getRemoteMediaClient().isPlaying();
+ return false;
}
@Override
public long getActionFlags() {
long flags =
PlaybackStateCompat.ACTION_REWIND | PlaybackStateCompat.ACTION_FAST_FORWARD;
- if (mSessionController.isConnected()
- && mSessionController.getSession().getRemoteMediaClient().isPlaying()) {
- flags |= PlaybackStateCompat.ACTION_PAUSE;
- } else {
- flags |= PlaybackStateCompat.ACTION_PLAY;
- }
return flags;
}
};
@@ -180,20 +163,10 @@ public class CafExpandedControllerActivity
private void updateUi() {
if (!mSessionController.isConnected()) return;
- String deviceName = mSessionController.getSession().getCastDevice().getFriendlyName();
- String titleText = "";
- if (deviceName != null) {
- titleText = getResources().getString(R.string.cast_casting_video, deviceName);
- }
- mTitleView.setText(titleText);
-
mMediaController.refresh();
mMediaController.updateProgress();
cancelProgressUpdateTask();
- if (mSessionController.getSession().getRemoteMediaClient().isPlaying()) {
- scheduleProgressUpdateTask();
- }
}
private void scheduleProgressUpdateTask() {
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafRemotingMediaRouteProvider.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafRemotingMediaRouteProvider.java
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafRemotingMediaRouteProvider.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafRemotingMediaRouteProvider.java
@@ -65,6 +65,6 @@ public class CafRemotingMediaRouteProvider extends CafBaseMediaRouteProvider {
if (!mRoutes.containsKey(routeId)) return null;
- return sessionController().getFlingingController();
+ return null;
}
}
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/FlingingControllerAdapter.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/FlingingControllerAdapter.java
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/FlingingControllerAdapter.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/FlingingControllerAdapter.java
@@ -4,11 +4,6 @@
package org.chromium.components.media_router.caf.remoting;
-import com.google.android.gms.cast.MediaInfo;
-import com.google.android.gms.cast.MediaStatus;
-import com.google.android.gms.cast.framework.media.RemoteMediaClient;
-import com.google.android.gms.common.api.Result;
-
import org.chromium.base.Log;
import org.chromium.components.media_router.FlingingController;
import org.chromium.components.media_router.MediaController;
@@ -69,14 +64,6 @@ public class FlingingControllerAdapter implements FlingingController, MediaContr
/** Starts loading the media URL, from the given position. */
public void load(long position) {
if (!mSessionController.isConnected()) return;
-
- mLoaded = true;
-
- MediaInfo mediaInfo = new MediaInfo.Builder(mMediaUrl)
- .setContentType("*/*")
- .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
- .build();
- mSessionController.getRemoteMediaClient().load(mediaInfo, /* autoplay= */ true, position);
}
////////////////////////////////////////////
@@ -91,89 +78,28 @@ public class FlingingControllerAdapter implements FlingingController, MediaContr
load(/* position= */ 0);
return;
}
-
- mSessionController.getRemoteMediaClient().play().setResultCallback(
- this::onMediaCommandResult);
}
@Override
public void pause() {
if (!mSessionController.isConnected()) return;
- mSessionController.getRemoteMediaClient().pause().setResultCallback(
- this::onMediaCommandResult);
}
@Override
public void setMute(boolean mute) {
if (!mSessionController.isConnected()) return;
- mSessionController.getRemoteMediaClient().setStreamMute(mute).setResultCallback(
- this::onMediaCommandResult);
}
@Override
public void setVolume(double volume) {
if (!mSessionController.isConnected()) return;
- mSessionController.getRemoteMediaClient().setStreamVolume(volume).setResultCallback(
- this::onMediaCommandResult);
}
@Override
public void seek(long position) {
- if (!mSessionController.isConnected()) return;
-
- if (!mLoaded) {
- load(position);
- return;
- }
-
- mSessionController.getRemoteMediaClient().seek(position).setResultCallback(
- this::onMediaCommandResult);
- mStreamPositionExtrapolator.onSeek(position);
}
////////////////////////////////////////////
// MediaController implementation end
////////////////////////////////////////////
-
- public void onStatusUpdated() {
- if (mMediaStatusObserver == null) return;
-
- RemoteMediaClient remoteMediaClient = mSessionController.getRemoteMediaClient();
-
- MediaStatus mediaStatus = remoteMediaClient.getMediaStatus();
- if (mediaStatus != null) {
- mHasEverReceivedValidMediaSession = true;
- if (mediaStatus.getPlayerState() == MediaStatus.PLAYER_STATE_IDLE
- && mediaStatus.getIdleReason() == MediaStatus.IDLE_REASON_FINISHED) {
- mLoaded = false;
- mStreamPositionExtrapolator.onFinish();
- } else {
- mStreamPositionExtrapolator.update(remoteMediaClient.getStreamDuration(),
- remoteMediaClient.getApproximateStreamPosition(),
- remoteMediaClient.isPlaying(), mediaStatus.getPlaybackRate());
- }
-
- mMediaStatusObserver.onMediaStatusUpdate(new MediaStatusBridge(mediaStatus));
-
- } else if (mHasEverReceivedValidMediaSession) {
- // We can receive a null |mediaStatus| while we are in the process of loading the video.
- // We should wait until we receive one valid media status before considering the video
- // unloaded. Otherwise, the first call to seek or play will reload the video.
- // See b/144325733.
- mLoaded = false;
- mStreamPositionExtrapolator.clear();
- }
- }
-
- private void onMediaCommandResult(Result result) {
- // When multiple API calls are made in quick succession, "Results have already been set"
- // IllegalStateExceptions might be thrown from GMS code. We prefer to catch the exception
- // and noop it, than to crash. This might lead to some API calls never getting their
- // onResult() called, so we should not rely on onResult() being called for every API call.
- // See https://crbug.com/853923.
- if (!result.getStatus().isSuccess()) {
- Log.e(TAG, "Error when sending command. Status code: %d",
- result.getStatus().getStatusCode());
- }
- }
}
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/RemotingMediaSource.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/RemotingMediaSource.java
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/RemotingMediaSource.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/RemotingMediaSource.java
@@ -13,8 +13,6 @@ import android.util.Base64;
import androidx.annotation.Nullable;
import androidx.mediarouter.media.MediaRouteSelector;
-import com.google.android.gms.cast.CastMediaControlIntent;
-
import org.chromium.base.ContextUtils;
import org.chromium.base.Log;
import org.chromium.components.media_router.MediaSource;
@@ -84,9 +82,7 @@ public class RemotingMediaSource implements MediaSource {
*/
@Override
public MediaRouteSelector buildRouteSelector() {
- return new MediaRouteSelector.Builder()
- .addControlCategory(CastMediaControlIntent.categoryForCast(getApplicationId()))
- .build();
+ return null;
}
/**
@@ -113,7 +109,7 @@ public class RemotingMediaSource implements MediaSource {
sApplicationId = (customAppId != null && !customAppId.isEmpty())
? customAppId
- : CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID;
+ : "CC1AD845"; /*DEFAULT_MEDIA_RECEIVER_APPLICATION_ID*/
}
return sApplicationId;
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/RemotingSessionController.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/RemotingSessionController.java
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/RemotingSessionController.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/RemotingSessionController.java
@@ -4,8 +4,6 @@
package org.chromium.components.media_router.caf.remoting;
-import com.google.android.gms.cast.framework.CastSession;
-
import org.chromium.base.Log;
import org.chromium.components.media_router.CastSessionUtil;
import org.chromium.components.media_router.caf.BaseNotificationController;
@@ -33,19 +31,6 @@ public class RemotingSessionController extends BaseSessionController {
sInstance = new WeakReference<>(this);
}
- @Override
- public void attachToCastSession(CastSession session) {
- super.attachToCastSession(session);
-
- try {
- getSession().setMessageReceivedCallbacks(
- CastSessionUtil.MEDIA_NAMESPACE, this::onMessageReceived);
- } catch (Exception e) {
- Log.e(TAG, "Failed to register namespace listener for %s",
- CastSessionUtil.MEDIA_NAMESPACE, e);
- }
- }
-
@Override
public void onSessionStarted() {
super.onSessionStarted();
@@ -53,17 +38,6 @@ public class RemotingSessionController extends BaseSessionController {
mFlingingControllerAdapter = new FlingingControllerAdapter(this, source.getMediaUrl());
}
- @Override
- protected void onStatusUpdated() {
- mFlingingControllerAdapter.onStatusUpdated();
- super.onStatusUpdated();
- }
-
- @Override
- public FlingingControllerAdapter getFlingingController() {
- return mFlingingControllerAdapter;
- }
-
@Override
public BaseNotificationController getNotificationController() {
return mNotificationController;
diff --git a/components/media_router/test/android/cast_emulator/BUILD.gn b/components/media_router/test/android/cast_emulator/BUILD.gn
--- a/components/media_router/test/android/cast_emulator/BUILD.gn
+++ b/components/media_router/test/android/cast_emulator/BUILD.gn
@@ -20,7 +20,6 @@ android_library("cast_emulator_java") {
"src/org/chromium/components/media_router/cast_emulator/router/DummyRoutePublisher.java",
]
deps = [
- "$google_play_services_package:google_play_services_cast_java",
"//base:base_java",
"//third_party/android_deps:android_support_v7_appcompat_java",
"//third_party/android_deps:androidx_mediarouter_mediarouter_java",
diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.gn
--- a/third_party/android_deps/BUILD.gn
+++ b/third_party/android_deps/BUILD.gn
@@ -1171,45 +1171,6 @@ android_aar_prebuilt("google_play_services_basement_java") {
"//build/android/bytecode:fragment_activity_replacer"
}
-# This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
-android_aar_prebuilt("google_play_services_cast_java") {
- aar_path = "libs/com_google_android_gms_play_services_cast/play-services-cast-17.0.0.aar"
- info_path = "libs/com_google_android_gms_play_services_cast/com_google_android_gms_play_services_cast.info"
- deps = [
- ":androidx_core_core_java",
- ":androidx_mediarouter_mediarouter_java",
- ":google_play_services_base_java",
- ":google_play_services_basement_java",
- ":google_play_services_flags_java",
- ":google_play_services_tasks_java",
- ]
-
- # Removing drawables from GMS .aars as they are unused bloat.
- strip_drawables = true
-}
-
-# This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
-android_aar_prebuilt("google_play_services_cast_framework_java") {
- aar_path = "libs/com_google_android_gms_play_services_cast_framework/play-services-cast-framework-17.0.0.aar"
- info_path = "libs/com_google_android_gms_play_services_cast_framework/com_google_android_gms_play_services_cast_framework.info"
- deps = [
- ":androidx_appcompat_appcompat_java",
- ":androidx_collection_collection_java",
- ":androidx_core_core_java",
- ":androidx_fragment_fragment_java",
- ":androidx_media_media_java",
- ":androidx_mediarouter_mediarouter_java",
- ":androidx_recyclerview_recyclerview_java",
- ":google_play_services_base_java",
- ":google_play_services_basement_java",
- ":google_play_services_cast_java",
- ]
-
- # Removing all resources from cast framework as they are unused bloat.
- # Can only safely remove them when R8 will strip the path that accesses them.
- strip_resources = !is_java_debug
-}
-
# This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
android_aar_prebuilt("google_play_services_gcm_java") {
aar_path = "libs/com_google_android_gms_play_services_gcm/play-services-gcm-17.0.0.aar"
--
2.17.1