Improve call notification when calling a conference
This commit is contained in:
parent
2a1a392cf4
commit
f71811f65a
2 changed files with 51 additions and 19 deletions
|
@ -26,6 +26,8 @@ import android.app.*
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
|
import android.graphics.Bitmap
|
||||||
|
import android.graphics.BitmapFactory
|
||||||
import android.media.AudioAttributes
|
import android.media.AudioAttributes
|
||||||
import android.os.VibrationEffect
|
import android.os.VibrationEffect
|
||||||
import android.os.Vibrator
|
import android.os.Vibrator
|
||||||
|
@ -34,7 +36,9 @@ import android.view.inputmethod.EditorInfo
|
||||||
import android.widget.RemoteViews
|
import android.widget.RemoteViews
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
import androidx.core.app.NotificationManagerCompat
|
import androidx.core.app.NotificationManagerCompat
|
||||||
|
import androidx.core.app.Person
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
|
import androidx.core.graphics.drawable.IconCompat
|
||||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
|
@ -193,12 +197,29 @@ class Api26Compatibility {
|
||||||
channel: String,
|
channel: String,
|
||||||
notificationsManager: NotificationsManager
|
notificationsManager: NotificationsManager
|
||||||
): Notification {
|
): Notification {
|
||||||
val contact: Friend? = coreContext.contactsManager.findContactByAddress(call.remoteAddress)
|
|
||||||
val roundPicture = ImageUtils.getRoundBitmapFromUri(context, contact?.getThumbnailUri())
|
|
||||||
val displayName = contact?.name ?: LinphoneUtils.getDisplayName(call.remoteAddress)
|
|
||||||
|
|
||||||
val stringResourceId: Int
|
val stringResourceId: Int
|
||||||
val iconResourceId: Int
|
val iconResourceId: Int
|
||||||
|
val roundPicture: Bitmap?
|
||||||
|
val title: String
|
||||||
|
val person: Person
|
||||||
|
|
||||||
|
val conferenceInfo = coreContext.core.findConferenceInformationFromUri(call.remoteAddress)
|
||||||
|
if (conferenceInfo == null) {
|
||||||
|
val contact: Friend? =
|
||||||
|
coreContext.contactsManager.findContactByAddress(call.remoteAddress)
|
||||||
|
roundPicture = ImageUtils.getRoundBitmapFromUri(context, contact?.getThumbnailUri())
|
||||||
|
val displayName = contact?.name ?: LinphoneUtils.getDisplayName(call.remoteAddress)
|
||||||
|
title = contact?.name ?: displayName
|
||||||
|
person = notificationsManager.getPerson(contact, displayName, roundPicture)
|
||||||
|
} else {
|
||||||
|
title = conferenceInfo.subject ?: context.getString(R.string.conference)
|
||||||
|
roundPicture = BitmapFactory.decodeResource(context.resources, R.drawable.voip_multiple_contacts_avatar_alt)
|
||||||
|
person = Person.Builder()
|
||||||
|
.setName(title)
|
||||||
|
.setIcon(IconCompat.createWithBitmap(roundPicture))
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
|
||||||
when (call.state) {
|
when (call.state) {
|
||||||
Call.State.Paused, Call.State.Pausing, Call.State.PausedByRemote -> {
|
Call.State.Paused, Call.State.Pausing, Call.State.PausedByRemote -> {
|
||||||
stringResourceId = R.string.call_notification_paused
|
stringResourceId = R.string.call_notification_paused
|
||||||
|
@ -225,11 +246,11 @@ class Api26Compatibility {
|
||||||
val builder = NotificationCompat.Builder(
|
val builder = NotificationCompat.Builder(
|
||||||
context, channel
|
context, channel
|
||||||
)
|
)
|
||||||
.setContentTitle(contact?.name ?: displayName)
|
.setContentTitle(title)
|
||||||
.setContentText(context.getString(stringResourceId))
|
.setContentText(context.getString(stringResourceId))
|
||||||
.setSmallIcon(iconResourceId)
|
.setSmallIcon(iconResourceId)
|
||||||
.setLargeIcon(roundPicture)
|
.setLargeIcon(roundPicture)
|
||||||
.addPerson(notificationsManager.getPerson(contact, displayName, roundPicture))
|
.addPerson(person)
|
||||||
.setAutoCancel(false)
|
.setAutoCancel(false)
|
||||||
.setCategory(NotificationCompat.CATEGORY_CALL)
|
.setCategory(NotificationCompat.CATEGORY_CALL)
|
||||||
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
||||||
|
|
|
@ -25,6 +25,7 @@ import android.app.*
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
|
import android.graphics.drawable.Icon
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||||
|
@ -98,11 +99,29 @@ class Api31Compatibility {
|
||||||
channel: String,
|
channel: String,
|
||||||
notificationsManager: NotificationsManager
|
notificationsManager: NotificationsManager
|
||||||
): Notification {
|
): Notification {
|
||||||
val contact =
|
val conferenceInfo = coreContext.core.findConferenceInformationFromUri(call.remoteAddress)
|
||||||
coreContext.contactsManager.findContactByAddress(call.remoteAddress)
|
val caller = if (conferenceInfo == null) {
|
||||||
val roundPicture = ImageUtils.getRoundBitmapFromUri(context, contact?.getThumbnailUri())
|
val contact =
|
||||||
val displayName = contact?.name ?: LinphoneUtils.getDisplayName(call.remoteAddress)
|
coreContext.contactsManager.findContactByAddress(call.remoteAddress)
|
||||||
|
val roundPicture =
|
||||||
|
ImageUtils.getRoundBitmapFromUri(context, contact?.getThumbnailUri())
|
||||||
|
val displayName = contact?.name ?: LinphoneUtils.getDisplayName(call.remoteAddress)
|
||||||
|
|
||||||
|
val person = notificationsManager.getPerson(contact, displayName, roundPicture)
|
||||||
|
Person.Builder()
|
||||||
|
.setName(person.name)
|
||||||
|
.setIcon(person.icon?.toIcon(context))
|
||||||
|
.setUri(person.uri)
|
||||||
|
.setKey(person.key)
|
||||||
|
.setImportant(person.isImportant)
|
||||||
|
.build()
|
||||||
|
} else {
|
||||||
|
Person.Builder()
|
||||||
|
.setName(conferenceInfo.subject)
|
||||||
|
.setIcon(Icon.createWithResource(context, R.drawable.voip_multiple_contacts_avatar_alt))
|
||||||
|
.setImportant(false)
|
||||||
|
.build()
|
||||||
|
}
|
||||||
val isVideo = call.currentParams.isVideoEnabled
|
val isVideo = call.currentParams.isVideoEnabled
|
||||||
val iconResourceId: Int = when (call.state) {
|
val iconResourceId: Int = when (call.state) {
|
||||||
Call.State.Paused, Call.State.Pausing, Call.State.PausedByRemote -> {
|
Call.State.Paused, Call.State.Pausing, Call.State.PausedByRemote -> {
|
||||||
|
@ -116,16 +135,8 @@ class Api31Compatibility {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val person = notificationsManager.getPerson(contact, displayName, roundPicture)
|
|
||||||
val caller = Person.Builder()
|
|
||||||
.setName(person.name)
|
|
||||||
.setIcon(person.icon?.toIcon(context))
|
|
||||||
.setUri(person.uri)
|
|
||||||
.setKey(person.key)
|
|
||||||
.setImportant(person.isImportant)
|
|
||||||
.build()
|
|
||||||
val declineIntent = notificationsManager.getCallDeclinePendingIntent(notifiable)
|
val declineIntent = notificationsManager.getCallDeclinePendingIntent(notifiable)
|
||||||
|
|
||||||
val builder = Notification.Builder(
|
val builder = Notification.Builder(
|
||||||
context, channel
|
context, channel
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue