From e1d320d058efa576a2f382aaee2129611b160b28 Mon Sep 17 00:00:00 2001 From: christianrowlands Date: Mon, 13 Nov 2023 13:56:19 -0500 Subject: [PATCH] Handle "unset" 127 dB Bluetooth signal strength values --- .../fragments/model/BluetoothViewModel.java | 9 +++++++++ .../networksurvey/services/SurveyRecordProcessor.java | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/networksurvey/src/main/java/com/craxiom/networksurvey/fragments/model/BluetoothViewModel.java b/networksurvey/src/main/java/com/craxiom/networksurvey/fragments/model/BluetoothViewModel.java index bc3c1461..3dd110f8 100644 --- a/networksurvey/src/main/java/com/craxiom/networksurvey/fragments/model/BluetoothViewModel.java +++ b/networksurvey/src/main/java/com/craxiom/networksurvey/fragments/model/BluetoothViewModel.java @@ -115,6 +115,15 @@ public int compare(BluetoothRecord record1, BluetoothRecord record2) default: // Signal Strength // Signal Strength is index 0 in the array, but we also use it as the default case // Invert the sort so that the strongest records are at the top (descending) + if (!record1.getData().hasSignalStrength() && !record2.getData().hasSignalStrength()) + { + return 0; + } + + if (!record1.getData().hasSignalStrength()) return -1; + + if (!record2.getData().hasSignalStrength()) return 1; + return -1 * Float.compare(record1.getData().getSignalStrength().getValue(), record2.getData().getSignalStrength().getValue()); } } diff --git a/networksurvey/src/main/java/com/craxiom/networksurvey/services/SurveyRecordProcessor.java b/networksurvey/src/main/java/com/craxiom/networksurvey/services/SurveyRecordProcessor.java index f7a44d3a..2f36f316 100644 --- a/networksurvey/src/main/java/com/craxiom/networksurvey/services/SurveyRecordProcessor.java +++ b/networksurvey/src/main/java/com/craxiom/networksurvey/services/SurveyRecordProcessor.java @@ -1479,7 +1479,10 @@ private BluetoothRecord generateBluetoothSurveyRecord(BluetoothDevice device, in dataBuilder.setRecordNumber(bluetoothRecordNumber++); dataBuilder.setSourceAddress(sourceAddress); - dataBuilder.setSignalStrength(FloatValue.newBuilder().setValue(rssi).build()); + if (txPowerLevel == UNSET_TX_POWER_LEVEL) + { + dataBuilder.setSignalStrength(FloatValue.newBuilder().setValue(rssi).build()); + } // The TX Power seems to never be set (a value of 127 indicates unset). However, I am including // the code here in case it starts being populated in a future version of Android, or if a specific phone model