diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryActivity.java
index 2ba857dab..056cdd6c4 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryActivity.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryActivity.java
@@ -198,6 +198,8 @@ public class DiscoveryActivity extends AbstractGBActivity implements AdapterView
}
}
};
+ int CallbackType = android.bluetooth.le.ScanSettings.CALLBACK_TYPE_ALL_MATCHES;
+ int MatchMode = android.bluetooth.le.ScanSettings.MATCH_MODE_STICKY;
public void logMessageContent(byte[] value) {
if (value != null) {
@@ -654,17 +656,17 @@ public class DiscoveryActivity extends AbstractGBActivity implements AdapterView
private ScanSettings getScanSettings() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
return new ScanSettings.Builder()
- .setCallbackType(android.bluetooth.le.ScanSettings.CALLBACK_TYPE_ALL_MATCHES)
+ .setCallbackType(CallbackType)
.setScanMode(android.bluetooth.le.ScanSettings.SCAN_MODE_LOW_LATENCY)
- .setMatchMode(android.bluetooth.le.ScanSettings.MATCH_MODE_AGGRESSIVE)
+ .setMatchMode(MatchMode)
.setPhy(android.bluetooth.le.ScanSettings.PHY_LE_ALL_SUPPORTED)
.setNumOfMatches(android.bluetooth.le.ScanSettings.MATCH_NUM_ONE_ADVERTISEMENT)
.build();
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return new ScanSettings.Builder()
- .setCallbackType(android.bluetooth.le.ScanSettings.CALLBACK_TYPE_ALL_MATCHES)
+ .setCallbackType(CallbackType)
.setScanMode(android.bluetooth.le.ScanSettings.SCAN_MODE_LOW_LATENCY)
- .setMatchMode(android.bluetooth.le.ScanSettings.MATCH_MODE_AGGRESSIVE)
+ .setMatchMode(MatchMode)
.setNumOfMatches(android.bluetooth.le.ScanSettings.MATCH_NUM_ONE_ADVERTISEMENT)
.build();
} else {
@@ -910,6 +912,26 @@ public class DiscoveryActivity extends AbstractGBActivity implements AdapterView
if (oldBleScanning) {
LOG.info("New BLE scanning disabled via settings, using old method");
}
+ int level = prefs.getInt("scanning_intensity", 1);
+ switch (level) {
+ case 0:
+ CallbackType = android.bluetooth.le.ScanSettings.CALLBACK_TYPE_FIRST_MATCH;
+ MatchMode = android.bluetooth.le.ScanSettings.MATCH_MODE_STICKY;
+ break;
+ case 1:
+ CallbackType = android.bluetooth.le.ScanSettings.CALLBACK_TYPE_FIRST_MATCH;
+ MatchMode = android.bluetooth.le.ScanSettings.MATCH_MODE_AGGRESSIVE;
+ break;
+ case 2:
+ CallbackType = android.bluetooth.le.ScanSettings.CALLBACK_TYPE_ALL_MATCHES;
+ MatchMode = android.bluetooth.le.ScanSettings.MATCH_MODE_STICKY;
+ break;
+ case 3:
+ CallbackType = android.bluetooth.le.ScanSettings.CALLBACK_TYPE_ALL_MATCHES;
+ MatchMode = android.bluetooth.le.ScanSettings.MATCH_MODE_AGGRESSIVE;
+ break;
+ }
+ LOG.debug("Device discovery - scanning level: " + level + " " + CallbackType + " " + MatchMode);
}
@Override
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryPairingPreferenceActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryPairingPreferenceActivity.java
index af76e320c..27c862058 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryPairingPreferenceActivity.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryPairingPreferenceActivity.java
@@ -18,14 +18,33 @@
package nodomain.freeyourgadget.gadgetbridge.activities;
import android.os.Bundle;
+import android.preference.Preference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R;
+import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class DiscoveryPairingPreferenceActivity extends AbstractSettingsActivity {
+ private static final Logger LOG = LoggerFactory.getLogger(AbstractSettingsActivity.class);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.discovery_pairing_preferences);
+
+ final Prefs prefs = GBApplication.getPrefs();
+ final Preference pref = findPreference("scanning_intensity");
+ pref.setSummary(String.valueOf(prefs.getInt("scanning_intensity", 2)));
+
+ pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newVal) {
+ preference.setSummary(newVal.toString());
+ return true;
+ }
+ });
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8c6a361c0..ebbebec6a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -387,6 +387,8 @@
Minimum time between fetches
Fetches every %d minutes
+ Scanning intensity
+ If you experience freezing or unresponsiveness, try to set Scanning intensity to lower level. If your device is not being discovered, try to set Scanning intensity to higher level.
Disable new BLE scanning
Check this option if your device cannot be found during discovery
Not connected
diff --git a/app/src/main/res/xml/discovery_pairing_preferences.xml b/app/src/main/res/xml/discovery_pairing_preferences.xml
index d7eba907a..21f8362cc 100644
--- a/app/src/main/res/xml/discovery_pairing_preferences.xml
+++ b/app/src/main/res/xml/discovery_pairing_preferences.xml
@@ -1,5 +1,6 @@
-
+
@@ -27,5 +28,17 @@
android:layout="@layout/preference_checkbox"
android:summary="@string/discover_unsupported_devices_description"
android:title="@string/discover_unsupported_devices" />
+
+
+