From e8d2b5c0f591311c90e428d88b94cd89b88ed342 Mon Sep 17 00:00:00 2001 From: Andre Eisenbach Date: Thu, 22 Sep 2016 14:30:32 -0700 Subject: [PATCH] Limit number of stored device properties Bug: 31651689 Change-Id: I6e31b4f89d6ebf9e6a0c6df5ea4e1a7be61a125a --- .../android/bluetooth/btservice/RemoteDevices.java | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/com/android/bluetooth/btservice/RemoteDevices.java b/src/com/android/bluetooth/btservice/RemoteDevices.java index 9eaf7e5d..90480366 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 mDevices; + private Queue mDeviceQueue; RemoteDevices(AdapterService service) { mAdapter = BluetoothAdapter.getDefaultAdapter(); mAdapterService = service; mSdpTracker = new ArrayList(); mDevices = new HashMap(); + mDeviceQueue = new LinkedList(); } @@ -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; } } -- 2.11.0