From 82d45fa03236628d2b45a3063fc7356a48012d18 Mon Sep 17 00:00:00 2001 From: timhypeng Date: Mon, 2 Nov 2020 12:19:31 +0800 Subject: [PATCH] Redirect to output switcher panel to the new dialog -Redirect for Cast button -Send intent when call MediaOutputPanel::create() -Return null to finish the activity Bug: 172178632 Test: make -j50 RunSettingsRoboTests Change-Id: I1038e237113f433c847aff98a45b1dd6089d80a8 --- .../settings/panel/MediaOutputPanel.java | 8 +- .../android/settings/panel/PanelFragment.java | 14 +- .../settings/panel/MediaOutputPanelTest.java | 337 ------------------ .../panel/PanelFeatureProviderImplTest.java | 10 - 4 files changed, 15 insertions(+), 354 deletions(-) delete mode 100644 tests/robotests/src/com/android/settings/panel/MediaOutputPanelTest.java diff --git a/src/com/android/settings/panel/MediaOutputPanel.java b/src/com/android/settings/panel/MediaOutputPanel.java index 7caf7dda7e5..4bfe3ca6940 100644 --- a/src/com/android/settings/panel/MediaOutputPanel.java +++ b/src/com/android/settings/panel/MediaOutputPanel.java @@ -44,6 +44,7 @@ import com.android.settings.Utils; import com.android.settingslib.media.InfoMediaDevice; import com.android.settingslib.media.LocalMediaManager; import com.android.settingslib.media.MediaDevice; +import com.android.settingslib.media.MediaOutputSliceConstants; import java.util.ArrayList; import java.util.List; @@ -72,7 +73,12 @@ public class MediaOutputPanel implements PanelContent, LocalMediaManager.DeviceC private MediaController mMediaController; public static MediaOutputPanel create(Context context, String packageName) { - return new MediaOutputPanel(context, packageName); + // Redirect to new media output dialog + context.sendBroadcast(new Intent() + .setPackage(MediaOutputSliceConstants.SYSTEMUI_PACKAGE_NAME) + .setAction(MediaOutputSliceConstants.ACTION_LAUNCH_MEDIA_OUTPUT_DIALOG) + .putExtra(MediaOutputSliceConstants.EXTRA_PACKAGE_NAME, packageName)); + return null; } private MediaOutputPanel(Context context, String packageName) { diff --git a/src/com/android/settings/panel/PanelFragment.java b/src/com/android/settings/panel/PanelFragment.java index 37c9f73b3dc..133e0fc9e0d 100644 --- a/src/com/android/settings/panel/PanelFragment.java +++ b/src/com/android/settings/panel/PanelFragment.java @@ -442,12 +442,14 @@ public class PanelFragment extends Fragment { if (mLayoutView != null) { mLayoutView.getViewTreeObserver().removeOnGlobalLayoutListener(mPanelLayoutListener); } - mMetricsProvider.action( - 0 /* attribution */, - SettingsEnums.PAGE_HIDE, - mPanel.getMetricsCategory(), - mPanelClosedKey, - 0 /* value */); + if (mPanel != null) { + mMetricsProvider.action( + 0 /* attribution */, + SettingsEnums.PAGE_HIDE, + mPanel.getMetricsCategory(), + mPanelClosedKey, + 0 /* value */); + } } @VisibleForTesting diff --git a/tests/robotests/src/com/android/settings/panel/MediaOutputPanelTest.java b/tests/robotests/src/com/android/settings/panel/MediaOutputPanelTest.java deleted file mode 100644 index fee1d870cc1..00000000000 --- a/tests/robotests/src/com/android/settings/panel/MediaOutputPanelTest.java +++ /dev/null @@ -1,337 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package com.android.settings.panel; - -import static com.android.settings.media.MediaOutputSlice.MEDIA_PACKAGE_NAME; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.content.Context; -import android.media.MediaDescription; -import android.media.MediaMetadata; -import android.media.session.MediaController; -import android.media.session.MediaSessionManager; -import android.media.session.PlaybackState; -import android.net.Uri; - -import com.android.settings.R; -import com.android.settings.slices.CustomSliceRegistry; -import com.android.settingslib.media.InfoMediaDevice; -import com.android.settingslib.media.LocalMediaManager; -import com.android.settingslib.media.PhoneMediaDevice; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; - -import java.util.ArrayList; -import java.util.List; - -@RunWith(RobolectricTestRunner.class) -public class MediaOutputPanelTest { - - private static final String TEST_PACKAGENAME = "com.test.packagename"; - private static final String TEST_PACKAGENAME2 = "com.test.packagename2"; - private static final String TEST_ARTIST = "test_artist"; - private static final String TEST_SONG = "test_song"; - - @Mock - private MediaSessionManager mMediaSessionManager; - @Mock - private MediaController mMediaController; - @Mock - private MediaMetadata mMediaMetadata; - @Mock - private LocalMediaManager mLocalMediaManager; - @Mock - private PanelContentCallback mCallback; - @Mock - private PlaybackState mPlaybackState; - - private MediaOutputPanel mPanel; - private Context mContext; - private List mMediaControllers = new ArrayList<>(); - private ArgumentCaptor mControllerCbs = - ArgumentCaptor.forClass(MediaController.Callback.class); - private MediaDescription mMediaDescription; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - - mContext = spy(RuntimeEnvironment.application); - - mMediaControllers.add(mMediaController); - when(mMediaController.getPackageName()).thenReturn(TEST_PACKAGENAME); - when(mMediaSessionManager.getActiveSessions(any())).thenReturn(mMediaControllers); - when(mContext.getApplicationContext()).thenReturn(mContext); - doReturn(mMediaSessionManager).when(mContext).getSystemService(MediaSessionManager.class); - MediaDescription.Builder builder = new MediaDescription.Builder(); - builder.setTitle(TEST_SONG); - builder.setSubtitle(TEST_ARTIST); - mMediaDescription = builder.build(); - when(mMediaMetadata.getDescription()).thenReturn(mMediaDescription); - - mPanel = MediaOutputPanel.create(mContext, TEST_PACKAGENAME); - mPanel.mLocalMediaManager = mLocalMediaManager; - mPanel.registerCallback(mCallback); - } - - @Test - public void getSlices_containsNecessarySlices() { - final List uris = mPanel.getSlices(); - - assertThat(uris).containsExactly(CustomSliceRegistry.MEDIA_OUTPUT_SLICE_URI); - } - - @Test - public void getSlices_verifyPackageName_isEqual() { - final List uris = mPanel.getSlices(); - - assertThat(uris.get(0).getQueryParameter(MEDIA_PACKAGE_NAME)).isEqualTo(TEST_PACKAGENAME); - } - - @Test - public void getSeeMoreIntent_isNull() { - assertThat(mPanel.getSeeMoreIntent()).isNull(); - } - - @Test - public void onStart_shouldRegisterCallback() { - mPanel.onStart(); - - verify(mMediaController).registerCallback(any()); - verify(mLocalMediaManager).registerCallback(any()); - verify(mLocalMediaManager).startScan(); - } - - @Test - public void onStart_activeSession_verifyOnHeaderChanged() { - mPanel.onStart(); - - verify(mCallback).onHeaderChanged(); - } - - @Test - public void onStart_noMatchedActiveSession_verifyNeverOnHeaderChanged() { - when(mMediaController.getPackageName()).thenReturn(TEST_PACKAGENAME2); - mPanel.onStart(); - - verify(mCallback, never()).onHeaderChanged(); - } - - @Test - public void onStop_shouldUnregisterCallback() { - mPanel.onStop(); - - verify(mLocalMediaManager).unregisterCallback(any()); - verify(mLocalMediaManager).stopScan(); - } - - @Test - public void onSelectedDeviceStateChanged_shouldDispatchCustomButtonStateChanged() { - mPanel.onSelectedDeviceStateChanged(null, 0); - - verify(mCallback).onCustomizedButtonStateChanged(); - } - - @Test - public void onDeviceListUpdate_shouldDispatchCustomButtonStateChanged() { - mPanel.onDeviceListUpdate(null); - - verify(mCallback).onCustomizedButtonStateChanged(); - } - - @Test - public void onDeviceAttributesChanged_shouldDispatchCustomButtonStateChanged() { - mPanel.onDeviceAttributesChanged(); - - verify(mCallback).onCustomizedButtonStateChanged(); - } - - @Test - public void currentConnectDeviceIsInfoDevice_useCustomButtonIsTrue() { - final InfoMediaDevice infoMediaDevice = mock(InfoMediaDevice.class); - when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(infoMediaDevice); - - mPanel.onDeviceAttributesChanged(); - - assertThat(mPanel.isCustomizedButtonUsed()).isTrue(); - } - - @Test - public void currentConnectDeviceIsNotInfoDevice_useCustomButtonIsFalse() { - final PhoneMediaDevice phoneMediaDevice = mock(PhoneMediaDevice.class); - when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(phoneMediaDevice); - - mPanel.onDeviceAttributesChanged(); - - assertThat(mPanel.isCustomizedButtonUsed()).isFalse(); - } - - @Test - public void getTitle_withMetadata_returnSongName() { - mPanel.onStart(); - when(mMediaController.getMetadata()).thenReturn(mMediaMetadata); - - assertThat(mPanel.getTitle()).isEqualTo(TEST_SONG); - } - - @Test - public void getTitle_noMetadata_returnDefaultString() { - when(mMediaController.getMetadata()).thenReturn(null); - - assertThat(mPanel.getTitle()).isEqualTo(mContext.getText(R.string.media_volume_title)); - } - @Test - public void getTitle_noPackageName_returnDefaultString() { - mPanel = MediaOutputPanel.create(mContext, null); - when(mMediaController.getMetadata()).thenReturn(mMediaMetadata); - - assertThat(mPanel.getTitle()).isEqualTo(mContext.getText(R.string.media_volume_title)); - } - - @Test - public void getTitle_noController_defaultString() { - mMediaControllers.clear(); - when(mMediaMetadata.getString(MediaMetadata.METADATA_KEY_ARTIST)).thenReturn(TEST_ARTIST); - when(mMediaController.getMetadata()).thenReturn(mMediaMetadata); - mPanel = MediaOutputPanel.create(mContext, TEST_PACKAGENAME); - - assertThat(mPanel.getTitle()).isEqualTo(mContext.getText(R.string.media_volume_title)); - } - - @Test - public void getSubTitle_withMetadata_returnArtistName() { - mPanel.onStart(); - when(mMediaController.getMetadata()).thenReturn(mMediaMetadata); - - assertThat(mPanel.getSubTitle()).isEqualTo(TEST_ARTIST); - } - - @Test - public void getSubTitle_noMetadata_returnDefault() { - when(mMediaController.getPackageName()).thenReturn(TEST_PACKAGENAME); - when(mMediaController.getMetadata()).thenReturn(null); - - assertThat(mPanel.getSubTitle()).isEqualTo(mContext.getText( - R.string.media_output_panel_title)); - } - - @Test - public void getSubTitle_noPackageName_returnDefault() { - mPanel = MediaOutputPanel.create(mContext, null); - when(mMediaController.getMetadata()).thenReturn(mMediaMetadata); - - assertThat(mPanel.getSubTitle()).isEqualTo(mContext.getText( - R.string.media_output_panel_title)); - } - - @Test - public void getSubTitle_noController_returnDefault() { - mMediaControllers.clear(); - mPanel = MediaOutputPanel.create(mContext, TEST_PACKAGENAME); - when(mMediaController.getMetadata()).thenReturn(mMediaMetadata); - - assertThat(mPanel.getSubTitle()).isEqualTo(mContext.getText( - R.string.media_output_panel_title)); - } - - @Test - public void onClickCustomizedButton_shouldReleaseSession() { - mPanel.onClickCustomizedButton(); - - verify(mLocalMediaManager).releaseSession(); - } - - @Test - public void onMetadataChanged_verifyCallOnHeaderChanged() { - mPanel.onStart(); - verify(mCallback).onHeaderChanged(); - verify(mMediaController).registerCallback(mControllerCbs.capture()); - final MediaController.Callback controllerCallbacks = mControllerCbs.getValue(); - - controllerCallbacks.onMetadataChanged(mMediaMetadata); - - verify(mCallback, times(2)).onHeaderChanged(); - } - - @Test - public void onPlaybackStateChanged_stateFromPlayingToStopped_verifyCallForceClose() { - mPanel.onStart(); - verify(mMediaController).registerCallback(mControllerCbs.capture()); - final MediaController.Callback controllerCallbacks = mControllerCbs.getValue(); - when(mPlaybackState.getState()).thenReturn(PlaybackState.STATE_PLAYING); - controllerCallbacks.onPlaybackStateChanged(mPlaybackState); - verify(mCallback, never()).forceClose(); - - when(mPlaybackState.getState()).thenReturn(PlaybackState.STATE_STOPPED); - controllerCallbacks.onPlaybackStateChanged(mPlaybackState); - - verify(mCallback).forceClose(); - } - - @Test - public void onPlaybackStateChanged_stateFromPlayingToPaused_verifyCallForceClose() { - mPanel.onStart(); - verify(mMediaController).registerCallback(mControllerCbs.capture()); - final MediaController.Callback controllerCallbacks = mControllerCbs.getValue(); - when(mPlaybackState.getState()).thenReturn(PlaybackState.STATE_PLAYING); - controllerCallbacks.onPlaybackStateChanged(mPlaybackState); - verify(mCallback, never()).forceClose(); - - when(mPlaybackState.getState()).thenReturn(PlaybackState.STATE_PAUSED); - controllerCallbacks.onPlaybackStateChanged(mPlaybackState); - - verify(mCallback).forceClose(); - } - - @Test - public void getViewType_checkType() { - assertThat(mPanel.getViewType()).isEqualTo(PanelContent.VIEW_TYPE_SLIDER_LARGE_ICON); - } - - @Test - public void getIcon_mediaControllerIsNull_returnNull() { - mMediaControllers.clear(); - mPanel.onStart(); - - assertThat(mPanel.getIcon()).isNull(); - } - - @Test - public void getIcon_mediaMetadataIsNull_returnNull() { - mPanel.onStart(); - when(mMediaController.getMetadata()).thenReturn(null); - - assertThat(mPanel.getIcon()).isNull(); - } -} diff --git a/tests/robotests/src/com/android/settings/panel/PanelFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/panel/PanelFeatureProviderImplTest.java index 54f18948cb7..f924d7a01d2 100644 --- a/tests/robotests/src/com/android/settings/panel/PanelFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/panel/PanelFeatureProviderImplTest.java @@ -19,7 +19,6 @@ package com.android.settings.panel; import static com.android.settings.panel.SettingsPanelActivity.KEY_MEDIA_PACKAGE_NAME; import static com.android.settings.panel.SettingsPanelActivity.KEY_PANEL_TYPE_ARGUMENT; -import static com.android.settingslib.media.MediaOutputSliceConstants.ACTION_MEDIA_OUTPUT; import static com.google.common.truth.Truth.assertThat; @@ -67,13 +66,4 @@ public class PanelFeatureProviderImplTest { assertThat(panel).isInstanceOf(VolumePanel.class); } - - @Test - public void getPanel_mediaOutputKey_returnsCorrectPanel() { - mBundle.putString(KEY_PANEL_TYPE_ARGUMENT, ACTION_MEDIA_OUTPUT); - - final PanelContent panel = mProvider.getPanel(mContext, mBundle); - - assertThat(panel).isInstanceOf(MediaOutputPanel.class); - } }