diff options
author | Andre Eisenbach <eisenbach@google.com> | 2016-09-24 00:22:41 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-09-24 00:22:41 +0000 |
commit | 35ba33f70c37ed4d9220ebe1caf716b04edd51d7 (patch) | |
tree | ca2a8a3fe205e3777bc6a39d9b395d033be73ebd | |
parent | e990a9b90120c3e41f3ff254e62eecb45d753d30 (diff) | |
parent | e8d2b5c0f591311c90e428d88b94cd89b88ed342 (diff) | |
download | android_packages_apps_Bluetooth-35ba33f70c37ed4d9220ebe1caf716b04edd51d7.tar.gz android_packages_apps_Bluetooth-35ba33f70c37ed4d9220ebe1caf716b04edd51d7.tar.bz2 android_packages_apps_Bluetooth-35ba33f70c37ed4d9220ebe1caf716b04edd51d7.zip |
Limit number of stored device properties
am: e8d2b5c0f5
Change-Id: I02e2934b8afc9018ca0036e369a4569f2528f8a9
-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; } } |