diff options
author | Andre Eisenbach <eisenbach@google.com> | 2016-09-22 14:30:32 -0700 |
---|---|---|
committer | Ajay Panicker <apanicke@google.com> | 2016-09-23 00:56:57 +0000 |
commit | e8d2b5c0f591311c90e428d88b94cd89b88ed342 (patch) | |
tree | b933ba63ef7b65f612b7acfda6760ab3ef72cd40 | |
parent | 6f54bb49508af469c9a4f6cec0e0ba4818988644 (diff) | |
download | android_packages_apps_Bluetooth-e8d2b5c0f591311c90e428d88b94cd89b88ed342.tar.gz android_packages_apps_Bluetooth-e8d2b5c0f591311c90e428d88b94cd89b88ed342.tar.bz2 android_packages_apps_Bluetooth-e8d2b5c0f591311c90e428d88b94cd89b88ed342.zip |
Limit number of stored device properties
Bug: 31651689
Change-Id: I6e31b4f89d6ebf9e6a0c6df5ea4e1a7be61a125a
-rw-r--r-- | src/com/android/bluetooth/btservice/RemoteDevices.java | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/com/android/bluetooth/btservice/RemoteDevices.java b/src/com/android/bluetooth/btservice/RemoteDevices.java index 9eaf7e5d2..904803664 100644 --- a/src/com/android/bluetooth/btservice/RemoteDevices.java +++ b/src/com/android/bluetooth/btservice/RemoteDevices.java @@ -30,12 +30,15 @@ import com.android.bluetooth.Utils; import java.util.concurrent.atomic.AtomicInteger; import java.util.ArrayList; import java.util.HashMap; - +import java.util.LinkedList; +import java.util.Queue; final class RemoteDevices { private static final boolean DBG = false; private static final String TAG = "BluetoothRemoteDevices"; + // Maximum number of device properties to remember + private static final int MAX_DEVICE_QUEUE_SIZE = 200; private static BluetoothAdapter mAdapter; private static AdapterService mAdapterService; @@ -46,12 +49,14 @@ final class RemoteDevices { private static final int MESSAGE_UUID_INTENT = 1; private HashMap<String, DeviceProperties> mDevices; + private Queue<String> mDeviceQueue; RemoteDevices(AdapterService service) { mAdapter = BluetoothAdapter.getDefaultAdapter(); mAdapterService = service; mSdpTracker = new ArrayList<BluetoothDevice>(); mDevices = new HashMap<String, DeviceProperties>(); + mDeviceQueue = new LinkedList<String>(); } @@ -61,6 +66,9 @@ final class RemoteDevices { if (mDevices != null) mDevices.clear(); + + if (mDeviceQueue != null) + mDeviceQueue.clear(); } @Override @@ -86,7 +94,15 @@ final class RemoteDevices { DeviceProperties prop = new DeviceProperties(); prop.mDevice = mAdapter.getRemoteDevice(Utils.getAddressStringFromByte(address)); prop.mAddress = address; - mDevices.put(Utils.getAddressStringFromByte(address), prop); + String key = Utils.getAddressStringFromByte(address); + DeviceProperties pv = mDevices.put(key, prop); + if (pv == null) { + mDeviceQueue.offer(key); + if (mDeviceQueue.size() > MAX_DEVICE_QUEUE_SIZE) { + String deleteKey = mDeviceQueue.poll(); + mDevices.remove(deleteKey); + } + } return prop; } } |