summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java7
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java106
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java245
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java82
4 files changed, 438 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
index 3f72b224d61e..19b401d80600 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
@@ -125,13 +125,16 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
private final NearbyMediaDevicesManager mNearbyMediaDevicesManager;
private final Map<String, Integer> mNearbyDeviceInfoMap = new ConcurrentHashMap<>();
- private boolean mIsRefreshing = false;
- private boolean mNeedRefresh = false;
+ @VisibleForTesting
+ boolean mIsRefreshing = false;
+ @VisibleForTesting
+ boolean mNeedRefresh = false;
private MediaController mMediaController;
@VisibleForTesting
Callback mCallback;
@VisibleForTesting
LocalMediaManager mLocalMediaManager;
+ @VisibleForTesting
private MediaOutputMetricLogger mMetricLogger;
private int mCurrentState;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java
index 22ecb4b93743..5f643363bd2e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java
@@ -23,6 +23,8 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.WallpaperColors;
+import android.graphics.Bitmap;
import android.graphics.drawable.Icon;
import android.testing.AndroidTestingRunner;
import android.view.View;
@@ -102,6 +104,18 @@ public class MediaOutputAdapterTest extends SysuiTestCase {
}
@Test
+ public void getItemId_validPosition_returnCorrespondingId() {
+ assertThat(mMediaOutputAdapter.getItemId(0)).isEqualTo(mMediaDevices.get(
+ 0).getId().hashCode());
+ }
+
+ @Test
+ public void getItemId_invalidPosition_returnPosition() {
+ int invalidPosition = mMediaDevices.size() + 1;
+ assertThat(mMediaOutputAdapter.getItemId(invalidPosition)).isEqualTo(invalidPosition);
+ }
+
+ @Test
public void onBindViewHolder_bindPairNew_verifyView() {
mMediaOutputAdapter.onBindViewHolder(mViewHolder, 2);
@@ -155,6 +169,33 @@ public class MediaOutputAdapterTest extends SysuiTestCase {
}
@Test
+ public void onBindViewHolder_bindConnectedDeviceWithMutingExpectedDeviceExist_verifyView() {
+ when(mMediaOutputController.hasMutingExpectedDevice()).thenReturn(true);
+ when(mMediaOutputController.isCurrentConnectedDeviceRemote()).thenReturn(false);
+ mMediaOutputAdapter.onBindViewHolder(mViewHolder, 0);
+
+ assertThat(mViewHolder.mTwoLineLayout.getVisibility()).isEqualTo(View.GONE);
+ assertThat(mViewHolder.mProgressBar.getVisibility()).isEqualTo(View.GONE);
+ assertThat(mViewHolder.mCheckBox.getVisibility()).isEqualTo(View.GONE);
+ assertThat(mViewHolder.mTitleText.getVisibility()).isEqualTo(View.VISIBLE);
+ assertThat(mViewHolder.mTitleText.getText().toString()).isEqualTo(TEST_DEVICE_NAME_1);
+ }
+
+ @Test
+ public void onBindViewHolder_isMutingExpectedDevice_verifyView() {
+ when(mMediaDevice1.isMutingExpectedDevice()).thenReturn(true);
+ when(mMediaOutputController.isCurrentConnectedDeviceRemote()).thenReturn(false);
+ when(mMediaOutputController.isActiveRemoteDevice(mMediaDevice1)).thenReturn(false);
+ mMediaOutputAdapter.onBindViewHolder(mViewHolder, 0);
+
+ assertThat(mViewHolder.mTwoLineLayout.getVisibility()).isEqualTo(View.GONE);
+ assertThat(mViewHolder.mProgressBar.getVisibility()).isEqualTo(View.GONE);
+ assertThat(mViewHolder.mCheckBox.getVisibility()).isEqualTo(View.GONE);
+ assertThat(mViewHolder.mTitleText.getVisibility()).isEqualTo(View.VISIBLE);
+ assertThat(mViewHolder.mTitleText.getText().toString()).isEqualTo(TEST_DEVICE_NAME_1);
+ }
+
+ @Test
public void onBindViewHolder_initSeekbar_setsVolume() {
when(mMediaDevice1.getMaxVolume()).thenReturn(TEST_MAX_VOLUME);
when(mMediaDevice1.getCurrentVolume()).thenReturn(TEST_CURRENT_VOLUME);
@@ -165,6 +206,20 @@ public class MediaOutputAdapterTest extends SysuiTestCase {
}
@Test
+ public void onBindViewHolder_bindSelectableDevice_verifyView() {
+ List<MediaDevice> selectableDevices = new ArrayList<>();
+ selectableDevices.add(mMediaDevice2);
+ when(mMediaOutputController.getSelectableMediaDevice()).thenReturn(selectableDevices);
+ mMediaOutputAdapter.onBindViewHolder(mViewHolder, 1);
+
+ assertThat(mViewHolder.mTwoLineLayout.getVisibility()).isEqualTo(View.GONE);
+ assertThat(mViewHolder.mProgressBar.getVisibility()).isEqualTo(View.GONE);
+ assertThat(mViewHolder.mCheckBox.getVisibility()).isEqualTo(View.VISIBLE);
+ assertThat(mViewHolder.mTitleText.getVisibility()).isEqualTo(View.VISIBLE);
+ assertThat(mViewHolder.mTitleText.getText().toString()).isEqualTo(TEST_DEVICE_NAME_2);
+ }
+
+ @Test
public void onBindViewHolder_bindNonActiveConnectedDevice_verifyView() {
mMediaOutputAdapter.onBindViewHolder(mViewHolder, 1);
@@ -223,6 +278,22 @@ public class MediaOutputAdapterTest extends SysuiTestCase {
}
@Test
+ public void onBindViewHolder_bindGroupingDevice_verifyView() {
+ when(mMediaOutputController.isAnyDeviceTransferring()).thenReturn(false);
+ when(mMediaDevice1.getState()).thenReturn(
+ LocalMediaManager.MediaDeviceState.STATE_GROUPING);
+ mMediaOutputAdapter.onBindViewHolder(mViewHolder, 0);
+
+ assertThat(mViewHolder.mTitleText.getVisibility()).isEqualTo(View.VISIBLE);
+ assertThat(mViewHolder.mTitleText.getText().toString()).isEqualTo(TEST_DEVICE_NAME_1);
+ assertThat(mViewHolder.mSeekBar.getVisibility()).isEqualTo(View.GONE);
+ assertThat(mViewHolder.mSubTitleText.getVisibility()).isEqualTo(View.GONE);
+ assertThat(mViewHolder.mCheckBox.getVisibility()).isEqualTo(View.GONE);
+ assertThat(mViewHolder.mProgressBar.getVisibility()).isEqualTo(View.VISIBLE);
+ assertThat(mViewHolder.mTwoLineLayout.getVisibility()).isEqualTo(View.GONE);
+ }
+
+ @Test
public void onBindViewHolder_inTransferring_bindNonTransferringDevice_verifyView() {
when(mMediaOutputController.isAnyDeviceTransferring()).thenReturn(true);
when(mMediaDevice2.getState()).thenReturn(
@@ -256,6 +327,31 @@ public class MediaOutputAdapterTest extends SysuiTestCase {
}
@Test
+ public void onItemClick_clicksWithMutingExpectedDeviceExist_cancelsMuteAwaitConnection() {
+ when(mMediaOutputController.isAnyDeviceTransferring()).thenReturn(false);
+ when(mMediaOutputController.hasMutingExpectedDevice()).thenReturn(true);
+ when(mMediaOutputController.isCurrentConnectedDeviceRemote()).thenReturn(false);
+ when(mMediaDevice1.isMutingExpectedDevice()).thenReturn(false);
+ mMediaOutputAdapter.onBindViewHolder(mViewHolder, 0);
+
+ mViewHolder.mContainerLayout.performClick();
+
+ verify(mMediaOutputController).cancelMuteAwaitConnection();
+ }
+
+ @Test
+ public void onItemClick_clicksSelectableDevice_triggerGrouping() {
+ List<MediaDevice> selectableDevices = new ArrayList<>();
+ selectableDevices.add(mMediaDevice2);
+ when(mMediaOutputController.getSelectableMediaDevice()).thenReturn(selectableDevices);
+ mMediaOutputAdapter.onBindViewHolder(mViewHolder, 1);
+
+ mViewHolder.mContainerLayout.performClick();
+
+ verify(mMediaOutputController).addDeviceToPlayMedia(mMediaDevice2);
+ }
+
+ @Test
public void onItemClick_onGroupActionTriggered_verifySeekbarDisabled() {
when(mMediaOutputController.getSelectedMediaDevice()).thenReturn(mMediaDevices);
List<MediaDevice> selectableDevices = new ArrayList<>();
@@ -280,4 +376,14 @@ public class MediaOutputAdapterTest extends SysuiTestCase {
assertThat(mViewHolder.mSeekBar.isEnabled()).isTrue();
}
+
+ @Test
+ public void updateColorScheme_triggerController() {
+ WallpaperColors wallpaperColors = WallpaperColors.fromBitmap(
+ Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888));
+
+ mMediaOutputAdapter.updateColorScheme(wallpaperColors, true);
+
+ verify(mMediaOutputController).setCurrentColorScheme(wallpaperColors, true);
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java
index 6dcf8024eca8..465654ed585f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java
@@ -35,6 +35,7 @@ import android.app.KeyguardManager;
import android.app.Notification;
import android.content.Context;
import android.graphics.drawable.Icon;
+import android.media.AudioDeviceAttributes;
import android.media.AudioManager;
import android.media.MediaDescription;
import android.media.MediaMetadata;
@@ -170,6 +171,15 @@ public class MediaOutputControllerTest extends SysuiTestCase {
}
@Test
+ public void start_LocalMediaManagerIsNull_verifyNotStartScan() {
+ mMediaOutputController.mLocalMediaManager = null;
+ mMediaOutputController.start(mCb);
+
+ verify(mLocalMediaManager, never()).registerCallback(mMediaOutputController);
+ verify(mLocalMediaManager, never()).startScan();
+ }
+
+ @Test
public void stop_verifyLocalMediaManagerDeinit() {
mMediaOutputController.start(mCb);
reset(mLocalMediaManager);
@@ -279,6 +289,203 @@ public class MediaOutputControllerTest extends SysuiTestCase {
}
@Test
+ public void onDeviceListUpdate_isRefreshing_updatesNeedRefreshToTrue() {
+ mMediaOutputController.start(mCb);
+ reset(mCb);
+ mMediaOutputController.mIsRefreshing = true;
+
+ mMediaOutputController.onDeviceListUpdate(mMediaDevices);
+
+ assertThat(mMediaOutputController.mNeedRefresh).isTrue();
+ }
+
+ @Test
+ public void cancelMuteAwaitConnection_cancelsWithMediaManager() {
+ when(mAudioManager.getMutingExpectedDevice()).thenReturn(mock(AudioDeviceAttributes.class));
+ mMediaOutputController.start(mCb);
+ reset(mCb);
+
+ mMediaOutputController.cancelMuteAwaitConnection();
+
+ verify(mAudioManager).cancelMuteAwaitConnection(any());
+ }
+
+ @Test
+ public void cancelMuteAwaitConnection_audioManagerIsNull_noAction() {
+ when(mAudioManager.getMutingExpectedDevice()).thenReturn(null);
+ mMediaOutputController.start(mCb);
+ reset(mCb);
+ mMediaOutputController.cancelMuteAwaitConnection();
+
+ verify(mAudioManager, never()).cancelMuteAwaitConnection(any());
+ }
+
+ @Test
+ public void getAppSourceName_packageNameIsNull_returnsNull() {
+ MediaOutputController testMediaOutputController = new MediaOutputController(mSpyContext,
+ "",
+ mMediaSessionManager, mLocalBluetoothManager, mStarter,
+ mNotifCollection, mDialogLaunchAnimator,
+ Optional.of(mNearbyMediaDevicesManager), mAudioManager, mPowerExemptionManager,
+ mKeyguardManager);
+ testMediaOutputController.start(mCb);
+ reset(mCb);
+
+ testMediaOutputController.getAppSourceName();
+
+ assertThat(testMediaOutputController.getAppSourceName()).isNull();
+ }
+
+ @Test
+ public void isActiveItem_deviceNotConnected_returnsFalse() {
+ when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(mMediaDevice2);
+
+ assertThat(mMediaOutputController.isActiveItem(mMediaDevice1)).isFalse();
+ }
+
+ @Test
+ public void getNotificationSmallIcon_packageNameIsNull_returnsNull() {
+ MediaOutputController testMediaOutputController = new MediaOutputController(mSpyContext,
+ "",
+ mMediaSessionManager, mLocalBluetoothManager, mStarter,
+ mNotifCollection, mDialogLaunchAnimator,
+ Optional.of(mNearbyMediaDevicesManager), mAudioManager, mPowerExemptionManager,
+ mKeyguardManager);
+ testMediaOutputController.start(mCb);
+ reset(mCb);
+
+ testMediaOutputController.getAppSourceName();
+
+ assertThat(testMediaOutputController.getNotificationSmallIcon()).isNull();
+ }
+
+ @Test
+ public void refreshDataSetIfNeeded_needRefreshIsTrue_setsToFalse() {
+ mMediaOutputController.start(mCb);
+ reset(mCb);
+ mMediaOutputController.mNeedRefresh = true;
+
+ mMediaOutputController.refreshDataSetIfNeeded();
+
+ assertThat(mMediaOutputController.mNeedRefresh).isFalse();
+ }
+
+ @Test
+ public void isCurrentConnectedDeviceRemote_containsFeatures_returnsTrue() {
+ when(mMediaDevice1.getFeatures()).thenReturn(
+ ImmutableList.of(MediaRoute2Info.FEATURE_REMOTE_PLAYBACK));
+ when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(mMediaDevice1);
+
+ assertThat(mMediaOutputController.isCurrentConnectedDeviceRemote()).isTrue();
+ }
+
+ @Test
+ public void addDeviceToPlayMedia_triggersFromLocalMediaManager() {
+ MediaOutputController testMediaOutputController = new MediaOutputController(mSpyContext,
+ null,
+ mMediaSessionManager, mLocalBluetoothManager, mStarter,
+ mNotifCollection, mDialogLaunchAnimator,
+ Optional.of(mNearbyMediaDevicesManager), mAudioManager, mPowerExemptionManager,
+ mKeyguardManager);
+
+ LocalMediaManager testLocalMediaManager = spy(testMediaOutputController.mLocalMediaManager);
+ testMediaOutputController.mLocalMediaManager = testLocalMediaManager;
+
+ testMediaOutputController.addDeviceToPlayMedia(mMediaDevice2);
+
+ verify(testLocalMediaManager).addDeviceToPlayMedia(mMediaDevice2);
+ }
+
+ @Test
+ public void removeDeviceFromPlayMedia_triggersFromLocalMediaManager() {
+ MediaOutputController testMediaOutputController = new MediaOutputController(mSpyContext,
+ null,
+ mMediaSessionManager, mLocalBluetoothManager, mStarter,
+ mNotifCollection, mDialogLaunchAnimator,
+ Optional.of(mNearbyMediaDevicesManager), mAudioManager, mPowerExemptionManager,
+ mKeyguardManager);
+
+ LocalMediaManager testLocalMediaManager = spy(testMediaOutputController.mLocalMediaManager);
+ testMediaOutputController.mLocalMediaManager = testLocalMediaManager;
+
+ testMediaOutputController.removeDeviceFromPlayMedia(mMediaDevice2);
+
+ verify(testLocalMediaManager).removeDeviceFromPlayMedia(mMediaDevice2);
+ }
+
+ @Test
+ public void getDeselectableMediaDevice_triggersFromLocalMediaManager() {
+ mMediaOutputController.getDeselectableMediaDevice();
+
+ verify(mLocalMediaManager).getDeselectableMediaDevice();
+ }
+
+ @Test
+ public void adjustSessionVolume_adjustWithoutId_triggersFromLocalMediaManager() {
+ int testVolume = 10;
+ mMediaOutputController.adjustSessionVolume(testVolume);
+
+ verify(mLocalMediaManager).adjustSessionVolume(testVolume);
+ }
+
+ @Test
+ public void getSessionVolumeMax_triggersFromLocalMediaManager() {
+ mMediaOutputController.getSessionVolumeMax();
+
+ verify(mLocalMediaManager).getSessionVolumeMax();
+ }
+
+ @Test
+ public void getSessionVolume_triggersFromLocalMediaManager() {
+ mMediaOutputController.getSessionVolume();
+
+ verify(mLocalMediaManager).getSessionVolume();
+ }
+
+ @Test
+ public void getSessionName_triggersFromLocalMediaManager() {
+ mMediaOutputController.getSessionName();
+
+ verify(mLocalMediaManager).getSessionName();
+ }
+
+ @Test
+ public void releaseSession_triggersFromLocalMediaManager() {
+ mMediaOutputController.releaseSession();
+
+ verify(mLocalMediaManager).releaseSession();
+ }
+
+ @Test
+ public void isAnyDeviceTransferring_noDevicesStateIsConnecting_returnsFalse() {
+ mMediaOutputController.start(mCb);
+ reset(mCb);
+
+ mMediaOutputController.onDeviceListUpdate(mMediaDevices);
+
+ assertThat(mMediaOutputController.isAnyDeviceTransferring()).isFalse();
+ }
+
+ @Test
+ public void isAnyDeviceTransferring_deviceStateIsConnecting_returnsTrue() {
+ when(mMediaDevice1.getState()).thenReturn(
+ LocalMediaManager.MediaDeviceState.STATE_CONNECTING);
+ mMediaOutputController.start(mCb);
+ reset(mCb);
+
+ mMediaOutputController.onDeviceListUpdate(mMediaDevices);
+
+ assertThat(mMediaOutputController.isAnyDeviceTransferring()).isTrue();
+ }
+
+ @Test
+ public void isPlaying_stateIsNull() {
+ when(mMediaController.getPlaybackState()).thenReturn(null);
+
+ assertThat(mMediaOutputController.isPlaying()).isFalse();
+ }
+
+ @Test
public void onSelectedDeviceStateChanged_verifyCallback() {
when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(mMediaDevice2);
mMediaOutputController.start(mCb);
@@ -535,6 +742,44 @@ public class MediaOutputControllerTest extends SysuiTestCase {
}
@Test
+ public void getNotificationSmallIcon_withoutSmallIcon_returnsNull() {
+ final List<NotificationEntry> entryList = new ArrayList<>();
+ final NotificationEntry entry = mock(NotificationEntry.class);
+ final StatusBarNotification sbn = mock(StatusBarNotification.class);
+ final Notification notification = mock(Notification.class);
+ entryList.add(entry);
+
+ when(mNotifCollection.getAllNotifs()).thenReturn(entryList);
+ when(entry.getSbn()).thenReturn(sbn);
+ when(sbn.getNotification()).thenReturn(notification);
+ when(sbn.getPackageName()).thenReturn(TEST_PACKAGE_NAME);
+ when(notification.isMediaNotification()).thenReturn(true);
+ when(notification.getSmallIcon()).thenReturn(null);
+
+ assertThat(mMediaOutputController.getNotificationSmallIcon()).isNull();
+ }
+
+ @Test
+ public void getNotificationSmallIcon_withPackageNameAndMediaSession_returnsIconCompat() {
+ final List<NotificationEntry> entryList = new ArrayList<>();
+ final NotificationEntry entry = mock(NotificationEntry.class);
+ final StatusBarNotification sbn = mock(StatusBarNotification.class);
+ final Notification notification = mock(Notification.class);
+ final Icon icon = mock(Icon.class);
+ entryList.add(entry);
+
+ when(mNotifCollection.getAllNotifs()).thenReturn(entryList);
+ when(entry.getSbn()).thenReturn(sbn);
+ when(sbn.getNotification()).thenReturn(notification);
+ when(sbn.getPackageName()).thenReturn(TEST_PACKAGE_NAME);
+ when(notification.isMediaNotification()).thenReturn(true);
+ when(notification.getSmallIcon()).thenReturn(icon);
+
+ assertThat(mMediaOutputController.getNotificationSmallIcon()).isInstanceOf(
+ IconCompat.class);
+ }
+
+ @Test
public void isVolumeControlEnabled_isCastWithVolumeFixed_returnsFalse() {
when(mMediaDevice1.getDeviceType()).thenReturn(
MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java
index 9557513775f8..bae3569cdc93 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java
@@ -25,7 +25,10 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.KeyguardManager;
+import android.graphics.Bitmap;
import android.media.AudioManager;
+import android.media.MediaDescription;
+import android.media.MediaMetadata;
import android.media.MediaRoute2Info;
import android.media.session.MediaController;
import android.media.session.MediaSessionManager;
@@ -43,6 +46,7 @@ import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
import com.android.settingslib.media.LocalMediaManager;
import com.android.settingslib.media.MediaDevice;
+import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.animation.DialogLaunchAnimator;
import com.android.systemui.broadcast.BroadcastSender;
@@ -82,6 +86,8 @@ public class MediaOutputDialogTest extends SysuiTestCase {
private final CommonNotifCollection mNotifCollection = mock(CommonNotifCollection.class);
private final UiEventLogger mUiEventLogger = mock(UiEventLogger.class);
private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
+ private final MediaMetadata mMediaMetadata = mock(MediaMetadata.class);
+ private final MediaDescription mMediaDescription = mock(MediaDescription.class);
private final NearbyMediaDevicesManager mNearbyMediaDevicesManager = mock(
NearbyMediaDevicesManager.class);
private final AudioManager mAudioManager = mock(AudioManager.class);
@@ -100,6 +106,8 @@ public class MediaOutputDialogTest extends SysuiTestCase {
when(mMediaController.getPlaybackState()).thenReturn(mPlaybackState);
when(mPlaybackState.getState()).thenReturn(PlaybackState.STATE_NONE);
when(mMediaController.getPackageName()).thenReturn(TEST_PACKAGE);
+ when(mMediaController.getMetadata()).thenReturn(mMediaMetadata);
+ when(mMediaMetadata.getDescription()).thenReturn(mMediaDescription);
mMediaControllers.add(mMediaController);
when(mMediaSessionManager.getActiveSessions(any())).thenReturn(mMediaControllers);
@@ -207,6 +215,80 @@ public class MediaOutputDialogTest extends SysuiTestCase {
}
@Test
+ public void getHeaderIcon_getFromMediaControllerMetaData() {
+ int testWidth = 10;
+ int testHeight = 20;
+ when(mMediaDescription.getIconBitmap())
+ .thenReturn(Bitmap.createBitmap(testWidth, testHeight, Bitmap.Config.ARGB_8888));
+
+ assertThat(mMediaOutputDialog.getHeaderIcon().getBitmap().getHeight()).isEqualTo(
+ testHeight);
+ assertThat(mMediaOutputDialog.getHeaderIcon().getBitmap().getWidth()).isEqualTo(testWidth);
+ }
+
+ @Test
+ public void getHeaderText_getFromMediaControllerMetaData() {
+ String testTitle = "test title";
+ when(mMediaDescription.getTitle())
+ .thenReturn(testTitle);
+ assertThat(mMediaOutputDialog.getHeaderText().toString()).isEqualTo(testTitle);
+ }
+
+ @Test
+ public void getHeaderSubtitle_getFromMediaControllerMetaData() {
+ String testSubtitle = "test title";
+ when(mMediaDescription.getSubtitle())
+ .thenReturn(testSubtitle);
+
+ assertThat(mMediaOutputDialog.getHeaderSubtitle().toString()).isEqualTo(testSubtitle);
+ }
+
+ @Test
+ public void getStopButtonText_notSupportsBroadcast_returnsDefaultText() {
+ String stopText = mContext.getText(R.string.keyboard_key_media_stop).toString();
+ MediaOutputController mockMediaOutputController = mock(MediaOutputController.class);
+ when(mockMediaOutputController.isBroadcastSupported()).thenReturn(false);
+
+ MediaOutputDialog testDialog = new MediaOutputDialog(mContext, false, mBroadcastSender,
+ mockMediaOutputController, mUiEventLogger);
+ testDialog.show();
+
+ assertThat(testDialog.getStopButtonText().toString()).isEqualTo(stopText);
+ }
+
+ @Test
+ public void getStopButtonText_supportsBroadcast_returnsBroadcastText() {
+ String stopText = mContext.getText(R.string.media_output_broadcast).toString();
+ MediaDevice mMediaDevice = mock(MediaDevice.class);
+ MediaOutputController mockMediaOutputController = mock(MediaOutputController.class);
+ when(mockMediaOutputController.isBroadcastSupported()).thenReturn(true);
+ when(mockMediaOutputController.getCurrentConnectedMediaDevice()).thenReturn(mMediaDevice);
+ when(mockMediaOutputController.isBluetoothLeDevice(any())).thenReturn(true);
+ when(mockMediaOutputController.isPlaying()).thenReturn(true);
+ when(mockMediaOutputController.isBluetoothLeBroadcastEnabled()).thenReturn(false);
+ MediaOutputDialog testDialog = new MediaOutputDialog(mContext, false, mBroadcastSender,
+ mockMediaOutputController, mUiEventLogger);
+ testDialog.show();
+
+ assertThat(testDialog.getStopButtonText().toString()).isEqualTo(stopText);
+ }
+
+ @Test
+ public void onStopButtonClick_notPlaying_releaseSession() {
+ MediaOutputController mockMediaOutputController = mock(MediaOutputController.class);
+ when(mockMediaOutputController.isBroadcastSupported()).thenReturn(false);
+ when(mockMediaOutputController.getCurrentConnectedMediaDevice()).thenReturn(null);
+ when(mockMediaOutputController.isPlaying()).thenReturn(false);
+ MediaOutputDialog testDialog = new MediaOutputDialog(mContext, false, mBroadcastSender,
+ mockMediaOutputController, mUiEventLogger);
+ testDialog.show();
+
+ testDialog.onStopButtonClick();
+
+ verify(mockMediaOutputController).releaseSession();
+ }
+
+ @Test
// Check the visibility metric logging by creating a new MediaOutput dialog,
// and verify if the calling times increases.
public void onCreate_ShouldLogVisibility() {