From ba76f64bf609e17ba63a30b84f4ec95718ab6c9b Mon Sep 17 00:00:00 2001 From: cpfeiffer Date: Sun, 7 Jun 2015 15:31:42 +0200 Subject: [PATCH] Disable context menu while busy and add "Disconnect" to context menu --- .../BluetoothCommunicationService.java | 10 +++++++++- .../gadgetbridge/ControlCenter.java | 15 +++++++++++++-- .../gadgetbridge/btle/BtLEQueue.java | 1 + app/src/main/res/menu/controlcenter_context.xml | 3 +++ app/src/main/res/values/strings.xml | 1 + 5 files changed, 27 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/BluetoothCommunicationService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/BluetoothCommunicationService.java index 44c604f1..5ed8980f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/BluetoothCommunicationService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/BluetoothCommunicationService.java @@ -58,6 +58,8 @@ public class BluetoothCommunicationService extends Service { = "nodomain.freeyourgadget.gadgetbride.bluetoothcommunicationservice.action.install_pebbbleapp"; public static final String ACTION_REBOOT = "nodomain.freeyourgadget.gadgetbride.bluetoothcommunicationservice.action.reboot"; public static final String ACTION_FETCH_ACTIVITY_DATA = "nodomain.freeyourgadget.gadgetbride.bluetoothcommunicationservice.action.fetch_activity_data"; + public static final String ACTION_DISCONNECT = "nodomain.freeyourgadget.gadgetbride.bluetoothcommunicationservice.action.disconnect"; + public static final String EXTRA_PERFORM_PAIR = "perform_pair"; private static final Logger LOG = LoggerFactory.getLogger(BluetoothCommunicationService.class); @@ -76,7 +78,8 @@ public class BluetoothCommunicationService extends Service { GBDevice device = intent.getParcelableExtra("device"); if (mGBDevice.equals(device)) { mGBDevice = device; - GB.setReceiversEnableState(mDeviceSupport.useAutoConnect() || mGBDevice.isConnected(), context); + boolean enableReceivers = mDeviceSupport != null && (mDeviceSupport.useAutoConnect() || mGBDevice.isConnected()); + GB.setReceiversEnableState(enableReceivers, context); GB.updateNotification(mGBDevice.getName() + " " + mGBDevice.getStateString(), context); } } @@ -200,6 +203,11 @@ public class BluetoothCommunicationService extends Service { mDeviceSupport.onFetchActivityData(); break; } + case ACTION_DISCONNECT: { + mDeviceSupport.dispose(); + mDeviceSupport = null; + break; + } case ACTION_CALLSTATE: GBCommand command = GBCommand.values()[intent.getIntExtra("call_command", 0)]; // UGLY diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/ControlCenter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/ControlCenter.java index 9b2ef0b6..9c4dbe62 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/ControlCenter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/ControlCenter.java @@ -160,10 +160,14 @@ public class ControlCenter extends Activity { @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); - getMenuInflater().inflate( - R.menu.controlcenter_context, menu); AdapterView.AdapterContextMenuInfo acmi = (AdapterView.AdapterContextMenuInfo) menuInfo; selectedDevice = deviceList.get(acmi.position); + if (selectedDevice != null && selectedDevice.isBusy()) { + // no context menu when device is busy + return; + } + getMenuInflater().inflate( + R.menu.controlcenter_context, menu); menu.setHeaderTitle(selectedDevice.getName()); } @@ -183,6 +187,13 @@ public class ControlCenter extends Activity { startIntent.setAction(BluetoothCommunicationService.ACTION_FETCH_ACTIVITY_DATA); startService(startIntent); } + case R.id.controlcenter_disconnect: + if (selectedDevice != null) { + selectedDevice = null; + Intent startIntent = new Intent(this, BluetoothCommunicationService.class); + startIntent.setAction(BluetoothCommunicationService.ACTION_DISCONNECT); + startService(startIntent); + } default: return super.onContextItemSelected(item); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/BtLEQueue.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/BtLEQueue.java index 6e6228ba..fd7e521d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/BtLEQueue.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/BtLEQueue.java @@ -161,6 +161,7 @@ public final class BtLEQueue { mBluetoothGatt.disconnect(); mBluetoothGatt.close(); mBluetoothGatt = null; + setDeviceConnectionState(State.NOT_CONNECTED); } } } diff --git a/app/src/main/res/menu/controlcenter_context.xml b/app/src/main/res/menu/controlcenter_context.xml index c2740080..9322d26b 100644 --- a/app/src/main/res/menu/controlcenter_context.xml +++ b/app/src/main/res/menu/controlcenter_context.xml @@ -6,4 +6,7 @@ + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 79a44bfc..56dece17 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -107,5 +107,6 @@ initializing Fetching Activity Data Fetch Activity Data + Disconnect