First commit

This commit is contained in:
2023-08-19 22:04:05 +07:00
parent 833f8a99c1
commit a956bc3564
61 changed files with 2163 additions and 0 deletions

View File

@@ -0,0 +1,118 @@
package com.helible.pilot.components
import android.annotation.SuppressLint
import android.bluetooth.BluetoothAdapter
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
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.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material.icons.filled.Refresh
import androidx.compose.material3.Button
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.FilledIconToggleButton
import androidx.compose.material3.Icon
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.constraintlayout.compose.ConstraintLayout
import androidx.constraintlayout.compose.Dimension
import com.helible.pilot.Device
@SuppressLint("MissingPermission")
@Composable
fun BluetoothScannerScreen(
devices: MutableList<Device>,
selectedDevice: MutableState<Device?>,
bluetoothIsDiscoveringState: MutableState<Boolean>,
bluetoothAdapter: BluetoothAdapter?,
onScreenChanged: () -> Unit,
modifier: Modifier = Modifier
) {
Surface(
modifier = modifier,
) {
ConstraintLayout(modifier = Modifier.fillMaxSize()) {
val (title, devicesList, controls) = createRefs()
Title(
text = "Поиск устройств",
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 10.dp)
.constrainAs(title) {}
)
DiscoveredDevicesList(
devices = devices,
selectedDevice = selectedDevice,
modifier = Modifier
.constrainAs(devicesList) {
top.linkTo(title.bottom)
bottom.linkTo(controls.top)
height = Dimension.fillToConstraints
}
)
if (devices.isEmpty() && bluetoothIsDiscoveringState.value) {
Box(
modifier = Modifier.fillMaxSize()
) {
CircularProgressIndicator(modifier = Modifier.align(Alignment.Center))
}
}
Row(
modifier = Modifier
.padding(5.dp)
.constrainAs(controls) {
bottom.linkTo(parent.bottom)
width = Dimension.matchParent
height = Dimension.fillToConstraints
},
horizontalArrangement = Arrangement.Center
) {
FilledIconToggleButton(
checked = bluetoothIsDiscoveringState.value,
onCheckedChange = {
selectedDevice.value = null
if (bluetoothIsDiscoveringState.value)
bluetoothAdapter?.cancelDiscovery()
else {
devices.clear()
bluetoothAdapter?.startDiscovery()
}
}, modifier = Modifier
.align(Alignment.Bottom)
.padding(5.dp)
) {
Icon(
if (bluetoothIsDiscoveringState.value) Icons.Filled.Close
else Icons.Filled.Refresh,
contentDescription = null
)
}
Button(
onClick = {
onScreenChanged()
},
modifier = Modifier
.align(Alignment.Bottom)
.padding(5.dp),
enabled = selectedDevice.value != null,
) {
Text(text = "Далее")
}
}
}
}
}