Merge "Inline shouldDisableMediaOutput into Settings app" into main

This commit is contained in:
Iván Budnik
2023-07-18 14:31:40 +00:00
committed by Android (Google) Code Review
5 changed files with 20 additions and 12 deletions

View File

@@ -23,6 +23,7 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.media.AudioManager; import android.media.AudioManager;
import android.media.MediaRouter2Manager;
import android.media.RoutingSessionInfo; import android.media.RoutingSessionInfo;
import android.net.Uri; import android.net.Uri;
import android.os.UserHandle; import android.os.UserHandle;
@@ -59,6 +60,8 @@ public class MediaDeviceUpdateWorker extends SliceBackgroundWorker
protected final Collection<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>(); protected final Collection<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>();
private final DevicesChangedBroadcastReceiver mReceiver; private final DevicesChangedBroadcastReceiver mReceiver;
private final String mPackageName; private final String mPackageName;
@VisibleForTesting
MediaRouter2Manager mManager;
private boolean mIsTouched; private boolean mIsTouched;
private MediaDevice mTopDevice; private MediaDevice mTopDevice;
@@ -82,6 +85,11 @@ public class MediaDeviceUpdateWorker extends SliceBackgroundWorker
mLocalMediaManager = new LocalMediaManager(mContext, mPackageName, null); mLocalMediaManager = new LocalMediaManager(mContext, mPackageName, null);
} }
// Delaying initialization to allow mocking in Roboelectric tests.
if (mManager == null) {
mManager = MediaRouter2Manager.getInstance(mContext);
}
mLocalMediaManager.registerCallback(this); mLocalMediaManager.registerCallback(this);
final IntentFilter intentFilter = new IntentFilter(STREAM_DEVICES_CHANGED_ACTION); final IntentFilter intentFilter = new IntentFilter(STREAM_DEVICES_CHANGED_ACTION);
mContext.registerReceiver(mReceiver, intentFilter); mContext.registerReceiver(mReceiver, intentFilter);
@@ -259,7 +267,9 @@ public class MediaDeviceUpdateWorker extends SliceBackgroundWorker
} }
boolean shouldDisableMediaOutput(String packageName) { 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) { boolean shouldEnableVolumeSeekBar(RoutingSessionInfo sessionInfo) {

View File

@@ -25,7 +25,6 @@ import android.app.PendingIntent;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.media.MediaRouter2Manager;
import android.media.RoutingSessionInfo; import android.media.RoutingSessionInfo;
import android.net.Uri; import android.net.Uri;
import android.text.SpannableString; import android.text.SpannableString;
@@ -33,7 +32,6 @@ import android.text.TextUtils;
import android.text.style.ForegroundColorSpan; import android.text.style.ForegroundColorSpan;
import android.util.Log; import android.util.Log;
import androidx.annotation.VisibleForTesting;
import androidx.core.graphics.drawable.IconCompat; import androidx.core.graphics.drawable.IconCompat;
import androidx.slice.Slice; import androidx.slice.Slice;
import androidx.slice.builders.ListBuilder; import androidx.slice.builders.ListBuilder;
@@ -67,9 +65,6 @@ public class RemoteMediaSlice implements CustomSliceable {
private MediaDeviceUpdateWorker mWorker; private MediaDeviceUpdateWorker mWorker;
@VisibleForTesting
MediaRouter2Manager mRouterManager;
public RemoteMediaSlice(Context context) { public RemoteMediaSlice(Context context) {
mContext = context; mContext = context;
} }
@@ -105,9 +100,6 @@ public class RemoteMediaSlice implements CustomSliceable {
Log.e(TAG, "Unable to get the slice worker."); Log.e(TAG, "Unable to get the slice worker.");
return listBuilder.build(); return listBuilder.build();
} }
if (mRouterManager == null) {
mRouterManager = MediaRouter2Manager.getInstance(mContext);
}
// Only displaying remote devices // Only displaying remote devices
final List<RoutingSessionInfo> infos = getWorker().getActiveRemoteMediaDevice(); final List<RoutingSessionInfo> infos = getWorker().getActiveRemoteMediaDevice();
if (infos.isEmpty()) { if (infos.isEmpty()) {

View File

@@ -136,8 +136,11 @@ public class RemoteVolumeGroupController extends BasePreferenceController implem
Preference switcherPreference = mPreferenceCategory.findPreference( Preference switcherPreference = mPreferenceCategory.findPreference(
SWITCHER_PREFIX + info.getId()); 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, final CharSequence outputTitle = mContext.getString(R.string.media_output_label_title,
appName); appName);
if (switcherPreference != null) { if (switcherPreference != null) {

View File

@@ -31,6 +31,7 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.media.AudioManager; import android.media.AudioManager;
import android.media.MediaRoute2ProviderService; import android.media.MediaRoute2ProviderService;
import android.media.MediaRouter2Manager;
import android.media.RoutingSessionInfo; import android.media.RoutingSessionInfo;
import android.net.Uri; import android.net.Uri;
@@ -92,6 +93,7 @@ public class MediaDeviceUpdateWorkerTest {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
mMediaDeviceUpdateWorker = new MediaDeviceUpdateWorker(mContext, URI); mMediaDeviceUpdateWorker = new MediaDeviceUpdateWorker(mContext, URI);
mMediaDeviceUpdateWorker.mManager = mock(MediaRouter2Manager.class);
mResolver = mock(ContentResolver.class); mResolver = mock(ContentResolver.class);
mShadowApplication = ShadowApplication.getInstance(); mShadowApplication = ShadowApplication.getInstance();
mAudioManager = mContext.getSystemService(AudioManager.class); mAudioManager = mContext.getSystemService(AudioManager.class);
@@ -234,6 +236,7 @@ public class MediaDeviceUpdateWorkerTest {
when(mLocalBluetoothManager.getEventManager()).thenReturn(mBluetoothEventManager); when(mLocalBluetoothManager.getEventManager()).thenReturn(mBluetoothEventManager);
mMediaDeviceUpdateWorker = new MediaDeviceUpdateWorker(mContext, URI1); mMediaDeviceUpdateWorker = new MediaDeviceUpdateWorker(mContext, URI1);
mMediaDeviceUpdateWorker.mManager = mock(MediaRouter2Manager.class);
mMediaDeviceUpdateWorker.mLocalMediaManager = mock(LocalMediaManager.class); mMediaDeviceUpdateWorker.mLocalMediaManager = mock(LocalMediaManager.class);
when(mMediaDeviceUpdateWorker.mLocalMediaManager.getPackageName()) when(mMediaDeviceUpdateWorker.mLocalMediaManager.getPackageName())
.thenReturn(TEST_DEVICE_PACKAGE_NAME1); .thenReturn(TEST_DEVICE_PACKAGE_NAME1);

View File

@@ -89,10 +89,10 @@ public class RemoteMediaSliceTest {
SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS); SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
mRemoteMediaSlice = new RemoteMediaSlice(mContext); mRemoteMediaSlice = new RemoteMediaSlice(mContext);
mRemoteMediaSlice.mRouterManager = mock(MediaRouter2Manager.class);
sMediaDeviceUpdateWorker = spy(new MediaDeviceUpdateWorker(mContext, sMediaDeviceUpdateWorker = spy(new MediaDeviceUpdateWorker(mContext,
REMOTE_MEDIA_SLICE_URI)); REMOTE_MEDIA_SLICE_URI));
sMediaDeviceUpdateWorker.mLocalMediaManager = mLocalMediaManager; sMediaDeviceUpdateWorker.mLocalMediaManager = mLocalMediaManager;
sMediaDeviceUpdateWorker.mManager = mock(MediaRouter2Manager.class);
final RoutingSessionInfo remoteSessionInfo = mock(RoutingSessionInfo.class); final RoutingSessionInfo remoteSessionInfo = mock(RoutingSessionInfo.class);
when(remoteSessionInfo.getId()).thenReturn(TEST_SESSION_1_ID); when(remoteSessionInfo.getId()).thenReturn(TEST_SESSION_1_ID);
when(remoteSessionInfo.getName()).thenReturn(TEST_SESSION_1_NAME); when(remoteSessionInfo.getName()).thenReturn(TEST_SESSION_1_NAME);