98 lines
3.1 KiB
Kotlin
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))
|
|
}
|