From 264b6470cd13667d39b4d36269d24809264851ef Mon Sep 17 00:00:00 2001 From: Daniel Dakhno Date: Mon, 12 Feb 2024 23:30:32 +0100 Subject: [PATCH] Revert "Device connection: added basic code for scan-reconnect" This reverts commit adf55fea93a063a86090fd32d60bcb8d28d0bfa1. --- app/src/main/AndroidManifest.xml | 6 - .../DiscoveryPairingPreferenceActivity.java | 8 - .../gadgetbridge/impl/GBDevice.java | 77 ++-- .../service/AbstractDeviceSupport.java | 12 +- .../service/DeviceCommunicationService.java | 50 +-- .../gadgetbridge/service/DeviceSupport.java | 4 - .../service/ServiceDeviceSupport.java | 10 - .../btle/AbstractBTLEDeviceSupport.java | 1 - .../service/btle/BLEScanService.java | 407 ------------------ .../gadgetbridge/service/btle/BtLEQueue.java | 11 - .../freeyourgadget/gadgetbridge/util/GB.java | 1 - .../gadgetbridge/util/GBPrefs.java | 8 - app/src/main/res/values/strings.xml | 3 - .../res/xml/discovery_pairing_preferences.xml | 7 - 14 files changed, 49 insertions(+), 556 deletions(-) delete mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BLEScanService.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f0f5e3113..fe0f9b349 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -431,12 +431,6 @@ android:name=".devices.pinetime.PineTimeDFUService" android:label="PineTime Nordic DFU service" /> - - - { - GB.toast("Please restart GB in order to take effect.", Toast.LENGTH_LONG, GB.INFO); - return true; - }); } } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDevice.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDevice.java index 367695c3e..2b254f334 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDevice.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDevice.java @@ -431,15 +431,34 @@ public class GBDevice implements Parcelable { * Set simple to true to get this behavior. */ private String getStateString(boolean simple) { - try{ - // TODO: not sure if this is really neccessary... - if(simple){ - return GBApplication.getContext().getString(mState.getSimpleStringId()); - } - return GBApplication.getContext().getString(mState.getStringId()); - }catch (Exception e){} - - return "Unknown state"; + switch (mState) { + case NOT_CONNECTED: + return GBApplication.getContext().getString(R.string.not_connected); + case WAITING_FOR_RECONNECT: + return GBApplication.getContext().getString(R.string.waiting_for_reconnect); + case CONNECTING: + return GBApplication.getContext().getString(R.string.connecting); + case CONNECTED: + if (simple) { + return GBApplication.getContext().getString(R.string.connecting); + } + return GBApplication.getContext().getString(R.string.connected); + case INITIALIZING: + if (simple) { + return GBApplication.getContext().getString(R.string.connecting); + } + return GBApplication.getContext().getString(R.string.initializing); + case AUTHENTICATION_REQUIRED: + return GBApplication.getContext().getString(R.string.authentication_required); + case AUTHENTICATING: + return GBApplication.getContext().getString(R.string.authenticating); + case INITIALIZED: + if (simple) { + return GBApplication.getContext().getString(R.string.connected); + } + return GBApplication.getContext().getString(R.string.initialized); + } + return GBApplication.getContext().getString(R.string.unknown_state); } /** @@ -725,42 +744,20 @@ public class GBDevice implements Parcelable { } public enum State { - NOT_CONNECTED(R.string.not_connected), - WAITING_FOR_RECONNECT(R.string.waiting_for_reconnect), - WAITING_FOR_SCAN(R.string.device_state_waiting_scan), - CONNECTING(R.string.connecting), - CONNECTED(R.string.connected, R.string.connecting), - INITIALIZING(R.string.initializing, R.string.connecting), - AUTHENTICATION_REQUIRED(R.string.authentication_required), // some kind of pairing is required by the device - AUTHENTICATING(R.string.authenticating), // some kind of pairing is requested by the device + // Note: the order is important! + NOT_CONNECTED, + WAITING_FOR_RECONNECT, + CONNECTING, + CONNECTED, + INITIALIZING, + AUTHENTICATION_REQUIRED, // some kind of pairing is required by the device + AUTHENTICATING, // some kind of pairing is requested by the device /** * Means that the device is connected AND all the necessary initialization steps * have been performed. At the very least, this means that basic information like * device name, firmware version, hardware revision (as applicable) is available * in the GBDevice. */ - INITIALIZED(R.string.initialized, R.string.connected); - - - private int stringId, simpleStringId = -1; - - private State(int stringId, int simpleStringId) { - this.stringId = stringId; - this.simpleStringId = simpleStringId; - } - - private State(int stringId) { - this.stringId = stringId; - this.simpleStringId = -1; - } - - public int getStringId() { - return stringId; - } - - public int getSimpleStringId() { - if(simpleStringId == -1) return stringId; - return simpleStringId; - } + INITIALIZED, } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/AbstractDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/AbstractDeviceSupport.java index 51d00f795..f701ce681 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/AbstractDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/AbstractDeviceSupport.java @@ -127,7 +127,7 @@ public abstract class AbstractDeviceSupport implements DeviceSupport { protected GBDevice gbDevice; private BluetoothAdapter btAdapter; private Context context; - private boolean autoReconnect, scanReconnect; + private boolean autoReconnect; @@ -171,16 +171,6 @@ public abstract class AbstractDeviceSupport implements DeviceSupport { return autoReconnect; } - @Override - public void setScanReconnect(boolean scanReconnect) { - this.scanReconnect = scanReconnect; - } - - @Override - public boolean getScanReconnect(){ - return this.scanReconnect; - } - @Override public boolean getImplicitCallbackModify() { return true; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java index f1322f87a..6e28e1809 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java @@ -97,7 +97,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.NotificationType; import nodomain.freeyourgadget.gadgetbridge.model.Reminder; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; import nodomain.freeyourgadget.gadgetbridge.model.WorldClock; -import nodomain.freeyourgadget.gadgetbridge.service.btle.BLEScanService; import nodomain.freeyourgadget.gadgetbridge.service.receivers.AutoConnectIntervalReceiver; import nodomain.freeyourgadget.gadgetbridge.service.receivers.GBAutoFetchReceiver; import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper; @@ -274,7 +273,6 @@ public class DeviceCommunicationService extends Service implements SharedPrefere private final String ACTION_DEVICE_CONNECTED = "nodomain.freeyourgadget.gadgetbridge.BLUETOOTH_CONNECTED"; private final int NOTIFICATIONS_CACHE_MAX = 10; // maximum amount of notifications to cache per device while disconnected private boolean allowBluetoothIntentApi = false; - private boolean reconnectViaScan = GBPrefs.RECONNECT_SCAN_DEFAULT; private void sendDeviceConnectedBroadcast(String address){ if(!allowBluetoothIntentApi){ @@ -370,20 +368,6 @@ public class DeviceCommunicationService extends Service implements SharedPrefere LOG.debug("device state update reason"); sendDeviceConnectedBroadcast(device.getAddress()); sendCachedNotifications(device); - }else if(BLEScanService.EVENT_DEVICE_FOUND.equals(action)){ - String deviceAddress = intent.getStringExtra(BLEScanService.EXTRA_DEVICE_ADDRESS); - - GBDevice target = GBApplication - .app() - .getDeviceManager() - .getDeviceByAddress(deviceAddress); - - if(target == null){ - Log.e("DeviceCommService", "onReceive: device not found"); - return; - } - - connectToDevice(target); } } } @@ -416,20 +400,24 @@ public class DeviceCommunicationService extends Service implements SharedPrefere setReceiversEnableState(enableReceivers, anyDeviceInitialized, features, devicesWithCalendar); } - private void registerInternalReceivers(){ - IntentFilter localFilter = new IntentFilter(); - localFilter.addAction(GBDevice.ACTION_DEVICE_CHANGED); - localFilter.addAction(BLEScanService.EVENT_DEVICE_FOUND); - LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, localFilter); - } + @Override + public void onCreate() { + LOG.debug("DeviceCommunicationService is being created"); + super.onCreate(); + LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, new IntentFilter(GBDevice.ACTION_DEVICE_CHANGED)); + mFactory = getDeviceSupportFactory(); - private void registerExternalReceivers(){ mBlueToothConnectReceiver = new BluetoothConnectReceiver(this); registerReceiver(mBlueToothConnectReceiver, new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED)); mAutoConnectInvervalReceiver= new AutoConnectIntervalReceiver(this); registerReceiver(mAutoConnectInvervalReceiver, new IntentFilter("GB_RECONNECT")); + if (hasPrefs()) { + getPrefs().getPreferences().registerOnSharedPreferenceChangeListener(this); + allowBluetoothIntentApi = getPrefs().getBoolean(GBPrefs.PREF_ALLOW_INTENT_API, false); + } + IntentFilter bluetoothCommandFilter = new IntentFilter(); bluetoothCommandFilter.addAction(COMMAND_BLUETOOTH_CONNECT); registerReceiver(bluetoothCommandReceiver, bluetoothCommandFilter); @@ -441,22 +429,6 @@ public class DeviceCommunicationService extends Service implements SharedPrefere registerReceiver(intentApiReceiver, intentApiReceiver.buildFilter()); } - @Override - public void onCreate() { - LOG.debug("DeviceCommunicationService is being created"); - super.onCreate(); - mFactory = getDeviceSupportFactory(); - - registerInternalReceivers(); - registerExternalReceivers(); - - if (hasPrefs()) { - getPrefs().getPreferences().registerOnSharedPreferenceChangeListener(this); - allowBluetoothIntentApi = getPrefs().getBoolean(GBPrefs.PREF_ALLOW_INTENT_API, false); - reconnectViaScan = getGBPrefs().getAutoReconnectByScan(); - } - } - private DeviceSupportFactory getDeviceSupportFactory() { if (DEVICE_SUPPORT_FACTORY != null) { return DEVICE_SUPPORT_FACTORY; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceSupport.java index a27165535..95b5d06d6 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceSupport.java @@ -114,10 +114,6 @@ public interface DeviceSupport extends EventHandler { */ boolean getAutoReconnect(); - void setScanReconnect(boolean enable); - - boolean getScanReconnect(); - /** * Returns whether the gatt callback should be implicitly set to the one on the transaction, * even if it was not set directly on the transaction. If true, the gatt callback will always diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/ServiceDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/ServiceDeviceSupport.java index 78c17c0ef..70effe0c3 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/ServiceDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/ServiceDeviceSupport.java @@ -99,16 +99,6 @@ public class ServiceDeviceSupport implements DeviceSupport { return delegate.getAutoReconnect(); } - @Override - public void setScanReconnect(boolean enable) { - delegate.setScanReconnect(enable); - } - - @Override - public boolean getScanReconnect(){ - return delegate.getScanReconnect(); - } - @Override public boolean getImplicitCallbackModify() { return delegate.getImplicitCallbackModify(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/AbstractBTLEDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/AbstractBTLEDeviceSupport.java index 834b65fd4..7ecd3ce26 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/AbstractBTLEDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/AbstractBTLEDeviceSupport.java @@ -78,7 +78,6 @@ public abstract class AbstractBTLEDeviceSupport extends AbstractDeviceSupport im if (mQueue == null) { mQueue = new BtLEQueue(getBluetoothAdapter(), getDevice(), this, this, getContext(), mSupportedServerServices); mQueue.setAutoReconnect(getAutoReconnect()); - mQueue.setScanReconnect(getScanReconnect()); mQueue.setImplicitGattCallbackModify(getImplicitCallbackModify()); mQueue.setSendWriteRequestResponse(getSendWriteRequestResponse()); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BLEScanService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BLEScanService.java deleted file mode 100644 index db3823adb..000000000 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BLEScanService.java +++ /dev/null @@ -1,407 +0,0 @@ -package nodomain.freeyourgadget.gadgetbridge.service.btle; - -import android.app.Notification; -import android.app.NotificationManager; -import android.app.Service; -import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothDevice; -import android.bluetooth.BluetoothManager; -import android.bluetooth.le.BluetoothLeScanner; -import android.bluetooth.le.ScanCallback; -import android.bluetooth.le.ScanFilter; -import android.bluetooth.le.ScanResult; -import android.bluetooth.le.ScanSettings; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.os.Handler; -import android.os.IBinder; -import android.widget.RemoteViews; - -import androidx.core.app.NotificationCompat; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import nodomain.freeyourgadget.gadgetbridge.GBApplication; -import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; -import nodomain.freeyourgadget.gadgetbridge.util.GB; - -public class BLEScanService extends Service { - public static final String COMMAND_SCAN_DEVICE = "nodomain.freeyourgadget.gadgetbridge.service.ble.scan.command.START_SCAN_FOR_DEVICE"; - public static final String COMMAND_START_SCAN_ALL = "nodomain.freeyourgadget.gadgetbridge.service.ble.scan.command.START_SCAN_ALL"; - public static final String COMMAND_STOP_SCAN_ALL = "nodomain.freeyourgadget.gadgetbridge.service.ble.scan.command.STOP_SCAN_ALL"; - - public static final String EVENT_DEVICE_FOUND = "nodomain.freeyourgadget.gadgetbridge.service.ble.scan.event.DEVICE_FOUND"; - - public static final String EXTRA_DEVICE = "EXTRA_DEVICE"; - public static final String EXTRA_DEVICE_ADDRESS = "EXTRA_DEVICE_ADDRESS"; - - // 5 minutes scan restart interval - private final int DELAY_SCAN_RESTART = 5 * 60 * 1000; - - private LocalBroadcastManager localBroadcastManager; - private NotificationManager notificationManager; - private BluetoothManager bluetoothManager; - private BluetoothLeScanner scanner; - - private Logger LOG = LoggerFactory.getLogger(getClass()); - // private final ArrayList currentFilters = new ArrayList<>(); - - private enum ScanningState { - NOT_SCANNING, - SCANNING_WITHOUT_FILTERS, - SCANNING_WITH_FILTERS; - - public boolean isDoingAnyScan(){ - return ordinal() > NOT_SCANNING.ordinal(); - } - - public boolean shouldDiscardAfterFirstMatch(){ - return this == SCANNING_WITH_FILTERS; - } - }; - private ScanningState currentState = ScanningState.NOT_SCANNING; - - private final ScanCallback scanCallback = new ScanCallback() { - @Override - public void onScanResult(int callbackType, ScanResult result) { - super.onScanResult(callbackType, result); - BluetoothDevice device = result.getDevice(); - - LOG.debug("onScanResult: " + result); - - Intent intent = new Intent(EVENT_DEVICE_FOUND); - intent.putExtra(EXTRA_DEVICE_ADDRESS, device.getAddress()); - localBroadcastManager.sendBroadcast(intent); - - // device found, attempt connection - // stop scanning for device for now - // will restart when connection attempt fails - if(currentState.shouldDiscardAfterFirstMatch()) { - // stopScanningForDevice(device.getAddress()); - } - } - - @Override - public void onScanFailed(int errorCode) { - super.onScanFailed(errorCode); - - LOG.error("onScanFailed: " + errorCode); - - updateNotification("Scan failed: " + errorCode); - } - }; - - @Override - public void onCreate() { - super.onCreate(); - - bluetoothManager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE); - scanner = bluetoothManager.getAdapter().getBluetoothLeScanner(); - - localBroadcastManager = LocalBroadcastManager.getInstance(this); - - notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); - - registerReceivers(); - - this.startForeground(); - - if(scanner == null){ - updateNotification("Waiting for bluetooth..."); - }else{ - restartScan(true); - } - - // schedule after 5 seconds to fix weird timing of both services - scheduleRestartScan(5000); - } - - private void scheduleRestartScan(){ - scheduleRestartScan(DELAY_SCAN_RESTART); - } - - private void scheduleRestartScan(long millis){ - Handler handler = new Handler(); - handler.postDelayed(() -> { - LOG.debug("restarting scan..."); - try { - restartScan(true); - }catch (Exception e){ - LOG.error("error during scheduled scan restart", e); - } - scheduleRestartScan(); - }, millis); - } - - @Override - public void onDestroy() { - super.onDestroy(); - unregisterReceivers(); - } - - private void updateNotification(boolean isScanning, int scannedDeviceCount){ - notificationManager.notify( - GB.NOTIFICATION_ID_SCAN, - createNotification(isScanning, scannedDeviceCount) - ); - } - - private void updateNotification(String content){ - notificationManager.notify( - GB.NOTIFICATION_ID_SCAN, - createNotification(content, R.drawable.ic_bluetooth) - ); - } - - private Notification createNotification(boolean isScanning, int scannedDevicesCount){ - int icon = R.drawable.ic_bluetooth; - String content = "Not scanning"; - if(isScanning){ - icon = R.drawable.ic_bluetooth_searching; - if(scannedDevicesCount == 1) { - content = String.format("Scanning %d device", scannedDevicesCount); - }else if(scannedDevicesCount > 1){ - content = String.format("Scanning %d devices", scannedDevicesCount); - }else{ - content = "Scanning all devices"; - } - } - - return createNotification(content, icon); - } - - private Notification createNotification(String content, int icon){ - - return new NotificationCompat - .Builder(this, GB.NOTIFICATION_CHANNEL_ID) - .setContentTitle("Scan service") - .setContentText(content) - .setSmallIcon(icon) - .build(); - } - - private void startForeground(){ - Notification serviceNotification = createNotification(false, 0); - - super.startForeground(GB.NOTIFICATION_ID_SCAN, serviceNotification); - } - - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - if(intent == null){ - return START_STICKY; - } - String action = intent.getAction(); - if(action == null){ - return START_STICKY; - } - switch (action) { - case COMMAND_SCAN_DEVICE: - handleScanDevice(intent); - break; - case COMMAND_START_SCAN_ALL: - handleScanAll(intent); - break; - case COMMAND_STOP_SCAN_ALL: - handleStopScanAll(intent); - break; - default: - return START_STICKY; - } - return START_STICKY; - } - - private void handleStopScanAll(Intent intent){ - restartScan(true); - } - - private void handleScanAll(Intent intent){ - if(currentState != ScanningState.SCANNING_WITHOUT_FILTERS){ - restartScan(false); - } - } - - private void handleScanDevice(Intent intent){ - /* - GBDevice device = intent.getParcelableExtra(EXTRA_DEVICE); - if(device == null){ - return; - } - scanForDevice(device); - */ - restartScan(true); - } - - - /*private boolean isDeviceIncludedInCurrentFilters(GBDevice device){ - for(ScanFilter currentFilter : currentFilters){ - if(device.getAddress().equals(currentFilter.getDeviceAddress())){ - return true; - } - } - return false; - } - */ - - /* - private void stopScanningForDevice(GBDevice device){ - this.stopScanningForDevice(device.getAddress()); - } - */ - - /* - private void stopScanningForDevice(String deviceAddress){ - currentFilters.removeIf(scanFilter -> scanFilter - .getDeviceAddress() - .equals(deviceAddress) - ); - - restartScan(true); - } - */ - - /* - private void scanForDevice(GBDevice device){ - if(isDeviceIncludedInCurrentFilters(device)){ - // already scanning for device - return; - } - ScanFilter deviceFilter = new ScanFilter.Builder() - .setDeviceAddress(device.getAddress()) - .build(); - - currentFilters.add(deviceFilter); - - // restart scan here - restartScan(true); - } - */ - - BroadcastReceiver deviceStateUpdateReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - GBDevice.DeviceUpdateSubject subject = - (GBDevice.DeviceUpdateSubject) - intent.getSerializableExtra(GBDevice.EXTRA_UPDATE_SUBJECT); - - if(subject != GBDevice.DeviceUpdateSubject.CONNECTION_STATE){ - return; - } - restartScan(true); - } - }; - - BroadcastReceiver bluetoothStateChangedReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if(intent == null){ - return; - } - final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR); - switch(state) { - case BluetoothAdapter.STATE_OFF: - case BluetoothAdapter.STATE_TURNING_OFF: - updateNotification("Waiting for bluetooth..."); - break; - case BluetoothAdapter.STATE_ON: - restartScan(true); - break; - } - } - }; - - private void registerReceivers(){ - localBroadcastManager.registerReceiver( - deviceStateUpdateReceiver, - new IntentFilter(GBDevice.ACTION_DEVICE_CHANGED) - ); - - registerReceiver( - bluetoothStateChangedReceiver, - new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED) - ); - } - - private void unregisterReceivers(){ - localBroadcastManager.unregisterReceiver(deviceStateUpdateReceiver); - - unregisterReceiver(bluetoothStateChangedReceiver); - } - - private void restartScan(boolean applyFilters){ - if(scanner == null){ - scanner = bluetoothManager.getAdapter().getBluetoothLeScanner(); - } - if(scanner == null){ - // at this point we should already be waiting for bluetooth to turn back on - LOG.debug("cannot enable scan since bluetooth seems off (scanner == null)"); - return; - } - if(bluetoothManager.getAdapter().getState() != BluetoothAdapter.STATE_ON){ - // again, we should be waiting for the adapter to turn on again - LOG.debug("Bluetooth adapter state off"); - return; - } - if(currentState.isDoingAnyScan()){ - scanner.stopScan(scanCallback); - } - ArrayList scanFilters = null; - - if(applyFilters) { - List devices = GBApplication.app().getDeviceManager().getDevices(); - - scanFilters = new ArrayList<>(devices.size()); - - for (GBDevice device : devices) { - if (device.getState() == GBDevice.State.WAITING_FOR_SCAN) { - scanFilters.add(new ScanFilter.Builder() - .setDeviceAddress(device.getAddress()) - .build() - ); - } - } - - if(scanFilters.size() == 0){ - // no need to start scanning - LOG.debug("restartScan: stopping BLE scan, no devices"); - currentState = ScanningState.NOT_SCANNING; - updateNotification(false, 0); - return; - } - } - - ScanSettings scanSettings = new ScanSettings.Builder() - .setScanMode(ScanSettings.SCAN_MODE_LOW_POWER) // enforced anyway in background - .setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES) - .setMatchMode(ScanSettings.MATCH_MODE_STICKY) - .setLegacy(false) - .build(); - - scanner.startScan(scanFilters, scanSettings, scanCallback); - if(applyFilters) { - LOG.debug("restartScan: started scan for " + scanFilters.size() + " devices"); - updateNotification(true, scanFilters.size()); - currentState = ScanningState.SCANNING_WITH_FILTERS; - }else{ - LOG.debug("restartScan: started scan for all devices"); - updateNotification(true, 0); - currentState = ScanningState.SCANNING_WITHOUT_FILTERS; - } - - } - - @Override - public IBinder onBind(Intent intent) { - // TODO: Return the communication channel to the service. - throw new UnsupportedOperationException("Not yet implemented"); - } -} \ No newline at end of file diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BtLEQueue.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BtLEQueue.java index 8654086cc..83bdb5695 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BtLEQueue.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BtLEQueue.java @@ -81,7 +81,6 @@ public final class BtLEQueue { private final InternalGattCallback internalGattCallback; private final InternalGattServerCallback internalGattServerCallback; private boolean mAutoReconnect; - private boolean scanReconnect; private boolean mImplicitGattCallbackModify = true; private boolean mSendWriteRequestResponse = false; @@ -219,10 +218,6 @@ public final class BtLEQueue { mAutoReconnect = enable; } - public void setScanReconnect(boolean enable){ - this.scanReconnect = enable; - } - public void setImplicitGattCallbackModify(final boolean enable) { mImplicitGattCallbackModify = enable; } @@ -360,12 +355,6 @@ public final class BtLEQueue { */ private boolean maybeReconnect() { if (mAutoReconnect && mBluetoothGatt != null) { - if(scanReconnect){ - LOG.info("Waiting for BLE scan before attempting reconnection..."); - setDeviceConnectionState(State.WAITING_FOR_SCAN); - return true; - } - LOG.info("Enabling automatic ble reconnect..."); boolean result = mBluetoothGatt.connect(); mPauseTransaction = false; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GB.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GB.java index f36a68e4c..820a93f66 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GB.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GB.java @@ -84,7 +84,6 @@ public class GB { public static final int NOTIFICATION_ID_EXPORT_FAILED = 5; public static final int NOTIFICATION_ID_PHONE_FIND = 6; public static final int NOTIFICATION_ID_GPS = 7; - public static final int NOTIFICATION_ID_SCAN = 8; public static final int NOTIFICATION_ID_ERROR = 42; private static final Logger LOG = LoggerFactory.getLogger(GB.class); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GBPrefs.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GBPrefs.java index 1c50ab9a4..c1799e886 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GBPrefs.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GBPrefs.java @@ -45,7 +45,6 @@ public class GBPrefs { public static final String PACKAGE_PEBBLEMSG_BLACKLIST = "package_pebblemsg_blacklist"; public static final String CALENDAR_BLACKLIST = "calendar_blacklist"; public static final String DEVICE_AUTO_RECONNECT = "prefs_key_device_auto_reconnect"; - public static final String DEVICE_AUTO_RECONNECT_SCAN = "prefs_key_device_auto_reconnect_scan"; public static final String DEVICE_CONNECT_BACK = "prefs_key_device_reconnect_on_acl"; private static final String AUTO_START = "general_autostartonboot"; public static final String AUTO_EXPORT_ENABLED = "auto_export_enabled"; @@ -60,9 +59,6 @@ public class GBPrefs { public static boolean AUTO_RECONNECT_DEFAULT = true; public static final String PREF_ALLOW_INTENT_API = "prefs_key_allow_bluetooth_intent_api"; - public static final String RECONNECT_SCAN_KEY = "prefs_general_key_auto_reconnect_scan"; - public static final boolean RECONNECT_SCAN_DEFAULT = false; - public static final String USER_NAME = "mi_user_alias"; public static final String USER_NAME_DEFAULT = "gadgetbridge-user"; private static final String USER_BIRTHDAY = ""; @@ -84,10 +80,6 @@ public class GBPrefs { return deviceSpecificPreferences.getBoolean(DEVICE_AUTO_RECONNECT, AUTO_RECONNECT_DEFAULT); } - public boolean getAutoReconnectByScan() { - return mPrefs.getBoolean(RECONNECT_SCAN_KEY, RECONNECT_SCAN_DEFAULT); - } - public boolean getAutoStart() { return mPrefs.getBoolean(AUTO_START, AUTO_START_DEFAULT); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6829778d7..e147a5b3f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2677,7 +2677,4 @@ BLE BT_CLASSIC Activity info - Waiting for device scan - Reconnect by BLE scan - Wait for device scan instead of blind connection attempts diff --git a/app/src/main/res/xml/discovery_pairing_preferences.xml b/app/src/main/res/xml/discovery_pairing_preferences.xml index 9c427ae3d..c21b4f7a5 100644 --- a/app/src/main/res/xml/discovery_pairing_preferences.xml +++ b/app/src/main/res/xml/discovery_pairing_preferences.xml @@ -23,11 +23,4 @@ android:summary="@string/discover_unsupported_devices_description" android:title="@string/discover_unsupported_devices" app:iconSpaceReserved="false" /> -