XYOracleNetwork/sdk-ble-android

View on GitHub
ble-android-library/src/main/kotlin/network/xyo/ble/generic/reporters/XYBluetoothDeviceReporter.kt

Summary

Maintainability
B
5 hrs
Test Coverage
package network.xyo.ble.generic.reporters

import kotlinx.coroutines.launch
import network.xyo.base.XYBase
import network.xyo.ble.generic.devices.XYBluetoothDevice
import network.xyo.ble.generic.listeners.XYBluetoothDeviceListener
import network.xyo.ble.generic.gatt.peripheral.ble

open class XYBluetoothDeviceReporter<T: XYBluetoothDevice, L: XYBluetoothDeviceListener>: XYBase() {
    val listeners = HashMap<String, XYBluetoothDeviceListener>()

    fun addListener(key: String, listener: L) {
        ble.launch {
            synchronized(listeners) {
                listeners[key] = listener
            }
        }
    }

    fun removeListener(key: String) {
        ble.launch {
            synchronized(listeners) {
                listeners.remove(key)
            }
        }
    }

    open fun enter(device: T) {
        synchronized(listeners) {
            for ((_, listener) in listeners) {
                ble.launch {
                    listener.entered(device)
                }
            }
        }
    }

    open fun exit(device: T) {
        synchronized(listeners) {
            for ((_, listener) in listeners) {
                ble.launch {
                    listener.exited(device)
                }
            }
        }
    }

    open fun detected(device: T) {
        synchronized(listeners) {
            for ((_, listener) in listeners) {
                ble.launch {
                    listener.detected(device)
                }
            }
        }
    }

    open fun connectionStateChanged(device: T, newState: Int) {
        log.info("connectionStateChanged: ${device.className} : $newState")
        synchronized(listeners) {
            for ((_, listener) in listeners) {
                ble.launch {
                    listener.connectionStateChanged(device, newState)
                }
            }
        }
    }
}