XYOracleNetwork/sdk-ble-android

View on GitHub
ble-android-sample/src/main/kotlin/network/xyo/ble/sample/fragments/DeviceFragment.kt

Summary

Maintainability
A
1 hr
Test Coverage
package network.xyo.ble.sample.fragments

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import kotlinx.coroutines.launch
import network.xyo.ble.devices.xy.XYFinderBluetoothDevice
import network.xyo.ble.generic.devices.XYBluetoothDevice
import network.xyo.ble.generic.listeners.XYBluetoothDeviceListener
import network.xyo.ble.generic.gatt.peripheral.XYBluetoothResult
import network.xyo.ble.sample.R
import network.xyo.ble.sample.XYDeviceData
import network.xyo.ble.sample.databinding.FragmentDeviceBinding
import network.xyo.ble.generic.gatt.peripheral.ble

class DeviceFragment(device: XYBluetoothDevice, deviceData : XYDeviceData) : XYDeviceFragment<FragmentDeviceBinding>(device, deviceData) {

    override fun inflate(inflater: LayoutInflater, container: ViewGroup?): FragmentDeviceBinding {
        return FragmentDeviceBinding.inflate(inflater, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        binding.buttonDeviceRefresh.setOnClickListener {
            setDeviceValues()
        }
    }

    override fun onPause() {
        super.onPause()
        device.reporter.removeListener("DeviceFragment")
    }

    override fun onResume() {
        super.onResume()

        device.reporter.addListener("DeviceFragment", object: XYBluetoothDeviceListener() {
            override fun detected(device: XYBluetoothDevice) {
                updateUI()
                super.detected(device)
            }
        })

        updateUI()
    }

    fun updateUI() {
        activity?.runOnUiThread {


            binding.textSystemId.text = deviceData.systemId
            binding.textModelNumber.text = deviceData.modelNumberString
            binding.textSerialNumber.text = deviceData.serialNumberString
            binding.textFirmwareRevision.text = deviceData.firmwareRevisionString
            binding.textHardwareRevision.text = deviceData.hardwareRevisionString
            binding.textSoftwareRevision.text = deviceData.softwareRevisionString
            binding.textMfgName.text = deviceData.manufacturerNameString
            binding.textIeee.text = deviceData.ieeeRegulatoryCertificationDataList
            binding.textPnpId.text = deviceData.pnpId

        }
    }

    private fun setDeviceValues() {

        when (device) {
            is XYFinderBluetoothDevice -> {
                val xyFinder = (device as? XYFinderBluetoothDevice)
                xyFinder?.let { getInformationValues(it) }
            }
            else -> {
                binding.textSystemId.text = getString(R.string.unknown_device)
            }
        }
    }

    private fun getInformationValues(device: XYFinderBluetoothDevice) {
        ble.launch {
            var hasConnectionError = true

            device.connection {
                hasConnectionError = false

                deviceData.let {
                    it.systemId = device.deviceInformationService.systemId.get().format()
                    it.modelNumberString = device.deviceInformationService.modelNumberString.get().format()
                    it.serialNumberString = device.deviceInformationService.serialNumberString.get().format()
                    it.firmwareRevisionString = device.deviceInformationService.firmwareRevisionString.get().format()
                    it.hardwareRevisionString = device.deviceInformationService.hardwareRevisionString.get().format()
                    it.softwareRevisionString = device.deviceInformationService.softwareRevisionString.get().format()
                    it.manufacturerNameString = device.deviceInformationService.manufacturerNameString.get().format()
                    it.ieeeRegulatoryCertificationDataList = device.deviceInformationService.ieeeRegulatoryCertificationDataList.get().format()
                    it.pnpId = device.deviceInformationService.pnpId.get().format()
                }

                return@connection XYBluetoothResult(true)
            }

            updateUI()
            checkConnectionError(hasConnectionError)
        }
    }

}