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

Commit a12e1bb8 authored by Mill Chen's avatar Mill Chen
Browse files

Correct the device name when switching media output

Bug: 346891247
Bug: 361476943
Bug: 366383126
Test: atest MediaOutputPreferenceControllerTest
Flag: EXEMPT bugfix
Change-Id: If65fdbad3232d5b6c1d2ccf54b98e5e091a8ffbe
parent 6f1af730
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 */