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.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<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 @@ 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) {

View File

@@ -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<RoutingSessionInfo> infos = getWorker().getActiveRemoteMediaDevice();
if (infos.isEmpty()) {

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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);