summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndre Eisenbach <eisenbach@google.com>2016-09-22 14:30:32 -0700
committerAjay Panicker <apanicke@google.com>2016-09-23 00:56:57 +0000
commite8d2b5c0f591311c90e428d88b94cd89b88ed342 (patch)
treeb933ba63ef7b65f612b7acfda6760ab3ef72cd40
parent6f54bb49508af469c9a4f6cec0e0ba4818988644 (diff)
downloadandroid_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.java20
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;
}
}