From 0374d7a16c7e099a739dc7eefe0c482bd5bdf55f Mon Sep 17 00:00:00 2001 From: Anton Weber <anton@antweb.me> Date: Thu, 22 Aug 2019 12:13:26 +0200 Subject: [PATCH] Fix listener handling. --- .../badge/card10/common/ConnectionService.kt | 14 +++++++------- .../ccc/events/badge/card10/common/GattListener.kt | 2 +- .../card10/filetransfer/BatchTransferFragment.kt | 9 ++++----- .../badge/card10/filetransfer/FileTransfer.kt | 4 ++-- .../badge/card10/filetransfer/LowEffortService.kt | 10 +++++----- 5 files changed, 19 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/de/ccc/events/badge/card10/common/ConnectionService.kt b/app/src/main/java/de/ccc/events/badge/card10/common/ConnectionService.kt index 007473b..a5d97c3 100644 --- a/app/src/main/java/de/ccc/events/badge/card10/common/ConnectionService.kt +++ b/app/src/main/java/de/ccc/events/badge/card10/common/ConnectionService.kt @@ -42,7 +42,7 @@ object ConnectionService { private var connection: BluetoothGatt? = null private var connectionState = BluetoothGatt.STATE_DISCONNECTED - private var gattListeners = mutableListOf<GattListener>() + private var gattListeners = mutableMapOf<String, GattListener>() private val fileServiceUuid = UUID.fromString("42230100-2342-2342-2342-234223422342") @@ -58,8 +58,8 @@ object ConnectionService { fun isConnected() = connectionState == BluetoothGatt.STATE_CONNECTED - fun addGattListener(listener: GattListener) { - gattListeners.add(listener) + fun addGattListener(tag: String, listener: GattListener) { + gattListeners[tag] = listener } fun connect(context: Context) { @@ -113,8 +113,6 @@ object ConnectionService { connectionState = newState connection = gatt - gattListeners.map { it.onConnectionStateChange(newState) } - when (newState) { BluetoothGatt.STATE_CONNECTED -> { gatt?.discoverServices() @@ -132,6 +130,8 @@ object ConnectionService { mtu = newMtu - 3 // Very precise science leService?.enableNotify(gatt) + + gattListeners.values.map { it.onConnectionReady() } } override fun onCharacteristicWrite( @@ -145,7 +145,7 @@ object ConnectionService { connection = gatt - gattListeners.map { it.onCharacteristicWrite(characteristic, status) } + gattListeners.values.map { it.onCharacteristicWrite(characteristic, status) } } override fun onCharacteristicChanged(gatt: BluetoothGatt?, characteristic: BluetoothGattCharacteristic?) { @@ -155,7 +155,7 @@ object ConnectionService { throw IllegalStateException() } - gattListeners.map { it.onCharacteristicChanged(characteristic) } + gattListeners.values.map { it.onCharacteristicChanged(characteristic) } } } diff --git a/app/src/main/java/de/ccc/events/badge/card10/common/GattListener.kt b/app/src/main/java/de/ccc/events/badge/card10/common/GattListener.kt index a05fd2c..0dc4b75 100644 --- a/app/src/main/java/de/ccc/events/badge/card10/common/GattListener.kt +++ b/app/src/main/java/de/ccc/events/badge/card10/common/GattListener.kt @@ -27,5 +27,5 @@ import android.bluetooth.BluetoothGattCharacteristic interface GattListener { fun onCharacteristicWrite(characteristic: BluetoothGattCharacteristic, status: Int) {} fun onCharacteristicChanged(characteristic: BluetoothGattCharacteristic) {} - fun onConnectionStateChange(state: Int) {} + fun onConnectionReady() {} } \ No newline at end of file diff --git a/app/src/main/java/de/ccc/events/badge/card10/filetransfer/BatchTransferFragment.kt b/app/src/main/java/de/ccc/events/badge/card10/filetransfer/BatchTransferFragment.kt index 946f593..5fd1fd1 100644 --- a/app/src/main/java/de/ccc/events/badge/card10/filetransfer/BatchTransferFragment.kt +++ b/app/src/main/java/de/ccc/events/badge/card10/filetransfer/BatchTransferFragment.kt @@ -77,7 +77,7 @@ class BatchTransferFragment : Fragment(), FileTransferListener, GattListener { private fun initConnection() { val ctx = context ?: throw IllegalStateException() - ConnectionService.addGattListener(this) + ConnectionService.addGattListener("batchfiletransfer", this) ConnectionService.connect(ctx) } @@ -91,6 +91,7 @@ class BatchTransferFragment : Fragment(), FileTransferListener, GattListener { } private fun transferNext() { + Thread.sleep(1000) val item = queue.dequeue() if (item == null || isCancelled) { @@ -122,10 +123,8 @@ class BatchTransferFragment : Fragment(), FileTransferListener, GattListener { } } - override fun onConnectionStateChange(state: Int) { - if (state == BluetoothGatt.STATE_CONNECTED) { - startTransfer() - } + override fun onConnectionReady() { + startTransfer() } override fun onError() { diff --git a/app/src/main/java/de/ccc/events/badge/card10/filetransfer/FileTransfer.kt b/app/src/main/java/de/ccc/events/badge/card10/filetransfer/FileTransfer.kt index 413fdc6..1ce6120 100644 --- a/app/src/main/java/de/ccc/events/badge/card10/filetransfer/FileTransfer.kt +++ b/app/src/main/java/de/ccc/events/badge/card10/filetransfer/FileTransfer.kt @@ -41,7 +41,7 @@ class FileTransfer( private var currentState = TransferState.IDLE init { - service.addOnPacketReceivedListener(this) + service.setOnPacketReceivedListener(this) } override fun onPacketReceived(packet: Packet) { @@ -98,13 +98,13 @@ class FileTransfer( throw IllegalStateException() } + currentState = TransferState.START_SENT service.sendPacket( Packet( PacketType.START, destinationPath.toByteArray(Charset.forName("ASCII")) ) ) - currentState = TransferState.START_SENT } private fun sendNext() { diff --git a/app/src/main/java/de/ccc/events/badge/card10/filetransfer/LowEffortService.kt b/app/src/main/java/de/ccc/events/badge/card10/filetransfer/LowEffortService.kt index d76380b..c77e23c 100644 --- a/app/src/main/java/de/ccc/events/badge/card10/filetransfer/LowEffortService.kt +++ b/app/src/main/java/de/ccc/events/badge/card10/filetransfer/LowEffortService.kt @@ -43,7 +43,7 @@ class LowEffortService( private val centralRxCharacteristicUuid = UUID.fromString("42230102-2342-2342-2342-234223422342") private var notifyEnabled = false - private val listeners = mutableListOf<OnPacketReceivedListener>() + private var listener: OnPacketReceivedListener? = null init { val tx = service.getCharacteristic(centralTxCharacteristicUuid) @@ -58,7 +58,7 @@ class LowEffortService( centralTx = tx centralRx = rx - ConnectionService.addGattListener(this) + ConnectionService.addGattListener("filetransfer",this) } fun enableNotify(gatt: BluetoothGatt) { @@ -89,8 +89,8 @@ class LowEffortService( return status } - fun addOnPacketReceivedListener(listener: OnPacketReceivedListener) { - listeners.add(listener) + fun setOnPacketReceivedListener(packetListener: OnPacketReceivedListener) { + listener = packetListener } // GattListener methods @@ -99,6 +99,6 @@ class LowEffortService( } override fun onCharacteristicChanged(characteristic: BluetoothGattCharacteristic) { - listeners.map { it.onPacketReceived(Packet.fromBytes(characteristic.value)) } + listener?.onPacketReceived(Packet.fromBytes(characteristic.value)) } } \ No newline at end of file -- GitLab