UI Previews
UI Previews was added for service dialogs
This commit is contained in:
@@ -15,7 +15,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel
|
|||||||
import androidx.navigation.compose.NavHost
|
import androidx.navigation.compose.NavHost
|
||||||
import androidx.navigation.compose.composable
|
import androidx.navigation.compose.composable
|
||||||
import androidx.navigation.compose.rememberNavController
|
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.components.deviceScreen.DeviceControlScreen
|
||||||
import com.helible.pilot.viewmodels.AppPreferences
|
import com.helible.pilot.viewmodels.AppPreferences
|
||||||
import com.helible.pilot.viewmodels.SavedPreferencesImpl
|
import com.helible.pilot.viewmodels.SavedPreferencesImpl
|
||||||
@@ -101,7 +101,7 @@ class MainActivity : ComponentActivity() {
|
|||||||
startDestination = "device"
|
startDestination = "device"
|
||||||
) {
|
) {
|
||||||
composable("scanner") {
|
composable("scanner") {
|
||||||
BluetoothScannerScreen(
|
ScannerScreen(
|
||||||
bluetoothState = bluetoothState,
|
bluetoothState = bluetoothState,
|
||||||
selectedDevice = selectedDevice,
|
selectedDevice = selectedDevice,
|
||||||
startScan = { bluetoothViewModel.startScan() },
|
startScan = { bluetoothViewModel.startScan() },
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import androidx.compose.material3.Divider
|
|||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.material3.TextButton
|
import androidx.compose.material3.TextButton
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.MutableState
|
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun RequiredHardwareFeatures(
|
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 = {}
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -13,6 +13,7 @@ import androidx.compose.material3.Divider
|
|||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@@ -82,6 +83,16 @@ fun PermissionDialog(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Composable
|
||||||
|
fun PermissionDialogPreview() {
|
||||||
|
PermissionDialog(
|
||||||
|
LocationPermissionTextProvider(),
|
||||||
|
false,
|
||||||
|
{}, {}, {}, {}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
interface PermissionTextProvider {
|
interface PermissionTextProvider {
|
||||||
fun getDescription(isPermanentDeclined: Boolean): String
|
fun getDescription(isPermanentDeclined: Boolean): String
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import androidx.compose.foundation.layout.Box
|
|||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.fillMaxHeight
|
import androidx.compose.foundation.layout.fillMaxHeight
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.size
|
import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.material3.CardDefaults
|
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.text.font.FontWeight
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.helible.pilot.dataclasses.BluetoothDevice
|
|
||||||
import com.helible.pilot.R
|
import com.helible.pilot.R
|
||||||
|
import com.helible.pilot.dataclasses.BluetoothDevice
|
||||||
|
|
||||||
|
|
||||||
@SuppressLint("MissingPermission")
|
@SuppressLint("MissingPermission")
|
||||||
@Composable
|
@Composable
|
||||||
@@ -44,7 +44,9 @@ fun DeviceItem(
|
|||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
Row(modifier = Modifier.padding(8.dp)) {
|
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(
|
||||||
text = deviceInfo.name,
|
text = deviceInfo.name,
|
||||||
fontWeight = FontWeight.Bold,
|
fontWeight = FontWeight.Bold,
|
||||||
@@ -56,9 +58,10 @@ fun DeviceItem(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
if (deviceInfo.isScanned) {
|
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(
|
Icon(
|
||||||
painterResource(id = getSignalIconForRssiValue(deviceInfo.rssi)),
|
painterResource(id = icon),
|
||||||
contentDescription = null,
|
contentDescription = null,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxHeight()
|
.fillMaxHeight()
|
||||||
|
|||||||
@@ -7,14 +7,15 @@ import androidx.compose.foundation.layout.padding
|
|||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.items
|
import androidx.compose.foundation.lazy.items
|
||||||
import androidx.compose.material3.CircularProgressIndicator
|
import androidx.compose.material3.CircularProgressIndicator
|
||||||
|
import androidx.compose.material3.Surface
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.helible.pilot.components.scannerScreen.DeviceItem
|
|
||||||
import com.helible.pilot.dataclasses.BluetoothUiState
|
import com.helible.pilot.dataclasses.BluetoothUiState
|
||||||
import com.helible.pilot.dataclasses.BluetoothDevice
|
import com.helible.pilot.dataclasses.BluetoothDevice
|
||||||
|
|
||||||
@@ -102,3 +103,26 @@ fun DiscoveredDevicesList(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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 = {})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import androidx.compose.material3.Text
|
|||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.constraintlayout.compose.ConstraintLayout
|
import androidx.constraintlayout.compose.ConstraintLayout
|
||||||
import androidx.constraintlayout.compose.Dimension
|
import androidx.constraintlayout.compose.Dimension
|
||||||
@@ -28,7 +29,7 @@ import com.helible.pilot.dataclasses.BluetoothDevice
|
|||||||
|
|
||||||
@SuppressLint("MissingPermission")
|
@SuppressLint("MissingPermission")
|
||||||
@Composable
|
@Composable
|
||||||
fun BluetoothScannerScreen(
|
fun ScannerScreen(
|
||||||
bluetoothState: BluetoothUiState,
|
bluetoothState: BluetoothUiState,
|
||||||
selectedDevice: BluetoothDevice?,
|
selectedDevice: BluetoothDevice?,
|
||||||
startScan: () -> Unit,
|
startScan: () -> Unit,
|
||||||
@@ -107,3 +108,32 @@ 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],
|
||||||
|
{}, {},
|
||||||
|
{_ -> },
|
||||||
|
{},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user