Skip to content

Commit

Permalink
Moved Listener classes out of classes
Browse files Browse the repository at this point in the history
  • Loading branch information
arietrouw committed Jul 31, 2020
1 parent 77ff4e4 commit fbfd744
Show file tree
Hide file tree
Showing 22 changed files with 92 additions and 80 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@ import android.util.SparseArray
import java.util.concurrent.ConcurrentHashMap
import network.xyo.base.XYBase
import network.xyo.ble.generic.devices.XYBluetoothDevice
import network.xyo.ble.generic.devices.XYBluetoothDeviceListener
import network.xyo.ble.generic.devices.XYCreator
import network.xyo.ble.generic.scanner.XYScanResult

open class XYAppleBluetoothDevice(context: Context, device: BluetoothDevice, hash: String) : XYBluetoothDevice(context, device, hash) {
open class XYAppleBluetoothDeviceListener : XYBluetoothDeviceListener()

open class Listener : XYBluetoothDevice.Listener()
open class XYAppleBluetoothDevice(context: Context, device: BluetoothDevice, hash: String) : XYBluetoothDevice(context, device, hash) {

companion object : XYBase() {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ import network.xyo.ble.generic.devices.XYBluetoothDevice
import network.xyo.ble.generic.devices.XYCreator
import network.xyo.ble.generic.scanner.XYScanResult

open class XYIBeaconBluetoothDeviceListener : XYAppleBluetoothDeviceListener() {
open fun onIBeaconDetect(uuid: String, major: UShort, minor: UShort) {
}
}

@kotlin.ExperimentalUnsignedTypes
open class XYIBeaconBluetoothDevice(context: Context, val scanResult: XYScanResult?, hash: String, transport: Int? = null) :
XYBluetoothDevice(context, scanResult?.device, hash, transport) {
Expand Down Expand Up @@ -62,11 +67,6 @@ open class XYIBeaconBluetoothDevice(context: Context, val scanResult: XYScanResu
}
}

open class Listener : XYAppleBluetoothDevice.Listener() {
open fun onIBeaconDetect(uuid: String, major: UShort, minor: UShort) {
}
}

open val distance: Double?
get() {
val rssi = rssi ?: return null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import network.xyo.ble.generic.scanner.XYScanResult
import network.xyo.ble.generic.services.standard.*
import network.xyo.ble.services.xy.*

open class XY2BluetoothDeviceListener : XYFinderBluetoothDeviceListener()

@kotlin.ExperimentalUnsignedTypes
open class XY2BluetoothDevice(context: Context, scanResult: XYScanResult, hash: String) : XYFinderBluetoothDevice(context, scanResult, hash) {

Expand All @@ -37,8 +39,6 @@ open class XY2BluetoothDevice(context: Context, scanResult: XYScanResult, hash:

override val prefix = "xy:ibeacon"

open class Listener : XYFinderBluetoothDevice.Listener()

companion object : XYBase() {

private val FAMILY_UUID = UUID.fromString("07775dd0-111b-11e4-9191-0800200c9a66")!!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ import network.xyo.ble.generic.scanner.XYScanResult
import network.xyo.ble.generic.services.standard.*
import network.xyo.ble.services.xy.*

open class XY3BluetoothDeviceListener : XYFinderBluetoothDeviceListener()

open class XY3BluetoothDevice(context: Context, scanResult: XYScanResult, hash: String) : XYFinderBluetoothDevice(context, scanResult, hash) {

val alertNotification by lazy { AlertNotificationService(this) }
Expand Down Expand Up @@ -115,8 +117,6 @@ open class XY3BluetoothDevice(context: Context, scanResult: XYScanResult, hash:
reportGlobalButtonPressed(this, state)
}

open class Listener : XYFinderBluetoothDevice.Listener()

companion object : XYBase() {

private val FAMILY_UUID = UUID.fromString("08885dd0-111b-11e4-9191-0800200c9a66")!!
Expand All @@ -126,7 +126,7 @@ open class XY3BluetoothDevice(context: Context, scanResult: XYScanResult, hash:

private val DEFAULT_LOCK_CODE = byteArrayOf(0x2f.toByte(), 0xbe.toByte(), 0xa2.toByte(), 0x07.toByte(), 0x52.toByte(), 0xfe.toByte(), 0xbf.toByte(), 0x31.toByte(), 0x1d.toByte(), 0xac.toByte(), 0x5d.toByte(), 0xfa.toByte(), 0x7d.toByte(), 0x77.toByte(), 0x76.toByte(), 0x80.toByte())

protected val globalListeners = HashMap<String, Listener>()
protected val globalListeners = HashMap<String, XY3BluetoothDeviceListener>()

fun enable(enable: Boolean) {
if (enable) {
Expand Down Expand Up @@ -170,7 +170,7 @@ open class XY3BluetoothDevice(context: Context, scanResult: XYScanResult, hash:
}
}

fun addGlobalListener(key: String, listener: Listener) {
fun addGlobalListener(key: String, listener: XY3BluetoothDeviceListener) {
GlobalScope.launch {
synchronized(globalListeners) {
globalListeners.put(key, listener)
Expand All @@ -190,7 +190,7 @@ open class XY3BluetoothDevice(context: Context, scanResult: XYScanResult, hash:
GlobalScope.launch {
synchronized(globalListeners) {
for (listener in globalListeners) {
val xyFinderListener = listener.value as? XYFinderBluetoothDevice.Listener
val xyFinderListener = listener.value as? XYFinderBluetoothDeviceListener
if (xyFinderListener != null) {
log.info("reportButtonPressed: $xyFinderListener")
GlobalScope.launch {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import network.xyo.ble.devices.apple.XYAppleBluetoothDevice
import network.xyo.ble.firmware.XYBluetoothDeviceUpdate
import network.xyo.ble.firmware.XYOtaFile
import network.xyo.ble.firmware.XYOtaUpdate
import network.xyo.ble.firmware.XYOtaUpdateListener
import network.xyo.ble.generic.devices.XYBluetoothDevice
import network.xyo.ble.generic.devices.XYCreator
import network.xyo.ble.generic.gatt.peripheral.XYBluetoothResult
Expand All @@ -23,6 +24,8 @@ import network.xyo.ble.generic.services.standard.*
import network.xyo.ble.services.dialog.SpotaService
import network.xyo.ble.services.xy.PrimaryService

open class XY4BluetoothDeviceListener : XYFinderBluetoothDeviceListener()

@kotlin.ExperimentalUnsignedTypes
open class XY4BluetoothDevice(
context: Context,
Expand Down Expand Up @@ -113,15 +116,15 @@ open class XY4BluetoothDevice(
}
}

override fun updateFirmware(folderName: String, filename: String, listener: XYOtaUpdate.Listener) {
override fun updateFirmware(folderName: String, filename: String, listener: XYOtaUpdateListener) {
val otaFile = XYOtaFile.getByName(folderName, filename)
val updater = XYBluetoothDeviceUpdate(spotaService, this, otaFile)

updater.addListener("XY4BluetoothDevice", listener)
updater.start()
}

override fun updateFirmware(stream: InputStream, listener: XYOtaUpdate.Listener) {
override fun updateFirmware(stream: InputStream, listener: XYOtaUpdateListener) {

val otaFile = XYOtaFile.getByStream(stream)
updater = XYBluetoothDeviceUpdate(spotaService, this, otaFile)
Expand Down Expand Up @@ -160,13 +163,11 @@ open class XY4BluetoothDevice(
return minorValue.and(0xfff0.toUShort()).or(0x0004.toUShort())
}

open class Listener : XYFinderBluetoothDevice.Listener()

companion object : XYBase() {

private val FAMILY_UUID = UUID.fromString("a44eacf4-0104-0000-0000-5f784c9977b5")!!

protected val globalListeners = HashMap<String, Listener>()
protected val globalListeners = HashMap<String, XY4BluetoothDeviceListener>()

val DefaultLockCode = byteArrayOf(0x00.toByte(), 0x01.toByte(), 0x02.toByte(), 0x03.toByte(), 0x04.toByte(), 0x05.toByte(), 0x06.toByte(), 0x07.toByte(), 0x08.toByte(), 0x09.toByte(), 0x0a.toByte(), 0x0b.toByte(), 0x0c.toByte(), 0x0d.toByte(), 0x0e.toByte(), 0x0f.toByte())

Expand All @@ -182,7 +183,7 @@ open class XY4BluetoothDevice(
}
}

fun addGlobalListener(key: String, listener: Listener) {
fun addGlobalListener(key: String, listener: XY4BluetoothDeviceListener) {
GlobalScope.launch {
synchronized(globalListeners) {
globalListeners.put(key, listener)
Expand All @@ -202,7 +203,7 @@ open class XY4BluetoothDevice(
GlobalScope.launch {
synchronized(globalListeners) {
for (listener in globalListeners) {
val xyFinderListener = listener.value as? XYFinderBluetoothDevice.Listener
val xyFinderListener = listener.value as? XYFinderBluetoothDeviceListener
if (xyFinderListener != null) {
log.info("reportButtonPressed: $xyFinderListener")
GlobalScope.launch {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,22 @@ import kotlinx.coroutines.launch
import network.xyo.base.XYBase
import network.xyo.ble.devices.apple.XYAppleBluetoothDevice
import network.xyo.ble.devices.apple.XYIBeaconBluetoothDevice
import network.xyo.ble.devices.apple.XYIBeaconBluetoothDeviceListener
import network.xyo.ble.firmware.XYOtaUpdate
import network.xyo.ble.firmware.XYOtaUpdateListener
import network.xyo.ble.generic.devices.XYBluetoothDevice
import network.xyo.ble.generic.devices.XYCreator
import network.xyo.ble.generic.gatt.peripheral.XYBluetoothResult
import network.xyo.ble.generic.scanner.XYScanResult

open class XYFinderBluetoothDeviceListener : XYIBeaconBluetoothDeviceListener() {
open fun buttonSinglePressed(device: XYFinderBluetoothDevice) {}

open fun buttonDoublePressed(device: XYFinderBluetoothDevice) {}

open fun buttonLongPressed(device: XYFinderBluetoothDevice) {}
}

@kotlin.ExperimentalUnsignedTypes
open class XYFinderBluetoothDevice(context: Context, scanResult: XYScanResult, hash: String) : XYIBeaconBluetoothDevice(context, scanResult, hash) {

Expand Down Expand Up @@ -157,10 +167,10 @@ open class XYFinderBluetoothDevice(context: Context, scanResult: XYScanResult, h
return@connection XYBluetoothResult<UByte>(XYBluetoothResult.ErrorCode.Unsupported)
}

open fun updateFirmware(stream: InputStream, listener: XYOtaUpdate.Listener) {
open fun updateFirmware(stream: InputStream, listener: XYOtaUpdateListener) {
}

open fun updateFirmware(folderName: String, filename: String, listener: XYOtaUpdate.Listener) {
open fun updateFirmware(folderName: String, filename: String, listener: XYOtaUpdateListener) {
}

open fun cancelUpdateFirmware() {
Expand All @@ -171,7 +181,7 @@ open class XYFinderBluetoothDevice(context: Context, scanResult: XYScanResult, h
GlobalScope.launch {
synchronized(listeners) {
for (listener in listeners) {
val xyFinderListener = listener.value as? Listener
val xyFinderListener = listener.value as? XYFinderBluetoothDeviceListener
if (xyFinderListener != null) {
log.info("reportButtonPressed: $xyFinderListener")
GlobalScope.launch {
Expand All @@ -189,14 +199,6 @@ open class XYFinderBluetoothDevice(context: Context, scanResult: XYScanResult, h
}
}

open class Listener : XYIBeaconBluetoothDevice.Listener() {
open fun buttonSinglePressed(device: XYFinderBluetoothDevice) {}

open fun buttonDoublePressed(device: XYFinderBluetoothDevice) {}

open fun buttonLongPressed(device: XYFinderBluetoothDevice) {}
}

companion object : XYBase() {

fun enable(enable: Boolean, canCreate: Boolean? = null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ import network.xyo.ble.generic.scanner.XYScanResult
import network.xyo.ble.generic.services.standard.*
import network.xyo.ble.services.xy.*

open class XYGpsBluetoothDeviceListener : XYFinderBluetoothDeviceListener()

@kotlin.ExperimentalUnsignedTypes
open class XYGpsBluetoothDevice(context: Context, scanResult: XYScanResult, hash: String) : XYFinderBluetoothDevice(context, scanResult, hash) {

Expand Down Expand Up @@ -76,14 +78,12 @@ open class XYGpsBluetoothDevice(context: Context, scanResult: XYScanResult, hash
// }
// }

open class Listener : XYFinderBluetoothDevice.Listener()

companion object : XYBase() {

private val FAMILY_UUID: UUID = UUID.fromString("9474f7c6-47a4-11e6-beb8-9e71128cae77")
val DEFAULT_LOCK_CODE = byteArrayOf(0x2f.toByte(), 0xbe.toByte(), 0xa2.toByte(), 0x07.toByte(), 0x52.toByte(), 0xfe.toByte(), 0xbf.toByte(), 0x31.toByte(), 0x1d.toByte(), 0xac.toByte(), 0x5d.toByte(), 0xfa.toByte(), 0x7d.toByte(), 0x77.toByte(), 0x76.toByte(), 0x80.toByte())

protected val globalListeners = HashMap<String, Listener>()
protected val globalListeners = HashMap<String, XYGpsBluetoothDeviceListener>()

enum class StayAwake(val state: Int) {
Off(0),
Expand All @@ -99,7 +99,7 @@ open class XYGpsBluetoothDevice(context: Context, scanResult: XYScanResult, hash
}
}

fun addGlobalListener(key: String, listener: Listener) {
fun addGlobalListener(key: String, listener: XYGpsBluetoothDeviceListener) {
GlobalScope.launch {
synchronized(globalListeners) {
globalListeners.put(key, listener)
Expand All @@ -120,7 +120,7 @@ open class XYGpsBluetoothDevice(context: Context, scanResult: XYScanResult, hash
GlobalScope.launch {
synchronized(globalListeners) {
for (listener in globalListeners) {
val xyFinderListener = listener.value as? XYFinderBluetoothDevice.Listener
val xyFinderListener = listener.value as? XYFinderBluetoothDeviceListener
if (xyFinderListener != null) {
log.info("reportButtonPressed: $xyFinderListener")
GlobalScope.launch {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import network.xyo.ble.services.dialog.SpotaService

class XYBluetoothDeviceUpdate(private var spotaService: SpotaService, var device: XYBluetoothDevice, private val otaFile: XYOtaFile?) : XYBase() {

private val listeners = HashMap<String, XYOtaUpdate.Listener>()
private val listeners = HashMap<String, XYOtaUpdateListener>()
private var updateJob: Job? = null
private var lastBlock = false
private var lastBlockSent = false
Expand Down Expand Up @@ -54,7 +54,7 @@ class XYBluetoothDeviceUpdate(private var spotaService: SpotaService, var device
}
}

fun addListener(key: String, listener: XYOtaUpdate.Listener) {
fun addListener(key: String, listener: XYOtaUpdateListener) {
GlobalScope.launch {
synchronized(listeners) {
listeners.put(key, listener)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ package network.xyo.ble.firmware
import network.xyo.base.XYBase
import network.xyo.ble.generic.devices.XYBluetoothDevice

open class XYOtaUpdateListener {
open fun updated(device: XYBluetoothDevice) {}
open fun failed(device: XYBluetoothDevice, error: String) {}
open fun progress(sent: Int, total: Int) {}
}

open class XYOtaUpdate : XYBase() {
open class Listener {
open fun updated(device: XYBluetoothDevice) {}
open fun failed(device: XYBluetoothDevice, error: String) {}
open fun progress(sent: Int, total: Int) {}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,24 @@ import network.xyo.ble.generic.gatt.peripheral.XYBluetoothGattClient
import network.xyo.ble.generic.scanner.XYScanRecord
import network.xyo.ble.generic.scanner.XYScanResult

open class XYBluetoothDeviceListener {
open fun entered(device: XYBluetoothDevice) {}

open fun exited(device: XYBluetoothDevice) {}

open fun detected(device: XYBluetoothDevice) {}

open fun connectionStateChanged(device: XYBluetoothDevice, newState: Int) {}
}

open class XYBluetoothDevice(context: Context, device: BluetoothDevice?, val hash: String, transport: Int? = null) : XYBluetoothGattClient(context, device, false, null, transport, null, null), Comparable<XYBluetoothDevice> {

// hash - the reason for the hash system is that some devices rotate MAC addresses or polymorph in other ways
// the user generally wants to treat a single physical device as a single logical device so the
// hash that is passed in to create the class is used to make sure that the reuse of existing instances
// is done based on device specific logic on "sameness"

protected val listeners = HashMap<String, Listener>()
protected val listeners = HashMap<String, XYBluetoothDeviceListener>()
val ads = SparseArray<XYBleAd>()

var detectCount = 0
Expand Down Expand Up @@ -205,7 +215,7 @@ open class XYBluetoothDevice(context: Context, device: BluetoothDevice?, val has
}
}

fun addListener(key: String, listener: Listener) {
fun addListener(key: String, listener: XYBluetoothDeviceListener) {
// log.info("addListener:$key:$listener")
GlobalScope.launch {
synchronized(listeners) {
Expand All @@ -223,16 +233,6 @@ open class XYBluetoothDevice(context: Context, device: BluetoothDevice?, val has
}
}

open class Listener {
open fun entered(device: XYBluetoothDevice) {}

open fun exited(device: XYBluetoothDevice) {}

open fun detected(device: XYBluetoothDevice) {}

open fun connectionStateChanged(device: XYBluetoothDevice, newState: Int) {}
}

internal fun updateAds(record: XYScanRecord) {
val buffer = ByteBuffer.wrap(record.bytes)
while (buffer.hasRemaining()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ import kotlinx.coroutines.launch
import network.xyo.ble.devices.xy.XYMobileBluetoothDevice
import network.xyo.ble.generic.XYBluetoothBase
import network.xyo.ble.generic.devices.XYBluetoothDevice
import network.xyo.ble.generic.devices.XYBluetoothDeviceListener

open class XYSmartScanListener : XYBluetoothDeviceListener() {
open fun statusChanged(status: XYSmartScan.Status) {
}
}

@kotlin.ExperimentalUnsignedTypes
abstract class XYSmartScan(context: Context) : XYBluetoothBase(context) {
Expand Down Expand Up @@ -145,12 +151,7 @@ abstract class XYSmartScan(context: Context) : XYBluetoothBase(context) {
}
}

private val listeners = HashMap<String, Listener>()

open class Listener : XYBluetoothDevice.Listener() {
open fun statusChanged(status: Status) {
}
}
private val listeners = HashMap<String, XYSmartScanListener>()

enum class ScanFailed {
Unknown,
Expand Down Expand Up @@ -203,7 +204,7 @@ abstract class XYSmartScan(context: Context) : XYBluetoothBase(context) {
BluetoothAdapter.getDefaultAdapter().disable()
}

fun addListener(key: String, listener: Listener) {
fun addListener(key: String, listener: XYSmartScanListener) {
GlobalScope.launch {
synchronized(listeners) {
listeners.put(key, listener)
Expand Down
Loading

0 comments on commit fbfd744

Please sign in to comment.