diff --git a/src/com/android/settings/media/MediaDeviceUpdateWorker.java b/src/com/android/settings/media/MediaDeviceUpdateWorker.java index f420f53a484..6fa512ec41f 100644 --- a/src/com/android/settings/media/MediaDeviceUpdateWorker.java +++ b/src/com/android/settings/media/MediaDeviceUpdateWorker.java @@ -23,6 +23,7 @@ import android.content.Context; 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 @@ public class MediaDeviceUpdateWorker extends SliceBackgroundWorker protected final Collection mMediaDevices = new CopyOnWriteArrayList<>(); private final DevicesChangedBroadcastReceiver mReceiver; private final String mPackageName; + @VisibleForTesting + MediaRouter2Manager mManager; private boolean mIsTouched; private MediaDevice mTopDevice; @@ -82,6 +85,11 @@ public class MediaDeviceUpdateWorker extends SliceBackgroundWorker 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 @@ public class MediaDeviceUpdateWorker extends SliceBackgroundWorker } 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 f856188c613..193a6c7efe4 100644 --- a/src/com/android/settings/media/RemoteMediaSlice.java +++ b/src/com/android/settings/media/RemoteMediaSlice.java @@ -25,7 +25,6 @@ import android.app.PendingIntent; 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.TextUtils; 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 @@ public class RemoteMediaSlice implements CustomSliceable { private MediaDeviceUpdateWorker mWorker; - @VisibleForTesting - MediaRouter2Manager mRouterManager; - public RemoteMediaSlice(Context context) { mContext = context; } @@ -105,9 +100,6 @@ public class RemoteMediaSlice implements CustomSliceable { 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 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 47a12d0aab8..a943d5fa90e 100644 --- a/src/com/android/settings/notification/RemoteVolumeGroupController.java +++ b/src/com/android/settings/notification/RemoteVolumeGroupController.java @@ -136,8 +136,11 @@ public class RemoteVolumeGroupController extends BasePreferenceController implem 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 7a3243b55f9..73b5ab063be 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.Context; 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 @@ public class MediaDeviceUpdateWorkerTest { 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 @@ public class MediaDeviceUpdateWorkerTest { 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 81001d713ef..d995793a58d 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 @@ public class RemoteMediaSliceTest { 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);