Fix bluetooth settings force close
This CL include following change: - Add null check of cacedBluetoothDevice, cachedBluetooth could be null if the input BluetoothDevice can't found in CachedBluetoothDeviceManager. - Move addPreference() and removePreference() to update() method, because update() will be called to update UI when recevice Bluetooth device change event. - Add test case to test CachedBluetoothDevice null check. Bug: 149068434 Test: make -j42 RunSettingsRoboTests Change-Id: I90016bf1175925821b0d9b634c62cf796289a734
This commit is contained in:
@@ -20,6 +20,7 @@ import android.bluetooth.BluetoothDevice;
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.Preference;
|
||||
|
||||
import com.android.settings.connecteddevice.DevicePreferenceCallback;
|
||||
@@ -38,24 +39,25 @@ public class SavedBluetoothDeviceUpdater extends BluetoothDeviceUpdater
|
||||
|
||||
private static final String PREF_KEY = "saved_bt";
|
||||
|
||||
@VisibleForTesting
|
||||
BluetoothAdapter mBluetoothAdapter;
|
||||
|
||||
public SavedBluetoothDeviceUpdater(Context context, DashboardFragment fragment,
|
||||
DevicePreferenceCallback devicePreferenceCallback) {
|
||||
super(context, fragment, devicePreferenceCallback);
|
||||
|
||||
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceUpdate() {
|
||||
if (BluetoothAdapter.getDefaultAdapter().isEnabled()) {
|
||||
if (mBluetoothAdapter.isEnabled()) {
|
||||
final CachedBluetoothDeviceManager cachedManager =
|
||||
mLocalManager.getCachedDeviceManager();
|
||||
for (BluetoothDevice device
|
||||
: BluetoothAdapter.getDefaultAdapter().getMostRecentlyConnectedDevices()) {
|
||||
for (BluetoothDevice device : mBluetoothAdapter.getMostRecentlyConnectedDevices()) {
|
||||
final CachedBluetoothDevice cachedDevice = cachedManager.findDevice(device);
|
||||
if (isFilterMatched(cachedDevice)) {
|
||||
// Add the preference if it is new one
|
||||
addPreference(cachedDevice, BluetoothDevicePreference.SortType.TYPE_NO_SORT);
|
||||
} else {
|
||||
removePreference(cachedDevice);
|
||||
if (cachedDevice != null) {
|
||||
update(cachedDevice);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -63,6 +65,16 @@ public class SavedBluetoothDeviceUpdater extends BluetoothDeviceUpdater
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(CachedBluetoothDevice cachedDevice) {
|
||||
if (isFilterMatched(cachedDevice)) {
|
||||
// Add the preference if it is new one
|
||||
addPreference(cachedDevice, BluetoothDevicePreference.SortType.TYPE_NO_SORT);
|
||||
} else {
|
||||
removePreference(cachedDevice);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFilterMatched(CachedBluetoothDevice cachedDevice) {
|
||||
final BluetoothDevice device = cachedDevice.getDevice();
|
||||
|
Reference in New Issue
Block a user