Merge "Use media switcher dialog to control routing during call" into main
This commit is contained in:
@@ -41,6 +41,7 @@ import com.android.settingslib.bluetooth.HearingAidProfile;
|
|||||||
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast;
|
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast;
|
||||||
import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
||||||
import com.android.settingslib.media.MediaOutputConstants;
|
import com.android.settingslib.media.MediaOutputConstants;
|
||||||
|
import com.android.settingslib.media.PhoneMediaDevice;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -132,6 +133,12 @@ public class MediaOutputPreferenceController extends AudioSwitchPreferenceContro
|
|||||||
public void displayPreference(PreferenceScreen screen) {
|
public void displayPreference(PreferenceScreen screen) {
|
||||||
super.displayPreference(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)
|
mPreference.setVisible(!Utils.isAudioModeOngoingCall(mContext)
|
||||||
&& (enableOutputSwitcherForSystemRouting() ? true : mMediaController != null));
|
&& (enableOutputSwitcherForSystemRouting() ? true : mMediaController != null));
|
||||||
}
|
}
|
||||||
@@ -153,8 +160,10 @@ public class MediaOutputPreferenceController extends AudioSwitchPreferenceContro
|
|||||||
}
|
}
|
||||||
|
|
||||||
mPreference.setEnabled(true);
|
mPreference.setEnabled(true);
|
||||||
if (Utils.isAudioModeOngoingCall(mContext)) {
|
if (Utils.isAudioModeOngoingCall(mContext) &&
|
||||||
// Ongoing call status, switch entry for media will be disabled.
|
!PhoneMediaDevice.inputRoutingEnabledAndIsDesktop(mContext)) {
|
||||||
|
// Ongoing call status, switch entry for media will be disabled, unless input routing is
|
||||||
|
// enabled in desktop.
|
||||||
mPreference.setVisible(false);
|
mPreference.setVisible(false);
|
||||||
preference.setSummary(
|
preference.setSummary(
|
||||||
mContext.getText(R.string.media_out_summary_ongoing_call_state));
|
mContext.getText(R.string.media_out_summary_ongoing_call_state));
|
||||||
|
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.settings.sound;
|
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_BLE_HEADSET;
|
||||||
import static android.media.AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP;
|
import static android.media.AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP;
|
||||||
import static android.media.AudioSystem.DEVICE_OUT_EARPIECE;
|
import static android.media.AudioSystem.DEVICE_OUT_EARPIECE;
|
||||||
@@ -42,6 +43,7 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.PackageStats;
|
import android.content.pm.PackageStats;
|
||||||
import android.media.AudioAttributes;
|
import android.media.AudioAttributes;
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
@@ -49,14 +51,17 @@ import android.media.VolumeProvider;
|
|||||||
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;
|
||||||
|
import android.platform.test.annotations.EnableFlags;
|
||||||
import android.platform.test.flag.junit.SetFlagsRule;
|
import android.platform.test.flag.junit.SetFlagsRule;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
|
import com.android.media.flags.Flags;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.bluetooth.Utils;
|
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.ShadowAudioManager;
|
||||||
import com.android.settings.testutils.shadow.ShadowBluetoothUtils;
|
import com.android.settings.testutils.shadow.ShadowBluetoothUtils;
|
||||||
import com.android.settingslib.bluetooth.A2dpProfile;
|
import com.android.settingslib.bluetooth.A2dpProfile;
|
||||||
@@ -113,6 +118,8 @@ public class MediaOutputPreferenceControllerTest {
|
|||||||
@Rule
|
@Rule
|
||||||
public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
|
public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private PackageManager mPackageManager;
|
||||||
@Mock
|
@Mock
|
||||||
private LocalBluetoothManager mLocalManager;
|
private LocalBluetoothManager mLocalManager;
|
||||||
@Mock
|
@Mock
|
||||||
@@ -486,6 +493,32 @@ public class MediaOutputPreferenceControllerTest {
|
|||||||
assertThat(mPreference.isVisible()).isFalse();
|
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
|
@Test
|
||||||
public void findActiveDevice_onlyA2dpDeviceActive_returnA2dpDevice() {
|
public void findActiveDevice_onlyA2dpDeviceActive_returnA2dpDevice() {
|
||||||
when(mLocalBluetoothProfileManager.getHearingAidProfile()).thenReturn(null);
|
when(mLocalBluetoothProfileManager.getHearingAidProfile()).thenReturn(null);
|
||||||
|
Reference in New Issue
Block a user