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

This commit is contained in:
TreeHugger Robot
2017-06-14 00:03:49 +00:00
committed by Android (Google) Code Review
3 changed files with 38 additions and 6 deletions

View File

@@ -58,7 +58,7 @@ public class BluetoothDeviceFilterUtils {
static boolean matchesAddress(String deviceAddress, BluetoothDevice device) { static boolean matchesAddress(String deviceAddress, BluetoothDevice device) {
final boolean result = deviceAddress == null final boolean result = deviceAddress == null
|| (device == null || !deviceAddress.equals(device.getAddress())); || (device != null && deviceAddress.equals(device.getAddress()));
if (DEBUG) debugLogMatchResult(result, device, deviceAddress); if (DEBUG) debugLogMatchResult(result, device, deviceAddress);
return result; return result;
} }

View File

@@ -25,6 +25,7 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Stream; 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 * 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 * @see Collections#emptyList
*/ */
@@ -109,6 +110,17 @@ public class CollectionUtils {
return cur == null ? Collections.emptyList() : cur; 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 * Returns the size of the given list, or 0 if the list is null
*/ */

View File

@@ -20,6 +20,8 @@ import static android.companion.BluetoothDeviceFilterUtils.getDeviceDisplayNameI
import static android.companion.BluetoothDeviceFilterUtils.getDeviceMacAddress; import static android.companion.BluetoothDeviceFilterUtils.getDeviceMacAddress;
import static com.android.internal.util.ArrayUtils.isEmpty; 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.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
@@ -154,6 +156,25 @@ public class DeviceDiscoveryService extends Service {
onReadyToShowUI(); 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)) { if (shouldScan(mBluetoothFilters)) {
final IntentFilter intentFilter = new IntentFilter(); final IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND); intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
@@ -211,6 +232,8 @@ public class DeviceDiscoveryService extends Service {
} }
private void onDeviceFound(@Nullable DeviceFilterPair device) { private void onDeviceFound(@Nullable DeviceFilterPair device) {
if (device == null) return;
if (mDevicesFound.contains(device)) { if (mDevicesFound.contains(device)) {
return; return;
} }
@@ -444,12 +467,9 @@ public class DeviceDiscoveryService extends Service {
} }
for (int i = 0; i < scanResults.size(); i++) { for (int i = 0; i < scanResults.size(); i++) {
DeviceFilterPair<android.net.wifi.ScanResult> deviceFilterPair = onDeviceFound(DeviceFilterPair.findMatch(scanResults.get(i), mWifiFilters));
DeviceFilterPair.findMatch(scanResults.get(i), mWifiFilters); }
if (deviceFilterPair != null) onDeviceFound(deviceFilterPair); }
}
}
} }
} }
} }