diff --git a/composeApp/src/commonMain/kotlin/App.kt b/composeApp/src/commonMain/kotlin/App.kt index 6d96597..3abed76 100644 --- a/composeApp/src/commonMain/kotlin/App.kt +++ b/composeApp/src/commonMain/kotlin/App.kt @@ -1,5 +1,4 @@ import androidx.compose.animation.AnimatedVisibility -import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -8,7 +7,9 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll import androidx.compose.material.AlertDialog import androidx.compose.material.Button import androidx.compose.material.CircularProgressIndicator @@ -35,7 +36,6 @@ import com.dilivva.blueline.builder.buildPrintData import com.dilivva.blueline.connection.bluetooth.BlueLine import com.dilivva.blueline.connection.bluetooth.ConnectionError import com.dilivva.blueline.connection.bluetooth.ConnectionState -import escposprinter.composeapp.generated.resources.Res import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO @@ -143,18 +143,18 @@ fun ConnectionItem( var image by remember { mutableStateOf(null) } var imageBytes by remember { mutableStateOf(byteArrayOf()) } - LaunchedEffect(Unit){ - val bytes = Res.readBytes("drawable/label.png") - imageBytes = bytes - image = getPlatform().toImage(bytes) - } +// LaunchedEffect(Unit){ +// val bytes = Res.readBytes("drawable/label.png") +// imageBytes = bytes +// image = getPlatform().toImage(bytes) +// } Box( modifier = Modifier.fillMaxWidth().padding(20.dp) .background(Color.LightGray.copy(alpha = 0.2f), RoundedCornerShape(15.dp)) .padding(8.dp) ){ - Column(modifier = Modifier.fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(15.dp)){ + Column(modifier = Modifier.fillMaxWidth().verticalScroll(rememberScrollState(), enabled = true), verticalArrangement = Arrangement.spacedBy(15.dp)){ Text( text = connectionState.deviceName, fontSize = 14.sp, @@ -190,6 +190,11 @@ fun ConnectionItem( enabled = !connectionState.isConnected && connectionState.discoveredPrinter ){ Text("Connect") + if (connectionState.isConnecting) { + CircularProgressIndicator( + color = Color.White + ) + } } Button( @@ -223,14 +228,13 @@ fun ConnectionItem( } } - - image?.let { - Image( - bitmap = it, - contentDescription = null, - modifier = Modifier.fillMaxWidth() - ) - } +// image?.let { +// Image( +// bitmap = it, +// contentDescription = null, +// modifier = Modifier.fillMaxWidth() +// ) +// } } } } diff --git a/library/build.gradle.kts b/library/build.gradle.kts index 234f7d4..d0c91b4 100644 --- a/library/build.gradle.kts +++ b/library/build.gradle.kts @@ -53,7 +53,7 @@ android { @Suppress("UnstableApiUsage") mavenPublishing { publishToMavenCentral(SonatypeHost.S01, true) - val versionTxt = "0.0.6" + val versionTxt = "0.0.7" val isDev = findProperty("env")?.equals("dev") ?: false val version = if (isDev) "0.0.1-SNAPSHOT" else versionTxt diff --git a/library/src/androidMain/kotlin/com/dilivva/blueline/connection/bluetooth/AndroidBluetoothConnection.kt b/library/src/androidMain/kotlin/com/dilivva/blueline/connection/bluetooth/AndroidBluetoothConnection.kt index 13b708e..2cc63ec 100644 --- a/library/src/androidMain/kotlin/com/dilivva/blueline/connection/bluetooth/AndroidBluetoothConnection.kt +++ b/library/src/androidMain/kotlin/com/dilivva/blueline/connection/bluetooth/AndroidBluetoothConnection.kt @@ -25,6 +25,7 @@ package com.dilivva.blueline.connection.bluetooth import android.annotation.SuppressLint import android.bluetooth.BluetoothAdapter +import android.bluetooth.BluetoothClass import android.bluetooth.BluetoothDevice import android.bluetooth.BluetoothGatt import android.bluetooth.BluetoothGattCallback @@ -55,7 +56,6 @@ internal class AndroidBluetoothConnection: BlueLine { //Service UUID is 16bit e.g FF00, to scan we'll have to use 0000xxxx-0000-1000-8000-00805F9B34FB private val printerUUID = ParcelUuid.fromString("000018F0-0000-1000-8000-00805F9B34FB") private val characterUuid = UUID.fromString("00002AF1-0000-1000-8000-00805F9B34FB") - private val bondedUUID = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb") private var bluetoothDevice: BluetoothDevice? = null private var bluetoothLeScanner = bluetoothAdapter?.bluetoothLeScanner @@ -97,10 +97,16 @@ internal class AndroidBluetoothConnection: BlueLine { override fun onConnectionStateChange(gatt: BluetoothGatt?, status: Int, newState: Int) { if (newState == BluetoothProfile.STATE_CONNECTED) { - stateFlow.update { state -> state.copy(isConnected = true) } + stateFlow.update { state -> state.copy(isConnected = true, isConnecting = false) } gatt?.discoverServices() }else{ - stateFlow.update { state -> state.copy(isConnected = false) } + stateFlow.update { + it.copy( + isConnecting = false, + isConnected = false, + bluetoothConnectionError = ConnectionError.BLUETOOTH_PRINTER_DEVICE_NOT_FOUND + ) + } } } @@ -183,6 +189,7 @@ internal class AndroidBluetoothConnection: BlueLine { } override fun connect() { + stateFlow.update { it.copy(isConnecting = true) } val state = stateFlow.value if (!state.isBluetoothReady || state.isConnected){ return @@ -235,7 +242,7 @@ internal class AndroidBluetoothConnection: BlueLine { } private fun BluetoothDevice.isPrinter(): Boolean{ - return uuids.any { it.uuid == bondedUUID } + return bluetoothClass.majorDeviceClass == BluetoothClass.Device.Major.IMAGING && bluetoothClass.deviceClass == 1664 } } \ No newline at end of file diff --git a/library/src/commonMain/kotlin/com/dilivva/blueline/connection/bluetooth/Connection.kt b/library/src/commonMain/kotlin/com/dilivva/blueline/connection/bluetooth/Connection.kt index 745b31d..99ba8c3 100644 --- a/library/src/commonMain/kotlin/com/dilivva/blueline/connection/bluetooth/Connection.kt +++ b/library/src/commonMain/kotlin/com/dilivva/blueline/connection/bluetooth/Connection.kt @@ -73,5 +73,6 @@ data class ConnectionState( val isBluetoothReady: Boolean = false, val bluetoothConnectionError: ConnectionError? = null, val isPrinting: Boolean = false, - val isScanning: Boolean = false + val isScanning: Boolean = false, + val isConnecting:Boolean = false ) diff --git a/library/src/iosMain/kotlin/com/dilivva/blueline/connection/bluetooth/IosBluetoothConnection.kt b/library/src/iosMain/kotlin/com/dilivva/blueline/connection/bluetooth/IosBluetoothConnection.kt index 22717d1..f6108b4 100644 --- a/library/src/iosMain/kotlin/com/dilivva/blueline/connection/bluetooth/IosBluetoothConnection.kt +++ b/library/src/iosMain/kotlin/com/dilivva/blueline/connection/bluetooth/IosBluetoothConnection.kt @@ -59,7 +59,7 @@ internal object IosBluetoothConnection: BlueLine { stateFlow.update { state -> state.copy(deviceName = device.name.orEmpty(), discoveredPrinter = true, isScanning = false) } }, onConnection = { - stateFlow.update { state -> state.copy(isConnected = it) } + stateFlow.update { state -> state.copy(isConnected = it, isConnecting = false) } }, onBluetoothReady = { stateFlow.update { state -> @@ -71,7 +71,7 @@ internal object IosBluetoothConnection: BlueLine { private val peripheralManager = PeripheralManager( onCharacter = { character -> characteristic = character - stateFlow.update { state -> state.copy(canPrint = true) } + stateFlow.update { state -> state.copy(canPrint = true, isConnecting = false) } val mtu = peripheral?.maximumWriteValueLengthForType(CBCharacteristicWriteWithResponse)?.toInt() printerHelper.mtu = mtu ?: 20 }, @@ -121,6 +121,7 @@ internal object IosBluetoothConnection: BlueLine { } override fun connect() { + stateFlow.update { it.copy(isConnecting = true) } val state = stateFlow.value if (!state.isBluetoothReady || state.isConnected){ return diff --git a/library/src/iosMain/kotlin/com/dilivva/blueline/connection/bluetooth/PeripheralManager.kt b/library/src/iosMain/kotlin/com/dilivva/blueline/connection/bluetooth/PeripheralManager.kt index f31a8ea..0ea2ffc 100644 --- a/library/src/iosMain/kotlin/com/dilivva/blueline/connection/bluetooth/PeripheralManager.kt +++ b/library/src/iosMain/kotlin/com/dilivva/blueline/connection/bluetooth/PeripheralManager.kt @@ -42,4 +42,6 @@ internal class PeripheralManager( onWrite(error == null) } + + } \ No newline at end of file