Merge "[Output Switcher] Handle muting expected device" into tm-dev
This commit is contained in:
@@ -439,7 +439,7 @@ public abstract class MediaDevice implements Comparable<MediaDevice> {
|
|||||||
* Check if it is muting expected device
|
* Check if it is muting expected device
|
||||||
* @return {@code true} if it is muting expected device, otherwise return {@code false}
|
* @return {@code true} if it is muting expected device, otherwise return {@code false}
|
||||||
*/
|
*/
|
||||||
protected boolean isMutingExpectedDevice() {
|
public boolean isMutingExpectedDevice() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
|
|||||||
@Override
|
@Override
|
||||||
void onBind(MediaDevice device, boolean topMargin, boolean bottomMargin, int position) {
|
void onBind(MediaDevice device, boolean topMargin, boolean bottomMargin, int position) {
|
||||||
super.onBind(device, topMargin, bottomMargin, position);
|
super.onBind(device, topMargin, bottomMargin, position);
|
||||||
|
boolean isMutingExpectedDeviceExist = mController.hasMutingExpectedDevice();
|
||||||
final boolean currentlyConnected = !mIncludeDynamicGroup
|
final boolean currentlyConnected = !mIncludeDynamicGroup
|
||||||
&& isCurrentlyConnected(device);
|
&& isCurrentlyConnected(device);
|
||||||
boolean isCurrentSeekbarInvisible = mSeekBar.getVisibility() == View.GONE;
|
boolean isCurrentSeekbarInvisible = mSeekBar.getVisibility() == View.GONE;
|
||||||
@@ -146,7 +147,19 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Set different layout for each device
|
// Set different layout for each device
|
||||||
if (device.getState() == MediaDeviceState.STATE_CONNECTING_FAILED) {
|
if (device.isMutingExpectedDevice()
|
||||||
|
&& !mController.isCurrentConnectedDeviceRemote()) {
|
||||||
|
mTitleIcon.setImageDrawable(
|
||||||
|
mContext.getDrawable(R.drawable.media_output_icon_volume));
|
||||||
|
mTitleIcon.setColorFilter(mController.getColorItemContent());
|
||||||
|
mTitleText.setTextColor(mController.getColorItemContent());
|
||||||
|
setSingleLineLayout(getItemTitle(device), true /* bFocused */,
|
||||||
|
false /* showSeekBar */,
|
||||||
|
false /* showProgressBar */, false /* showStatus */);
|
||||||
|
initMutingExpectedDevice();
|
||||||
|
mCurrentActivePosition = position;
|
||||||
|
mContainerLayout.setOnClickListener(v -> onItemClick(v, device));
|
||||||
|
} else if (device.getState() == MediaDeviceState.STATE_CONNECTING_FAILED) {
|
||||||
setUpDeviceIcon(device);
|
setUpDeviceIcon(device);
|
||||||
mStatusIcon.setImageDrawable(
|
mStatusIcon.setImageDrawable(
|
||||||
mContext.getDrawable(R.drawable.media_output_status_failed));
|
mContext.getDrawable(R.drawable.media_output_status_failed));
|
||||||
@@ -193,17 +206,26 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
|
|||||||
mEndTouchArea.setImportantForAccessibility(
|
mEndTouchArea.setImportantForAccessibility(
|
||||||
View.IMPORTANT_FOR_ACCESSIBILITY_YES);
|
View.IMPORTANT_FOR_ACCESSIBILITY_YES);
|
||||||
setUpContentDescriptionForView(mEndTouchArea, true, device);
|
setUpContentDescriptionForView(mEndTouchArea, true, device);
|
||||||
} else if (!mController.hasAdjustVolumeUserRestriction() && currentlyConnected) {
|
} else if (!mController.hasAdjustVolumeUserRestriction()
|
||||||
mTitleIcon.setImageDrawable(
|
&& currentlyConnected) {
|
||||||
mContext.getDrawable(R.drawable.media_output_icon_volume));
|
if (isMutingExpectedDeviceExist
|
||||||
mTitleIcon.setColorFilter(mController.getColorItemContent());
|
&& !mController.isCurrentConnectedDeviceRemote()) {
|
||||||
mTitleText.setTextColor(mController.getColorItemContent());
|
// mark as disconnected and set special click listener
|
||||||
setSingleLineLayout(getItemTitle(device), true /* bFocused */,
|
setUpDeviceIcon(device);
|
||||||
true /* showSeekBar */,
|
setSingleLineLayout(getItemTitle(device), false /* bFocused */);
|
||||||
false /* showProgressBar */, false /* showStatus */);
|
mContainerLayout.setOnClickListener(v -> cancelMuteAwaitConnection());
|
||||||
initSeekbar(device, isCurrentSeekbarInvisible);
|
} else {
|
||||||
setUpContentDescriptionForView(mContainerLayout, false, device);
|
mTitleIcon.setImageDrawable(
|
||||||
mCurrentActivePosition = position;
|
mContext.getDrawable(R.drawable.media_output_icon_volume));
|
||||||
|
mTitleIcon.setColorFilter(mController.getColorItemContent());
|
||||||
|
mTitleText.setTextColor(mController.getColorItemContent());
|
||||||
|
setSingleLineLayout(getItemTitle(device), true /* bFocused */,
|
||||||
|
true /* showSeekBar */,
|
||||||
|
false /* showProgressBar */, false /* showStatus */);
|
||||||
|
initSeekbar(device, isCurrentSeekbarInvisible);
|
||||||
|
setUpContentDescriptionForView(mContainerLayout, false, device);
|
||||||
|
mCurrentActivePosition = position;
|
||||||
|
}
|
||||||
} else if (isDeviceIncluded(mController.getSelectableMediaDevice(), device)) {
|
} else if (isDeviceIncluded(mController.getSelectableMediaDevice(), device)) {
|
||||||
setUpDeviceIcon(device);
|
setUpDeviceIcon(device);
|
||||||
mCheckBox.setOnCheckedChangeListener(null);
|
mCheckBox.setOnCheckedChangeListener(null);
|
||||||
@@ -269,6 +291,11 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
|
|||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void cancelMuteAwaitConnection() {
|
||||||
|
mController.cancelMuteAwaitConnection();
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
private void setUpContentDescriptionForView(View view, boolean clickable,
|
private void setUpContentDescriptionForView(View view, boolean clickable,
|
||||||
MediaDevice device) {
|
MediaDevice device) {
|
||||||
view.setClickable(clickable);
|
view.setClickable(clickable);
|
||||||
|
|||||||
@@ -309,6 +309,17 @@ public abstract class MediaOutputBaseAdapter extends
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void initMutingExpectedDevice() {
|
||||||
|
disableSeekBar();
|
||||||
|
final Drawable backgroundDrawable = mContext.getDrawable(
|
||||||
|
R.drawable.media_output_item_background_active)
|
||||||
|
.mutate();
|
||||||
|
backgroundDrawable.setColorFilter(
|
||||||
|
new PorterDuffColorFilter(mController.getColorConnectedItemBackground(),
|
||||||
|
PorterDuff.Mode.SRC_IN));
|
||||||
|
mItemLayout.setBackground(backgroundDrawable);
|
||||||
|
}
|
||||||
|
|
||||||
void initSessionSeekbar() {
|
void initSessionSeekbar() {
|
||||||
disableSeekBar();
|
disableSeekBar();
|
||||||
mSeekBar.setMax(mController.getSessionVolumeMax());
|
mSeekBar.setMax(mController.getSessionVolumeMax());
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package com.android.systemui.media.dialog
|
package com.android.systemui.media.dialog
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.media.AudioManager
|
||||||
import android.media.session.MediaSessionManager
|
import android.media.session.MediaSessionManager
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.android.internal.logging.UiEventLogger
|
import com.android.internal.logging.UiEventLogger
|
||||||
@@ -41,7 +42,8 @@ class MediaOutputBroadcastDialogFactory @Inject constructor(
|
|||||||
private val notifCollection: CommonNotifCollection,
|
private val notifCollection: CommonNotifCollection,
|
||||||
private val uiEventLogger: UiEventLogger,
|
private val uiEventLogger: UiEventLogger,
|
||||||
private val dialogLaunchAnimator: DialogLaunchAnimator,
|
private val dialogLaunchAnimator: DialogLaunchAnimator,
|
||||||
private val nearbyMediaDevicesManagerOptional: Optional<NearbyMediaDevicesManager>
|
private val nearbyMediaDevicesManagerOptional: Optional<NearbyMediaDevicesManager>,
|
||||||
|
private val audioManager: AudioManager
|
||||||
) {
|
) {
|
||||||
var mediaOutputBroadcastDialog: MediaOutputBroadcastDialog? = null
|
var mediaOutputBroadcastDialog: MediaOutputBroadcastDialog? = null
|
||||||
|
|
||||||
@@ -52,7 +54,7 @@ class MediaOutputBroadcastDialogFactory @Inject constructor(
|
|||||||
|
|
||||||
val controller = MediaOutputController(context, packageName,
|
val controller = MediaOutputController(context, packageName,
|
||||||
mediaSessionManager, lbm, starter, notifCollection,
|
mediaSessionManager, lbm, starter, notifCollection,
|
||||||
dialogLaunchAnimator, nearbyMediaDevicesManagerOptional)
|
dialogLaunchAnimator, nearbyMediaDevicesManagerOptional, audioManager)
|
||||||
val dialog =
|
val dialog =
|
||||||
MediaOutputBroadcastDialog(context, aboveStatusBar, broadcastSender, controller)
|
MediaOutputBroadcastDialog(context, aboveStatusBar, broadcastSender, controller)
|
||||||
mediaOutputBroadcastDialog = dialog
|
mediaOutputBroadcastDialog = dialog
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import android.graphics.PorterDuffColorFilter;
|
|||||||
import android.graphics.drawable.BitmapDrawable;
|
import android.graphics.drawable.BitmapDrawable;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.graphics.drawable.Icon;
|
import android.graphics.drawable.Icon;
|
||||||
|
import android.media.AudioManager;
|
||||||
import android.media.INearbyMediaDevicesUpdateCallback;
|
import android.media.INearbyMediaDevicesUpdateCallback;
|
||||||
import android.media.MediaMetadata;
|
import android.media.MediaMetadata;
|
||||||
import android.media.MediaRoute2Info;
|
import android.media.MediaRoute2Info;
|
||||||
@@ -112,6 +113,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
final List<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>();
|
final List<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>();
|
||||||
final List<MediaDevice> mCachedMediaDevices = new CopyOnWriteArrayList<>();
|
final List<MediaDevice> mCachedMediaDevices = new CopyOnWriteArrayList<>();
|
||||||
|
private final AudioManager mAudioManager;
|
||||||
private final NearbyMediaDevicesManager mNearbyMediaDevicesManager;
|
private final NearbyMediaDevicesManager mNearbyMediaDevicesManager;
|
||||||
private final Map<String, Integer> mNearbyDeviceInfoMap = new ConcurrentHashMap<>();
|
private final Map<String, Integer> mNearbyDeviceInfoMap = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
@@ -122,7 +124,6 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
|
|||||||
Callback mCallback;
|
Callback mCallback;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
LocalMediaManager mLocalMediaManager;
|
LocalMediaManager mLocalMediaManager;
|
||||||
|
|
||||||
private MediaOutputMetricLogger mMetricLogger;
|
private MediaOutputMetricLogger mMetricLogger;
|
||||||
|
|
||||||
private int mColorItemContent;
|
private int mColorItemContent;
|
||||||
@@ -145,13 +146,15 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
|
|||||||
lbm, ActivityStarter starter,
|
lbm, ActivityStarter starter,
|
||||||
CommonNotifCollection notifCollection,
|
CommonNotifCollection notifCollection,
|
||||||
DialogLaunchAnimator dialogLaunchAnimator,
|
DialogLaunchAnimator dialogLaunchAnimator,
|
||||||
Optional<NearbyMediaDevicesManager> nearbyMediaDevicesManagerOptional) {
|
Optional<NearbyMediaDevicesManager> nearbyMediaDevicesManagerOptional,
|
||||||
|
AudioManager audioManager) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mPackageName = packageName;
|
mPackageName = packageName;
|
||||||
mMediaSessionManager = mediaSessionManager;
|
mMediaSessionManager = mediaSessionManager;
|
||||||
mLocalBluetoothManager = lbm;
|
mLocalBluetoothManager = lbm;
|
||||||
mActivityStarter = starter;
|
mActivityStarter = starter;
|
||||||
mNotifCollection = notifCollection;
|
mNotifCollection = notifCollection;
|
||||||
|
mAudioManager = audioManager;
|
||||||
InfoMediaManager imm = new InfoMediaManager(mContext, packageName, null, lbm);
|
InfoMediaManager imm = new InfoMediaManager(mContext, packageName, null, lbm);
|
||||||
mLocalMediaManager = new LocalMediaManager(mContext, lbm, imm, packageName);
|
mLocalMediaManager = new LocalMediaManager(mContext, lbm, imm, packageName);
|
||||||
mMetricLogger = new MediaOutputMetricLogger(mContext, mPackageName);
|
mMetricLogger = new MediaOutputMetricLogger(mContext, mPackageName);
|
||||||
@@ -217,14 +220,14 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setRefreshing(boolean refreshing) {
|
|
||||||
mIsRefreshing = refreshing;
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean isRefreshing() {
|
boolean isRefreshing() {
|
||||||
return mIsRefreshing;
|
return mIsRefreshing;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setRefreshing(boolean refreshing) {
|
||||||
|
mIsRefreshing = refreshing;
|
||||||
|
}
|
||||||
|
|
||||||
void stop() {
|
void stop() {
|
||||||
if (mMediaController != null) {
|
if (mMediaController != null) {
|
||||||
mMediaController.unregisterCallback(mCb);
|
mMediaController.unregisterCallback(mCb);
|
||||||
@@ -275,6 +278,27 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
|
|||||||
mMetricLogger.logOutputFailure(new ArrayList<>(mMediaDevices), reason);
|
mMetricLogger.logOutputFailure(new ArrayList<>(mMediaDevices), reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if there's any muting expected device exist
|
||||||
|
*/
|
||||||
|
public boolean hasMutingExpectedDevice() {
|
||||||
|
return mAudioManager.getMutingExpectedDevice() != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancels mute await connection action in follow up request
|
||||||
|
*/
|
||||||
|
public void cancelMuteAwaitConnection() {
|
||||||
|
if (mAudioManager.getMutingExpectedDevice() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
mAudioManager.cancelMuteAwaitConnection(mAudioManager.getMutingExpectedDevice());
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.d(TAG, "Unable to cancel mute await connection");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Drawable getAppSourceIcon() {
|
Drawable getAppSourceIcon() {
|
||||||
if (mPackageName.isEmpty()) {
|
if (mPackageName.isEmpty()) {
|
||||||
return null;
|
return null;
|
||||||
@@ -471,12 +495,26 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
|
|||||||
// For the first time building list, to make sure the top device is the connected
|
// For the first time building list, to make sure the top device is the connected
|
||||||
// device.
|
// device.
|
||||||
if (mMediaDevices.isEmpty()) {
|
if (mMediaDevices.isEmpty()) {
|
||||||
final MediaDevice connectedMediaDevice = getCurrentConnectedMediaDevice();
|
boolean needToHandleMutingExpectedDevice =
|
||||||
|
hasMutingExpectedDevice() && !isCurrentConnectedDeviceRemote();
|
||||||
|
final MediaDevice connectedMediaDevice =
|
||||||
|
needToHandleMutingExpectedDevice ? null
|
||||||
|
: getCurrentConnectedMediaDevice();
|
||||||
if (connectedMediaDevice == null) {
|
if (connectedMediaDevice == null) {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.d(TAG, "No connected media device.");
|
Log.d(TAG, "No connected media device or muting expected device exist.");
|
||||||
|
}
|
||||||
|
if (needToHandleMutingExpectedDevice) {
|
||||||
|
for (MediaDevice device : devices) {
|
||||||
|
if (device.isMutingExpectedDevice()) {
|
||||||
|
mMediaDevices.add(0, device);
|
||||||
|
} else {
|
||||||
|
mMediaDevices.add(device);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
mMediaDevices.addAll(devices);
|
||||||
}
|
}
|
||||||
mMediaDevices.addAll(devices);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (MediaDevice device : devices) {
|
for (MediaDevice device : devices) {
|
||||||
@@ -516,6 +554,12 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean isCurrentConnectedDeviceRemote() {
|
||||||
|
MediaDevice currentConnectedMediaDevice = getCurrentConnectedMediaDevice();
|
||||||
|
return currentConnectedMediaDevice != null && isActiveRemoteDevice(
|
||||||
|
currentConnectedMediaDevice);
|
||||||
|
}
|
||||||
|
|
||||||
List<MediaDevice> getGroupMediaDevices() {
|
List<MediaDevice> getGroupMediaDevices() {
|
||||||
final List<MediaDevice> selectedDevices = getSelectedMediaDevice();
|
final List<MediaDevice> selectedDevices = getSelectedMediaDevice();
|
||||||
final List<MediaDevice> selectableDevices = getSelectableMediaDevice();
|
final List<MediaDevice> selectableDevices = getSelectableMediaDevice();
|
||||||
@@ -731,7 +775,8 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
|
|||||||
void launchMediaOutputBroadcastDialog(View mediaOutputDialog, BroadcastSender broadcastSender) {
|
void launchMediaOutputBroadcastDialog(View mediaOutputDialog, BroadcastSender broadcastSender) {
|
||||||
MediaOutputController controller = new MediaOutputController(mContext, mPackageName,
|
MediaOutputController controller = new MediaOutputController(mContext, mPackageName,
|
||||||
mMediaSessionManager, mLocalBluetoothManager, mActivityStarter,
|
mMediaSessionManager, mLocalBluetoothManager, mActivityStarter,
|
||||||
mNotifCollection, mDialogLaunchAnimator, Optional.of(mNearbyMediaDevicesManager));
|
mNotifCollection, mDialogLaunchAnimator, Optional.of(mNearbyMediaDevicesManager),
|
||||||
|
mAudioManager);
|
||||||
MediaOutputBroadcastDialog dialog = new MediaOutputBroadcastDialog(mContext, true,
|
MediaOutputBroadcastDialog dialog = new MediaOutputBroadcastDialog(mContext, true,
|
||||||
broadcastSender, controller);
|
broadcastSender, controller);
|
||||||
mDialogLaunchAnimator.showFromView(dialog, mediaOutputDialog);
|
mDialogLaunchAnimator.showFromView(dialog, mediaOutputDialog);
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package com.android.systemui.media.dialog
|
package com.android.systemui.media.dialog
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.media.AudioManager
|
||||||
import android.media.session.MediaSessionManager
|
import android.media.session.MediaSessionManager
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.android.internal.logging.UiEventLogger
|
import com.android.internal.logging.UiEventLogger
|
||||||
@@ -41,7 +42,8 @@ class MediaOutputDialogFactory @Inject constructor(
|
|||||||
private val notifCollection: CommonNotifCollection,
|
private val notifCollection: CommonNotifCollection,
|
||||||
private val uiEventLogger: UiEventLogger,
|
private val uiEventLogger: UiEventLogger,
|
||||||
private val dialogLaunchAnimator: DialogLaunchAnimator,
|
private val dialogLaunchAnimator: DialogLaunchAnimator,
|
||||||
private val nearbyMediaDevicesManagerOptional: Optional<NearbyMediaDevicesManager>
|
private val nearbyMediaDevicesManagerOptional: Optional<NearbyMediaDevicesManager>,
|
||||||
|
private val audioManager: AudioManager
|
||||||
) {
|
) {
|
||||||
companion object {
|
companion object {
|
||||||
var mediaOutputDialog: MediaOutputDialog? = null
|
var mediaOutputDialog: MediaOutputDialog? = null
|
||||||
@@ -54,7 +56,7 @@ class MediaOutputDialogFactory @Inject constructor(
|
|||||||
|
|
||||||
val controller = MediaOutputController(context, packageName,
|
val controller = MediaOutputController(context, packageName,
|
||||||
mediaSessionManager, lbm, starter, notifCollection,
|
mediaSessionManager, lbm, starter, notifCollection,
|
||||||
dialogLaunchAnimator, nearbyMediaDevicesManagerOptional)
|
dialogLaunchAnimator, nearbyMediaDevicesManagerOptional, audioManager)
|
||||||
val dialog =
|
val dialog =
|
||||||
MediaOutputDialog(context, aboveStatusBar, broadcastSender, controller, uiEventLogger)
|
MediaOutputDialog(context, aboveStatusBar, broadcastSender, controller, uiEventLogger)
|
||||||
mediaOutputDialog = dialog
|
mediaOutputDialog = dialog
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import static org.mockito.Mockito.when;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.media.AudioManager;
|
||||||
import android.media.session.MediaController;
|
import android.media.session.MediaController;
|
||||||
import android.media.session.MediaSessionManager;
|
import android.media.session.MediaSessionManager;
|
||||||
import android.media.session.PlaybackState;
|
import android.media.session.PlaybackState;
|
||||||
@@ -84,6 +85,7 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase {
|
|||||||
private NearbyMediaDevicesManager mNearbyMediaDevicesManager = mock(
|
private NearbyMediaDevicesManager mNearbyMediaDevicesManager = mock(
|
||||||
NearbyMediaDevicesManager.class);
|
NearbyMediaDevicesManager.class);
|
||||||
private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
|
private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
|
||||||
|
private final AudioManager mAudioManager = mock(AudioManager.class);
|
||||||
|
|
||||||
private List<MediaController> mMediaControllers = new ArrayList<>();
|
private List<MediaController> mMediaControllers = new ArrayList<>();
|
||||||
private MediaOutputBaseDialogImpl mMediaOutputBaseDialogImpl;
|
private MediaOutputBaseDialogImpl mMediaOutputBaseDialogImpl;
|
||||||
@@ -108,7 +110,7 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase {
|
|||||||
mMediaOutputController = new MediaOutputController(mContext, TEST_PACKAGE,
|
mMediaOutputController = new MediaOutputController(mContext, TEST_PACKAGE,
|
||||||
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
||||||
mNotificationEntryManager, mDialogLaunchAnimator,
|
mNotificationEntryManager, mDialogLaunchAnimator,
|
||||||
Optional.of(mNearbyMediaDevicesManager));
|
Optional.of(mNearbyMediaDevicesManager), mAudioManager);
|
||||||
mMediaOutputBaseDialogImpl = new MediaOutputBaseDialogImpl(mContext, mBroadcastSender,
|
mMediaOutputBaseDialogImpl = new MediaOutputBaseDialogImpl(mContext, mBroadcastSender,
|
||||||
mMediaOutputController);
|
mMediaOutputController);
|
||||||
mMediaOutputBaseDialogImpl.onCreate(new Bundle());
|
mMediaOutputBaseDialogImpl.onCreate(new Bundle());
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import static org.mockito.Mockito.when;
|
|||||||
import android.app.Notification;
|
import android.app.Notification;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.drawable.Icon;
|
import android.graphics.drawable.Icon;
|
||||||
|
import android.media.AudioManager;
|
||||||
import android.media.MediaDescription;
|
import android.media.MediaDescription;
|
||||||
import android.media.MediaMetadata;
|
import android.media.MediaMetadata;
|
||||||
import android.media.NearbyDevice;
|
import android.media.NearbyDevice;
|
||||||
@@ -95,6 +96,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
|||||||
private MediaMetadata mMediaMetadata = mock(MediaMetadata.class);
|
private MediaMetadata mMediaMetadata = mock(MediaMetadata.class);
|
||||||
private RoutingSessionInfo mRemoteSessionInfo = mock(RoutingSessionInfo.class);
|
private RoutingSessionInfo mRemoteSessionInfo = mock(RoutingSessionInfo.class);
|
||||||
private ActivityStarter mStarter = mock(ActivityStarter.class);
|
private ActivityStarter mStarter = mock(ActivityStarter.class);
|
||||||
|
private AudioManager mAudioManager = mock(AudioManager.class);
|
||||||
private CommonNotifCollection mNotifCollection = mock(CommonNotifCollection.class);
|
private CommonNotifCollection mNotifCollection = mock(CommonNotifCollection.class);
|
||||||
private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
|
private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
|
||||||
private final NearbyMediaDevicesManager mNearbyMediaDevicesManager = mock(
|
private final NearbyMediaDevicesManager mNearbyMediaDevicesManager = mock(
|
||||||
@@ -123,7 +125,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
|||||||
mMediaOutputController = new MediaOutputController(mSpyContext, TEST_PACKAGE_NAME,
|
mMediaOutputController = new MediaOutputController(mSpyContext, TEST_PACKAGE_NAME,
|
||||||
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
||||||
mNotifCollection, mDialogLaunchAnimator,
|
mNotifCollection, mDialogLaunchAnimator,
|
||||||
Optional.of(mNearbyMediaDevicesManager));
|
Optional.of(mNearbyMediaDevicesManager), mAudioManager);
|
||||||
mLocalMediaManager = spy(mMediaOutputController.mLocalMediaManager);
|
mLocalMediaManager = spy(mMediaOutputController.mLocalMediaManager);
|
||||||
mMediaOutputController.mLocalMediaManager = mLocalMediaManager;
|
mMediaOutputController.mLocalMediaManager = mLocalMediaManager;
|
||||||
MediaDescription.Builder builder = new MediaDescription.Builder();
|
MediaDescription.Builder builder = new MediaDescription.Builder();
|
||||||
@@ -175,7 +177,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
|||||||
mMediaOutputController = new MediaOutputController(mSpyContext, null,
|
mMediaOutputController = new MediaOutputController(mSpyContext, null,
|
||||||
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
||||||
mNotifCollection, mDialogLaunchAnimator,
|
mNotifCollection, mDialogLaunchAnimator,
|
||||||
Optional.of(mNearbyMediaDevicesManager));
|
Optional.of(mNearbyMediaDevicesManager), mAudioManager);
|
||||||
|
|
||||||
mMediaOutputController.start(mCb);
|
mMediaOutputController.start(mCb);
|
||||||
|
|
||||||
@@ -204,7 +206,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
|||||||
mMediaOutputController = new MediaOutputController(mSpyContext, null,
|
mMediaOutputController = new MediaOutputController(mSpyContext, null,
|
||||||
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
||||||
mNotifCollection, mDialogLaunchAnimator,
|
mNotifCollection, mDialogLaunchAnimator,
|
||||||
Optional.of(mNearbyMediaDevicesManager));
|
Optional.of(mNearbyMediaDevicesManager), mAudioManager);
|
||||||
|
|
||||||
mMediaOutputController.start(mCb);
|
mMediaOutputController.start(mCb);
|
||||||
|
|
||||||
@@ -509,7 +511,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
|||||||
mMediaOutputController = new MediaOutputController(mSpyContext, null,
|
mMediaOutputController = new MediaOutputController(mSpyContext, null,
|
||||||
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
||||||
mNotifCollection, mDialogLaunchAnimator,
|
mNotifCollection, mDialogLaunchAnimator,
|
||||||
Optional.of(mNearbyMediaDevicesManager));
|
Optional.of(mNearbyMediaDevicesManager), mAudioManager);
|
||||||
|
|
||||||
assertThat(mMediaOutputController.getNotificationIcon()).isNull();
|
assertThat(mMediaOutputController.getNotificationIcon()).isNull();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import static org.mockito.Mockito.times;
|
|||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import android.media.AudioManager;
|
||||||
import android.media.MediaRoute2Info;
|
import android.media.MediaRoute2Info;
|
||||||
import android.media.session.MediaController;
|
import android.media.session.MediaController;
|
||||||
import android.media.session.MediaSessionManager;
|
import android.media.session.MediaSessionManager;
|
||||||
@@ -82,6 +83,7 @@ public class MediaOutputDialogTest extends SysuiTestCase {
|
|||||||
private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
|
private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
|
||||||
private final NearbyMediaDevicesManager mNearbyMediaDevicesManager = mock(
|
private final NearbyMediaDevicesManager mNearbyMediaDevicesManager = mock(
|
||||||
NearbyMediaDevicesManager.class);
|
NearbyMediaDevicesManager.class);
|
||||||
|
private final AudioManager mAudioManager = mock(AudioManager.class);
|
||||||
|
|
||||||
private List<MediaController> mMediaControllers = new ArrayList<>();
|
private List<MediaController> mMediaControllers = new ArrayList<>();
|
||||||
private MediaOutputDialog mMediaOutputDialog;
|
private MediaOutputDialog mMediaOutputDialog;
|
||||||
@@ -101,7 +103,7 @@ public class MediaOutputDialogTest extends SysuiTestCase {
|
|||||||
mMediaOutputController = new MediaOutputController(mContext, TEST_PACKAGE,
|
mMediaOutputController = new MediaOutputController(mContext, TEST_PACKAGE,
|
||||||
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
||||||
mNotificationEntryManager, mDialogLaunchAnimator,
|
mNotificationEntryManager, mDialogLaunchAnimator,
|
||||||
Optional.of(mNearbyMediaDevicesManager));
|
Optional.of(mNearbyMediaDevicesManager), mAudioManager);
|
||||||
mMediaOutputController.mLocalMediaManager = mLocalMediaManager;
|
mMediaOutputController.mLocalMediaManager = mLocalMediaManager;
|
||||||
mMediaOutputDialog = new MediaOutputDialog(mContext, false, mBroadcastSender,
|
mMediaOutputDialog = new MediaOutputDialog(mContext, false, mBroadcastSender,
|
||||||
mMediaOutputController, mUiEventLogger);
|
mMediaOutputController, mUiEventLogger);
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import static com.google.common.truth.Truth.assertThat;
|
|||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import android.media.AudioManager;
|
||||||
import android.media.session.MediaSessionManager;
|
import android.media.session.MediaSessionManager;
|
||||||
import android.testing.AndroidTestingRunner;
|
import android.testing.AndroidTestingRunner;
|
||||||
import android.testing.TestableLooper;
|
import android.testing.TestableLooper;
|
||||||
@@ -68,6 +69,7 @@ public class MediaOutputGroupDialogTest extends SysuiTestCase {
|
|||||||
private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
|
private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
|
||||||
private NearbyMediaDevicesManager mNearbyMediaDevicesManager = mock(
|
private NearbyMediaDevicesManager mNearbyMediaDevicesManager = mock(
|
||||||
NearbyMediaDevicesManager.class);
|
NearbyMediaDevicesManager.class);
|
||||||
|
private final AudioManager mAudioManager = mock(AudioManager.class);
|
||||||
|
|
||||||
private MediaOutputGroupDialog mMediaOutputGroupDialog;
|
private MediaOutputGroupDialog mMediaOutputGroupDialog;
|
||||||
private MediaOutputController mMediaOutputController;
|
private MediaOutputController mMediaOutputController;
|
||||||
@@ -78,7 +80,7 @@ public class MediaOutputGroupDialogTest extends SysuiTestCase {
|
|||||||
mMediaOutputController = new MediaOutputController(mContext, TEST_PACKAGE,
|
mMediaOutputController = new MediaOutputController(mContext, TEST_PACKAGE,
|
||||||
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
mMediaSessionManager, mLocalBluetoothManager, mStarter,
|
||||||
mNotificationEntryManager, mDialogLaunchAnimator,
|
mNotificationEntryManager, mDialogLaunchAnimator,
|
||||||
Optional.of(mNearbyMediaDevicesManager));
|
Optional.of(mNearbyMediaDevicesManager), mAudioManager);
|
||||||
mMediaOutputController.mLocalMediaManager = mLocalMediaManager;
|
mMediaOutputController.mLocalMediaManager = mLocalMediaManager;
|
||||||
mMediaOutputGroupDialog = new MediaOutputGroupDialog(mContext, false, mBroadcastSender,
|
mMediaOutputGroupDialog = new MediaOutputGroupDialog(mContext, false, mBroadcastSender,
|
||||||
mMediaOutputController);
|
mMediaOutputController);
|
||||||
|
|||||||
Reference in New Issue
Block a user