Simplified dialpad implementation

This commit is contained in:
Juha Heinanen
2025-10-21 11:29:20 +03:00
parent 3afc40cfca
commit a051885eca
4 changed files with 19 additions and 37 deletions

View File

@ -672,8 +672,6 @@ private fun TopAppBar(
@Composable
private fun BottomBar(ctx: Context, viewModel: ViewModel, navController: NavController) {
// ... (the top part of your function is the same) ...
val dialpadIcon by viewModel.dialpadIcon.collectAsState()
val aor by viewModel.selectedAor.collectAsState()
val accountUpdate by viewModel.accountUpdate.collectAsState()
@ -690,6 +688,8 @@ private fun BottomBar(ctx: Context, viewModel: ViewModel, navController: NavCont
if (aor.isNotEmpty()) Account.ofAor(aor)?.missedCalls ?: false else false
}
val isDialpadVisible by viewModel.isDialpadVisible.collectAsState()
val buttonSize = 48.dp
Row(
@ -751,10 +751,8 @@ private fun BottomBar(ctx: Context, viewModel: ViewModel, navController: NavCont
}
IconButton(
// Disable the button if no account is selected
enabled = aor.isNotEmpty(),
onClick = {
// No need for an 'if' check here anymore
navController.navigate("chats/$aor")
},
modifier = Modifier
@ -770,10 +768,8 @@ private fun BottomBar(ctx: Context, viewModel: ViewModel, navController: NavCont
}
IconButton(
// Disable the button if no account is selected
enabled = aor.isNotEmpty(),
onClick = {
// No need for an 'if' check here anymore
navController.navigate("calls/$aor")
},
modifier = Modifier
@ -789,21 +785,18 @@ private fun BottomBar(ctx: Context, viewModel: ViewModel, navController: NavCont
}
IconButton(
onClick = {
viewModel.updateDialpadIcon(
if (dialpadIcon == R.drawable.dialpad_off) R.drawable.dialpad_on else R.drawable.dialpad_off
)
},
modifier = Modifier
.weight(1f)
.size(buttonSize),
onClick = { viewModel.toggleDialpadVisibility() },
modifier = Modifier.weight(1f).size(buttonSize),
enabled = dialpadButtonEnabled.value
) {
Icon(
imageVector = ImageVector.vectorResource(dialpadIcon),
imageVector = ImageVector.vectorResource(R.drawable.dialpad),
contentDescription = null,
modifier = Modifier.size(buttonSize),
tint = if (dialpadIcon == R.drawable.dialpad_off) MaterialTheme.colorScheme.secondary else MaterialTheme.colorScheme.error
tint = if (isDialpadVisible)
MaterialTheme.colorScheme.error
else
MaterialTheme.colorScheme.secondary
)
}
}
@ -1136,7 +1129,7 @@ private fun CallUriRow(ctx: Context, viewModel: ViewModel) {
var filteredSuggestions by remember { mutableStateOf(suggestions) }
val focusRequester = remember { FocusRequester() }
val lazyListState = rememberLazyListState()
val dialpadIcon by viewModel.dialpadIcon.collectAsState()
val isDialpadVisible by viewModel.isDialpadVisible.collectAsState()
Row(modifier = Modifier
.fillMaxWidth()
@ -1184,11 +1177,12 @@ private fun CallUriRow(ctx: Context, viewModel: ViewModel) {
val account = Account.ofAor(viewModel.selectedAor.value)
if (account != null)
if (account.numericKeypad)
viewModel.updateDialpadIcon(R.drawable.dialpad_on)
if (isDialpadVisible)
viewModel.toggleDialpadVisibility()
},
label = { Text(text = callUriLabel.value, fontSize = 18.sp) },
textStyle = TextStyle(fontSize = 18.sp),
keyboardOptions = if (dialpadIcon == R.drawable.dialpad_on)
keyboardOptions = if (isDialpadVisible)
KeyboardOptions(keyboardType = KeyboardType.Phone)
else
KeyboardOptions(keyboardType = KeyboardType.Text)
@ -1330,7 +1324,7 @@ private fun CallUriRow(ctx: Context, viewModel: ViewModel) {
@Composable
private fun CallRow(ctx: Context, viewModel: ViewModel) {
val dialpadIcon by viewModel.dialpadIcon.collectAsState()
val isDialpadVisible by viewModel.isDialpadVisible.collectAsState()
Row( modifier = Modifier
.fillMaxWidth()
@ -1546,7 +1540,7 @@ private fun CallRow(ctx: Context, viewModel: ViewModel) {
.focusRequester(focusRequester),
label = { Text(stringResource(R.string.transfer_destination)) },
textStyle = TextStyle(fontSize = 18.sp),
keyboardOptions = if (dialpadIcon == R.drawable.dialpad_on)
keyboardOptions = if (isDialpadVisible)
KeyboardOptions(keyboardType = KeyboardType.Phone)
else
KeyboardOptions(keyboardType = KeyboardType.Text)

View File

@ -80,18 +80,11 @@ class ViewModel(application: Application) : AndroidViewModel(application) {
_micIcon.value = iconResId
}
private val _showVmIcon = MutableStateFlow(false)
val showVmIcon: StateFlow<Boolean> = _showVmIcon.asStateFlow()
private val _isDialpadVisible = MutableStateFlow(false)
val isDialpadVisible: StateFlow<Boolean> = _isDialpadVisible
fun updateShowVmIcon(show: Boolean) {
_showVmIcon.value = show
}
private val _dialpadIcon = MutableStateFlow(R.drawable.dialpad_off)
val dialpadIcon: StateFlow<Int> = _dialpadIcon.asStateFlow()
fun updateDialpadIcon(newIcon: Int) {
_dialpadIcon.value = newIcon
fun toggleDialpadVisibility() {
_isDialpadVisible.value = !_isDialpadVisible.value
}
private val _selectedCallRow = MutableStateFlow<CallRow?>(null)

View File

@ -1,5 +0,0 @@
<vector android:height="40dp"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="40dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M12,19c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM6,1c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM6,7c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM6,13c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM18,5c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,13c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM18,13c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM18,7c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,7c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,1c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"/>
</vector>