Loading src/com/android/settings/sound/MediaOutputPreferenceController.java +11 −2 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import com.android.settingslib.bluetooth.HearingAidProfile; import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.media.MediaOutputConstants; import com.android.settingslib.media.PhoneMediaDevice; import java.util.List; Loading Loading @@ -132,6 +133,12 @@ public class MediaOutputPreferenceController extends AudioSwitchPreferenceContro public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); // Always use media switcher to control routing in desktop. if (PhoneMediaDevice.inputRoutingEnabledAndIsDesktop(mContext)) { mPreference.setVisible(true); return; } mPreference.setVisible(!Utils.isAudioModeOngoingCall(mContext) && (enableOutputSwitcherForSystemRouting() ? true : mMediaController != null)); } Loading @@ -153,8 +160,10 @@ public class MediaOutputPreferenceController extends AudioSwitchPreferenceContro } mPreference.setEnabled(true); if (Utils.isAudioModeOngoingCall(mContext)) { // Ongoing call status, switch entry for media will be disabled. if (Utils.isAudioModeOngoingCall(mContext) && !PhoneMediaDevice.inputRoutingEnabledAndIsDesktop(mContext)) { // Ongoing call status, switch entry for media will be disabled, unless input routing is // enabled in desktop. mPreference.setVisible(false); preference.setSummary( mContext.getText(R.string.media_out_summary_ongoing_call_state)); Loading tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java +33 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.settings.sound; import static android.content.pm.PackageManager.FEATURE_PC; import static android.media.AudioSystem.DEVICE_OUT_BLE_HEADSET; import static android.media.AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP; import static android.media.AudioSystem.DEVICE_OUT_EARPIECE; Loading @@ -42,6 +43,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageStats; import android.media.AudioAttributes; import android.media.AudioManager; Loading @@ -49,14 +51,17 @@ import android.media.VolumeProvider; import android.media.session.MediaController; import android.media.session.MediaSessionManager; import android.media.session.PlaybackState; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import androidx.preference.Preference; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; import com.android.media.flags.Flags; import com.android.settings.R; import com.android.settings.bluetooth.Utils; import com.android.settings.media.MediaOutputUtils; import com.android.settings.testutils.shadow.ShadowAudioManager; import com.android.settings.testutils.shadow.ShadowBluetoothUtils; import com.android.settingslib.bluetooth.A2dpProfile; Loading Loading @@ -113,6 +118,8 @@ public class MediaOutputPreferenceControllerTest { @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); @Mock private PackageManager mPackageManager; @Mock private LocalBluetoothManager mLocalManager; @Mock Loading Loading @@ -486,6 +493,32 @@ public class MediaOutputPreferenceControllerTest { assertThat(mPreference.isVisible()).isFalse(); } /** * During a call * Preference should be visible when input routing is available in desktop */ @EnableFlags(Flags.FLAG_ENABLE_AUDIO_INPUT_DEVICE_ROUTING_AND_VOLUME_CONTROL) @Test public void updateState_inCall_preferenceVisible_inputRoutingEnabledInDesktop() throws PackageManager.NameNotFoundException { when(mContext.getPackageManager()).thenReturn(mPackageManager); when(mPackageManager.hasSystemFeature(FEATURE_PC)).thenReturn(true); ApplicationInfo appInfo = new ApplicationInfo(); appInfo.flags = ApplicationInfo.FLAG_INSTALLED; appInfo.packageName = TEST_PACKAGE_NAME; appInfo.name = TEST_APPLICATION_LABEL; when(mPackageManager.getApplicationInfo(TEST_PACKAGE_NAME, PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER)).thenReturn(appInfo); mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION); mController.updateState(mPreference); assertThat(mPreference.isVisible()).isTrue(); } @Test public void findActiveDevice_onlyA2dpDeviceActive_returnA2dpDevice() { when(mLocalBluetoothProfileManager.getHearingAidProfile()).thenReturn(null); Loading Loading
src/com/android/settings/sound/MediaOutputPreferenceController.java +11 −2 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import com.android.settingslib.bluetooth.HearingAidProfile; import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.media.MediaOutputConstants; import com.android.settingslib.media.PhoneMediaDevice; import java.util.List; Loading Loading @@ -132,6 +133,12 @@ public class MediaOutputPreferenceController extends AudioSwitchPreferenceContro public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); // Always use media switcher to control routing in desktop. if (PhoneMediaDevice.inputRoutingEnabledAndIsDesktop(mContext)) { mPreference.setVisible(true); return; } mPreference.setVisible(!Utils.isAudioModeOngoingCall(mContext) && (enableOutputSwitcherForSystemRouting() ? true : mMediaController != null)); } Loading @@ -153,8 +160,10 @@ public class MediaOutputPreferenceController extends AudioSwitchPreferenceContro } mPreference.setEnabled(true); if (Utils.isAudioModeOngoingCall(mContext)) { // Ongoing call status, switch entry for media will be disabled. if (Utils.isAudioModeOngoingCall(mContext) && !PhoneMediaDevice.inputRoutingEnabledAndIsDesktop(mContext)) { // Ongoing call status, switch entry for media will be disabled, unless input routing is // enabled in desktop. mPreference.setVisible(false); preference.setSummary( mContext.getText(R.string.media_out_summary_ongoing_call_state)); Loading
tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java +33 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.settings.sound; import static android.content.pm.PackageManager.FEATURE_PC; import static android.media.AudioSystem.DEVICE_OUT_BLE_HEADSET; import static android.media.AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP; import static android.media.AudioSystem.DEVICE_OUT_EARPIECE; Loading @@ -42,6 +43,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageStats; import android.media.AudioAttributes; import android.media.AudioManager; Loading @@ -49,14 +51,17 @@ import android.media.VolumeProvider; import android.media.session.MediaController; import android.media.session.MediaSessionManager; import android.media.session.PlaybackState; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import androidx.preference.Preference; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; import com.android.media.flags.Flags; import com.android.settings.R; import com.android.settings.bluetooth.Utils; import com.android.settings.media.MediaOutputUtils; import com.android.settings.testutils.shadow.ShadowAudioManager; import com.android.settings.testutils.shadow.ShadowBluetoothUtils; import com.android.settingslib.bluetooth.A2dpProfile; Loading Loading @@ -113,6 +118,8 @@ public class MediaOutputPreferenceControllerTest { @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); @Mock private PackageManager mPackageManager; @Mock private LocalBluetoothManager mLocalManager; @Mock Loading Loading @@ -486,6 +493,32 @@ public class MediaOutputPreferenceControllerTest { assertThat(mPreference.isVisible()).isFalse(); } /** * During a call * Preference should be visible when input routing is available in desktop */ @EnableFlags(Flags.FLAG_ENABLE_AUDIO_INPUT_DEVICE_ROUTING_AND_VOLUME_CONTROL) @Test public void updateState_inCall_preferenceVisible_inputRoutingEnabledInDesktop() throws PackageManager.NameNotFoundException { when(mContext.getPackageManager()).thenReturn(mPackageManager); when(mPackageManager.hasSystemFeature(FEATURE_PC)).thenReturn(true); ApplicationInfo appInfo = new ApplicationInfo(); appInfo.flags = ApplicationInfo.FLAG_INSTALLED; appInfo.packageName = TEST_PACKAGE_NAME; appInfo.name = TEST_APPLICATION_LABEL; when(mPackageManager.getApplicationInfo(TEST_PACKAGE_NAME, PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER)).thenReturn(appInfo); mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION); mController.updateState(mPreference); assertThat(mPreference.isVisible()).isTrue(); } @Test public void findActiveDevice_onlyA2dpDeviceActive_returnA2dpDevice() { when(mLocalBluetoothProfileManager.getHearingAidProfile()).thenReturn(null); Loading