diff --git a/app/src/main/java/com/helible/pilot/MainActivity.kt b/app/src/main/java/com/helible/pilot/MainActivity.kt index 57e37c5..b68ee7d 100644 --- a/app/src/main/java/com/helible/pilot/MainActivity.kt +++ b/app/src/main/java/com/helible/pilot/MainActivity.kt @@ -15,7 +15,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController -import com.helible.pilot.components.scannerScreen.BluetoothScannerScreen +import com.helible.pilot.components.scannerScreen.ScannerScreen import com.helible.pilot.components.deviceScreen.DeviceControlScreen import com.helible.pilot.viewmodels.AppPreferences import com.helible.pilot.viewmodels.SavedPreferencesImpl @@ -101,7 +101,7 @@ class MainActivity : ComponentActivity() { startDestination = "device" ) { composable("scanner") { - BluetoothScannerScreen( + ScannerScreen( bluetoothState = bluetoothState, selectedDevice = selectedDevice, startScan = { bluetoothViewModel.startScan() }, diff --git a/app/src/main/java/com/helible/pilot/components/FeatureRequestDialog.kt b/app/src/main/java/com/helible/pilot/components/FeatureRequestDialog.kt index 176d536..01efbdb 100644 --- a/app/src/main/java/com/helible/pilot/components/FeatureRequestDialog.kt +++ b/app/src/main/java/com/helible/pilot/components/FeatureRequestDialog.kt @@ -6,8 +6,8 @@ import androidx.compose.material3.Divider import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable -import androidx.compose.runtime.MutableState import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview @Composable fun RequiredHardwareFeatures( @@ -36,3 +36,16 @@ fun RequiredHardwareFeatures( ) } } + +@Preview +@Composable +fun RequiredHardwareFeaturesPreview() { + RequiredHardwareFeatures( + title = "Turn on Bluetooth", + description = "App requires Bluetooth turned on to continue", + confirmButtonText = "Turn on", + featureState = false, + requestFeature = {}, + onDismissRequest = {} + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/helible/pilot/components/PermissionDialog.kt b/app/src/main/java/com/helible/pilot/components/PermissionDialog.kt index cac8857..0a93b2e 100644 --- a/app/src/main/java/com/helible/pilot/components/PermissionDialog.kt +++ b/app/src/main/java/com/helible/pilot/components/PermissionDialog.kt @@ -13,6 +13,7 @@ import androidx.compose.material3.Divider import androidx.compose.material3.Text import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @Composable @@ -82,6 +83,16 @@ fun PermissionDialog( ) } +@Preview +@Composable +fun PermissionDialogPreview() { + PermissionDialog( + LocationPermissionTextProvider(), + false, + {}, {}, {}, {} + ) +} + interface PermissionTextProvider { fun getDescription(isPermanentDeclined: Boolean): String } diff --git a/app/src/main/java/com/helible/pilot/components/scannerScreen/DeviceItem.kt b/app/src/main/java/com/helible/pilot/components/scannerScreen/DeviceItem.kt index 3fa7381..fc7200a 100644 --- a/app/src/main/java/com/helible/pilot/components/scannerScreen/DeviceItem.kt +++ b/app/src/main/java/com/helible/pilot/components/scannerScreen/DeviceItem.kt @@ -7,7 +7,6 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material3.CardDefaults @@ -22,8 +21,9 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.helible.pilot.dataclasses.BluetoothDevice import com.helible.pilot.R +import com.helible.pilot.dataclasses.BluetoothDevice + @SuppressLint("MissingPermission") @Composable @@ -44,7 +44,9 @@ fun DeviceItem( ) ) { Row(modifier = Modifier.padding(8.dp)) { - Column(verticalArrangement = Arrangement.Center, modifier = Modifier.fillMaxHeight()) { + Column(verticalArrangement = Arrangement.Center, + modifier = Modifier.fillMaxHeight().weight(1f, true) + ) { Text( text = deviceInfo.name, fontWeight = FontWeight.Bold, @@ -56,9 +58,10 @@ fun DeviceItem( ) } if (deviceInfo.isScanned) { - Box(contentAlignment = Alignment.CenterEnd, modifier = Modifier.fillMaxSize()) { + val icon = getSignalIconForRssiValue(deviceInfo.rssi) + Box(contentAlignment = Alignment.CenterEnd, modifier = Modifier.weight(0.3f)) { Icon( - painterResource(id = getSignalIconForRssiValue(deviceInfo.rssi)), + painterResource(id = icon), contentDescription = null, modifier = Modifier .fillMaxHeight() diff --git a/app/src/main/java/com/helible/pilot/components/scannerScreen/DiscoveredDevicesList.kt b/app/src/main/java/com/helible/pilot/components/scannerScreen/DiscoveredDevicesList.kt index 7a4acb4..0ab553a 100644 --- a/app/src/main/java/com/helible/pilot/components/scannerScreen/DiscoveredDevicesList.kt +++ b/app/src/main/java/com/helible/pilot/components/scannerScreen/DiscoveredDevicesList.kt @@ -7,14 +7,15 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.helible.pilot.components.scannerScreen.DeviceItem import com.helible.pilot.dataclasses.BluetoothUiState import com.helible.pilot.dataclasses.BluetoothDevice @@ -101,4 +102,27 @@ fun DiscoveredDevicesList( } } } -} \ No newline at end of file +} + +@Preview +@Composable +fun DiscoveredDevicesListPreview() { + val state = BluetoothUiState( + pairedBluetoothDevices = listOf( + BluetoothDevice("My car", "AA:BB:CC:DD:FF", -70, false), + BluetoothDevice("Speaker", "AA:BB:CC:DD:FF", -20, false), + BluetoothDevice("My TV", "AA:BB:CC:DD:FF", 10, false), + BluetoothDevice("My phone", "AA:BB:CC:DD:FF", -50, false), + BluetoothDevice("Mi Band 6", "AA:BB:CC:DD:FF", -100, false), + ), + scannedBluetoothDevices = listOf( + BluetoothDevice("Watch", "AA:BB:CC:DD:FF", -10, true), + BluetoothDevice("Mi Cleaner", "AA:BB:CC:DD:FF", -90, true), + BluetoothDevice("My fridge", "AA:BB:CC:DD:FF", -100, true), + BluetoothDevice("Unknown device", "AA:BB:CC:DD:FF", -130, true) + ) + ) + Surface { + DiscoveredDevicesList(bluetoothState = state, selectedDevice = null, choiceDevice = {}) + } +} diff --git a/app/src/main/java/com/helible/pilot/components/scannerScreen/ScannerScreen.kt b/app/src/main/java/com/helible/pilot/components/scannerScreen/ScannerScreen.kt index 8defc25..8a52042 100644 --- a/app/src/main/java/com/helible/pilot/components/scannerScreen/ScannerScreen.kt +++ b/app/src/main/java/com/helible/pilot/components/scannerScreen/ScannerScreen.kt @@ -18,6 +18,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.constraintlayout.compose.ConstraintLayout import androidx.constraintlayout.compose.Dimension @@ -28,7 +29,7 @@ import com.helible.pilot.dataclasses.BluetoothDevice @SuppressLint("MissingPermission") @Composable -fun BluetoothScannerScreen( +fun ScannerScreen( bluetoothState: BluetoothUiState, selectedDevice: BluetoothDevice?, startScan: () -> Unit, @@ -106,4 +107,33 @@ fun BluetoothScannerScreen( } } } +} + +@Preview +@Composable +fun ScannerScreenPreview() { + val state = BluetoothUiState( + pairedBluetoothDevices = listOf( + BluetoothDevice("My car", "AA:BB:CC:DD:FF", -70, false), + BluetoothDevice("Speaker", "AA:BB:CC:DD:FF", -20, false), + BluetoothDevice("My TV", "AA:BB:CC:DD:FF", 10, false), + BluetoothDevice("My phone", "AA:BB:CC:DD:FF", -50, false), + BluetoothDevice("Mi Band 6", "AA:BB:CC:DD:FF", -100, false), + ), + scannedBluetoothDevices = listOf( + BluetoothDevice("Watch", "AA:BB:CC:DD:FF", -10, true), + BluetoothDevice("Mi Cleaner", "AA:BB:CC:DD:FF", -90, true), + BluetoothDevice("My fridge", "AA:BB:CC:DD:FF", -100, true), + BluetoothDevice("Unknown device", "AA:BB:CC:DD:FF", -130, true) + ) + ) + Surface { + ScannerScreen( + state, + state.scannedBluetoothDevices[1], + {}, {}, + {_ -> }, + {}, + ) + } } \ No newline at end of file