Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b8b1c83b authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Correct the device name when switching media output" into main

parents 63a24ea5 a12e1bb8
Loading
Loading
Loading
Loading
+26 −5
Original line number Diff line number Diff line
@@ -41,6 +41,8 @@ import com.android.settingslib.bluetooth.A2dpProfile;
import com.android.settingslib.bluetooth.HearingAidProfile;
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.media.LocalMediaManager;
import com.android.settingslib.media.MediaDevice;
import com.android.settingslib.media.MediaOutputConstants;
import com.android.settingslib.media.PhoneMediaDevice;

@@ -54,11 +56,13 @@ import java.util.List;
 * - Media stream captured by remote device
 * - During a call.
 */
public class MediaOutputPreferenceController extends AudioSwitchPreferenceController {
public class MediaOutputPreferenceController extends AudioSwitchPreferenceController implements
        LocalMediaManager.DeviceCallback {

    private static final String TAG = "MediaOutputPreferenceController";
    @Nullable private MediaController mMediaController;
    private MediaSessionManager mMediaSessionManager;
    @Nullable LocalMediaManager mLocalMediaManager;

    @Nullable private LocalBluetoothLeBroadcast mLocalBluetoothLeBroadcast;

@@ -105,6 +109,7 @@ public class MediaOutputPreferenceController extends AudioSwitchPreferenceContro
        super(context, key);
        mMediaSessionManager = context.getSystemService(MediaSessionManager.class);
        mMediaController = MediaOutputUtils.getActiveLocalMediaController(mMediaSessionManager);
        mLocalMediaManager = new LocalMediaManager(mContext, /* packageName= */ null);
        LocalBluetoothManager localBluetoothManager =
                com.android.settings.bluetooth.Utils.getLocalBtManager(mContext);
        if (localBluetoothManager != null) {
@@ -120,6 +125,9 @@ public class MediaOutputPreferenceController extends AudioSwitchPreferenceContro
            mLocalBluetoothLeBroadcast.registerServiceCallBack(
                    mContext.getMainExecutor(), mBroadcastCallback);
        }
        if (mLocalMediaManager != null) {
            mLocalMediaManager.registerCallback(this);
        }
    }

    @Override
@@ -128,6 +136,9 @@ public class MediaOutputPreferenceController extends AudioSwitchPreferenceContro
        if (mLocalBluetoothLeBroadcast != null) {
            mLocalBluetoothLeBroadcast.unregisterServiceCallBack(mBroadcastCallback);
        }
        if (mLocalMediaManager != null) {
            mLocalMediaManager.unregisterCallback(this);
        }
    }

    @Override
@@ -144,6 +155,11 @@ public class MediaOutputPreferenceController extends AudioSwitchPreferenceContro
                && (enableOutputSwitcherForSystemRouting() ? true : mMediaController != null));
    }

    @Override
    public void onSelectedDeviceStateChanged(MediaDevice device, int state) {
        updateState(mPreference);
    }

    @Override
    public void updateState(Preference preference) {
        if (preference == null) {
@@ -196,6 +212,10 @@ public class MediaOutputPreferenceController extends AudioSwitchPreferenceContro
            if (!enableOutputSwitcherPersonalAudioSharing()) {
                mPreference.setEnabled(false);
            }
        } else {
            if (mLocalMediaManager != null
                    && mLocalMediaManager.getCurrentConnectedDevice() != null) {
                mPreference.setSummary(mLocalMediaManager.getCurrentConnectedDevice().getName());
            } else {
                mPreference.setSummary(
                        (activeDevice == null)
@@ -203,6 +223,7 @@ public class MediaOutputPreferenceController extends AudioSwitchPreferenceContro
                                : activeDevice.getAlias());
            }
        }
    }

    @Override
    public BluetoothDevice findActiveDevice() {
+10 −1
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ 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.connecteddevice.audiosharing.audiostreams.testshadows.ShadowLocalMediaManager;
import com.android.settings.testutils.shadow.ShadowAudioManager;
import com.android.settings.testutils.shadow.ShadowBluetoothUtils;
import com.android.settingslib.bluetooth.A2dpProfile;
@@ -73,6 +74,7 @@ import com.android.settingslib.bluetooth.LeAudioProfile;
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
import com.android.settingslib.media.LocalMediaManager;
import com.android.settingslib.media.MediaOutputConstants;

import org.junit.After;
@@ -98,7 +100,8 @@ import java.util.List;
@Config(shadows = {
        ShadowAudioManager.class,
        ShadowBluetoothUtils.class,
        ShadowBluetoothDevice.class}
        ShadowBluetoothDevice.class,
        ShadowLocalMediaManager.class }
)
public class MediaOutputPreferenceControllerTest {
    private static final String TEST_KEY = "Test_Key";
@@ -123,6 +126,8 @@ public class MediaOutputPreferenceControllerTest {
    @Mock
    private LocalBluetoothManager mLocalManager;
    @Mock
    private LocalMediaManager mLocalMediaManager;
    @Mock
    private BluetoothEventManager mBluetoothEventManager;
    @Mock
    private LocalBluetoothProfileManager mLocalBluetoothProfileManager;
@@ -236,6 +241,9 @@ public class MediaOutputPreferenceControllerTest {
        when(mRightBluetoothHapDevice.isConnected()).thenReturn(true);

        mController = new MediaOutputPreferenceController(mContext, TEST_KEY);
        ShadowLocalMediaManager.setUseMock(mLocalMediaManager);
        mController.mLocalMediaManager = mLocalMediaManager;
        when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(null);
        mScreen = spy(new PreferenceScreen(mContext, null));
        mPreference = new Preference(mContext);
        mProfileConnectedDevices = new ArrayList<>();
@@ -253,6 +261,7 @@ public class MediaOutputPreferenceControllerTest {
    @After
    public void tearDown() {
        ShadowBluetoothUtils.reset();
        ShadowLocalMediaManager.reset();
    }

    /** Start broadcasting so Preference summary should become "Audio Sharing" and disabled */