Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit df2ee5d0 authored by Andre Eisenbach's avatar Andre Eisenbach Committed by Ajay Panicker
Browse files

Limit number of stored device properties

Bug: 31651689
Change-Id: I6e31b4f89d6ebf9e6a0c6df5ea4e1a7be61a125a
(cherry picked from commit 1b569971)
parent 5d200aa1
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -29,12 +29,15 @@ import com.android.bluetooth.Utils;

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;
@@ -45,12 +48,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>();
    }


@@ -60,6 +65,9 @@ final class RemoteDevices {

        if (mDevices != null)
            mDevices.clear();

        if (mDeviceQueue != null)
            mDeviceQueue.clear();
    }

    @Override
@@ -85,7 +93,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;
        }
    }