Commit 0374d7a1 authored by Anon's avatar Anon
Browse files

Fix listener handling.

parent 7cff04ec
...@@ -42,7 +42,7 @@ object ConnectionService { ...@@ -42,7 +42,7 @@ object ConnectionService {
private var connection: BluetoothGatt? = null private var connection: BluetoothGatt? = null
private var connectionState = BluetoothGatt.STATE_DISCONNECTED 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") private val fileServiceUuid = UUID.fromString("42230100-2342-2342-2342-234223422342")
...@@ -58,8 +58,8 @@ object ConnectionService { ...@@ -58,8 +58,8 @@ object ConnectionService {
fun isConnected() = connectionState == BluetoothGatt.STATE_CONNECTED fun isConnected() = connectionState == BluetoothGatt.STATE_CONNECTED
fun addGattListener(listener: GattListener) { fun addGattListener(tag: String, listener: GattListener) {
gattListeners.add(listener) gattListeners[tag] = listener
} }
fun connect(context: Context) { fun connect(context: Context) {
...@@ -113,8 +113,6 @@ object ConnectionService { ...@@ -113,8 +113,6 @@ object ConnectionService {
connectionState = newState connectionState = newState
connection = gatt connection = gatt
gattListeners.map { it.onConnectionStateChange(newState) }
when (newState) { when (newState) {
BluetoothGatt.STATE_CONNECTED -> { BluetoothGatt.STATE_CONNECTED -> {
gatt?.discoverServices() gatt?.discoverServices()
...@@ -132,6 +130,8 @@ object ConnectionService { ...@@ -132,6 +130,8 @@ object ConnectionService {
mtu = newMtu - 3 // Very precise science mtu = newMtu - 3 // Very precise science
leService?.enableNotify(gatt) leService?.enableNotify(gatt)
gattListeners.values.map { it.onConnectionReady() }
} }
override fun onCharacteristicWrite( override fun onCharacteristicWrite(
...@@ -145,7 +145,7 @@ object ConnectionService { ...@@ -145,7 +145,7 @@ object ConnectionService {
connection = gatt connection = gatt
gattListeners.map { it.onCharacteristicWrite(characteristic, status) } gattListeners.values.map { it.onCharacteristicWrite(characteristic, status) }
} }
override fun onCharacteristicChanged(gatt: BluetoothGatt?, characteristic: BluetoothGattCharacteristic?) { override fun onCharacteristicChanged(gatt: BluetoothGatt?, characteristic: BluetoothGattCharacteristic?) {
...@@ -155,7 +155,7 @@ object ConnectionService { ...@@ -155,7 +155,7 @@ object ConnectionService {
throw IllegalStateException() throw IllegalStateException()
} }
gattListeners.map { it.onCharacteristicChanged(characteristic) } gattListeners.values.map { it.onCharacteristicChanged(characteristic) }
} }
} }
......
...@@ -27,5 +27,5 @@ import android.bluetooth.BluetoothGattCharacteristic ...@@ -27,5 +27,5 @@ import android.bluetooth.BluetoothGattCharacteristic
interface GattListener { interface GattListener {
fun onCharacteristicWrite(characteristic: BluetoothGattCharacteristic, status: Int) {} fun onCharacteristicWrite(characteristic: BluetoothGattCharacteristic, status: Int) {}
fun onCharacteristicChanged(characteristic: BluetoothGattCharacteristic) {} fun onCharacteristicChanged(characteristic: BluetoothGattCharacteristic) {}
fun onConnectionStateChange(state: Int) {} fun onConnectionReady() {}
} }
\ No newline at end of file
...@@ -77,7 +77,7 @@ class BatchTransferFragment : Fragment(), FileTransferListener, GattListener { ...@@ -77,7 +77,7 @@ class BatchTransferFragment : Fragment(), FileTransferListener, GattListener {
private fun initConnection() { private fun initConnection() {
val ctx = context ?: throw IllegalStateException() val ctx = context ?: throw IllegalStateException()
ConnectionService.addGattListener(this) ConnectionService.addGattListener("batchfiletransfer", this)
ConnectionService.connect(ctx) ConnectionService.connect(ctx)
} }
...@@ -91,6 +91,7 @@ class BatchTransferFragment : Fragment(), FileTransferListener, GattListener { ...@@ -91,6 +91,7 @@ class BatchTransferFragment : Fragment(), FileTransferListener, GattListener {
} }
private fun transferNext() { private fun transferNext() {
Thread.sleep(1000)
val item = queue.dequeue() val item = queue.dequeue()
if (item == null || isCancelled) { if (item == null || isCancelled) {
...@@ -122,10 +123,8 @@ class BatchTransferFragment : Fragment(), FileTransferListener, GattListener { ...@@ -122,10 +123,8 @@ class BatchTransferFragment : Fragment(), FileTransferListener, GattListener {
} }
} }
override fun onConnectionStateChange(state: Int) { override fun onConnectionReady() {
if (state == BluetoothGatt.STATE_CONNECTED) { startTransfer()
startTransfer()
}
} }
override fun onError() { override fun onError() {
......
...@@ -41,7 +41,7 @@ class FileTransfer( ...@@ -41,7 +41,7 @@ class FileTransfer(
private var currentState = TransferState.IDLE private var currentState = TransferState.IDLE
init { init {
service.addOnPacketReceivedListener(this) service.setOnPacketReceivedListener(this)
} }
override fun onPacketReceived(packet: Packet) { override fun onPacketReceived(packet: Packet) {
...@@ -98,13 +98,13 @@ class FileTransfer( ...@@ -98,13 +98,13 @@ class FileTransfer(
throw IllegalStateException() throw IllegalStateException()
} }
currentState = TransferState.START_SENT
service.sendPacket( service.sendPacket(
Packet( Packet(
PacketType.START, PacketType.START,
destinationPath.toByteArray(Charset.forName("ASCII")) destinationPath.toByteArray(Charset.forName("ASCII"))
) )
) )
currentState = TransferState.START_SENT
} }
private fun sendNext() { private fun sendNext() {
......
...@@ -43,7 +43,7 @@ class LowEffortService( ...@@ -43,7 +43,7 @@ class LowEffortService(
private val centralRxCharacteristicUuid = UUID.fromString("42230102-2342-2342-2342-234223422342") private val centralRxCharacteristicUuid = UUID.fromString("42230102-2342-2342-2342-234223422342")
private var notifyEnabled = false private var notifyEnabled = false
private val listeners = mutableListOf<OnPacketReceivedListener>() private var listener: OnPacketReceivedListener? = null
init { init {
val tx = service.getCharacteristic(centralTxCharacteristicUuid) val tx = service.getCharacteristic(centralTxCharacteristicUuid)
...@@ -58,7 +58,7 @@ class LowEffortService( ...@@ -58,7 +58,7 @@ class LowEffortService(
centralTx = tx centralTx = tx
centralRx = rx centralRx = rx
ConnectionService.addGattListener(this) ConnectionService.addGattListener("filetransfer",this)
} }
fun enableNotify(gatt: BluetoothGatt) { fun enableNotify(gatt: BluetoothGatt) {
...@@ -89,8 +89,8 @@ class LowEffortService( ...@@ -89,8 +89,8 @@ class LowEffortService(
return status return status
} }
fun addOnPacketReceivedListener(listener: OnPacketReceivedListener) { fun setOnPacketReceivedListener(packetListener: OnPacketReceivedListener) {
listeners.add(listener) listener = packetListener
} }
// GattListener methods // GattListener methods
...@@ -99,6 +99,6 @@ class LowEffortService( ...@@ -99,6 +99,6 @@ class LowEffortService(
} }
override fun onCharacteristicChanged(characteristic: BluetoothGattCharacteristic) { 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
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment