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

Commit c041c7a3 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Support associating with an already-paired device" into oc-dev

parents 796b5107 0c4a9266
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -58,7 +58,7 @@ public class BluetoothDeviceFilterUtils {

    static boolean matchesAddress(String deviceAddress, BluetoothDevice device) {
        final boolean result = deviceAddress == null
                || (device == null || !deviceAddress.equals(device.getAddress()));
                || (device != null && deviceAddress.equals(device.getAddress()));
        if (DEBUG) debugLogMatchResult(result, device, deviceAddress);
        return result;
    }
+13 −1
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Stream;

@@ -101,7 +102,7 @@ public class CollectionUtils {
    /**
     * Returns the given list, or an immutable empty list if the provided list is null
     *
     * This can be used to guaranty null-safety without paying the price of extra allocations
     * This can be used to guarantee null-safety without paying the price of extra allocations
     *
     * @see Collections#emptyList
     */
@@ -109,6 +110,17 @@ public class CollectionUtils {
        return cur == null ? Collections.emptyList() : cur;
    }

    /**
     * Returns the given set, or an immutable empty set if the provided set is null
     *
     * This can be used to guarantee null-safety without paying the price of extra allocations
     *
     * @see Collections#emptySet
     */
    public static @NonNull <T> Set<T> emptyIfNull(@Nullable Set<T> cur) {
        return cur == null ? Collections.emptySet() : cur;
    }

    /**
     * Returns the size of the given list, or 0 if the list is null
     */
+24 −4
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import static android.companion.BluetoothDeviceFilterUtils.getDeviceDisplayNameI
import static android.companion.BluetoothDeviceFilterUtils.getDeviceMacAddress;

import static com.android.internal.util.ArrayUtils.isEmpty;
import static com.android.internal.util.CollectionUtils.emptyIfNull;
import static com.android.internal.util.CollectionUtils.size;

import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -154,6 +156,25 @@ public class DeviceDiscoveryService extends Service {
            onReadyToShowUI();
        }

        // If filtering to get single device by mac address, also search in the set of already
        // bonded devices to allow linking those directly
        String singleMacAddressFilter = null;
        if (mRequest.isSingleDevice()) {
            int numFilters = size(mBluetoothFilters);
            for (int i = 0; i < numFilters; i++) {
                BluetoothDeviceFilter filter = mBluetoothFilters.get(i);
                if (!TextUtils.isEmpty(filter.getAddress())) {
                    singleMacAddressFilter = filter.getAddress();
                    break;
                }
            }
        }
        if (singleMacAddressFilter != null) {
            for (BluetoothDevice dev : emptyIfNull(mBluetoothAdapter.getBondedDevices())) {
                onDeviceFound(DeviceFilterPair.findMatch(dev, mBluetoothFilters));
            }
        }

        if (shouldScan(mBluetoothFilters)) {
            final IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
@@ -211,6 +232,8 @@ public class DeviceDiscoveryService extends Service {
    }

    private void onDeviceFound(@Nullable DeviceFilterPair device) {
        if (device == null) return;

        if (mDevicesFound.contains(device)) {
            return;
        }
@@ -444,12 +467,9 @@ public class DeviceDiscoveryService extends Service {
                }

                for (int i = 0; i < scanResults.size(); i++) {
                    DeviceFilterPair<android.net.wifi.ScanResult> deviceFilterPair =
                            DeviceFilterPair.findMatch(scanResults.get(i), mWifiFilters);
                    if (deviceFilterPair != null) onDeviceFound(deviceFilterPair);
                    onDeviceFound(DeviceFilterPair.findMatch(scanResults.get(i), mWifiFilters));
                }
            }

        }
    }
}