From 899a3ea3741af2f38e21bdefdc0180e99623b957 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 7 Oct 2024 16:43:01 +0200 Subject: [PATCH] Added voicemail icon below 1 in dialpad & voicemail URI setting in account params to be called when long pressing voicemail icon in dialpad --- .../ui/call/viewmodel/CurrentCallViewModel.kt | 2 + .../ui/main/history/model/NumpadModel.kt | 9 ++ .../history/viewmodel/StartCallViewModel.kt | 18 ++- .../viewmodel/AccountSettingsViewModel.kt | 18 ++- .../res/layout/account_settings_fragment.xml | 37 +++++- .../layout/start_call_numpad_bottom_sheet.xml | 111 ++++++++++-------- app/src/main/res/values-fr/strings.xml | 3 +- app/src/main/res/values/strings.xml | 3 +- 8 files changed, 143 insertions(+), 58 deletions(-) diff --git a/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt b/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt index 5c98aeff7..4d4cf1fca 100644 --- a/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt +++ b/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt @@ -539,6 +539,8 @@ class CurrentCallViewModel @UiThread constructor() : GenericViewModel() { } } }, + { // onVoicemailClicked + }, { // OnBackspaceClicked removedCharacterAtCurrentPositionEvent.value = Event(true) }, diff --git a/app/src/main/java/org/linphone/ui/main/history/model/NumpadModel.kt b/app/src/main/java/org/linphone/ui/main/history/model/NumpadModel.kt index d36c29d54..26ba34be1 100644 --- a/app/src/main/java/org/linphone/ui/main/history/model/NumpadModel.kt +++ b/app/src/main/java/org/linphone/ui/main/history/model/NumpadModel.kt @@ -27,6 +27,7 @@ import org.linphone.core.tools.Log open class NumpadModel @UiThread constructor( private val inCallNumpad: Boolean, private val onDigitClicked: (value: String) -> (Unit), + private val onVoicemailClicked: () -> (Unit), private val onBackspaceClicked: () -> (Unit), private val onCallClicked: () -> (Unit), private val onClearClicked: () -> (Unit) @@ -49,12 +50,20 @@ open class NumpadModel @UiThread constructor( } } + @UiThread fun onDigitLongClicked(value: String): Boolean { Log.i("$TAG Long clicked on digit [$value]") onDigitClicked.invoke(value) return true } + @UiThread + fun onVoicemailLongClicked(): Boolean { + Log.i("$TAG Long clicked on voicemail icon") + onVoicemailClicked.invoke() + return true + } + @UiThread fun onBackspaceClicked() { Log.i("$TAG Clicked on backspace") diff --git a/app/src/main/java/org/linphone/ui/main/history/viewmodel/StartCallViewModel.kt b/app/src/main/java/org/linphone/ui/main/history/viewmodel/StartCallViewModel.kt index 1c0951e3d..009a620a6 100644 --- a/app/src/main/java/org/linphone/ui/main/history/viewmodel/StartCallViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/history/viewmodel/StartCallViewModel.kt @@ -126,14 +126,24 @@ class StartCallViewModel @UiThread constructor() : AddressSelectionViewModel() { isNumpadVisible.value = false numpadModel = NumpadModel( false, - { digit -> - // onDigitClicked + { digit -> // onDigitClicked appendDigitToSearchBarEvent.value = Event(digit) // Don't do that, cursor will stay at start // searchFilter.value = "${searchFilter.value.orEmpty()}$digit" }, - { - // OnBackspaceClicked + { // onVoicemailClicked + coreContext.postOnCoreThread { core -> + val account = LinphoneUtils.getDefaultAccount() + val voicemailAddress = account?.params?.voicemailAddress + if (voicemailAddress != null) { + Log.i("$TAG Calling voicemail URI [${voicemailAddress.asStringUriOnly()}]") + coreContext.startCall(voicemailAddress) + } else { + Log.w("$TAG No voicemail URI configured for current account, nothing to do") + } + } + }, + { // OnBackspaceClicked removedCharacterAtCurrentPositionEvent.value = Event(true) }, { // OnCallClicked diff --git a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountSettingsViewModel.kt b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountSettingsViewModel.kt index d2fd002b8..19da5d03e 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountSettingsViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountSettingsViewModel.kt @@ -71,6 +71,7 @@ class AccountSettingsViewModel @UiThread constructor() : GenericViewModel() { val bundleModeEnabled = MutableLiveData() + val mwiUri = MutableLiveData() val voicemailUri = MutableLiveData() val cpimInBasicChatRooms = MutableLiveData() @@ -130,7 +131,8 @@ class AccountSettingsViewModel @UiThread constructor() : GenericViewModel() { cpimInBasicChatRooms.postValue(params.isCpimInBasicChatRoomEnabled) - voicemailUri.postValue(params.mwiServerAddress?.asStringUriOnly().orEmpty()) + mwiUri.postValue(params.mwiServerAddress?.asStringUriOnly().orEmpty()) + voicemailUri.postValue(params.voicemailAddress?.asStringUriOnly().orEmpty()) expire.postValue(params.expires.toString()) @@ -185,14 +187,22 @@ class AccountSettingsViewModel @UiThread constructor() : GenericViewModel() { newParams.isCpimInBasicChatRoomEnabled = cpimInBasicChatRooms.value == true - val mwiUri = voicemailUri.value.orEmpty() - if (mwiUri.isNotEmpty()) { - val mwiAddress = core.interpretUrl(mwiUri, false) + val mwi = mwiUri.value.orEmpty() + if (mwi.isNotEmpty()) { + val mwiAddress = core.interpretUrl(mwi, false) newParams.mwiServerAddress = mwiAddress } else { newParams.mwiServerAddress = null } + val voicemail = voicemailUri.value.orEmpty() + if (voicemail.isNotEmpty()) { + val voicemailAddress = core.interpretUrl(voicemail, false) + newParams.voicemailAddress = voicemailAddress + } else { + newParams.voicemailAddress = null + } + val expire = expire.value.orEmpty() val expireInt = if (expire.isEmpty()) { 31536000 diff --git a/app/src/main/res/layout/account_settings_fragment.xml b/app/src/main/res/layout/account_settings_fragment.xml index ad60cf754..70fc66770 100644 --- a/app/src/main/res/layout/account_settings_fragment.xml +++ b/app/src/main/res/layout/account_settings_fragment.xml @@ -129,6 +129,39 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toStartOf="@id/im_encryption_mandatory_switch"/> + + + + @@ -155,7 +188,7 @@ android:background="@drawable/edit_text_background" android:paddingStart="20dp" android:paddingEnd="20dp" - android:text="@={viewModel.voicemailUri}" + android:text="@={viewModel.mwiUri}" android:inputType="text|textUri" android:hint="@string/account_settings_mwi_uri_title" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layout/start_call_numpad_bottom_sheet.xml b/app/src/main/res/layout/start_call_numpad_bottom_sheet.xml index 1ec8e3ed2..6ded131a9 100644 --- a/app/src/main/res/layout/start_call_numpad_bottom_sheet.xml +++ b/app/src/main/res/layout/start_call_numpad_bottom_sheet.xml @@ -36,28 +36,21 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" /> - - + android:textSize="24sp" + android:drawableBottom="@drawable/voicemail" + android:paddingBottom="5dp" + app:layout_constraintTop_toTopOf="@id/digit_2" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toStartOf="@id/digit_2" + app:layout_constraintBottom_toBottomOf="@id/digit_2"/> + app:layout_constraintStart_toEndOf="@id/digit_1" + app:layout_constraintEnd_toStartOf="@id/digit_3" + app:layout_constraintBottom_toTopOf="@id/digit_5"/> + app:layout_constraintTop_toTopOf="@id/digit_2" + app:layout_constraintStart_toEndOf="@id/digit_2" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="@id/digit_2"/> + app:layout_constraintTop_toTopOf="@id/digit_5" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toStartOf="@id/digit_5" + app:layout_constraintBottom_toBottomOf="@id/digit_5"/> + app:layout_constraintTop_toBottomOf="@id/digit_2" + app:layout_constraintStart_toEndOf="@id/digit_4" + app:layout_constraintEnd_toStartOf="@id/digit_6" + app:layout_constraintBottom_toTopOf="@id/digit_8"/> + app:layout_constraintTop_toTopOf="@id/digit_5" + app:layout_constraintStart_toEndOf="@id/digit_5" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="@id/digit_5"/> + app:layout_constraintTop_toTopOf="@id/digit_8" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toStartOf="@id/digit_8" + app:layout_constraintBottom_toBottomOf="@id/digit_8"/> + app:layout_constraintTop_toBottomOf="@id/digit_5" + app:layout_constraintStart_toEndOf="@id/digit_7" + app:layout_constraintEnd_toStartOf="@id/digit_9" + app:layout_constraintBottom_toTopOf="@id/digit_0"/> + app:layout_constraintTop_toTopOf="@id/digit_8" + app:layout_constraintStart_toEndOf="@id/digit_8" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="@id/digit_8"/> + app:layout_constraintTop_toTopOf="@id/digit_0" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toStartOf="@id/digit_0" + app:layout_constraintBottom_toBottomOf="@id/digit_0"/> + app:layout_constraintTop_toBottomOf="@id/digit_8" + app:layout_constraintStart_toEndOf="@id/digit_star" + app:layout_constraintEnd_toStartOf="@id/digit_sharp" + app:layout_constraintBottom_toTopOf="@id/call"/> + app:layout_constraintTop_toTopOf="@id/digit_0" + app:layout_constraintStart_toEndOf="@id/digit_0" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="@id/digit_0"/> + app:layout_constraintTop_toTopOf="@id/call" + app:layout_constraintBottom_toBottomOf="@id/call"/> diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 37344911e..d8b17dac4 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -305,7 +305,8 @@ URL du serveur d\'échange de clés de chiffrement Mode "bundle" Utiliser CPIM dans les conversations \"basiques\" - URI du serveur de messagerie vocale + URI du serveur de messagerie vocale + URI du serveur MWI (Message Waiting Indicator) Mettre à jour le mot de passe Autentification requise diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5d339e213..06d66d91b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -342,7 +342,8 @@ E2E encryption keys server URL Bundle mode Use CPIM in \"basic\" conversations - Voicemail URI + Voicemail URI + MWI server URI (Message Waiting Indicator) Update password Authentication needed