Files
sms-remote/android/src/main/kotlin/xyz/magicalbits/smsremote/device/Device.kt
T
2026-05-19 00:10:38 +02:00

98 lines
3.1 KiB
Kotlin

package xyz.magicalbits.smsremote.device
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.rememberNestedScrollInteropConnection
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import xyz.magicalbits.smsremote.R
import xyz.magicalbits.smsremote.components.baselineHeight
@Composable
fun DeviceScreen(
deviceData: DeviceScreenState,
nestedScrollInteropConnection: NestedScrollConnection = rememberNestedScrollInteropConnection(),
onPhoneNumberClicked: (String) -> Unit,
) {
val scrollState = rememberScrollState()
Box(
modifier = Modifier
.fillMaxSize()
.nestedScroll(nestedScrollInteropConnection),
) {
Surface {
Column(modifier = Modifier.fillMaxSize().verticalScroll(scrollState).padding(horizontal = 16.dp)) {
Name(deviceData, Modifier.baselineHeight(32.dp))
Spacer(modifier = Modifier.height(8.dp))
HorizontalDivider()
Spacer(modifier = Modifier.height(8.dp))
deviceData.phoneNumbers.forEach {
PhoneNumber(
value = it,
modifier = Modifier
.baselineHeight(24.dp)
.clickable(onClick = { onPhoneNumberClicked(it) }),
style = MaterialTheme.typography.bodyLarge.copy(color = MaterialTheme.colorScheme.primary, fontWeight = FontWeight.Bold, fontFamily = FontFamily.Monospace)
)
Spacer(modifier = Modifier.height(8.dp))
}
}
}
}
}
@Composable
private fun Name(
deviceData: DeviceScreenState,
modifier: Modifier
) {
Text(
text = deviceData.name,
modifier = modifier,
style = MaterialTheme.typography.headlineSmall
)
}
@Composable
private fun PhoneNumber(
value: String,
modifier: Modifier,
style: TextStyle
) {
Text(
text = value,
modifier = modifier,
style = style
)
}
@Composable
fun DeviceError() {
Text(stringResource(R.string.device_error))
}