diff --git a/app/src/main/java/eu/darken/capod/common/bluetooth/BleScanner.kt b/app/src/main/java/eu/darken/capod/common/bluetooth/BleScanner.kt index 1d22a02f..bb1a4d3d 100644 --- a/app/src/main/java/eu/darken/capod/common/bluetooth/BleScanner.kt +++ b/app/src/main/java/eu/darken/capod/common/bluetooth/BleScanner.kt @@ -56,7 +56,11 @@ class BleScanner @Inject constructor( lastScanAt = System.currentTimeMillis() "onScanResult(delay=${delay}ms, callbackType=$callbackType, result=$result)" } - val toSend = if (supportsOffloadFiltering || filters.isEmpty() || filters.any { it.matches(result) }) { + val toSend = if ( + supportsOffloadFiltering + || filters.isEmpty() + || filters.any { it.matchesSafe(result) } + ) { listOf(BleScanResult.fromScanResult(result)) } else { log(TAG, VERBOSE) { "Manual filtering: No match for $result" } diff --git a/app/src/main/java/eu/darken/capod/common/bluetooth/BluetoothDeviceExtensions.kt b/app/src/main/java/eu/darken/capod/common/bluetooth/BluetoothDeviceExtensions.kt deleted file mode 100644 index 1bb382b7..00000000 --- a/app/src/main/java/eu/darken/capod/common/bluetooth/BluetoothDeviceExtensions.kt +++ /dev/null @@ -1,8 +0,0 @@ -package eu.darken.capod.common.bluetooth - -import android.bluetooth.BluetoothDevice -import android.os.ParcelUuid - -fun BluetoothDevice.hasFeature(uuid: ParcelUuid): Boolean { - return uuids?.contains(uuid) ?: false -} \ No newline at end of file diff --git a/app/src/main/java/eu/darken/capod/common/bluetooth/BluetoothExtensions.kt b/app/src/main/java/eu/darken/capod/common/bluetooth/BluetoothExtensions.kt new file mode 100644 index 00000000..07cdf103 --- /dev/null +++ b/app/src/main/java/eu/darken/capod/common/bluetooth/BluetoothExtensions.kt @@ -0,0 +1,26 @@ +package eu.darken.capod.common.bluetooth + +import android.bluetooth.BluetoothDevice +import android.bluetooth.le.ScanFilter +import android.bluetooth.le.ScanResult +import android.os.ParcelUuid +import eu.darken.capod.common.debug.logging.asLog +import eu.darken.capod.common.debug.logging.log + +fun BluetoothDevice.hasFeature(uuid: ParcelUuid): Boolean { + return uuids?.contains(uuid) ?: false +} + +/** + * java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.util.SparseArray.get(int)' on a null object reference + * at android.bluetooth.le.ScanRecord.getManufacturerSpecificData(ScanRecord.java:118) + * at android.bluetooth.le.ScanFilter.matches(ScanFilter.java:369) + * ZenFone Max Pro M1 (ZB602KL) (WW) / Max Pro M1 (ZB601KL) (IN) (ZB602KL), Android 9, PKQ1.WW_Phone-16.2017.2009.087-20200826 + * Intel Gemini Lake Chromebook (octopus), Android 9, R99-14469.59.0 release-keys + */ +fun ScanFilter.matchesSafe(scanResult: ScanResult): Boolean = try { + matches(scanResult) +} catch (e: NullPointerException) { + log { "AOSP error: ${e.asLog()}" } + false +} \ No newline at end of file