srctree

Robin Linden parent 31730335 f6d484c5
Use the new action enum for the call notification actions

inlinesplit
atox/src/main/kotlin/ActionReceiver.kt added: 53, removed: 60, total 0
@@ -30,11 +30,14 @@ import ltd.evilcorp.domain.tox.PublicKey
import ltd.evilcorp.domain.tox.Tox
 
const val KEY_TEXT_REPLY = "text_reply"
const val KEY_CALL = "accept_or_reject_call"
const val KEY_CONTACT_PK = "contact_pk"
const val KEY_ACTION = "action"
 
enum class Action {
CallAccept,
CallEnd,
CallIgnore,
CallReject,
MarkAsRead,
}
 
@@ -76,62 +79,53 @@ class ActionReceiver : BroadcastReceiver() {
}
}
 
intent.getStringExtra(KEY_CALL)?.also { callChoice ->
val pk = intent.getStringExtra(KEY_CONTACT_PK)?.let { PublicKey(it) } ?: return
when (callChoice) {
"accept" -> 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())
}
}
 
if (callManager.inCall.value is CallState.InCall) {
withContext(Dispatchers.Main) {
Toast.makeText(
context,
context.getString(R.string.error_simultaneous_calls),
Toast.LENGTH_LONG
).show()
notificationHelper.showPendingCallNotification(UserStatus.Busy, contact)
}
return@launch
}
 
try {
callManager.startCall(pk)
notificationHelper.showOngoingCallNotification(contact)
} catch (e: ToxavAnswerException) {
Log.e(TAG, e.toString())
return@launch
}
 
val isSendingAudio =
context.hasPermission(Manifest.permission.RECORD_AUDIO) && callManager.startSendingAudio()
if (!isSendingAudio) {
withContext(Dispatchers.Main) {
Toast.makeText(context, R.string.call_mic_permission_needed, Toast.LENGTH_LONG).show()
}
}
}
"reject", "end call" -> {
callManager.endCall(pk)
notificationHelper.dismissCallNotification(pk)
}
"ignore" -> callManager.removePendingCall(pk)
}
}
 
val pk = intent.getStringExtra(KEY_CONTACT_PK)?.let { PublicKey(it) } ?: return
when (intent.getSerializableExtra(KEY_ACTION) as Action?) {
Action.CallAccept -> acceptCall(context, pk)
Action.CallEnd, Action.CallReject -> {
callManager.endCall(pk)
notificationHelper.dismissCallNotification(pk)
}
Action.CallIgnore -> callManager.removePendingCall(pk)
Action.MarkAsRead -> scope.launch {
val pk = intent.getStringExtra(KEY_CONTACT_PK) ?: return@launch
contactRepository.setHasUnreadMessages(pk, false)
notificationHelper.dismissNotifications(PublicKey(pk))
contactRepository.setHasUnreadMessages(pk.string(), false)
notificationHelper.dismissNotifications(pk)
}
null -> Log.e(TAG, "Missing action in intent $intent")
}
}
 
private fun acceptCall(context: Context, pk: PublicKey) = 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())
}
}
 
if (callManager.inCall.value is CallState.InCall) {
withContext(Dispatchers.Main) {
Toast.makeText(context, context.getString(R.string.error_simultaneous_calls), Toast.LENGTH_LONG).show()
notificationHelper.showPendingCallNotification(UserStatus.Busy, contact)
}
return@launch
}
 
try {
callManager.startCall(pk)
notificationHelper.showOngoingCallNotification(contact)
} catch (e: ToxavAnswerException) {
Log.e(TAG, e.toString())
return@launch
}
 
val isSendingAudio = context.hasPermission(Manifest.permission.RECORD_AUDIO) && callManager.startSendingAudio()
if (!isSendingAudio) {
withContext(Dispatchers.Main) {
Toast.makeText(context, R.string.call_mic_permission_needed, Toast.LENGTH_LONG).show()
}
}
}
}
 
atox/src/main/kotlin/ui/NotificationHelper.kt added: 53, removed: 60, total 0
@@ -33,7 +33,6 @@ import javax.inject.Singleton
import ltd.evilcorp.atox.Action
import ltd.evilcorp.atox.ActionReceiver
import ltd.evilcorp.atox.KEY_ACTION
import ltd.evilcorp.atox.KEY_CALL
import ltd.evilcorp.atox.KEY_CONTACT_PK
import ltd.evilcorp.atox.KEY_TEXT_REPLY
import ltd.evilcorp.atox.PendingIntentCompat
@@ -244,7 +243,7 @@ class NotificationHelper @Inject constructor(
"${contact.publicKey}_end_call".hashCode(),
Intent(context, ActionReceiver::class.java)
.putExtra(KEY_CONTACT_PK, contact.publicKey)
.putExtra(KEY_CALL, "end call"),
.putExtra(KEY_ACTION, Action.CallEnd),
PendingIntent.FLAG_UPDATE_CURRENT
)
)
@@ -279,7 +278,7 @@ class NotificationHelper @Inject constructor(
"${c.publicKey}_accept_call".hashCode(),
Intent(context, ActionReceiver::class.java)
.putExtra(KEY_CONTACT_PK, c.publicKey)
.putExtra(KEY_CALL, "accept"),
.putExtra(KEY_ACTION, Action.CallAccept),
PendingIntent.FLAG_UPDATE_CURRENT
)
)
@@ -296,7 +295,7 @@ class NotificationHelper @Inject constructor(
"${c.publicKey}_reject_call".hashCode(),
Intent(context, ActionReceiver::class.java)
.putExtra(KEY_CONTACT_PK, c.publicKey)
.putExtra(KEY_CALL, "reject"),
.putExtra(KEY_ACTION, Action.CallReject),
PendingIntent.FLAG_UPDATE_CURRENT
)
)
@@ -308,7 +307,7 @@ class NotificationHelper @Inject constructor(
"${c.publicKey}_ignore_call".hashCode(),
Intent(context, ActionReceiver::class.java)
.putExtra(KEY_CONTACT_PK, c.publicKey)
.putExtra(KEY_CALL, "ignore"),
.putExtra(KEY_ACTION, Action.CallIgnore),
PendingIntent.FLAG_UPDATE_CURRENT
)
)