From be5140048aa77daee45eea488fe4f599e8fe4cff Mon Sep 17 00:00:00 2001 From: hughchen Date: Tue, 14 Apr 2020 11:50:55 +0800 Subject: [PATCH] Return empty array when BluetoothAdapter is null BluetoothAdapter will be null in some platform device, because they don't have bluetooth feature. This CL add null check to avoid null point exception on non-bluetooth feature platform device. Bug: 152647633 Test: make -j42 RunSettingsLibRoboTests Change-Id: Iba7f41796bd22163ab55a7f9ff4f44df6513754e --- .../settingslib/media/LocalMediaManager.java | 5 ++++ .../media/LocalMediaManagerTest.java | 24 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java index 3024b842c2bef..a62d76f732da0 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java @@ -401,6 +401,11 @@ public class LocalMediaManager implements BluetoothCallback { } private List buildDisconnectedBluetoothDevice() { + if (mBluetoothAdapter == null) { + Log.w(TAG, "buildDisconnectedBluetoothDevice() BluetoothAdapter is null"); + return new ArrayList<>(); + } + final List bluetoothDevices = mBluetoothAdapter.getMostRecentlyConnectedDevices(); final CachedBluetoothDeviceManager cachedDeviceManager = diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java index 7ddd64c158765..206c8590a9525 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java @@ -691,4 +691,28 @@ public class LocalMediaManagerTest { assertThat(mLocalMediaManager.mMediaDevices).hasSize(7); verify(mCallback).onDeviceListUpdate(any()); } + + @Test + public void onDeviceListAdded_bluetoothAdapterIsNull_noDisconnectedDeviceAdded() { + final List devices = new ArrayList<>(); + final MediaDevice device1 = mock(MediaDevice.class); + final MediaDevice device2 = mock(MediaDevice.class); + final MediaDevice device3 = mock(MediaDevice.class); + mLocalMediaManager.mPhoneDevice = mock(PhoneMediaDevice.class); + devices.add(device1); + devices.add(device2); + mLocalMediaManager.mMediaDevices.add(device3); + mLocalMediaManager.mMediaDevices.add(mLocalMediaManager.mPhoneDevice); + + mShadowBluetoothAdapter = null; + + when(mLocalMediaManager.mPhoneDevice.getId()).thenReturn("test_phone_id"); + + assertThat(mLocalMediaManager.mMediaDevices).hasSize(2); + mLocalMediaManager.registerCallback(mCallback); + mLocalMediaManager.mMediaDeviceCallback.onDeviceListAdded(devices); + + assertThat(mLocalMediaManager.mMediaDevices).hasSize(2); + verify(mCallback).onDeviceListUpdate(any()); + } }