From 92e483c855d6fd3f1757a274d7b048ca061419b8 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Thu, 24 Feb 2022 13:13:50 +0100 Subject: [PATCH] Add debug feedback on missing colors. Add contact URL. Change unread message count design in chat. Add page text about missing features when using third party SIP account. Add Translation link for contribution in about. Fix history view. Add delay of 500ms on message search. Fix unresponsive check update button in settings. Fix wrong characters in record name. # Conflicts: # linphone-app/cmake_builder/linphone_package/CMakeLists.txt --- linphone-app/assets/languages/en.ts | 26 +++ linphone-app/assets/languages/fr_FR.ts | 40 +++- .../linphone_package/CMakeLists.txt | 4 +- .../src/components/call/CallModel.cpp | 3 +- .../src/components/ldap/LdapModel.cpp | 2 - linphone-app/src/utils/Constants.cpp | 2 + linphone-app/src/utils/Constants.hpp | 7 + .../ui/modules/Common/Form/ActionButton.qml | 78 ++++--- .../ui/modules/Linphone/Chat/Chat.qml | 9 +- .../Linphone/Chat/ChatAudioMessage.qml | 5 +- .../modules/Linphone/Chat/ChatTextMessage.qml | 2 +- .../ui/modules/Linphone/Chat/Message.qml | 2 +- .../ui/modules/Linphone/History/History.js | 2 +- .../ui/modules/Linphone/History/History.qml | 2 +- .../modules/Linphone/Misc/MessageCounter.qml | 63 +++--- .../App/Main/Assistant/UseOtherSipAccount.qml | 209 +++++++++++++----- .../ui/views/App/Main/Conversation.qml | 11 +- .../ui/views/App/Main/Dialogs/About.qml | 24 ++ .../ui/views/App/Main/HistoryView.qml | 6 +- .../ui/views/App/Settings/SettingsUi.qml | 29 ++- .../Main/Assistant/UseAppSipAccountStyle.qml | 19 +- .../App/Styles/Main/Dialogs/AboutStyle.qml | 2 +- linphone-sdk | 2 +- 23 files changed, 386 insertions(+), 163 deletions(-) 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