12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628 |
- 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"
- @@ -1178,12 +1168,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
|