diff --git a/linphone-app/assets/languages/en.ts b/linphone-app/assets/languages/en.ts
index 57add1415..4ceb9983a 100644
--- a/linphone-app/assets/languages/en.ts
+++ b/linphone-app/assets/languages/en.ts
@@ -7,6 +7,11 @@
ok
OK
+
+ aboutTranslation
+ 'Help us translate %1' : %1 is the application name
+ Help us translate %1
+
ActivateAppSipAccountWithEmail
@@ -2879,6 +2884,7 @@ Click here: <a href="%1">%1</a>
UseOtherSipAccount
confirmAction
+ 'Use' : Popup confirmation for a form
USE
@@ -2909,6 +2915,26 @@ Click here: <a href="%1">%1</a>
addOtherSipAccountError
Unable to add this account.
+
+ understandAction
+ 'I understand' : Popup confirmation for a warning
+ I understand
+
+
+ warningFeatures
+ 'Some features require a Linphone account, such as group messaging or ephemeral messaging.' : Warning text about features.
+ Some features require a Linphone account, such as group messaging or ephemeral messaging.
+
+
+ warningThirdParty
+ 'These features are hidden when you register with a third party SIP account.' : Warning text for using third party account.
+ These features are hidden when you register with a third party SIP account.
+
+
+ warningContact
+ 'To enable it in a commercial project, please contact us.' : Warning text for contacting about enabling features.
+ To enable it in a commercial project, please contact us.
+
ZrtpTokenAuthentication
diff --git a/linphone-app/assets/languages/fr_FR.ts b/linphone-app/assets/languages/fr_FR.ts
index fc68bcf53..2a9c3333c 100644
--- a/linphone-app/assets/languages/fr_FR.ts
+++ b/linphone-app/assets/languages/fr_FR.ts
@@ -7,6 +7,11 @@
ok
OK
+
+ aboutTranslation
+ 'Help us translate %1' : %1 is the application name
+ Contribuer aux traductions
+
ActivateAppSipAccountWithEmail
@@ -521,7 +526,7 @@ URL du serveur non configurée.
Forwarded
'Forwarded' : Header on a message that contains a forward.
-
+ Transféré
@@ -1579,9 +1584,9 @@ Cliquez ici : <a href="%1">%1</a>
unreadMessageNotice
'%1 unread messages' : Little message to show on an event where unread messages begin.
-
-
-
+
+ %1 message non lu
+ %1 messages non lus
@@ -1639,7 +1644,7 @@ Cliquez ici : <a href="%1">%1</a>
conversationDevicesTitle
'Conversation's devices' : Title of window that show all devices
-
+ Liste des appareils
@@ -1939,7 +1944,7 @@ Cliquez ici : <a href="%1">%1</a>
chatNotificationsEnabledLabel
'Enable notifications': settings label for enabling notifications.
-
+ Activer les notifications
@@ -2296,7 +2301,7 @@ Cliquez ici : <a href="%1">%1</a>
defaultDeviceNameLabel
'Device Name' : Label for setting the device name.
-
+ Nom de l'appareil
@@ -2856,6 +2861,7 @@ Cliquez ici : <a href="%1">%1</a>
UseOtherSipAccount
confirmAction
+ 'Use' : Popup confirmation for a form
UTILISER
@@ -2886,6 +2892,26 @@ Cliquez ici : <a href="%1">%1</a>
addOtherSipAccountError
Impossible d'ajouter ce compte.
+
+ understandAction
+ 'I understand' : Popup confirmation for a warning
+ J'ai compris
+
+
+ warningFeatures
+ 'Some features require a Linphone account, such as group messaging or ephemeral messaging.' : Warning text about features.
+ Certaines fonctionnalités avancées comme les messages de groupe ou les messages éphémères nécessitent un compte Linphone.
+
+
+ warningThirdParty
+ 'These features are hidden when you register with a third party SIP account.' : Warning text for using third party account.
+ Elles seront masquées dans l'application si vous configurez un compte SIP tiers.
+
+
+ warningContact
+ 'To enable it in a commercial project, please contact us.' : Warning text for contacting about enabling features.
+ Si vous souhaitez les activer pour un projet professionnel, contactez-nous.
+
ZrtpTokenAuthentication
diff --git a/linphone-app/cmake_builder/linphone_package/CMakeLists.txt b/linphone-app/cmake_builder/linphone_package/CMakeLists.txt
index e8ec1e861..27c982400 100644
--- a/linphone-app/cmake_builder/linphone_package/CMakeLists.txt
+++ b/linphone-app/cmake_builder/linphone_package/CMakeLists.txt
@@ -133,7 +133,7 @@ if (WIN32)
file(GLOB GRAMMAR_FILES "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/Belr/grammars/*")
install(FILES ${GRAMMAR_FILES} DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/belr/grammars/" )
install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/images" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}" USE_SOURCE_PERMISSIONS OPTIONAL)
- install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/sounds/linphone/" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/${EXECUTABLE_NAME}" USE_SOURCE_PERMISSIONS)
+ install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/sounds/linphone/" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/sounds/${EXECUTABLE_NAME}" USE_SOURCE_PERMISSIONS)
install(FILES "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/Linphone/rootca.pem" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/${EXECUTABLE_NAME}/")
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../../assets/linphonerc-factory" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/${EXECUTABLE_NAME}")
@@ -192,7 +192,7 @@ elseif (APPLE)
file(GLOB GRAMMAR_FILES "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/Belr/grammars/*")
install(FILES ${GRAMMAR_FILES} DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/${CMAKE_INSTALL_DATAROOTDIR}/belr/grammars/")
install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/images" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/${CMAKE_INSTALL_DATAROOTDIR}" USE_SOURCE_PERMISSIONS OPTIONAL)
- install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/sounds/linphone/" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/${CMAKE_INSTALL_DATAROOTDIR}/${EXECUTABLE_NAME}" USE_SOURCE_PERMISSIONS)
+ install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/sounds/linphone/" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/${CMAKE_INSTALL_DATAROOTDIR}/sounds/${EXECUTABLE_NAME}" USE_SOURCE_PERMISSIONS)
install(FILES "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/Linphone/rootca.pem" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/${CMAKE_INSTALL_DATAROOTDIR}/${EXECUTABLE_NAME}")
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../../assets/linphonerc-factory" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/${CMAKE_INSTALL_DATAROOTDIR}/${EXECUTABLE_NAME}")
diff --git a/linphone-app/src/components/call/CallModel.cpp b/linphone-app/src/components/call/CallModel.cpp
index 8726ecc17..e26fc6106 100644
--- a/linphone-app/src/components/call/CallModel.cpp
+++ b/linphone-app/src/components/call/CallModel.cpp
@@ -941,11 +941,10 @@ QString CallModel::generateSavedFilename () const {
QString CallModel::generateSavedFilename (const QString &from, const QString &to) {
auto escape = [](const QString &str) {
- constexpr char ReservedCharacters[] = "<>:\"/\\|\\?\\*";
+ constexpr char ReservedCharacters[] = "[<|>|:|\"|/|\\\\|\\?|\\*|\\+|\\|]+";
static QRegularExpression regexp(ReservedCharacters);
return QString(str).replace(regexp, "");
};
-
return QStringLiteral("%1_%2_%3")
.arg(QDateTime::currentDateTime().toString("yyyy-MM-dd_hh-mm-ss"))
.arg(escape(from))
diff --git a/linphone-app/src/components/ldap/LdapModel.cpp b/linphone-app/src/components/ldap/LdapModel.cpp
index 1d9e52e33..309f86090 100644
--- a/linphone-app/src/components/ldap/LdapModel.cpp
+++ b/linphone-app/src/components/ldap/LdapModel.cpp
@@ -134,8 +134,6 @@ void LdapModel::unset(){
mSipDomain = QString::fromStdString(mLdapParams->getSipDomain());
mDebug = (int)mLdapParams->getDebugLevel();
mVerifyServerCertificates = (int)mLdapParams->getServerCertificatesVerificationMode();
- int c = (int) mLdapParams->getAuthMethod();
- qWarning() << c;
testServerField();
testMaxResultsField();
testTimeoutField();
diff --git a/linphone-app/src/utils/Constants.cpp b/linphone-app/src/utils/Constants.cpp
index 016bc1319..af9462ac9 100644
--- a/linphone-app/src/utils/Constants.cpp
+++ b/linphone-app/src/utils/Constants.cpp
@@ -109,6 +109,8 @@ constexpr char Constants::VersionCheckUrl[];
constexpr char Constants::PasswordRecoveryUrl[];
constexpr char Constants::CguUrl[];
constexpr char Constants::PrivatePolicyUrl[];
+constexpr char Constants::ContactUrl[];
+constexpr char Constants::TranslationUrl[];
constexpr char Constants::LinphoneBZip2_exe[];
diff --git a/linphone-app/src/utils/Constants.hpp b/linphone-app/src/utils/Constants.hpp
index ba4c7e7a1..b0440fb88 100644
--- a/linphone-app/src/utils/Constants.hpp
+++ b/linphone-app/src/utils/Constants.hpp
@@ -59,6 +59,10 @@ public:
static constexpr char PasswordRecoveryUrl[] = "https://subscribe.linphone.org/login";
static constexpr char CguUrl[] = "https://www.linphone.org/general-terms";
static constexpr char PrivatePolicyUrl[] = "https://www.linphone.org/privacy-policy";
+ static constexpr char ContactUrl[] = "https://www.linphone.org/contact";
+ static constexpr char TranslationUrl[] = "https://weblate.linphone.org/projects/linphone-desktop/";
+
+
static constexpr char LinphoneBZip2_exe[] = "http://www.linphone.org/releases/windows/tools/bzip2/bzip2.exe";
static constexpr char LinphoneBZip2_dll[] = "http://www.linphone.org/releases/windows/tools/bzip2/bzip2.dll";
@@ -71,6 +75,9 @@ public:
Q_PROPERTY(QString PasswordRecoveryUrl MEMBER PasswordRecoveryUrl CONSTANT)
Q_PROPERTY(QString CguUrl MEMBER CguUrl CONSTANT)
Q_PROPERTY(QString PrivatePolicyUrl MEMBER PrivatePolicyUrl CONSTANT)
+ Q_PROPERTY(QString ContactUrl MEMBER ContactUrl CONSTANT)
+ Q_PROPERTY(QString TranslationUrl MEMBER TranslationUrl CONSTANT)
+
static constexpr char DefaultAssistantRegistrationUrl[] = "https://subscribe.linphone.org/register";
static constexpr char DefaultAssistantLoginUrl[] = "https://subscribe.linphone.org/login";
static constexpr char DefaultAssistantLogoutUrl[] = "https://subscribe.linphone.org/logout";
diff --git a/linphone-app/ui/modules/Common/Form/ActionButton.qml b/linphone-app/ui/modules/Common/Form/ActionButton.qml
index 3467b78c3..2d87ecca7 100644
--- a/linphone-app/ui/modules/Common/Form/ActionButton.qml
+++ b/linphone-app/ui/modules/Common/Form/ActionButton.qml
@@ -106,65 +106,81 @@ Item {
// }
// return wrappedButton.icon;
}
+ function getColor(color, defaultColor, debugVar){
+ if(color)
+ return color
+ else{
+ console.warn("No color defined for :"+debugVar)
+ return defaultColor
+ }
+ }
function getBackgroundColor(){
+ var defaultColor = 'transparent'
if(isCustom){
if(wrappedButton.icon == '')
- return wrappedButton.colorSet.backgroundNormalColor
+ return getColor(wrappedButton.colorSet.backgroundNormalColor, defaultColor, 'backgroundNormalColor')
if (wrappedButton.updating || wrappedButton.toggled)
- return wrappedButton.colorSet.backgroundUpdatingColor
+ return getColor(wrappedButton.colorSet.backgroundUpdatingColor, defaultColor, 'backgroundUpdatingColor')
if (!useStates)
- return wrappedButton.colorSet.backgroundNormalColor
+ return getColor(wrappedButton.colorSet.backgroundNormalColor, defaultColor, 'backgroundNormalColor')
if (!wrappedButton.enabled)
- return wrappedButton.colorSet.backgroundDisabledColor
- return button.down ? wrappedButton.colorSet.backgroundPressedColor
- : (button.hovered ? wrappedButton.colorSet.backgroundHoveredColor: wrappedButton.colorSet.backgroundNormalColor)
+ return getColor(wrappedButton.colorSet.backgroundDisabledColor, defaultColor, 'backgroundDisabledColor')
+ return button.down ? getColor(wrappedButton.colorSet.backgroundPressedColor, defaultColor, 'backgroundPressedColor')
+ : (button.hovered ? getColor(wrappedButton.colorSet.backgroundHoveredColor, defaultColor, 'backgroundHoveredColor')
+ : getColor(wrappedButton.colorSet.backgroundNormalColor, defaultColor, 'backgroundNormalColor'))
}else
- return 'transparent'
+ return defaultColor
}
function getForegroundColor(){
+ var defaultColor = 'black'
if(isCustom){
if(wrappedButton.icon == '')
- return wrappedButton.colorSet.foregroundNormalColor
+ return getColor(wrappedButton.colorSet.foregroundNormalColor, defaultColor, 'foregroundNormalColor')
if (wrappedButton.updating || wrappedButton.toggled)
- return wrappedButton.colorSet.foregroundUpdatingColor
+ return getColor(wrappedButton.colorSet.foregroundUpdatingColor, defaultColor, 'foregroundUpdatingColor')
if (!useStates)
- return wrappedButton.colorSet.foregroundNormalColor
+ return getColor(wrappedButton.colorSet.foregroundNormalColor, defaultColor, 'foregroundNormalColor')
if (!wrappedButton.enabled)
- return wrappedButton.colorSet.foregroundDisabledColor
- return button.down ? wrappedButton.colorSet.foregroundPressedColor
- : (button.hovered ? wrappedButton.colorSet.foregroundHoveredColor: wrappedButton.colorSet.foregroundNormalColor)
+ return getColor(wrappedButton.colorSet.foregroundDisabledColor, defaultColor, 'foregroundDisabledColor')
+ return button.down ? getColor(wrappedButton.colorSet.foregroundPressedColor, defaultColor, 'foregroundPressedColor')
+ : (button.hovered ? getColor(wrappedButton.colorSet.foregroundHoveredColor, defaultColor, 'foregroundHoveredColor')
+ : getColor(wrappedButton.colorSet.foregroundNormalColor, defaultColor, 'foregroundNormalColor'))
}else
- return "black"
+ return defaultColor
}
function getBackgroundHiddenPartColor(){
+ var defaultColor = 'transparent'
if(isCustom){
if(wrappedButton.icon == '')
- return wrappedButton.backgroundHiddenPartNormalColor
+ return getColor(wrappedButton.colorSet.backgroundHiddenPartNormalColor, defaultColor, 'backgroundHiddenPartNormalColor')
if (wrappedButton.updating || wrappedButton.toggled)
- return wrappedButton.backgroundHiddenPartUpdatingColor
+ return getColor(wrappedButton.colorSet.backgroundHiddenPartUpdatingColor, defaultColor, 'backgroundHiddenPartUpdatingColor')
if (!useStates)
- return wrappedButton.backgroundHiddenPartNormalColor
+ return getColor(wrappedButton.colorSet.backgroundHiddenPartNormalColor, defaultColor, 'backgroundHiddenPartNormalColor')
if (!wrappedButton.enabled)
- return wrappedButton.backgroundHiddenPartDisabledColor
- return button.down ? wrappedButton.backgroundHiddenPartPressedColor
- : (button.hovered ? wrappedButton.backgroundHiddenPartHoveredColor: wrappedButton.backgroundHiddenPartNormalColor)
+ return getColor(wrappedButton.colorSet.backgroundHiddenPartDisabledColor, defaultColor, 'backgroundHiddenPartDisabledColor')
+ return button.down ? getColor(wrappedButton.colorSet.backgroundHiddenPartPressedColor, defaultColor, 'backgroundHiddenPartPressedColor')
+ : (button.hovered ? getColor(wrappedButton.colorSet.backgroundHiddenPartHoveredColor, defaultColor, 'backgroundHiddenPartHoveredColor')
+ : getColor(wrappedButton.colorSet.backgroundHiddenPartNormalColor, defaultColor, 'backgroundHiddenPartNormalColor'))
}else
- return 'transparent'
+ return defaultColor
}
function getForegroundHiddenPartColor(){
+ var defaultColor = '#80FFFFFF'
if(isCustom){
if(wrappedButton.icon == '')
- return wrappedButton.foregroundHiddenPartNormalColor
+ return getColor(wrappedButton.colorSet.foregroundHiddenPartNormalColor, defaultColor, 'foregroundHiddenPartNormalColor')
if (wrappedButton.updating || wrappedButton.toggled)
- return wrappedButton.foregroundHiddenPartUpdatingColor
+ return getColor(wrappedButton.colorSet.foregroundHiddenPartUpdatingColor, defaultColor, 'foregroundHiddenPartUpdatingColor')
if (!useStates)
- return wrappedButton.foregroundHiddenPartNormalColor
+ return getColor(wrappedButton.colorSet.foregroundHiddenPartNormalColor, defaultColor, 'foregroundHiddenPartNormalColor')
if (!wrappedButton.enabled)
- return wrappedButton.foregroundHiddenPartDisabledColor
- return button.down ? wrappedButton.foregroundHiddenPartPressedColor
- : (button.hovered ? wrappedButton.foregroundHiddenPartHoveredColor: wrappedButton.foregroundHiddenPartNormalColor)
+ return getColor(wrappedButton.colorSet.foregroundHiddenPartDisabledColor, defaultColor, 'foregroundHiddenPartDisabledColor')
+ return button.down ? getColor(wrappedButton.colorSet.foregroundHiddenPartPressedColor, defaultColor, 'foregroundHiddenPartPressedColor')
+ : (button.hovered ? getColor(wrappedButton.colorSet.foregroundHiddenPartHoveredColor, defaultColor, 'foregroundHiddenPartHoveredColor')
+ : getColor(wrappedButton.colorSet.foregroundHiddenPartNormalColor, defaultColor, 'foregroundHiddenPartNormalColor'))
}else
- return "#80FFFFFF"
+ return defaultColor
}
// ---------------------------------------------------------------------------
@@ -187,7 +203,7 @@ Item {
height: parent.height
width: parent.width * ( 1 - wrappedButton.percentageDisplayed / 100 )
id: backgroundHiddenPartColor
- color: getBackgroundHiddenPartColor()
+ color: width > 0 ? getBackgroundHiddenPartColor() : 'transparent'
}
}
hoverEnabled: !wrappedButton.updating//|| wrappedButton.autoIcon
@@ -199,7 +215,7 @@ Item {
color: 'transparent'
Rectangle{
anchors.fill:parent
- color: getForegroundColor()
+ color: getForegroundColor()
anchors.rightMargin: parent.width * ( 1 - wrappedButton.percentageDisplayed / 100 )
}
}
@@ -210,7 +226,7 @@ Item {
color: 'transparent'
Rectangle{
anchors.fill:parent
- color: getForegroundHiddenPartColor()
+ color: percentageDisplayed != 100 ? getForegroundHiddenPartColor() : 'transparent'
anchors.leftMargin: parent.width * wrappedButton.percentageDisplayed / 100
}
}
diff --git a/linphone-app/ui/modules/Linphone/Chat/Chat.qml b/linphone-app/ui/modules/Linphone/Chat/Chat.qml
index 3ea3e3db0..a9c97f39a 100644
--- a/linphone-app/ui/modules/Linphone/Chat/Chat.qml
+++ b/linphone-app/ui/modules/Linphone/Chat/Chat.qml
@@ -336,7 +336,7 @@ Rectangle {
anchors.bottom: parent.bottom
anchors.bottomMargin: 10
anchors.right: parent.right
- anchors.rightMargin: 40
+ anchors.rightMargin: 35
visible: chat.isIndexAfter(chat.count-1)
onVisibleChanged: updateMarkAsRead()
Component.onCompleted: updateMarkAsRead()
@@ -360,9 +360,12 @@ Rectangle {
MessageCounter{
anchors.left: parent.right
anchors.bottom: parent.top
- anchors.bottomMargin: -5
- anchors.leftMargin: -5
+ anchors.bottomMargin: 0
+ anchors.leftMargin: -14
count: container.proxyModel.chatRoomModel ? container.proxyModel.chatRoomModel.unreadMessagesCount : 0
+ showOnlyNumber: true
+ iconSize: 15
+ pointSize: Units.dp * 7
}
}
diff --git a/linphone-app/ui/modules/Linphone/Chat/ChatAudioMessage.qml b/linphone-app/ui/modules/Linphone/Chat/ChatAudioMessage.qml
index 3eb598759..b304b6690 100644
--- a/linphone-app/ui/modules/Linphone/Chat/ChatAudioMessage.qml
+++ b/linphone-app/ui/modules/Linphone/Chat/ChatAudioMessage.qml
@@ -26,7 +26,7 @@ Loader{
property ContentModel contentModel
property int maxWidth : parent.width
property int fitWidth: active ? Math.max(maxWidth - ChatAudioMessageStyle.emptySpace, ChatAudioMessageStyle.minWidth) : 0
- property int fitHeight: active ? 50 : 0
+ property int fitHeight: active ? 40 : 0
property font customFont : SettingsModel.textMessageFont
property bool isOutgoing : contentModel && (contentModel.chatMessageModel.isOutgoing || contentModel.chatMessageModel.state == LinphoneEnums.ChatMessageStateIdle);
@@ -63,6 +63,7 @@ Loader{
anchors.fill: parent
spacing: 5
ActionButton{
+ id: playButton
Layout.preferredHeight: iconSize
Layout.preferredWidth: iconSize
Layout.rightMargin: 5
@@ -83,8 +84,6 @@ Loader{
Layout.fillHeight: true
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
- Layout.topMargin: 5
- Layout.bottomMargin: 5
Layout.rightMargin: 15
MediaProgressBar{
id: mediaProgressBar
diff --git a/linphone-app/ui/modules/Linphone/Chat/ChatTextMessage.qml b/linphone-app/ui/modules/Linphone/Chat/ChatTextMessage.qml
index 96b5ce12b..d11fdd34e 100644
--- a/linphone-app/ui/modules/Linphone/Chat/ChatTextMessage.qml
+++ b/linphone-app/ui/modules/Linphone/Chat/ChatTextMessage.qml
@@ -23,7 +23,7 @@ TextEdit {
property ContentModel contentModel
property string lastTextSelected : ''
property font customFont : SettingsModel.textMessageFont
- property int fitHeight: visible ? contentHeight + padding : 0
+ property int fitHeight: visible ? contentHeight + padding + 6 : 0
property int fitWidth: visible ? implicitWidth + 2: 0 // add 2 because there is a bug on border that lead to not fit text exactly
signal rightClicked()
diff --git a/linphone-app/ui/modules/Linphone/Chat/Message.qml b/linphone-app/ui/modules/Linphone/Chat/Message.qml
index daa55799f..522f35e28 100644
--- a/linphone-app/ui/modules/Linphone/Chat/Message.qml
+++ b/linphone-app/ui/modules/Linphone/Chat/Message.qml
@@ -38,7 +38,7 @@ Item {
// ---------------------------------------------------------------------------
property string lastTextSelected
- implicitHeight: (deliveryLayout.visible? deliveryLayout.height : 0) +(ephemeralTimerRow.visible? 16 : 0) + messageData.height +5
+ implicitHeight: (deliveryLayout.visible? deliveryLayout.height : 0) +(ephemeralTimerRow.visible? 16 : 0) + messageData.height
Rectangle {
id: rectangle
diff --git a/linphone-app/ui/modules/Linphone/History/History.js b/linphone-app/ui/modules/Linphone/History/History.js
index f61c57f79..6cef48676 100644
--- a/linphone-app/ui/modules/Linphone/History/History.js
+++ b/linphone-app/ui/modules/Linphone/History/History.js
@@ -38,7 +38,7 @@ function loadMoreEntries () {
if (history.atYBeginning && !history.tryToLoadMoreEntries) {
history.tryToLoadMoreEntries = true
history.positionViewAtBeginning()
- container.proxyModel.loadMoreEntriesAsync()
+ container.proxyModel.loadMoreEntries()
}
}
diff --git a/linphone-app/ui/modules/Linphone/History/History.qml b/linphone-app/ui/modules/Linphone/History/History.qml
index a076f71d5..bdb9b6402 100644
--- a/linphone-app/ui/modules/Linphone/History/History.qml
+++ b/linphone-app/ui/modules/Linphone/History/History.qml
@@ -49,7 +49,7 @@ Rectangle {
Component.onCompleted: Logic.initView()
- onContentYChanged: Logic.loadMoreEntriesAsync()
+ onContentYChanged: Logic.loadMoreEntries()
onMovementEnded: Logic.handleMovementEnded()
onMovementStarted: Logic.handleMovementStarted()
diff --git a/linphone-app/ui/modules/Linphone/Misc/MessageCounter.qml b/linphone-app/ui/modules/Linphone/Misc/MessageCounter.qml
index c72cd28e3..ff04364ef 100644
--- a/linphone-app/ui/modules/Linphone/Misc/MessageCounter.qml
+++ b/linphone-app/ui/modules/Linphone/Misc/MessageCounter.qml
@@ -5,30 +5,41 @@ import Linphone.Styles 1.0
// =============================================================================
-Icon {
- id: messageCounter
-
- property int count: 0
-
- icon: 'chat_count'
- iconSize: MessageCounterStyle.iconSize.message
- visible: messageCounter.count > 0
-
- Icon {
- anchors {
- horizontalCenter: parent.right
- verticalCenter: parent.bottom
- }
-
- icon: 'chat_amount'
- iconSize: MessageCounterStyle.iconSize.amount
- visible: messageCounter.count > 0
-
- Text {
- anchors.centerIn: parent
- color: MessageCounterStyle.text.color
- font.pointSize: MessageCounterStyle.text.pointSize
- text: (messageCounter.count>99 ? '+' : messageCounter.count)
- }
- }
+Item{
+ id: messageCounter
+ property bool showOnlyNumber: false
+ property int count: 0
+ property alias icon: backgroundIcon.icon
+ property alias iconSize: amountIcon.iconSize
+ property int pointSize: MessageCounterStyle.text.pointSize
+
+ visible: messageCounter.count > 0
+
+ height: showOnlyNumber ? amountIcon.height : backgroundIcon.height
+ width: showOnlyNumber ? amountIcon.width : backgroundIcon.width
+
+ Icon {
+ id: backgroundIcon
+ icon: 'chat_count'
+ iconSize: MessageCounterStyle.iconSize.message
+ visible: !messageCounter.showOnlyNumber
+ }
+ Icon {
+ id: amountIcon
+ anchors {
+ horizontalCenter: parent.right
+ verticalCenter: parent.bottom
+ }
+
+ icon: 'chat_amount'
+ iconSize: MessageCounterStyle.iconSize.amount
+ visible: messageCounter.count > 0
+
+ Text {
+ anchors.centerIn: parent
+ color: MessageCounterStyle.text.color
+ font.pointSize: messageCounter.pointSize
+ text: (messageCounter.count>99 ? '+' : messageCounter.count)
+ }
+ }
}
diff --git a/linphone-app/ui/views/App/Main/Assistant/UseOtherSipAccount.qml b/linphone-app/ui/views/App/Main/Assistant/UseOtherSipAccount.qml
index 4cb9f4eea..586c2dcdf 100644
--- a/linphone-app/ui/views/App/Main/Assistant/UseOtherSipAccount.qml
+++ b/linphone-app/ui/views/App/Main/Assistant/UseOtherSipAccount.qml
@@ -1,7 +1,9 @@
import QtQuick 2.7
+import QtQuick.Controls 2.5
import Common 1.0
import Linphone 1.0
+import ConstantsCpp 1.0
import App.Styles 1.0
@@ -9,88 +11,173 @@ import App.Styles 1.0
Item{
AssistantAbstractView {
+ id: mainItem
mainAction: requestBlock.execute
mainActionEnabled: username.text.length &&
sipDomain.text.length &&
password.text.length
-
- mainActionLabel: qsTr('confirmAction')
-
+ //: 'I understand' : Popup confirmation for a warning
+ mainActionLabel: showWarning ? qsTr('understandAction').toUpperCase()
+ //: 'Use' : Popup confirmation for a form
+ : qsTr('confirmAction').toUpperCase()
+
title: qsTr('useOtherSipAccountTitle')
-
+
width: AssistantAbstractViewStyle.content.width
height: AssistantAbstractViewStyle.content.height
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
-
+
+ property bool showWarning : true
+
// ---------------------------------------------------------------------------
- //anchors.centerIn: parent
- //anchors.horizontalCenter:parent.horizontalCenter
- Column {
+
+ StackView {
+ id: mainStack
anchors.fill: parent.contentItem
width: AssistantAbstractViewStyle.content.width
height: AssistantAbstractViewStyle.content.height
-
- Form {
- orientation: Qt.Vertical
- width: parent.width
-
- FormLine {
- FormGroup {
- label: qsTr('usernameLabel')
-
- TextField {
- id: username
- }
- }
-
- FormGroup {
- label: qsTr('displayNameLabel')
-
- TextField {
- id: displayName
- }
- }
+ initialItem: warningComponent
+ }
+ Component{
+ id: warningComponent
+ Column{
+ spacing: UseAppSipAccountStyle.warningBlock.spacing
+ anchors.fill: parent.contentItem
+
+ Text {
+ elide: Text.ElideRight
+ font.pointSize: UseAppSipAccountStyle.warningBlock.pointSize
+
+ width: parent.width
+ horizontalAlignment: Text.AlignLeft
+ color: UseAppSipAccountStyle.warningBlock.color
+ wrapMode: Text.WordWrap
+ //: 'Some features require a Linphone account, such as group messaging or ephemeral messaging.' : Warning text about features.
+ text: qsTr('warningFeatures')
}
-
- FormLine {
- FormGroup {
- label: qsTr('sipDomainLabel')
-
- TextField {
- id: sipDomain
+ Text{
+ elide: Text.ElideRight
+ font.pointSize: UseAppSipAccountStyle.warningBlock.pointSize
+
+ width: parent.width
+ horizontalAlignment: Text.AlignLeft
+ color: UseAppSipAccountStyle.warningBlock.color
+ wrapMode: Text.WordWrap
+ //: 'These features are hidden when you register with a third party SIP account.' : Warning text for using third party account.
+ text: qsTr('warningThirdParty')
+ }
+ Text {
+ elide: Text.ElideRight
+ font.pointSize: UseAppSipAccountStyle.warningBlock.pointSize
+
+ width: parent.width
+ horizontalAlignment: Text.AlignLeft
+ color: UseAppSipAccountStyle.warningBlock.color
+ wrapMode: Text.WordWrap
+ //: 'To enable it in a commercial project, please contact us.' : Warning text for contacting about enabling features.
+ text: qsTr('warningContact')
+ }
+ Text {
+ elide: Text.ElideRight
+ font.pointSize: UseAppSipAccountStyle.warningBlock.contactUrl.pointSize
+
+ width: parent.width
+ horizontalAlignment: Text.AlignHCenter
+ wrapMode: Text.WordWrap
+ color: UseAppSipAccountStyle.warningBlock.color
+ linkColor: UseAppSipAccountStyle.warningBlock.contactUrl.color
+ text: ''+ConstantsCpp.ContactUrl+''
+
+ visible: ConstantsCpp.ContactUrl != ''
+
+ onLinkActivated: Qt.openUrlExternally(link)
+
+ MouseArea {
+ anchors.fill: parent
+ acceptedButtons: Qt.NoButton
+ cursorShape: parent.hoveredLink
+ ? Qt.PointingHandCursor
+ : Qt.IBeamCursor
+ }
+ }
+ }
+
+ }
+ Component {
+ id: formComponent
+ Column {
+ anchors.fill: parent.contentItem
+ width: AssistantAbstractViewStyle.content.width
+ height: AssistantAbstractViewStyle.content.height
+
+ Form {
+ orientation: Qt.Vertical
+ width: parent.width
+
+ FormLine {
+ FormGroup {
+ label: qsTr('usernameLabel')
+
+ TextField {
+ id: username
+ }
+ }
+
+ FormGroup {
+ label: qsTr('displayNameLabel')
+
+ TextField {
+ id: displayName
+ }
}
}
- }
-
- FormLine {
- FormGroup {
- label: qsTr('passwordLabel')
-
- PasswordField {
- id: password
+
+ FormLine {
+ FormGroup {
+ label: qsTr('sipDomainLabel')
+
+ TextField {
+ id: sipDomain
+ }
}
}
- }
-
- FormLine {
- FormGroup {
- label: qsTr('transportLabel')
-
- ComboBox {
- id: transport
- model: [ 'UDP', 'TCP', 'TLS']
+
+ FormLine {
+ FormGroup {
+ label: qsTr('passwordLabel')
+
+ PasswordField {
+ id: password
+ }
+ }
+ }
+
+ FormLine {
+ FormGroup {
+ label: qsTr('transportLabel')
+
+ ComboBox {
+ id: transport
+ model: [ 'UDP', 'TCP', 'TLS']
+ }
}
}
}
}
-
- RequestBlock {
- id: requestBlock
- width: parent.width
-
- action: (function () {
+ }
+
+ RequestBlock {
+ id: requestBlock
+ width: parent.width
+
+ action: (function () {
+ if(mainItem.showWarning) {
+ mainItem.showWarning = false
+ mainStack.replace(formComponent);
+ requestBlock.stop('')
+ }else{
if (!assistantModel.addOtherSipAccount({
username: username.text,
displayName: displayName.text,
@@ -103,8 +190,8 @@ Item{
requestBlock.stop('')
window.setView('Home')
}
- })
- }
+ }
+ })
}
AssistantModel {
id: assistantModel
diff --git a/linphone-app/ui/views/App/Main/Conversation.qml b/linphone-app/ui/views/App/Main/Conversation.qml
index e9c95ff0d..35aa10d5e 100644
--- a/linphone-app/ui/views/App/Main/Conversation.qml
+++ b/linphone-app/ui/views/App/Main/Conversation.qml
@@ -507,12 +507,21 @@ ColumnLayout {
//: 'Search in messages' : this is a placeholder when searching something in the timeline list
placeholderText: qsTr('searchMessagesPlaceholder')
- onTextChanged: chatRoomProxyModel.filterText = text
+ onTextChanged: searchDelay.restart()
onIconClicked: {
searchView.visible = false
chatRoomProxyModel.filterText = ''
}
font.pointSize: ConversationStyle.filters.pointSize
+
+ Timer{
+ id: searchDelay
+ interval: 500
+ running: false
+ onTriggered: if( searchView.visible){
+ chatRoomProxyModel.filterText = searchBar.text
+ }
+ }
}
}
diff --git a/linphone-app/ui/views/App/Main/Dialogs/About.qml b/linphone-app/ui/views/App/Main/Dialogs/About.qml
index 47b3e6b3a..bd00b4d76 100644
--- a/linphone-app/ui/views/App/Main/Dialogs/About.qml
+++ b/linphone-app/ui/views/App/Main/Dialogs/About.qml
@@ -3,6 +3,7 @@ import QtQuick.Layouts 1.3
import Common 1.0
import Linphone 1.0
+import ConstantsCpp 1.0
import App.Styles 1.0
@@ -100,6 +101,29 @@ DialogPlus {
horizontalAlignment: Text.AlignHCenter
}
+ Text {
+ elide: Text.ElideRight
+ font.pointSize: AboutStyle.copyrightBlock.url.pointSize
+ color: AboutStyle.copyrightBlock.url.color
+ linkColor: AboutStyle.copyrightBlock.url.color
+ //: 'Help us translate %1' : %1 is the application name
+ text: ''+qsTr('aboutTranslation').arg(applicationName)+''
+ textFormat: Text.RichText
+
+ width: parent.width
+ visible: ConstantsCpp.TranslationUrl != ''
+ horizontalAlignment: Text.AlignHCenter
+
+ onLinkActivated: Qt.openUrlExternally(link)
+
+ MouseArea {
+ anchors.fill: parent
+ acceptedButtons: Qt.NoButton
+ cursorShape: parent.hoveredLink
+ ? Qt.PointingHandCursor
+ : Qt.IBeamCursor
+ }
+ }
}
}
diff --git a/linphone-app/ui/views/App/Main/HistoryView.qml b/linphone-app/ui/views/App/Main/HistoryView.qml
index fd44da1fb..0b70f5d5d 100644
--- a/linphone-app/ui/views/App/Main/HistoryView.qml
+++ b/linphone-app/ui/views/App/Main/HistoryView.qml
@@ -50,7 +50,11 @@ ColumnLayout {
Layout.preferredHeight: HistoryViewStyle.bar.avatarSize
Layout.preferredWidth: HistoryViewStyle.bar.avatarSize
- image: peerAddress?Logic.getAvatar():null
+ image: peerAddress ?
+ (historyView._sipAddressObserver.contact
+ ? historyView._sipAddressObserver.contact
+ : null)
+ :null
presenceLevel: historyView._sipAddressObserver?Presence.getPresenceLevel(
historyView._sipAddressObserver.presenceStatus
diff --git a/linphone-app/ui/views/App/Settings/SettingsUi.qml b/linphone-app/ui/views/App/Settings/SettingsUi.qml
index 309d0aa00..e3204b480 100644
--- a/linphone-app/ui/views/App/Settings/SettingsUi.qml
+++ b/linphone-app/ui/views/App/Settings/SettingsUi.qml
@@ -224,24 +224,23 @@ TabContainer {
}
}
FormLine {
+ maxItemWidth: parent.width
FormGroup {
//: 'Check for updates' : Label switch for enabling check for updates
label: qsTr('checkForUpdateLabel')
- maxWidth: 150
- width: 150
- Switch {
- checked: SettingsModel.checkForUpdateEnabled
-
- onClicked: SettingsModel.checkForUpdateEnabled = !checked
- }
- }
- FormGroup {
- maxWidth: parent.width - 200
- width: parent.width - 200
- TextField {
- text: SettingsModel.versionCheckUrl
-
- onEditingFinished: SettingsModel.versionCheckUrl = text
+
+ RowLayout{
+ Switch {
+ checked: SettingsModel.checkForUpdateEnabled
+
+ onClicked: SettingsModel.checkForUpdateEnabled = !checked
+ }
+ TextField {
+ Layout.fillWidth: true
+ text: SettingsModel.versionCheckUrl
+
+ onEditingFinished: SettingsModel.versionCheckUrl = text
+ }
}
}
}
diff --git a/linphone-app/ui/views/App/Styles/Main/Assistant/UseAppSipAccountStyle.qml b/linphone-app/ui/views/App/Styles/Main/Assistant/UseAppSipAccountStyle.qml
index 37382b51f..5091e2e07 100644
--- a/linphone-app/ui/views/App/Styles/Main/Assistant/UseAppSipAccountStyle.qml
+++ b/linphone-app/ui/views/App/Styles/Main/Assistant/UseAppSipAccountStyle.qml
@@ -1,10 +1,23 @@
pragma Singleton
import QtQml 2.2
+import ColorsList 1.0
+import Units 1.0
// =============================================================================
QtObject {
- property QtObject checkBox: QtObject {
- property int width: 300
- }
+ property string sectionName: 'UseAppSipAccount'
+ property QtObject checkBox: QtObject {
+ property int width: 300
+ }
+ property QtObject warningBlock: QtObject {
+ property int spacing: 10
+ property int pointSize: Units.dp * 10
+ property color color: ColorsList.add(sectionName+'_description', 'g').color
+
+ property QtObject contactUrl: QtObject {
+ property color color: ColorsList.add(sectionName+'_url', 'i').color
+ property int pointSize: Units.dp * 9
+ }
+ }
}
diff --git a/linphone-app/ui/views/App/Styles/Main/Dialogs/AboutStyle.qml b/linphone-app/ui/views/App/Styles/Main/Dialogs/AboutStyle.qml
index eff569be8..7d5172901 100644
--- a/linphone-app/ui/views/App/Styles/Main/Dialogs/AboutStyle.qml
+++ b/linphone-app/ui/views/App/Styles/Main/Dialogs/AboutStyle.qml
@@ -8,7 +8,7 @@ import Units 1.0
QtObject {
property string sectionName: 'About'
- property int height: 225
+ property int height: 255
property int spacing: 20
property int width: 400
diff --git a/linphone-sdk b/linphone-sdk
index e9ce4178e..b9c4a6d46 160000
--- a/linphone-sdk
+++ b/linphone-sdk
@@ -1 +1 @@
-Subproject commit e9ce4178eb91013d23f9aef6c080a8c9b2c978c9
+Subproject commit b9c4a6d464bcead4ad40aa652933d84c29a4194b