diff --git a/linphone-app/assets/images/copy_light.svg b/linphone-app/assets/images/copy_light.svg new file mode 100644 index 000000000..20f0f3f1e --- /dev/null +++ b/linphone-app/assets/images/copy_light.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + diff --git a/linphone-app/assets/languages/da.ts b/linphone-app/assets/languages/da.ts index 874968f25..bedd54139 100644 --- a/linphone-app/assets/languages/da.ts +++ b/linphone-app/assets/languages/da.ts @@ -456,10 +456,6 @@ Fejl ved fil overførsel. Server url ikke konfigureret. - - isComposing - %1 indtaster… - chatTyping '%1 is typing...' indicate that someone is composing in chat @@ -468,6 +464,16 @@ Server url ikke konfigureret. + + allTextCopied + "Copied to clipboard" : when a user copy a text from the menu, this message show up. + + + + selectedTextCopied + "Selection copied to clipboard" : when a user copy a text from the menu, this message show up. + + ChatDeliveries diff --git a/linphone-app/assets/languages/de.ts b/linphone-app/assets/languages/de.ts index 1d5684b8f..94cd51909 100644 --- a/linphone-app/assets/languages/de.ts +++ b/linphone-app/assets/languages/de.ts @@ -456,10 +456,6 @@ Datei kann nicht gesendet werden. Server URL ist nicht konfiguriert. - - isComposing - %1 schreibt gerade… - chatTyping '%1 is typing...' indicate that someone is composing in chat @@ -468,6 +464,16 @@ Server URL ist nicht konfiguriert. + + allTextCopied + "Copied to clipboard" : when a user copy a text from the menu, this message show up. + + + + selectedTextCopied + "Selection copied to clipboard" : when a user copy a text from the menu, this message show up. + + ChatDeliveries diff --git a/linphone-app/assets/languages/en.ts b/linphone-app/assets/languages/en.ts index ac3bb0b69..ecd8c9f63 100644 --- a/linphone-app/assets/languages/en.ts +++ b/linphone-app/assets/languages/en.ts @@ -456,10 +456,6 @@ Unable to send file. Server URL not configured. - - isComposing - %1 is typing… - chatTyping '%1 is typing...' indicate that someone is composing in chat @@ -468,6 +464,16 @@ Server URL not configured. %1 are typing… + + allTextCopied + "Copied to clipboard" : when a user copy a text from the menu, this message show up. + Copied to clipboard + + + selectedTextCopied + "Selection copied to clipboard" : when a user copy a text from the menu, this message show up. + Selection copied to clipboard + ChatDeliveries diff --git a/linphone-app/assets/languages/es.ts b/linphone-app/assets/languages/es.ts index 292f1f4d1..87414c66c 100644 --- a/linphone-app/assets/languages/es.ts +++ b/linphone-app/assets/languages/es.ts @@ -456,10 +456,6 @@ Imposible enviar fichero. URL del servidor no configurada. - - isComposing - %1 está escribiendo… - chatTyping '%1 is typing...' indicate that someone is composing in chat @@ -468,6 +464,16 @@ URL del servidor no configurada. + + allTextCopied + "Copied to clipboard" : when a user copy a text from the menu, this message show up. + + + + selectedTextCopied + "Selection copied to clipboard" : when a user copy a text from the menu, this message show up. + + ChatDeliveries diff --git a/linphone-app/assets/languages/fr_FR.ts b/linphone-app/assets/languages/fr_FR.ts index 18fc1cf11..c14624305 100644 --- a/linphone-app/assets/languages/fr_FR.ts +++ b/linphone-app/assets/languages/fr_FR.ts @@ -456,10 +456,6 @@ Impossible d'envoyer un fichier. URL du serveur non configurée. - - isComposing - %1 est en train d'écrire… - chatTyping '%1 is typing...' indicate that someone is composing in chat @@ -468,6 +464,16 @@ URL du serveur non configurée. %1 sont en train d'écrire… + + allTextCopied + "Copied to clipboard" : when a user copy a text from the menu, this message show up. + + + + selectedTextCopied + "Selection copied to clipboard" : when a user copy a text from the menu, this message show up. + + ChatDeliveries diff --git a/linphone-app/assets/languages/hu.ts b/linphone-app/assets/languages/hu.ts index 92b6cc3f0..a3cce2150 100644 --- a/linphone-app/assets/languages/hu.ts +++ b/linphone-app/assets/languages/hu.ts @@ -456,10 +456,6 @@ Nem sikerült elküldeni a fájlt. A kiszolgáló URL-je nincs konfigurálva. - - isComposing - %1 gépel… - chatTyping '%1 is typing...' indicate that someone is composing in chat @@ -467,6 +463,16 @@ A kiszolgáló URL-je nincs konfigurálva. %1 éppen gépel… + + allTextCopied + "Copied to clipboard" : when a user copy a text from the menu, this message show up. + + + + selectedTextCopied + "Selection copied to clipboard" : when a user copy a text from the menu, this message show up. + + ChatDeliveries diff --git a/linphone-app/assets/languages/it.ts b/linphone-app/assets/languages/it.ts index 54b014773..af41cdfa4 100644 --- a/linphone-app/assets/languages/it.ts +++ b/linphone-app/assets/languages/it.ts @@ -456,10 +456,6 @@ Impossibile inviare il file. URL del server non configurato. - - isComposing - %1 sta scrivendo… - chatTyping '%1 is typing...' indicate that someone is composing in chat @@ -468,6 +464,16 @@ URL del server non configurato. %1 stanno scrivendo… + + allTextCopied + "Copied to clipboard" : when a user copy a text from the menu, this message show up. + + + + selectedTextCopied + "Selection copied to clipboard" : when a user copy a text from the menu, this message show up. + + ChatDeliveries diff --git a/linphone-app/assets/languages/ja.ts b/linphone-app/assets/languages/ja.ts index e4d3e6297..cb1ad1d45 100644 --- a/linphone-app/assets/languages/ja.ts +++ b/linphone-app/assets/languages/ja.ts @@ -456,10 +456,6 @@ ファイルを送信できませんでした。 サーバURLが設定されていません。 - - isComposing - 入力中: %1… - chatTyping '%1 is typing...' indicate that someone is composing in chat @@ -467,6 +463,16 @@ + + allTextCopied + "Copied to clipboard" : when a user copy a text from the menu, this message show up. + + + + selectedTextCopied + "Selection copied to clipboard" : when a user copy a text from the menu, this message show up. + + ChatDeliveries diff --git a/linphone-app/assets/languages/lt.ts b/linphone-app/assets/languages/lt.ts index 402d9f457..ac4be82d1 100644 --- a/linphone-app/assets/languages/lt.ts +++ b/linphone-app/assets/languages/lt.ts @@ -456,10 +456,6 @@ Nepavyko išsiųsti failą. Nesukonfigūruotas serverio url. - - isComposing - %1 rašo… - chatTyping '%1 is typing...' indicate that someone is composing in chat @@ -469,6 +465,16 @@ Nesukonfigūruotas serverio url. + + allTextCopied + "Copied to clipboard" : when a user copy a text from the menu, this message show up. + + + + selectedTextCopied + "Selection copied to clipboard" : when a user copy a text from the menu, this message show up. + + ChatDeliveries diff --git a/linphone-app/assets/languages/pt_BR.ts b/linphone-app/assets/languages/pt_BR.ts index 4f8f51080..1beba78cb 100644 --- a/linphone-app/assets/languages/pt_BR.ts +++ b/linphone-app/assets/languages/pt_BR.ts @@ -456,10 +456,6 @@ Não foi possível enviar o arquivo. URL do servidor não configurado. - - isComposing - %1 está a escrever… - chatTyping '%1 is typing...' indicate that someone is composing in chat @@ -468,6 +464,16 @@ URL do servidor não configurado. %1 estão digitando… + + allTextCopied + "Copied to clipboard" : when a user copy a text from the menu, this message show up. + + + + selectedTextCopied + "Selection copied to clipboard" : when a user copy a text from the menu, this message show up. + + ChatDeliveries diff --git a/linphone-app/assets/languages/ru.ts b/linphone-app/assets/languages/ru.ts index 8b27f9c60..d39c82cec 100644 --- a/linphone-app/assets/languages/ru.ts +++ b/linphone-app/assets/languages/ru.ts @@ -456,10 +456,6 @@ Не удалось отправить файл. Не настроен адрес сервера. - - isComposing - %1 печатает… - chatTyping '%1 is typing...' indicate that someone is composing in chat @@ -469,6 +465,16 @@ + + allTextCopied + "Copied to clipboard" : when a user copy a text from the menu, this message show up. + + + + selectedTextCopied + "Selection copied to clipboard" : when a user copy a text from the menu, this message show up. + + ChatDeliveries diff --git a/linphone-app/assets/languages/sv.ts b/linphone-app/assets/languages/sv.ts index dcf8efbd7..e1cf41823 100644 --- a/linphone-app/assets/languages/sv.ts +++ b/linphone-app/assets/languages/sv.ts @@ -456,10 +456,6 @@ Det gick inte att skicka filen. Serverwebbadressen är inte konfigurerad. - - isComposing - %1 skriver… - chatTyping '%1 is typing...' indicate that someone is composing in chat @@ -468,6 +464,16 @@ Serverwebbadressen är inte konfigurerad. + + allTextCopied + "Copied to clipboard" : when a user copy a text from the menu, this message show up. + + + + selectedTextCopied + "Selection copied to clipboard" : when a user copy a text from the menu, this message show up. + + ChatDeliveries diff --git a/linphone-app/assets/languages/tr.ts b/linphone-app/assets/languages/tr.ts index cf4430d5c..9481151d8 100644 --- a/linphone-app/assets/languages/tr.ts +++ b/linphone-app/assets/languages/tr.ts @@ -456,10 +456,6 @@ Dosya gönderilemiyor. Sunucu url'si yapılandırılmadı. - - isComposing - %1 yazıyor… - chatTyping '%1 is typing...' indicate that someone is composing in chat @@ -467,6 +463,16 @@ Sunucu url'si yapılandırılmadı. + + allTextCopied + "Copied to clipboard" : when a user copy a text from the menu, this message show up. + + + + selectedTextCopied + "Selection copied to clipboard" : when a user copy a text from the menu, this message show up. + + ChatDeliveries diff --git a/linphone-app/assets/languages/uk.ts b/linphone-app/assets/languages/uk.ts index 28cdda213..d821a30f0 100644 --- a/linphone-app/assets/languages/uk.ts +++ b/linphone-app/assets/languages/uk.ts @@ -456,10 +456,6 @@ Не вдалося відіслати файл. Не налаштовано адресу сервера. - - isComposing - %1 друкує… - chatTyping '%1 is typing...' indicate that someone is composing in chat @@ -469,6 +465,16 @@ + + allTextCopied + "Copied to clipboard" : when a user copy a text from the menu, this message show up. + + + + selectedTextCopied + "Selection copied to clipboard" : when a user copy a text from the menu, this message show up. + + ChatDeliveries diff --git a/linphone-app/assets/languages/zh_CN.ts b/linphone-app/assets/languages/zh_CN.ts index 745d3547f..dd948d30f 100644 --- a/linphone-app/assets/languages/zh_CN.ts +++ b/linphone-app/assets/languages/zh_CN.ts @@ -456,10 +456,6 @@ 无法发送文件。 未配置服务器地址。 - - isComposing - %1 正在输入… - chatTyping '%1 is typing...' indicate that someone is composing in chat @@ -467,6 +463,16 @@ %1 正在输入… + + allTextCopied + "Copied to clipboard" : when a user copy a text from the menu, this message show up. + + + + selectedTextCopied + "Selection copied to clipboard" : when a user copy a text from the menu, this message show up. + + ChatDeliveries diff --git a/linphone-app/resources.qrc b/linphone-app/resources.qrc index 24d49e705..5770b8373 100644 --- a/linphone-app/resources.qrc +++ b/linphone-app/resources.qrc @@ -98,6 +98,7 @@ assets/images/contact_disabled.svg assets/images/contact_normal.svg assets/images/contact_selected.svg + assets/images/copy_light.svg assets/images/current_account_status_online.svg assets/images/current_account_status_offline.svg assets/images/current_account_status_dnd.svg diff --git a/linphone-app/src/components/sip-addresses/SipAddressesModel.cpp b/linphone-app/src/components/sip-addresses/SipAddressesModel.cpp index 4c9d77250..e9b34eb6e 100644 --- a/linphone-app/src/components/sip-addresses/SipAddressesModel.cpp +++ b/linphone-app/src/components/sip-addresses/SipAddressesModel.cpp @@ -566,15 +566,19 @@ void SipAddressesModel::removeContactOfSipAddress (const QString &sipAddress) { // ----------------------------------------------------------------------------- void SipAddressesModel::initSipAddresses () { - QElapsedTimer timer; - timer.start(); + QElapsedTimer timer, stepsTimer; + timer.start(); - initSipAddressesFromChat(); - initSipAddressesFromCalls(); - initRefs(); - initSipAddressesFromContacts(); - - qInfo() << "Sip addresses model initialized in:" << timer.elapsed() << "ms."; + stepsTimer.start(); + initSipAddressesFromChat(); + qInfo() << "Sip addresses model from Chats :" << stepsTimer.restart() << "ms."; + initSipAddressesFromCalls(); + qInfo() << "Sip addresses model from Calls :" << stepsTimer.restart() << "ms."; + initRefs(); + qInfo() << "Sip addresses model from Refs :" << stepsTimer.restart() << "ms."; + initSipAddressesFromContacts(); + qInfo() << "Sip addresses model from Contacts :" << stepsTimer.restart() << "ms."; + qInfo() << "Sip addresses model initialized in:" << timer.elapsed() << "ms."; } void SipAddressesModel::initSipAddressesFromChat () { diff --git a/linphone-app/ui/modules/Linphone/Chat/Chat.qml b/linphone-app/ui/modules/Linphone/Chat/Chat.qml index 6e727329f..20bc6774d 100644 --- a/linphone-app/ui/modules/Linphone/Chat/Chat.qml +++ b/linphone-app/ui/modules/Linphone/Chat/Chat.qml @@ -17,6 +17,9 @@ Rectangle { property alias proxyModel: chat.model // ChatRoomProxyModel property alias tryingToLoadMoreEntries : chat.tryToLoadMoreEntries + property string noticeBannerText : '' // When set, show a banner with text and hide after some time + onNoticeBannerTextChanged: if(noticeBannerText!='') messageBlock.state = "showed" + // --------------------------------------------------------------------------- signal messageToSend (string text) @@ -251,24 +254,97 @@ Rectangle { // Display content. Loader { + id: loader Layout.fillWidth: true source: Logic.getComponentFromEntry($chatEntry) } + Connections{ + target: loader.item + ignoreUnknownSignals: true + //: "Copied to clipboard" : when a user copy a text from the menu, this message show up. + onCopyAllDone: container.noticeBannerText = qsTr("allTextCopied") + //: "Selection copied to clipboard" : when a user copy a text from the menu, this message show up. + onCopySelectionDone: container.noticeBannerText = qsTr("selectedTextCopied") + } } } } } - footer: Text { - property var composers : container.proxyModel.composers - color: ChatStyle.composingText.color - font.pointSize: ChatStyle.composingText.pointSize - height: visible ? undefined : 0 - leftPadding: ChatStyle.composingText.leftPadding - visible: composers.length > 0 && SettingsModel.chatEnabled - wrapMode: Text.Wrap - //: '%1 is typing...' indicate that someone is composing in chat - text:(composers.length==0?'': qsTr('chatTyping','',composers.length).arg(container.proxyModel.getDisplayNameComposers())) + footer: Item{ + Text { + property var composers : container.proxyModel.composers + color: ChatStyle.composingText.color + font.pointSize: ChatStyle.composingText.pointSize + height: visible ? undefined : 0 + leftPadding: ChatStyle.composingText.leftPadding + visible: composers.length > 0 && SettingsModel.chatEnabled + wrapMode: Text.Wrap + //: '%1 is typing...' indicate that someone is composing in chat + text:(composers.length==0?'': qsTr('chatTyping','',composers.length).arg(container.proxyModel.getDisplayNameComposers())) + } + } + + Rectangle{ + id: messageBlock + height: 32 + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + anchors.leftMargin: ChatStyle.entry.leftMargin + anchors.rightMargin: ChatStyle.entry.leftMargin + anchors.bottomMargin: ChatStyle.entry.bottomMargin + color: ChatStyle.messageBanner.color + radius: 10 + state: "hidden" + Timer{ + id: hideNoticeBanner + interval: 4000 + repeat: false + onTriggered: messageBlock.state = "hidden" + } + RowLayout{ + anchors.centerIn: parent + spacing: 5 + Icon{ + icon: "copy_light" + iconSize: 20 + } + Text{ + Layout.fillHeight: true + Layout.fillWidth: true + text: container.noticeBannerText + font { + pointSize: ChatStyle.messageBanner.pointSize + } + color: ChatStyle.messageBanner.textColor + } + } + states: [ + State { + name: "hidden" + PropertyChanges { target: messageBlock; opacity: 0 } + }, + State { + name: "showed" + PropertyChanges { target: messageBlock; opacity: 1 } + } + ] + transitions: [ + Transition { + from: "*"; to: "showed" + SequentialAnimation{ + NumberAnimation{ properties: "opacity"; easing.type: Easing.OutBounce; duration: 500 } + ScriptAction{ script: hideNoticeBanner.start()} + } + }, + Transition { + SequentialAnimation{ + NumberAnimation{ properties: "opacity"; duration: 1000 } + ScriptAction{ script: container.noticeBannerText = '' } + } + } + ] } } @@ -277,6 +353,7 @@ Rectangle { // ------------------------------------------------------------------------- Borders { + id: textAreaBorders Layout.fillWidth: true Layout.preferredHeight: textArea.height @@ -326,6 +403,8 @@ Rectangle { } } + + // --------------------------------------------------------------------------- // Scroll at end if necessary. // --------------------------------------------------------------------------- diff --git a/linphone-app/ui/modules/Linphone/Chat/ChatMenu.qml b/linphone-app/ui/modules/Linphone/Chat/ChatMenu.qml index 8b447f260..cc057d991 100644 --- a/linphone-app/ui/modules/Linphone/Chat/ChatMenu.qml +++ b/linphone-app/ui/modules/Linphone/Chat/ChatMenu.qml @@ -16,7 +16,7 @@ import LinphoneEnums 1.0 import 'Message.js' as Logic // ============================================================================= - +// ChatMenu Item { id: container property string lastTextSelected @@ -26,6 +26,8 @@ Item { signal deliveryStatusClicked() signal removeEntryRequested() + signal copyAllDone() + signal copySelectionDone() function open(){ messageMenu.popup() @@ -44,7 +46,15 @@ Item { iconSizeMenu: 17 iconLayoutDirection: Qt.RightToLeft menuItemStyle : MenuItemStyle.aux - onTriggered: Clipboard.text = (container.lastTextSelected == '' ? container.content : container.lastTextSelected) + onTriggered: { + if( container.lastTextSelected == ''){ + Clipboard.text = container.content + container.copyAllDone(); + }else{ + Clipboard.text = container.lastTextSelected + container.copySelectionDone() + } + } visible: content != '' } diff --git a/linphone-app/ui/modules/Linphone/Chat/FileMessage.qml b/linphone-app/ui/modules/Linphone/Chat/FileMessage.qml index bb742eb30..7438de146 100644 --- a/linphone-app/ui/modules/Linphone/Chat/FileMessage.qml +++ b/linphone-app/ui/modules/Linphone/Chat/FileMessage.qml @@ -21,6 +21,9 @@ Row { property bool isOutgoing : $chatEntry.isOutgoing || $chatEntry.state == LinphoneEnums.ChatMessageStateIdle; + signal copyAllDone() + signal copySelectionDone() + Item { height: ChatStyle.entry.lineHeight width: ChatStyle.entry.metaWidth @@ -269,6 +272,9 @@ Row { onDeliveryStatusClicked: deliveryLayout.visible = !deliveryLayout.visible onRemoveEntryRequested: removeEntry() deliveryVisible: deliveryLayout.visible + + onCopyAllDone: mainRow.copyAllDone() + onCopySelectionDone: mainRow.copySelectionDone() } } } diff --git a/linphone-app/ui/modules/Linphone/Chat/IncomingMessage.qml b/linphone-app/ui/modules/Linphone/Chat/IncomingMessage.qml index 169f3c5b1..2be7dc21f 100644 --- a/linphone-app/ui/modules/Linphone/Chat/IncomingMessage.qml +++ b/linphone-app/ui/modules/Linphone/Chat/IncomingMessage.qml @@ -10,6 +10,10 @@ import LinphoneUtils 1.0 RowLayout { id:mainRow + + signal copyAllDone() + signal copySelectionDone() + implicitHeight: message.height spacing: 0 @@ -55,6 +59,9 @@ RowLayout { Message { id: message + onCopyAllDone: parent.copyAllDone() + onCopySelectionDone: parent.copySelectionDone() + Layout.fillWidth: true // Not a style. Workaround to avoid a 0 width. diff --git a/linphone-app/ui/modules/Linphone/Chat/Message.qml b/linphone-app/ui/modules/Linphone/Chat/Message.qml index 6cf8468c4..af4645211 100644 --- a/linphone-app/ui/modules/Linphone/Chat/Message.qml +++ b/linphone-app/ui/modules/Linphone/Chat/Message.qml @@ -32,6 +32,11 @@ Item { // --------------------------------------------------------------------------- + signal copyAllDone() + signal copySelectionDone() + + // --------------------------------------------------------------------------- + implicitHeight: message.contentHeight + (ephemeralTimerRow.visible? message.padding * 4 : message.padding * 2) + (deliveryLayout.visible? deliveryLayout.height : 0) @@ -127,6 +132,9 @@ Item { onDeliveryStatusClicked: deliveryLayout.visible = !deliveryLayout.visible onRemoveEntryRequested: removeEntry() deliveryVisible: deliveryLayout.visible + + onCopyAllDone: container.copyAllDone() + onCopySelectionDone: container.copySelectionDone() } } diff --git a/linphone-app/ui/modules/Linphone/Chat/OutgoingMessage.qml b/linphone-app/ui/modules/Linphone/Chat/OutgoingMessage.qml index 55fda9b60..5b37d6909 100644 --- a/linphone-app/ui/modules/Linphone/Chat/OutgoingMessage.qml +++ b/linphone-app/ui/modules/Linphone/Chat/OutgoingMessage.qml @@ -13,10 +13,16 @@ import Utils 1.0 Item { implicitHeight: message.height width: parent.width + + signal copyAllDone() + signal copySelectionDone() Message { id: message - + + onCopyAllDone: parent.copyAllDone() + onCopySelectionDone: parent.copySelectionDone() + anchors { left: parent.left leftMargin: ChatStyle.entry.metaWidth diff --git a/linphone-app/ui/modules/Linphone/Styles/Chat/ChatStyle.qml b/linphone-app/ui/modules/Linphone/Styles/Chat/ChatStyle.qml index f33adcf28..f2827ff2d 100644 --- a/linphone-app/ui/modules/Linphone/Styles/Chat/ChatStyle.qml +++ b/linphone-app/ui/modules/Linphone/Styles/Chat/ChatStyle.qml @@ -39,11 +39,18 @@ QtObject { property int leftPadding: 20 property int pointSize: Units.dp * 9 } + + property QtObject messageBanner: QtObject { + property color color: ColorsList.add("Chat_message_banner", "", "Background of message banner", "#9ecd1d").color + property color textColor: ColorsList.add("Chat_message_banner_text", "q", "Text of message banner").color + property int pointSize: Units.dp * 9 + } property QtObject entry: QtObject { property int bottomMargin: 10 property int deleteIconSize: 22 property int leftMargin: 18 + property int rightMargin: 18 property int lineHeight: 30 property int metaWidth: 40