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

Commit ae24d51b authored by Yiyi Shen's avatar Yiyi Shen Committed by Android (Google) Code Review
Browse files

Merge "[Audiosharing] Save user preferred primary headset to SettingsProvider" into main

parents bab2edd0 96429c65
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -219,7 +219,7 @@ public class AudioSharingCallAudioPreferenceController extends AudioSharingBaseP
                                        if (lead != null) {
                                            String addr = lead.getDevice().getAnonymizedAddress();
                                            Log.d(TAG, "Set call audio device: " + addr);
                                            lead.setActive();
                                            AudioSharingUtils.setPrimary(mContext, lead);
                                            logCallAudioDeviceChange(currentGroupId, lead);
                                        } else {
                                            Log.d(TAG, "Skip set call audio device: no lead");
+1 −1
Original line number Diff line number Diff line
@@ -390,7 +390,7 @@ public class AudioSharingDevicePreferenceController extends BasePreferenceContro
            Log.d(TAG, "onDeviceClick, set active in call mode");
            CachedBluetoothDevice cachedDevice =
                    ((BluetoothDevicePreference) preference).getBluetoothDevice();
            cachedDevice.setActive();
            AudioSharingUtils.setPrimary(mContext, cachedDevice);
        }
        mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_AUDIO_SHARING_DEVICE_CLICK,
                isCallMode);
+1 −1
Original line number Diff line number Diff line
@@ -192,7 +192,7 @@ public class AudioSharingDialogHandler {
                    // If this method is called with user triggered, e.g. manual click on the
                    // "Connected devices" page, we need call setActive for the device, since user
                    // intend to switch active device for the call.
                    cachedDevice.setActive();
                    AudioSharingUtils.setPrimary(mContext, cachedDevice);
                }
                return;
            }
+24 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static com.android.settings.connecteddevice.audiosharing.AudioSharingUtil
import static com.android.settings.connecteddevice.audiosharing.AudioSharingUtils.MetricKey.METRIC_KEY_PAGE_ID;
import static com.android.settings.connecteddevice.audiosharing.AudioSharingUtils.MetricKey.METRIC_KEY_SOURCE_PAGE_ID;
import static com.android.settings.connecteddevice.audiosharing.AudioSharingUtils.MetricKey.METRIC_KEY_USER_TRIGGERED;
import static com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast.BLUETOOTH_LE_BROADCAST_PRIMARY_DEVICE_GROUP_ID;

import static java.util.stream.Collectors.toList;

@@ -28,6 +29,7 @@ import android.bluetooth.BluetoothCsipSetCoordinator;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothLeBroadcastMetadata;
import android.content.Context;
import android.provider.Settings;
import android.util.Log;
import android.util.Pair;
import android.widget.Toast;
@@ -44,6 +46,7 @@ import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastAssistant;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
import com.android.settingslib.bluetooth.VolumeControlProfile;
import com.android.settingslib.flags.Flags;

import java.util.ArrayList;
import java.util.Comparator;
@@ -344,6 +347,27 @@ public class AudioSharingUtils {
        return vc != null && vc.isProfileReady();
    }

    /** Set {@link CachedBluetoothDevice} as primary device for call audio */
    public static void setPrimary(@NonNull Context context,
            @Nullable CachedBluetoothDevice cachedDevice) {
        if (cachedDevice == null) return;
        cachedDevice.setActive();
        if (Flags.audioSharingHysteresisModeFix()) {
            int groupId = BluetoothUtils.getGroupId(cachedDevice);
            // TODO: use real key name in SettingsProvider
            int userPreferredId = Settings.Secure.getInt(
                    context.getContentResolver(),
                    BLUETOOTH_LE_BROADCAST_PRIMARY_DEVICE_GROUP_ID,
                    BluetoothCsipSetCoordinator.GROUP_ID_INVALID);
            if (groupId != userPreferredId) {
                Settings.Secure.putInt(
                        context.getContentResolver(),
                        BLUETOOTH_LE_BROADCAST_PRIMARY_DEVICE_GROUP_ID,
                        groupId);
            }
        }
    }

    /**
     * Build audio sharing dialog log event data
     *
+33 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settings.connecteddevice.audiosharing;

import static com.android.settings.core.BasePreferenceController.AVAILABLE_UNSEARCHABLE;
import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
import static com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast.BLUETOOTH_LE_BROADCAST_PRIMARY_DEVICE_GROUP_ID;
import static com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast.EXTRA_BLUETOOTH_DEVICE;

import static com.google.common.truth.Truth.assertThat;
@@ -37,6 +38,7 @@ import static org.robolectric.Shadows.shadowOf;

import android.app.settings.SettingsEnums;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothCsipSetCoordinator;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothLeBroadcastAssistant;
import android.bluetooth.BluetoothLeBroadcastMetadata;
@@ -50,6 +52,7 @@ import android.media.AudioManager;
import android.os.Bundle;
import android.os.Looper;
import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.Settings;
import android.util.Pair;

import androidx.annotation.NonNull;
@@ -587,6 +590,10 @@ public class AudioSharingDevicePreferenceControllerTest {
    @Test
    public void testInCallState_showCallStateTitleAndSetActiveOnDeviceClick() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
        mSetFlagsRule.disableFlags(Flags.FLAG_AUDIO_SHARING_HYSTERESIS_MODE_FIX);
        Settings.Secure.putInt(mContext.getContentResolver(),
                BLUETOOTH_LE_BROADCAST_PRIMARY_DEVICE_GROUP_ID,
                BluetoothCsipSetCoordinator.GROUP_ID_INVALID);
        mController.displayPreference(mScreen);

        mAudioManager.setMode(AudioManager.MODE_IN_CALL);
@@ -599,6 +606,32 @@ public class AudioSharingDevicePreferenceControllerTest {
        BluetoothDevicePreference preference = createBluetoothDevicePreference();
        mController.onDeviceClick(preference);
        verify(mCachedDevice).setActive();
        assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
                BLUETOOTH_LE_BROADCAST_PRIMARY_DEVICE_GROUP_ID,
                BluetoothCsipSetCoordinator.GROUP_ID_INVALID)).isEqualTo(
                BluetoothCsipSetCoordinator.GROUP_ID_INVALID);
    }

    @Test
    public void testInCallState_enableHysteresisFix_setAndSaveActiveOnDeviceClick() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
        mSetFlagsRule.enableFlags(Flags.FLAG_AUDIO_SHARING_HYSTERESIS_MODE_FIX);
        Settings.Secure.putInt(mContext.getContentResolver(),
                BLUETOOTH_LE_BROADCAST_PRIMARY_DEVICE_GROUP_ID,
                BluetoothCsipSetCoordinator.GROUP_ID_INVALID);
        mController.displayPreference(mScreen);

        mAudioManager.setMode(AudioManager.MODE_IN_CALL);
        mController.onAudioModeChanged();
        shadowOf(Looper.getMainLooper()).idle();

        BluetoothDevicePreference preference = createBluetoothDevicePreference();
        when(mCachedDevice.getGroupId()).thenReturn(1);
        mController.onDeviceClick(preference);
        verify(mCachedDevice).setActive();
        assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
                BLUETOOTH_LE_BROADCAST_PRIMARY_DEVICE_GROUP_ID,
                BluetoothCsipSetCoordinator.GROUP_ID_INVALID)).isEqualTo(1);
    }

    @Test
Loading