mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-17 03:18:06 +00:00
Using newly added MWI API to only show the notification bar for the concerned account + call voicemail when clicking on it
This commit is contained in:
parent
00b8e59ade
commit
965b159139
1 changed files with 65 additions and 17 deletions
|
|
@ -126,6 +126,8 @@ class MainViewModel
|
|||
|
||||
private var nonDefaultAccountNotificationsCount = 0
|
||||
|
||||
private var mwiNewMessages = false
|
||||
|
||||
private val coreListener = object : CoreListenerStub() {
|
||||
@WorkerThread
|
||||
override fun onGlobalStateChanged(core: Core, state: GlobalState?, message: String) {
|
||||
|
|
@ -302,6 +304,14 @@ class MainViewModel
|
|||
)
|
||||
addAlert(DEFAULT_ACCOUNT_DISABLED, label)
|
||||
}
|
||||
|
||||
val mwi = account.latestReceivedMessageWaitingIndication
|
||||
if (mwi != null) {
|
||||
parseMwiEvent(mwi)
|
||||
} else {
|
||||
removeAlert(MWI_MESSAGES_WAITING)
|
||||
mwiNewMessages = false
|
||||
}
|
||||
}
|
||||
|
||||
computeNonDefaultAccountNotificationsCount()
|
||||
|
|
@ -334,23 +344,10 @@ class MainViewModel
|
|||
event: org.linphone.core.Event,
|
||||
mwi: MessageWaitingIndication
|
||||
) {
|
||||
if (mwi.hasMessageWaiting()) {
|
||||
val summaries = mwi.summaries
|
||||
Log.i(
|
||||
"$TAG MWI NOTIFY received, messages are waiting ([${summaries.size}] summaries)"
|
||||
)
|
||||
if (summaries.isNotEmpty()) {
|
||||
val summary = summaries.first()
|
||||
val label = AppUtils.getStringWithPlural(
|
||||
R.plurals.mwi_messages_are_waiting,
|
||||
summary.nbNew,
|
||||
summary.nbNew.toString()
|
||||
)
|
||||
addAlert(MWI_MESSAGES_WAITING, label)
|
||||
}
|
||||
} else {
|
||||
Log.i("$TAG MWI NOTIFY received, no message is waiting")
|
||||
removeAlert(MWI_MESSAGES_WAITING)
|
||||
val address = mwi.accountAddress
|
||||
val defaultAccountAddress = core.defaultAccount?.params?.identityAddress
|
||||
if (defaultAccountAddress != null && address?.weakEqual(defaultAccountAddress) == true) {
|
||||
parseMwiEvent(mwi)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -394,6 +391,12 @@ class MainViewModel
|
|||
if (defaultAccount.state == RegistrationState.Ok && !firstAccountRegistered) {
|
||||
triggerNativeAddressBookImport()
|
||||
}
|
||||
|
||||
mwiNewMessages = false
|
||||
val mwi = defaultAccount.latestReceivedMessageWaitingIndication
|
||||
if (mwi != null) {
|
||||
parseMwiEvent(mwi)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -479,6 +482,10 @@ class MainViewModel
|
|||
askFullScreenIntentPermissionEvent.value = Event(true)
|
||||
} else if (!Compatibility.isPostNotificationsPermissionGranted(coreContext.context)) {
|
||||
askPostNotificationsPermissionEvent.value = Event(true)
|
||||
} else if (mwiNewMessages) {
|
||||
coreContext.postOnCoreThread {
|
||||
callVoiceMail()
|
||||
}
|
||||
} else {
|
||||
openDrawerEvent.value = Event(true)
|
||||
}
|
||||
|
|
@ -715,4 +722,45 @@ class MainViewModel
|
|||
removeAlert(SEND_NOTIFICATIONS_PERMISSION_NOT_GRANTED)
|
||||
}
|
||||
}
|
||||
|
||||
@WorkerThread
|
||||
private fun parseMwiEvent(mwi: MessageWaitingIndication) {
|
||||
if (mwi.hasMessageWaiting()) {
|
||||
val summaries = mwi.summaries
|
||||
Log.i(
|
||||
"$TAG [MWI] Messages are waiting ([${summaries.size}] summaries)"
|
||||
)
|
||||
if (summaries.isNotEmpty()) {
|
||||
val summary = summaries.first()
|
||||
val label = AppUtils.getStringWithPlural(
|
||||
R.plurals.mwi_messages_are_waiting,
|
||||
summary.nbNew,
|
||||
summary.nbNew.toString()
|
||||
)
|
||||
Log.i("$TAG [MWI] Showing alert with [${summary.nbNew}] new message(s)")
|
||||
addAlert(MWI_MESSAGES_WAITING, label)
|
||||
mwiNewMessages = true
|
||||
}
|
||||
} else {
|
||||
Log.i("$TAG [MWI] No message is waiting")
|
||||
removeAlert(MWI_MESSAGES_WAITING)
|
||||
mwiNewMessages = false
|
||||
}
|
||||
}
|
||||
|
||||
@WorkerThread
|
||||
private fun callVoiceMail() {
|
||||
val defaultAccount = LinphoneUtils.getDefaultAccount()
|
||||
if (defaultAccount != null) {
|
||||
val voiceMailUri = defaultAccount.params.voicemailAddress
|
||||
if (voiceMailUri != null) {
|
||||
Log.i("$TAG [MWI] Starting call to voicemail address [${voiceMailUri.asStringUriOnly()}]")
|
||||
coreContext.startCall(voiceMailUri)
|
||||
} else {
|
||||
Log.e("$TAG [MWI] Can't call voicemail, no URI configured in account params!")
|
||||
}
|
||||
} else {
|
||||
Log.e("$TAG [MWI] Can't call voicemail, no default account found!")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue