Merge "Inline shouldDisableMediaOutput into Settings app" into main
This commit is contained in:
@@ -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) {
|
||||||
|
@@ -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()) {
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user