Merge "Inline shouldDisableMediaOutput into Settings app" into main
diff --git a/src/com/android/settings/media/MediaDeviceUpdateWorker.java b/src/com/android/settings/media/MediaDeviceUpdateWorker.java
index f420f53..6fa512e 100644
--- a/src/com/android/settings/media/MediaDeviceUpdateWorker.java
+++ b/src/com/android/settings/media/MediaDeviceUpdateWorker.java
@@ -23,6 +23,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.media.AudioManager;
+import android.media.MediaRouter2Manager;
 import android.media.RoutingSessionInfo;
 import android.net.Uri;
 import android.os.UserHandle;
@@ -59,6 +60,8 @@
     protected final Collection<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>();
     private final DevicesChangedBroadcastReceiver mReceiver;
     private final String mPackageName;
+    @VisibleForTesting
+    MediaRouter2Manager mManager;
 
     private boolean mIsTouched;
     private MediaDevice mTopDevice;
@@ -82,6 +85,11 @@
             mLocalMediaManager = new LocalMediaManager(mContext, mPackageName, null);
         }
 
+        // Delaying initialization to allow mocking in Roboelectric tests.
+        if (mManager == null) {
+            mManager = MediaRouter2Manager.getInstance(mContext);
+        }
+
         mLocalMediaManager.registerCallback(this);
         final IntentFilter intentFilter = new IntentFilter(STREAM_DEVICES_CHANGED_ACTION);
         mContext.registerReceiver(mReceiver, intentFilter);
@@ -259,7 +267,9 @@
     }
 
     boolean shouldDisableMediaOutput(String packageName) {
-        return mLocalMediaManager.shouldDisableMediaOutput(packageName);
+        // TODO: b/291277292 - Remove references to MediaRouter2Manager and implement long-term
+        //  solution in SettingsLib.
+        return mManager.getTransferableRoutes(packageName).isEmpty();
     }
 
     boolean shouldEnableVolumeSeekBar(RoutingSessionInfo sessionInfo) {
diff --git a/src/com/android/settings/media/RemoteMediaSlice.java b/src/com/android/settings/media/RemoteMediaSlice.java
index f856188..193a6c7 100644
--- a/src/com/android/settings/media/RemoteMediaSlice.java
+++ b/src/com/android/settings/media/RemoteMediaSlice.java
@@ -25,7 +25,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Bitmap;
-import android.media.MediaRouter2Manager;
 import android.media.RoutingSessionInfo;
 import android.net.Uri;
 import android.text.SpannableString;
@@ -33,7 +32,6 @@
 import android.text.style.ForegroundColorSpan;
 import android.util.Log;
 
-import androidx.annotation.VisibleForTesting;
 import androidx.core.graphics.drawable.IconCompat;
 import androidx.slice.Slice;
 import androidx.slice.builders.ListBuilder;
@@ -67,9 +65,6 @@
 
     private MediaDeviceUpdateWorker mWorker;
 
-    @VisibleForTesting
-    MediaRouter2Manager mRouterManager;
-
     public RemoteMediaSlice(Context context) {
         mContext = context;
     }
@@ -105,9 +100,6 @@
             Log.e(TAG, "Unable to get the slice worker.");
             return listBuilder.build();
         }
-        if (mRouterManager == null) {
-            mRouterManager = MediaRouter2Manager.getInstance(mContext);
-        }
         // Only displaying remote devices
         final List<RoutingSessionInfo> infos = getWorker().getActiveRemoteMediaDevice();
         if (infos.isEmpty()) {
diff --git a/src/com/android/settings/notification/RemoteVolumeGroupController.java b/src/com/android/settings/notification/RemoteVolumeGroupController.java
index 47a12d0..a943d5f 100644
--- a/src/com/android/settings/notification/RemoteVolumeGroupController.java
+++ b/src/com/android/settings/notification/RemoteVolumeGroupController.java
@@ -136,8 +136,11 @@
 
             Preference switcherPreference = mPreferenceCategory.findPreference(
                     SWITCHER_PREFIX + info.getId());
-            final boolean isMediaOutputDisabled = mLocalMediaManager.shouldDisableMediaOutput(
-                    info.getClientPackageName());
+
+            // TODO: b/291277292 - Remove references to MediaRouter2Manager and implement long-term
+            //  solution in SettingsLib.
+            final boolean isMediaOutputDisabled =
+                    mRouterManager.getTransferableRoutes(info.getClientPackageName()).isEmpty();
             final CharSequence outputTitle = mContext.getString(R.string.media_output_label_title,
                     appName);
             if (switcherPreference != null) {
diff --git a/tests/robotests/src/com/android/settings/media/MediaDeviceUpdateWorkerTest.java b/tests/robotests/src/com/android/settings/media/MediaDeviceUpdateWorkerTest.java
index 7a3243b..73b5ab0 100644
--- a/tests/robotests/src/com/android/settings/media/MediaDeviceUpdateWorkerTest.java
+++ b/tests/robotests/src/com/android/settings/media/MediaDeviceUpdateWorkerTest.java
@@ -31,6 +31,7 @@
 import android.content.Intent;
 import android.media.AudioManager;
 import android.media.MediaRoute2ProviderService;
+import android.media.MediaRouter2Manager;
 import android.media.RoutingSessionInfo;
 import android.net.Uri;
 
@@ -92,6 +93,7 @@
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
         mMediaDeviceUpdateWorker = new MediaDeviceUpdateWorker(mContext, URI);
+        mMediaDeviceUpdateWorker.mManager = mock(MediaRouter2Manager.class);
         mResolver = mock(ContentResolver.class);
         mShadowApplication = ShadowApplication.getInstance();
         mAudioManager = mContext.getSystemService(AudioManager.class);
@@ -234,6 +236,7 @@
         when(mLocalBluetoothManager.getEventManager()).thenReturn(mBluetoothEventManager);
 
         mMediaDeviceUpdateWorker = new MediaDeviceUpdateWorker(mContext, URI1);
+        mMediaDeviceUpdateWorker.mManager = mock(MediaRouter2Manager.class);
         mMediaDeviceUpdateWorker.mLocalMediaManager = mock(LocalMediaManager.class);
         when(mMediaDeviceUpdateWorker.mLocalMediaManager.getPackageName())
                 .thenReturn(TEST_DEVICE_PACKAGE_NAME1);
diff --git a/tests/robotests/src/com/android/settings/media/RemoteMediaSliceTest.java b/tests/robotests/src/com/android/settings/media/RemoteMediaSliceTest.java
index 81001d7..d995793 100644
--- a/tests/robotests/src/com/android/settings/media/RemoteMediaSliceTest.java
+++ b/tests/robotests/src/com/android/settings/media/RemoteMediaSliceTest.java
@@ -89,10 +89,10 @@
         SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
 
         mRemoteMediaSlice = new RemoteMediaSlice(mContext);
-        mRemoteMediaSlice.mRouterManager = mock(MediaRouter2Manager.class);
         sMediaDeviceUpdateWorker = spy(new MediaDeviceUpdateWorker(mContext,
                 REMOTE_MEDIA_SLICE_URI));
         sMediaDeviceUpdateWorker.mLocalMediaManager = mLocalMediaManager;
+        sMediaDeviceUpdateWorker.mManager = mock(MediaRouter2Manager.class);
         final RoutingSessionInfo remoteSessionInfo = mock(RoutingSessionInfo.class);
         when(remoteSessionInfo.getId()).thenReturn(TEST_SESSION_1_ID);
         when(remoteSessionInfo.getName()).thenReturn(TEST_SESSION_1_NAME);