diff --git a/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java index 466d60e1d0b..dab4f231e35 100644 --- a/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java +++ b/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java @@ -24,6 +24,7 @@ import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; import com.android.settings.connecteddevice.DevicePreferenceCallback; +import com.android.settings.connecteddevice.PreviouslyConnectedDeviceDashboardFragment; import com.android.settings.dashboard.DashboardFragment; import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager; @@ -42,13 +43,15 @@ public class SavedBluetoothDeviceUpdater extends BluetoothDeviceUpdater private static final String PREF_KEY = "saved_bt"; + private final boolean mDisplayConnected; + @VisibleForTesting BluetoothAdapter mBluetoothAdapter; public SavedBluetoothDeviceUpdater(Context context, DashboardFragment fragment, DevicePreferenceCallback devicePreferenceCallback) { super(context, fragment, devicePreferenceCallback); - + mDisplayConnected = (fragment instanceof PreviouslyConnectedDeviceDashboardFragment); mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); } @@ -101,7 +104,8 @@ public class SavedBluetoothDeviceUpdater extends BluetoothDeviceUpdater ", is connected : " + device.isConnected() + ", is profile connected : " + cachedDevice.isConnected()); } - return device.getBondState() == BluetoothDevice.BOND_BONDED && !device.isConnected(); + return device.getBondState() == BluetoothDevice.BOND_BONDED + && (mDisplayConnected || !device.isConnected()); } @Override @@ -109,6 +113,9 @@ public class SavedBluetoothDeviceUpdater extends BluetoothDeviceUpdater mMetricsFeatureProvider.logClickedPreference(preference, mFragment.getMetricsCategory()); final CachedBluetoothDevice device = ((BluetoothDevicePreference) preference) .getBluetoothDevice(); + if (device.isConnected()) { + return device.setActive(); + } device.connect(); return true; } diff --git a/tests/robotests/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdaterTest.java index da117811233..20cc59deca2 100644 --- a/tests/robotests/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdaterTest.java +++ b/tests/robotests/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdaterTest.java @@ -144,6 +144,15 @@ public class SavedBluetoothDeviceUpdaterTest { verify(mCachedBluetoothDevice).connect(); } + @Test + public void onClick_Preference_connected_setActive() { + when(mCachedBluetoothDevice.isConnected()).thenReturn(true); + + mBluetoothDeviceUpdater.onPreferenceClick(mPreference); + + verify(mCachedBluetoothDevice).setActive(); + } + @Test public void forceUpdate_findCachedBluetoothDeviceIsMatched_addPreference() { final List bluetoothDevices = new ArrayList<>();