srctree

Robin Linden parent 44f53ec4 a47b5563
Fix incoming call notifications not displaying the contact's name

inlinesplit
atox/src/main/kotlin/ActionReceiver.kt added: 38, removed: 10, total 28
@@ -8,13 +8,20 @@ import android.Manifest
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.util.Log
import android.widget.Toast
import androidx.core.app.RemoteInput
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import ltd.evilcorp.atox.ui.NotificationHelper
import ltd.evilcorp.core.vo.Contact
import ltd.evilcorp.domain.feature.CallManager
import ltd.evilcorp.domain.feature.ChatManager
import ltd.evilcorp.domain.feature.ContactManager
import ltd.evilcorp.domain.tox.PublicKey
import ltd.evilcorp.domain.tox.Tox
 
@@ -22,6 +29,8 @@ const val KEY_TEXT_REPLY = "text_reply"
const val KEY_CALL = "accept_or_reject_call"
const val KEY_CONTACT_PK = "contact_pk"
 
private const val TAG = "ActionReceiver"
 
class ActionReceiver : BroadcastReceiver() {
@Inject
lateinit var callManager: CallManager
@@ -29,12 +38,18 @@ class ActionReceiver : BroadcastReceiver() {
@Inject
lateinit var chatManager: ChatManager
 
@Inject
lateinit var contactManager: ContactManager
 
@Inject
lateinit var notificationHelper: NotificationHelper
 
@Inject
lateinit var tox: Tox
 
@Inject
lateinit var scope: CoroutineScope
 
override fun onReceive(context: Context, intent: Intent) {
(context.applicationContext as App).component.inject(this)
 
@@ -47,18 +62,31 @@ class ActionReceiver : BroadcastReceiver() {
}
 
intent.getStringExtra(KEY_CALL)?.also { callChoice ->
val pk = intent.getStringExtra(KEY_CONTACT_PK) ?: return
val pk = intent.getStringExtra(KEY_CONTACT_PK)?.let { PublicKey(it) } ?: return
if (callChoice == "accept") {
callManager.answerCall(PublicKey(pk))
notificationHelper.showOngoingCallNotification(Contact(pk, tox.getName()))
if (context.hasPermission(Manifest.permission.RECORD_AUDIO)) {
callManager.startSendingAudio()
} else {
Toast.makeText(context, R.string.call_mic_permission_needed, Toast.LENGTH_LONG).show()
scope.launch {
val contact = contactManager.get(pk).firstOrNull().let {
if (it != null) {
it
} else {
Log.e(TAG, "Unable to get contact ${pk.fingerprint()} for call notification")
Contact(publicKey = pk.string(), name = pk.fingerprint())
}
}
 
callManager.answerCall(pk)
notificationHelper.showOngoingCallNotification(contact)
if (context.hasPermission(Manifest.permission.RECORD_AUDIO)) {
callManager.startSendingAudio()
} else {
withContext(Dispatchers.Main) {
Toast.makeText(context, R.string.call_mic_permission_needed, Toast.LENGTH_LONG).show()
}
}
}
} else if (callChoice == "reject") {
callManager.endCall(PublicKey(pk))
notificationHelper.dismissCallNotification(PublicKey(pk))
callManager.endCall(pk)
notificationHelper.dismissCallNotification(pk)
}
}
}