
org.robolectric.shadows.ShadowBluetoothAdapter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of framework Show documentation
Show all versions of framework Show documentation
An alternative Android testing framework.
The newest version!
package org.robolectric.shadows;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothAdapter.LeScanCallback;
import android.bluetooth.BluetoothDevice;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import static android.os.Build.VERSION_CODES;
import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR2;
@SuppressWarnings({"UnusedDeclaration"})
@Implements(BluetoothAdapter.class)
public class ShadowBluetoothAdapter {
private static final int ADDRESS_LENGTH = 17;
private Set bondedDevices = new HashSet();
private Set leScanCallbacks = new HashSet();
private boolean isDiscovering;
private String address;
private boolean enabled;
private int state;
@Implementation
public static BluetoothAdapter getDefaultAdapter() {
return (BluetoothAdapter) ShadowApplication.getInstance().getBluetoothAdapter();
}
@Implementation
public Set getBondedDevices() {
return Collections.unmodifiableSet(bondedDevices);
}
public void setBondedDevices(Set bluetoothDevices) {
bondedDevices = bluetoothDevices;
}
@Implementation
public boolean startDiscovery() {
isDiscovering = true;
return true;
}
@Implementation
public boolean cancelDiscovery() {
isDiscovering = false;
return true;
}
@Implementation(minSdk = JELLY_BEAN_MR2)
public boolean startLeScan(LeScanCallback callback) {
return startLeScan(null, callback);
}
@Implementation(minSdk = JELLY_BEAN_MR2)
public boolean startLeScan(UUID[] serviceUuids, LeScanCallback callback) {
// Ignoring the serviceUuids param for now.
leScanCallbacks.add(callback);
return true;
}
@Implementation(minSdk = JELLY_BEAN_MR2)
public void stopLeScan(LeScanCallback callback) {
leScanCallbacks.remove(callback);
}
public Set getLeScanCallbacks() {
return Collections.unmodifiableSet(leScanCallbacks);
}
public LeScanCallback getSingleLeScanCallback() {
if (leScanCallbacks.size() != 1) {
throw new IllegalStateException("There are " + leScanCallbacks.size() + " callbacks");
}
return leScanCallbacks.iterator().next();
}
@Implementation
public boolean isDiscovering() {
return isDiscovering;
}
@Implementation
public boolean isEnabled() {
return enabled;
}
@Implementation
public boolean enable() {
enabled = true;
return true;
}
@Implementation
public boolean disable() {
enabled = false;
return true;
}
@Implementation
public String getAddress() {
return this.address;
}
@Implementation
public int getState() {
return state;
}
/**
* Validate a Bluetooth address, such as "00:43:A8:23:10:F0"
* Alphabetic characters must be uppercase to be valid.
*
* @param address
* Bluetooth address as string
* @return true if the address is valid, false otherwise
*/
@Implementation
public static boolean checkBluetoothAddress(String address) {
if (address == null || address.length() != ADDRESS_LENGTH) {
return false;
}
for (int i = 0; i < ADDRESS_LENGTH; i++) {
char c = address.charAt(i);
switch (i % 3) {
case 0:
case 1:
if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F')) {
// hex character, OK
break;
}
return false;
case 2:
if (c == ':') {
break; // OK
}
return false;
}
}
return true;
}
public void setAddress(String address) {
this.address = address;
}
public void setState(int state) {
this.state = state;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy