diff --git a/Linphone/data/image/bell-mwi.svg b/Linphone/data/image/bell-mwi.svg new file mode 100644 index 000000000..2270c7b47 --- /dev/null +++ b/Linphone/data/image/bell-mwi.svg @@ -0,0 +1,3 @@ + + + diff --git a/Linphone/model/account/AccountModel.cpp b/Linphone/model/account/AccountModel.cpp index fd388c059..bd9cafc9b 100644 --- a/Linphone/model/account/AccountModel.cpp +++ b/Linphone/model/account/AccountModel.cpp @@ -317,7 +317,7 @@ QString AccountModel::dialPlanAsString(const std::shared_ptr int AccountModel::getVoicemailCount() { auto userData = getUserData(mMonitor); if (userData) return userData->voicemailCount; - else return 1; + else return 0; } bool AccountModel::getShowMwi() { diff --git a/Linphone/view/Control/Display/Contact/Contact.qml b/Linphone/view/Control/Display/Contact/Contact.qml index 0fec0c826..9e147f22c 100644 --- a/Linphone/view/Control/Display/Contact/Contact.qml +++ b/Linphone/view/Control/Display/Contact/Contact.qml @@ -146,9 +146,11 @@ Control.Control{ Voicemail { Layout.leftMargin: 18 * DefaultStyle.dp Layout.rightMargin: 20 * DefaultStyle.dp - Layout.preferredWidth: 27 * DefaultStyle.dp - Layout.preferredHeight: 28 * DefaultStyle.dp - visible: mainItem.account.core.showMwi + Layout.preferredWidth: 30 * DefaultStyle.dp + Layout.preferredHeight: 26 * DefaultStyle.dp + scaleFactor: 0.7 + showMwi: mainItem.account.core.showMwi + visible: mainItem.account.core.voicemailAddress.length > 0 || mainItem.account.core.showMwi voicemailCount: mainItem.account.core.voicemailCount onClicked: { if (mainItem.account.core.voicemailAddress.length > 0) diff --git a/Linphone/view/Control/Display/Contact/Voicemail.qml b/Linphone/view/Control/Display/Contact/Voicemail.qml index 22225582f..f4f5b2ede 100644 --- a/Linphone/view/Control/Display/Contact/Voicemail.qml +++ b/Linphone/view/Control/Display/Contact/Voicemail.qml @@ -9,16 +9,22 @@ import SettingsCpp Rectangle{ id: mainItem property int voicemailCount: 0 - width: 27 * DefaultStyle.dp - height: 28 * DefaultStyle.dp + property bool showMwi: false + width: 42 * DefaultStyle.dp * scaleFactor + height: 36 * DefaultStyle.dp * scaleFactor + property real scaleFactor: 1.0 signal clicked() color: 'transparent' Button { anchors.bottom: parent.bottom anchors.left: parent.left icon.source: AppIcons.voicemail - width: 24 * DefaultStyle.dp - height: 24 * DefaultStyle.dp + icon.color: DefaultStyle.main2_600 + width: 33 * DefaultStyle.dp * scaleFactor + height: width + icon.width: width + icon.height: width + padding: 0 background: Item { anchors.fill: parent } @@ -29,11 +35,31 @@ Rectangle{ Text { anchors.top: parent.top anchors.right: parent.right + width: 14 * DefaultStyle.dp * scaleFactor + height: width + horizontalAlignment: Text.AlignHCenter font.weight: 700 * DefaultStyle.dp - font.pixelSize: 10 * DefaultStyle.dp + font.pixelSize: 13 * DefaultStyle.dp * scaleFactor color: DefaultStyle.danger_500main text: voicemailCount >= 100 ? '99+' : voicemailCount - visible: voicemailCount > 0 + visible: showMwi && voicemailCount > 0 maximumLineCount: 1 } + + Rectangle { + anchors.top: parent.top + anchors.right: parent.right + color: DefaultStyle.danger_500main + visible: showMwi && voicemailCount == 0 + width: 14 * DefaultStyle.dp * scaleFactor + height: width + radius: width / 2 + EffectImage { + anchors.fill: parent + anchors.margins: 1.5 * DefaultStyle.dp * scaleFactor + imageSource: AppIcons.bellMwi + colorizationColor: DefaultStyle.grey_0 + } + } + } diff --git a/Linphone/view/Page/Layout/Main/MainLayout.qml b/Linphone/view/Page/Layout/Main/MainLayout.qml index 637279e6a..bcf5d8fdd 100644 --- a/Linphone/view/Page/Layout/Main/MainLayout.qml +++ b/Linphone/view/Page/Layout/Main/MainLayout.qml @@ -295,28 +295,32 @@ Item { } Voicemail { id: voicemail - Layout.preferredWidth: 27 * DefaultStyle.dp - Layout.preferredHeight: 28 * DefaultStyle.dp - + Layout.preferredWidth: 42 * DefaultStyle.dp + Layout.preferredHeight: 36 * DefaultStyle.dp Repeater { model: accountProxy delegate: Item { Connections { target: modelData.core onShowMwiChanged: voicemail.updateCumulatedMwi() + onVoicemailAddressChanged: voicemail.updateCumulatedMwi() } } } function updateCumulatedMwi() { var count = 0 - var show = false + var showMwi = false + var supportsVoiceMail = false for (var i=0 ; i < accountProxy.count ; i++ ) { - count += accountProxy.getAt(i).core.voicemailCount - show |= accountProxy.getAt(i).core.showMwi + var core = accountProxy.getAt(i).core + count += core.voicemailCount + showMwi |= core.showMwi + supportsVoiceMail |= core.voicemailAddress.length > 0 } - voicemail.visible = show + voicemail.showMwi = showMwi voicemail.voicemailCount = count + voicemail.visible = showMwi || supportsVoiceMail } Component.onCompleted: { diff --git a/Linphone/view/Style/AppIcons.qml b/Linphone/view/Style/AppIcons.qml index a15bf6a66..562e06233 100644 --- a/Linphone/view/Style/AppIcons.qml +++ b/Linphone/view/Style/AppIcons.qml @@ -124,4 +124,5 @@ QtObject { property string power: "image://internal/power.svg" property string resourcePackage: "image://internal/resource-package.svg" property string appWindow: "image://internal/app-window.svg" + property string bellMwi: "image://internal/bell-mwi.svg" }