diff --git a/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java b/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java index 438a3815f9a..a7bae3b863e 100644 --- a/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java +++ b/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java @@ -144,7 +144,7 @@ public class PreviouslyConnectedDevicePreferenceController extends BasePreferenc private void addPreference(int index, Preference preference) { if (preference instanceof BluetoothDevicePreference) { - if (mDevicesList.size() >= index) { + if (index >= 0 && mDevicesList.size() >= index) { mDevicesList.add(index, preference); } else { mDevicesList.add(preference); diff --git a/tests/robotests/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceControllerTest.java index d73471f94ed..420b1a464f0 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceControllerTest.java @@ -66,6 +66,7 @@ public class PreviouslyConnectedDevicePreferenceControllerTest { private static final String FAKE_ADDRESS_2 = "AA:AA:AA:AA:AA:02"; private static final String FAKE_ADDRESS_3 = "AA:AA:AA:AA:AA:03"; private static final String FAKE_ADDRESS_4 = "AA:AA:AA:AA:AA:04"; + private static final String FAKE_ADDRESS_5 = "AA:AA:AA:AA:AA:05"; @Mock private DashboardFragment mDashboardFragment; @@ -88,6 +89,8 @@ public class PreviouslyConnectedDevicePreferenceControllerTest { @Mock private CachedBluetoothDevice mCachedDevice4; @Mock + private CachedBluetoothDevice mCachedDevice5; + @Mock private BluetoothDevice mBluetoothDevice1; @Mock private BluetoothDevice mBluetoothDevice2; @@ -95,6 +98,8 @@ public class PreviouslyConnectedDevicePreferenceControllerTest { private BluetoothDevice mBluetoothDevice3; @Mock private BluetoothDevice mBluetoothDevice4; + @Mock + private BluetoothDevice mBluetoothDevice5; private Context mContext; private PreviouslyConnectedDevicePreferenceController mPreConnectedDeviceController; @@ -121,6 +126,8 @@ public class PreviouslyConnectedDevicePreferenceControllerTest { when(mCachedDevice3.getAddress()).thenReturn(FAKE_ADDRESS_3); when(mCachedDevice4.getDevice()).thenReturn(mBluetoothDevice4); when(mCachedDevice4.getAddress()).thenReturn(FAKE_ADDRESS_4); + when(mCachedDevice5.getDevice()).thenReturn(mBluetoothDevice5); + when(mCachedDevice5.getAddress()).thenReturn(FAKE_ADDRESS_5); final List mMostRecentlyConnectedDevices = new ArrayList<>(); mMostRecentlyConnectedDevices.add(mBluetoothDevice1); @@ -221,6 +228,17 @@ public class PreviouslyConnectedDevicePreferenceControllerTest { assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(4); } + @Test + public void onDeviceAdded_addPreferenceNotExistInRecentlyDevices_noCrash() { + final BluetoothDevicePreference preference = new BluetoothDevicePreference( + mContext, mCachedDevice5, true, BluetoothDevicePreference.SortType.TYPE_NO_SORT); + + mPreConnectedDeviceController.onDeviceAdded(preference); + + // 1 BluetoothDevicePreference and 1 see all preference + assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(2); + } + @Test public void onDeviceRemoved_removeLastDevice_showSeeAllPreference() { final BluetoothDevicePreference preference1 = new BluetoothDevicePreference(