Replaced speaker drawables with Material Design icon

This commit is contained in:
Juha Heinanen
2025-11-19 08:59:54 +02:00
parent 0a44131a6b
commit 03db321146
5 changed files with 7 additions and 34 deletions

View File

@ -138,11 +138,6 @@ class MainActivity : ComponentActivity() {
comDevChangedListener = AudioManager.OnCommunicationDeviceChangedListener { device ->
if (device != null) {
Log.d(TAG, "Com device changed to type ${device.type} in mode ${am.mode}")
val speakerIcon = if (Utils.isSpeakerPhoneOn(am))
R.drawable.speaker_on
else
R.drawable.speaker_off
viewModel.updateSpeakerIcon(speakerIcon)
}
}
am.addOnCommunicationDeviceChangedListener(mainExecutor, comDevChangedListener)

View File

@ -61,6 +61,7 @@ import androidx.compose.material.icons.filled.Menu
import androidx.compose.material.icons.filled.Mic
import androidx.compose.material.icons.filled.MicOff
import androidx.compose.material.icons.filled.RecordVoiceOver
import androidx.compose.material.icons.filled.SpeakerPhone
import androidx.compose.material.icons.filled.VoiceOverOff
import androidx.compose.material.icons.outlined.Clear
import androidx.compose.material3.BasicAlertDialog
@ -499,7 +500,6 @@ private fun TopAppBar(
onQuitClick: () -> Unit
) {
val ctx = LocalContext.current
val currentSpeakerIcon by viewModel.speakerIcon.collectAsState()
val currentMicIcon by viewModel.micIcon.collectAsState()
val am = ctx.getSystemService(Context.AUDIO_SERVICE) as AudioManager
@ -507,6 +507,7 @@ private fun TopAppBar(
val recOffImage = Icons.Filled.VoiceOverOff
val recOnImage = Icons.Filled.RecordVoiceOver
var recImage by remember { mutableStateOf(recOffImage) }
val isSpeakerOn = remember { mutableStateOf(Utils.isSpeakerPhoneOn(am)) }
var menuExpanded by remember { mutableStateOf(false) }
@ -605,23 +606,17 @@ private fun TopAppBar(
Spacer(modifier = Modifier.width(16.dp))
Icon(
imageVector = ImageVector.vectorResource(currentSpeakerIcon),
imageVector = Icons.Filled.SpeakerPhone,
modifier = Modifier
.size(40.dp)
.combinedClickable(
onClick = {
if (Build.VERSION.SDK_INT >= 31)
Log.d(
TAG, "Toggling speakerphone when dev/mode is " +
"${am.communicationDevice!!.type}/${am.mode}"
Log.d(TAG, "Toggling speakerphone when dev/mode is " +
"${am.communicationDevice!!.type}/${am.mode}"
)
isSpeakerOn.value = !Utils.isSpeakerPhoneOn(am)
Utils.toggleSpeakerPhone(ContextCompat.getMainExecutor(ctx), am)
viewModel.updateSpeakerIcon(
if (Utils.isSpeakerPhoneOn(am))
R.drawable.speaker_on
else
R.drawable.speaker_off
)
},
onLongClick = {
alertTitle.value = ctx.getString(R.string.speakerphone_title)
@ -629,7 +624,7 @@ private fun TopAppBar(
showAlert.value = true
},
),
tint = if (Utils.isSpeakerPhoneOn(am))
tint = if (isSpeakerOn.value)
MaterialTheme.colorScheme.error
else
MaterialTheme.colorScheme.onPrimary,

View File

@ -69,13 +69,6 @@ class ViewModel(application: Application) : AndroidViewModel(application) {
_hideKeyboard.intValue++
}
private val _speakerIcon = MutableStateFlow(R.drawable.speaker_off)
val speakerIcon: StateFlow<Int> = _speakerIcon.asStateFlow()
fun updateSpeakerIcon(iconResId: Int) {
_speakerIcon.value = iconResId
}
private val _micIcon = MutableStateFlow(Icons.Filled.Mic)
val micIcon: StateFlow<ImageVector> = _micIcon.asStateFlow()

View File

@ -1,5 +0,0 @@
<vector android:height="48dp"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M7,7.07L8.43,8.5c0.91,-0.91 2.18,-1.48 3.57,-1.48s2.66,0.57 3.57,1.48L17,7.07C15.72,5.79 13.95,5 12,5s-3.72,0.79 -5,2.07zM12,1C8.98,1 6.24,2.23 4.25,4.21l1.41,1.41C7.28,4 9.53,3 12,3s4.72,1 6.34,2.62l1.41,-1.41C17.76,2.23 15.02,1 12,1zM14.86,10.01L9.14,10C8.51,10 8,10.51 8,11.14v9.71c0,0.63 0.51,1.14 1.14,1.14h5.71c0.63,0 1.14,-0.51 1.14,-1.14v-9.71c0.01,-0.63 -0.5,-1.13 -1.13,-1.13zM15,20L9,20v-8h6v8z"/>
</vector>

View File

@ -1,5 +0,0 @@
<vector android:height="48dp"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M7,7.07L8.43,8.5c0.91,-0.91 2.18,-1.48 3.57,-1.48s2.66,0.57 3.57,1.48L17,7.07C15.72,5.79 13.95,5 12,5s-3.72,0.79 -5,2.07zM12,1C8.98,1 6.24,2.23 4.25,4.21l1.41,1.41C7.28,4 9.53,3 12,3s4.72,1 6.34,2.62l1.41,-1.41C17.76,2.23 15.02,1 12,1zM14.86,10.01L9.14,10C8.51,10 8,10.51 8,11.14v9.71c0,0.63 0.51,1.14 1.14,1.14h5.71c0.63,0 1.14,-0.51 1.14,-1.14v-9.71c0.01,-0.63 -0.5,-1.13 -1.13,-1.13zM15,20L9,20v-8h6v8z"/>
</vector>