From 8f7092a15ef49c22ff8c5566fad7fcf89101e02a Mon Sep 17 00:00:00 2001 From: Ash_Chen Date: Fri, 17 Aug 2018 22:31:41 +0800 Subject: [PATCH] Show bonded devices in "Pair new device"(2/2) Some users forgot they had paired devices and couldn't see their BT device when they search device in "Pair new device". (b/80382940, b/80133137). Need to change the behavior to let paired devices can be shown on "Available devices". Bug: 111738593 Test: Bluetooth Pairing Test Change-Id: Ib499785abaa8e4efc1875be113ac87bdbe0c89ba --- .../bluetooth/BluetoothPairingDetail.java | 13 ++++++- .../DeviceListPreferenceFragment.java | 2 ++ .../bluetooth/BluetoothPairingDetailTest.java | 36 ++++++++++++++----- 3 files changed, 41 insertions(+), 10 deletions(-) diff --git a/src/com/android/settings/bluetooth/BluetoothPairingDetail.java b/src/com/android/settings/bluetooth/BluetoothPairingDetail.java index 905327d54a8..736651a2b36 100644 --- a/src/com/android/settings/bluetooth/BluetoothPairingDetail.java +++ b/src/com/android/settings/bluetooth/BluetoothPairingDetail.java @@ -152,7 +152,7 @@ public class BluetoothPairingDetail extends DeviceListPreferenceFragment impleme addDeviceCategory(mAvailableDevicesCategory, R.string.bluetooth_preference_found_media_devices, - BluetoothDeviceFilter.UNBONDED_DEVICE_FILTER, mInitialScanStarted); + BluetoothDeviceFilter.ALL_FILTER, mInitialScanStarted); updateFooterPreference(mFooterPreference); mAlwaysDiscoverable.start(); enableScanning(); @@ -190,6 +190,17 @@ public class BluetoothPairingDetail extends DeviceListPreferenceFragment impleme } } + @Override + public void onConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state) { + if (mSelectedDevice != null) { + BluetoothDevice device = cachedDevice.getDevice(); + if (device != null && mSelectedDevice.equals(device) + && state == BluetoothAdapter.STATE_CONNECTED) { + finish(); + } + } + } + @Override public int getHelpResource() { return R.string.help_url_bluetooth; diff --git a/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java b/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java index 46d649ab405..407c2a619d4 100644 --- a/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java +++ b/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java @@ -192,6 +192,8 @@ public abstract class DeviceListPreferenceFragment extends preference = new BluetoothDevicePreference(getPrefContext(), cachedDevice, mShowDevicesWithoutNames); preference.setKey(key); + //Set hideSecondTarget is true if it's bonded device. + preference.hideSecondTarget(true); mDeviceListGroup.addPreference(preference); } else { // Tell the preference it is being re-used in case there is new info in the diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDetailTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDetailTest.java index 649184350b3..a56cf7fdb5a 100644 --- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDetailTest.java +++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDetailTest.java @@ -28,6 +28,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothDevice; import android.content.Context; import android.content.res.Resources; @@ -35,6 +36,7 @@ import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.ShadowBluetoothAdapter; import com.android.settingslib.bluetooth.BluetoothDeviceFilter; +import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.widget.FooterPreference; @@ -53,6 +55,7 @@ import androidx.preference.PreferenceGroup; @RunWith(SettingsRobolectricTestRunner.class) @Config(shadows = {ShadowBluetoothAdapter.class}) public class BluetoothPairingDetailTest { + private static final String TEST_DEVICE_ADDRESS = "00:A1:A1:A1:A1:A1"; @Mock private Resources mResource; @@ -60,12 +63,15 @@ public class BluetoothPairingDetailTest { private LocalBluetoothManager mLocalManager; @Mock private PreferenceGroup mPreferenceGroup; + @Mock + private CachedBluetoothDevice mCachedBluetoothDevice; private BluetoothPairingDetail mFragment; private Context mContext; private BluetoothProgressCategory mAvailableDevicesCategory; private FooterPreference mFooterPreference; private BluetoothAdapter mBluetoothAdapter; private ShadowBluetoothAdapter mShadowBluetoothAdapter; + private BluetoothDevice mBluetoothDevice; @Before public void setUp() { @@ -80,6 +86,7 @@ public class BluetoothPairingDetailTest { mFooterPreference = new FooterPreference(mContext); mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter()); + mBluetoothDevice = mBluetoothAdapter.getRemoteDevice(TEST_DEVICE_ADDRESS); mFragment.mBluetoothAdapter = mBluetoothAdapter; mFragment.mLocalManager = mLocalManager; @@ -88,7 +95,7 @@ public class BluetoothPairingDetailTest { } @Test - public void testInitPreferencesFromPreferenceScreen_findPreferences() { + public void initPreferencesFromPreferenceScreen_findPreferences() { doReturn(mAvailableDevicesCategory).when(mFragment) .findPreference(BluetoothPairingDetail.KEY_AVAIL_DEVICES); doReturn(mFooterPreference).when(mFragment) @@ -101,7 +108,7 @@ public class BluetoothPairingDetailTest { } @Test - public void testStartScanning_startScanAndRemoveDevices() { + public void startScanning_startScanAndRemoveDevices() { mFragment.mAvailableDevicesCategory = mAvailableDevicesCategory; mFragment.mDeviceListGroup = mAvailableDevicesCategory; @@ -112,7 +119,7 @@ public class BluetoothPairingDetailTest { } @Test - public void testUpdateContent_stateOn_addDevices() { + public void updateContent_stateOn_addDevices() { mFragment.mAvailableDevicesCategory = mAvailableDevicesCategory; mFragment.mFooterPreference = mFooterPreference; doNothing().when(mFragment).addDeviceCategory(any(), anyInt(), any(), anyBoolean()); @@ -121,20 +128,20 @@ public class BluetoothPairingDetailTest { verify(mFragment).addDeviceCategory(mAvailableDevicesCategory, R.string.bluetooth_preference_found_media_devices, - BluetoothDeviceFilter.UNBONDED_DEVICE_FILTER, false); + BluetoothDeviceFilter.ALL_FILTER, false); assertThat(mBluetoothAdapter.getScanMode()) .isEqualTo(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE); } @Test - public void testUpdateContent_stateOff_finish() { + public void updateContent_stateOff_finish() { mFragment.updateContent(BluetoothAdapter.STATE_OFF); verify(mFragment).finish(); } @Test - public void testUpdateBluetooth_bluetoothOff_turnOnBluetooth() { + public void updateBluetooth_bluetoothOff_turnOnBluetooth() { mShadowBluetoothAdapter.setEnabled(false); mFragment.updateBluetooth(); @@ -143,7 +150,7 @@ public class BluetoothPairingDetailTest { } @Test - public void testUpdateBluetooth_bluetoothOn_updateState() { + public void updateBluetooth_bluetoothOn_updateState() { mShadowBluetoothAdapter.setEnabled(true); doNothing().when(mFragment).updateContent(anyInt()); @@ -153,7 +160,7 @@ public class BluetoothPairingDetailTest { } @Test - public void testOnScanningStateChanged_restartScanAfterInitialScanning() { + public void onScanningStateChanged_restartScanAfterInitialScanning() { mFragment.mAvailableDevicesCategory = mAvailableDevicesCategory; mFragment.mFooterPreference = mFooterPreference; mFragment.mDeviceListGroup = mAvailableDevicesCategory; @@ -208,4 +215,15 @@ public class BluetoothPairingDetailTest { verify(mFragment).showBluetoothTurnedOnToast(); } -} + + @Test + public void onConnectionStateChanged_connected_finish() { + mFragment.mSelectedDevice = mBluetoothDevice; + doReturn(mBluetoothDevice).when(mCachedBluetoothDevice).getDevice(); + + mFragment.onConnectionStateChanged(mCachedBluetoothDevice, + BluetoothAdapter.STATE_CONNECTED); + + verify(mFragment).finish(); + } +} \ No newline at end of file