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 007473bc65f86069a885fef7353d939849a4b972..a5d97c3b4d0bf0979160d021a33605fe7a928bf8 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 a05fd2ca0ad85677df48c7a034b5c8bf211fc95e..0dc4b7504ac845cf039804f3ddb330ded7ffc96b 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 946f5932fe6b5936b2337ba299d7135657681864..5fd1fd17b32920ed82c213085142f0e4f235c73a 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 413fdc68ddd64fff4621ed2b84762f7141dc9daa..1ce612075333b58834f9addc38a63198727ccd02 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 d76380ba4fa6c41e0ee789474dfda4fde116d53b..c77e23ca5f1cafe58afa437d4b80aa9f83641ac7 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