From f42a0a27e3b67602f63ab138e78fdefde81a40b6 Mon Sep 17 00:00:00 2001 From: PauloftheWest Date: Mon, 11 Aug 2014 06:18:32 -0700 Subject: [PATCH] Refreshing Bluetooth devices will clear all available devices. Bug: 16851309 Change-Id: I9ffb1ddaeb8e785be145ea79467fc361a022d8d7 --- src/com/android/settings/bluetooth/BluetoothSettings.java | 4 +++- .../settings/bluetooth/CachedBluetoothDeviceManager.java | 8 +++++++- .../settings/bluetooth/DeviceListPreferenceFragment.java | 6 ++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java index 4b278ac28a0..bbd86a1ce8a 100755 --- a/src/com/android/settings/bluetooth/BluetoothSettings.java +++ b/src/com/android/settings/bluetooth/BluetoothSettings.java @@ -249,6 +249,8 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem if (!mAvailableDevicesCategoryIsPresent) { getPreferenceScreen().addPreference(mAvailableDevicesCategory); } + mLocalManager.getCachedDeviceManager().clearCachedDevices(); + mAvailableDevicesCategory.removeAll(); mLocalAdapter.startScanning(true); } @@ -405,7 +407,7 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem LayoutInflater inflater = getActivity().getLayoutInflater(); mSettingsDialogView = inflater.inflate(R.layout.bluetooth_device_picker, null); profileFrag = (DeviceProfilesSettings)activity.getFragmentManager() - .findFragmentById(R.id.bluetooth_fragment_settings); + .findFragmentById(R.id.bluetooth_fragment_settings); } final View dialogLayout = mSettingsDialogView; diff --git a/src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java b/src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java index ff282cc67c9..0b53b1a1e2f 100755 --- a/src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java +++ b/src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java @@ -86,7 +86,9 @@ final class CachedBluetoothDeviceManager { BluetoothDevice device) { CachedBluetoothDevice newDevice = new CachedBluetoothDevice(mContext, adapter, profileManager, device); - mCachedDevices.add(newDevice); + synchronized (mCachedDevices) { + mCachedDevices.add(newDevice); + } return newDevice; } @@ -110,6 +112,10 @@ final class CachedBluetoothDeviceManager { return device.getAddress(); } + public synchronized void clearCachedDevices() { + mCachedDevices.clear(); + } + public synchronized void onScanningStateChanged(boolean started) { if (!started) return; diff --git a/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java b/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java index f482ecdcad1..e7208b57636 100644 --- a/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java +++ b/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java @@ -167,6 +167,12 @@ public abstract class DeviceListPreferenceFragment extends } void createDevicePreference(CachedBluetoothDevice cachedDevice) { + if (mDeviceListGroup == null) { + Log.w(TAG, "Trying to create a device preference before the list group/category " + + "exists!"); + return; + } + BluetoothDevicePreference preference = new BluetoothDevicePreference( getActivity(), cachedDevice);