From 89da5dd9230400ad2b03b53f9e11a33d7c31c1c1 Mon Sep 17 00:00:00 2001 From: Jonathan Rainville Date: Tue, 29 Dec 2020 15:33:54 -0500 Subject: [PATCH] feat: open links in user request browser with modal --- ui/app/AppLayouts/Browser/BrowserLayout.qml | 8 ++- .../ChatColumn/MessageComponents/ChatText.qml | 2 +- .../MessageComponents/LinksMessage.qml | 2 +- .../Chat/components/ChooseBrowserPopup.qml | 56 ++++++++++++++++++ .../Profile/Sections/AboutContainer.qml | 10 ++-- .../Profile/Sections/DevicesContainer.qml | 2 +- .../Sections/Ens/TermsAndConditions.qml | 4 +- .../Profile/Sections/HelpContainer.qml | 27 +++------ .../CollectiblesModal.qml | 2 +- ui/app/AppMain.qml | 28 +++++++++ ui/app/img/chooseBrowserImage.png | Bin 0 -> 26760 bytes ui/main.qml | 4 ++ ui/nim-status-client.pro | 1 + ui/shared/ToastMessage.qml | 2 +- ui/shared/status/StatusCheckBox.qml | 2 + 15 files changed, 118 insertions(+), 32 deletions(-) create mode 100644 ui/app/AppLayouts/Chat/components/ChooseBrowserPopup.qml create mode 100644 ui/app/img/chooseBrowserImage.png diff --git a/ui/app/AppLayouts/Browser/BrowserLayout.qml b/ui/app/AppLayouts/Browser/BrowserLayout.qml index 1460e3c059..7b3ebaacc6 100644 --- a/ui/app/AppLayouts/Browser/BrowserLayout.qml +++ b/ui/app/AppLayouts/Browser/BrowserLayout.qml @@ -65,6 +65,11 @@ Rectangle { return url; } + function openUrlInNewTab(url) { + browserWindow.addNewTab() + currentWebView.url = determineRealURL(url) + } + property Component accessDialogComponent: BrowserConnectionModal { currentTab: tabs.getTab(tabs.currentIndex) && tabs.getTab(tabs.currentIndex).item x: browserWindow.width - width - Style.current.halfPadding @@ -114,8 +119,7 @@ Rectangle { FavoriteMenu { id: favoriteMenu openInNewTab: function (url) { - browserWindow.addNewTab() - currentWebView.url = url + browserWindow.openUrlInNewTab(url) } } diff --git a/ui/app/AppLayouts/Chat/ChatColumn/MessageComponents/ChatText.qml b/ui/app/AppLayouts/Chat/ChatColumn/MessageComponents/ChatText.qml index e561b77597..7e6fbc42fe 100644 --- a/ui/app/AppLayouts/Chat/ChatColumn/MessageComponents/ChatText.qml +++ b/ui/app/AppLayouts/Chat/ChatColumn/MessageComponents/ChatText.qml @@ -55,7 +55,7 @@ Item { return; } - Qt.openUrlExternally(link) + appMain.openLink(link) } onLinkHovered: { diff --git a/ui/app/AppLayouts/Chat/ChatColumn/MessageComponents/LinksMessage.qml b/ui/app/AppLayouts/Chat/ChatColumn/MessageComponents/LinksMessage.qml index 69d2d6784a..e87a34b8a6 100644 --- a/ui/app/AppLayouts/Chat/ChatColumn/MessageComponents/LinksMessage.qml +++ b/ui/app/AppLayouts/Chat/ChatColumn/MessageComponents/LinksMessage.qml @@ -170,7 +170,7 @@ Column { anchors.right: linkImage.right anchors.bottom: linkSite.bottom cursorShape: Qt.PointingHandCursor - onClicked: Qt.openUrlExternally(linkData.address) + onClicked: appMain.openLink(linkData.address) } } } diff --git a/ui/app/AppLayouts/Chat/components/ChooseBrowserPopup.qml b/ui/app/AppLayouts/Chat/components/ChooseBrowserPopup.qml new file mode 100644 index 0000000000..0ef15bd3fc --- /dev/null +++ b/ui/app/AppLayouts/Chat/components/ChooseBrowserPopup.qml @@ -0,0 +1,56 @@ +import QtQuick 2.12 +import QtQuick.Controls 2.3 +import "../../../../imports" +import "../../../../shared" +import "../../../../shared/status" + +ModalPopup { + property string link + + id: popup + + title: qsTr("Choose browser") + width: 440 + height: 425 + + Column { + anchors.fill: parent + spacing: 20 + + Image { + source: "../../../img/chooseBrowserImage.png" + width: 240 + height: 148 + anchors.horizontalCenter: parent.horizontalCenter + } + + StatusButton { + text: qsTr("Open in Status") + anchors.horizontalCenter: parent.horizontalCenter + onClicked: { + appSettings.showBrowserSelector = !rememberChoiceCheckBox.checked + changeAppSection(Constants.browser) + browserLayoutContainer.item.openUrlInNewTab(popup.link) + popup.close() + } + } + + StatusButton { + text: qsTr("Open in my default browser") + type: "secondary" + anchors.horizontalCenter: parent.horizontalCenter + onClicked: { + appSettings.showBrowserSelector = !rememberChoiceCheckBox.checked + Qt.openUrlExternally(popup.link) + } + } + + + StatusCheckBox { + id: rememberChoiceCheckBox + text: qsTr("Remember my choice. To override it, go to settings.") + width: parent.width + } + } +} + diff --git a/ui/app/AppLayouts/Profile/Sections/AboutContainer.qml b/ui/app/AppLayouts/Profile/Sections/AboutContainer.qml index 4edee6b944..014ac88d71 100644 --- a/ui/app/AppLayouts/Profile/Sections/AboutContainer.qml +++ b/ui/app/AppLayouts/Profile/Sections/AboutContainer.qml @@ -63,7 +63,7 @@ Item { anchors.top: element12.top anchors.topMargin: 58 font.pixelSize: 14 - onLinkActivated: Qt.openUrlExternally(link) + onLinkActivated: appMain.openLink(link) MouseArea { anchors.fill: parent @@ -80,7 +80,7 @@ Item { anchors.top: element13.top anchors.topMargin: 58 font.pixelSize: 14 - onLinkActivated: Qt.openUrlExternally(link) + onLinkActivated: appMain.openLink(link) MouseArea { anchors.fill: parent @@ -96,7 +96,7 @@ Item { anchors.leftMargin: Style.current.bigPadding anchors.top: element14.top anchors.topMargin: 58 - onLinkActivated: Qt.openUrlExternally(link) + onLinkActivated: appMain.openLink(link) MouseArea { anchors.fill: parent @@ -106,12 +106,12 @@ Item { } StyledText { id: faqLink - text: "Frequently asked questions" + text: `${qsTr("Frequently asked questions")}` anchors.left: parent.left anchors.leftMargin: Style.current.bigPadding anchors.top: privacyPolicyLink.top anchors.topMargin: 58 - onLinkActivated: Qt.openUrlExternally(link) + onLinkActivated: appMain.openLink(link) MouseArea { anchors.fill: parent diff --git a/ui/app/AppLayouts/Profile/Sections/DevicesContainer.qml b/ui/app/AppLayouts/Profile/Sections/DevicesContainer.qml index 9eb2c64bd4..6000dd4ccd 100644 --- a/ui/app/AppLayouts/Profile/Sections/DevicesContainer.qml +++ b/ui/app/AppLayouts/Profile/Sections/DevicesContainer.qml @@ -131,7 +131,7 @@ Item { MouseArea { cursorShape: Qt.PointingHandCursor anchors.fill: parent - onClicked: Qt.openUrlExternally("https://status.im/user_guides/pairing_devices.html") + onClicked: appMain.openLink("https://status.im/user_guides/pairing_devices.html") } } } diff --git a/ui/app/AppLayouts/Profile/Sections/Ens/TermsAndConditions.qml b/ui/app/AppLayouts/Profile/Sections/Ens/TermsAndConditions.qml index 568c60e5b2..d9c1bdd641 100644 --- a/ui/app/AppLayouts/Profile/Sections/Ens/TermsAndConditions.qml +++ b/ui/app/AppLayouts/Profile/Sections/Ens/TermsAndConditions.qml @@ -138,7 +138,7 @@ Item { text: qsTr(`Look up on Etherscan`).arg(walletModel.etherscanLink.replace("/tx", "/address")).arg(profileModel.ens.getUsernameRegistrar()) anchors.left: parent.left anchors.right: parent.right - onLinkActivated: Qt.openUrlExternally(link) + onLinkActivated: appMain.openLink(link) MouseArea { anchors.fill: parent acceptedButtons: Qt.NoButton // we don't want to eat clicks on the Text @@ -159,7 +159,7 @@ Item { text: qsTr(`Look up on Etherscan`).arg(walletModel.etherscanLink.replace("/tx", "/address")).arg(profileModel.ens.getENSRegistry()) anchors.left: parent.left anchors.right: parent.right - onLinkActivated: Qt.openUrlExternally(link) + onLinkActivated: appMain.openLink(link) MouseArea { anchors.fill: parent acceptedButtons: Qt.NoButton // we don't want to eat clicks on the Text diff --git a/ui/app/AppLayouts/Profile/Sections/HelpContainer.qml b/ui/app/AppLayouts/Profile/Sections/HelpContainer.qml index a3dcba9b5f..f6288b3802 100644 --- a/ui/app/AppLayouts/Profile/Sections/HelpContainer.qml +++ b/ui/app/AppLayouts/Profile/Sections/HelpContainer.qml @@ -135,49 +135,40 @@ Item { StyledText { id: faqLink - //% "Frequently asked questions" - text: qsTrId("-a-href--https---status-im-docs-faqs-html--frequently-asked-questions--a-") + text: `${qsTr("Frequently asked questions")}` font.pixelSize: 15 + onLinkActivated: appMain.openLink(link) MouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor - onClicked: { - mouse.accepted = false - Qt.openUrlExternally("https://status.im/faq/") - } + acceptedButtons: Qt.NoButton // we don't want to eat clicks on the Text } } StyledText { id: issueLink - //% "Submit a bug" - text: qsTrId("-a-href--https---github-com-status-im-nim-status-client-issues-new--submit-a-bug--a-") + text: `${qsTr("Submit a bug")}` anchors.topMargin: Style.current.bigPadding anchors.top: faqLink.bottom font.pixelSize: 15 + onLinkActivated: appMain.openLink(link) MouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor - onClicked: { - mouse.accepted = false - Qt.openUrlExternally("https://github.com/status-im/nim-status-client/issues/new") - } + acceptedButtons: Qt.NoButton // we don't want to eat clicks on the Text } } StyledText { - //% "Request a feature" - text: qsTrId("-a-href--https---discuss-status-im-c-features-51--request-a-feature--a-") + text: `${qsTr("Request a feature")}` anchors.topMargin: Style.current.bigPadding anchors.top: issueLink.bottom font.pixelSize: 15 + onLinkActivated: appMain.openLink(link) MouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor - onClicked: { - mouse.accepted = false - Qt.openUrlExternally("https://discuss.status.im/c/features/51") - } + acceptedButtons: Qt.NoButton // we don't want to eat clicks on the Text } } } diff --git a/ui/app/AppLayouts/Wallet/components/collectiblesComponents/CollectiblesModal.qml b/ui/app/AppLayouts/Wallet/components/collectiblesComponents/CollectiblesModal.qml index b196ee262f..f221c08c1a 100644 --- a/ui/app/AppLayouts/Wallet/components/collectiblesComponents/CollectiblesModal.qml +++ b/ui/app/AppLayouts/Wallet/components/collectiblesComponents/CollectiblesModal.qml @@ -39,7 +39,7 @@ ModalPopup { label: popup.buttonText anchors.top: parent.top onClicked: { - Qt.openUrlExternally(popup.buttonLink) + appMain.openLink(popup.buttonLink) } } } diff --git a/ui/app/AppMain.qml b/ui/app/AppMain.qml index e03580ae11..9958aefe09 100644 --- a/ui/app/AppMain.qml +++ b/ui/app/AppMain.qml @@ -7,6 +7,7 @@ import "../shared/status" import "./AppLayouts" import "./AppLayouts/Timeline" import "./AppLayouts/Wallet" +import "./AppLayouts/Chat/components" RowLayout { id: appMain @@ -27,6 +28,33 @@ RowLayout { return profileModel.contacts.list.rowData(index, useLargeImage ? "largeImage" : "thumbnailImage") } + function openPopup(popupComponent, params = {}) { + const popup = popupComponent.createObject(appMain, params); + popup.open() + return popup + } + + function openLink(link) { + if (appSettings.showBrowserSelector) { + appMain.openPopup(chooseBrowserPopupComponent, {link: link}) + } else { + if (appSettings.openLinksInStatus) { + appMain.changeAppSection(Constants.browser) + browserLayoutContainer.item.openUrlInNewTab(link) + } else { + Qt.openUrlExternally(link) + } + } + } + + Component { + id: chooseBrowserPopupComponent + ChooseBrowserPopup { + onClosed: { + destroy() + } + } + } ToastMessage { id: toastMessage diff --git a/ui/app/img/chooseBrowserImage.png b/ui/app/img/chooseBrowserImage.png new file mode 100644 index 0000000000000000000000000000000000000000..58476a6ab9931d01a4eed085c4f3fd769ea22d85 GIT binary patch literal 26760 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 BzcBy+ literal 0 HcmV?d00001 diff --git a/ui/main.qml b/ui/main.qml index a20e7eb3bb..3fe68c9631 100644 --- a/ui/main.qml +++ b/ui/main.qml @@ -114,6 +114,8 @@ ApplicationWindow { property int fontSize: Constants.fontSizeM // Browser settings + property bool showBrowserSelector: true + property bool openLinksInStatus: true property bool showFavoritesBar: false property bool autoLoadImages: true property bool javaScriptEnabled: true @@ -153,6 +155,8 @@ ApplicationWindow { property bool hideSignPhraseModal: defaultAppSettings.hideSignPhraseModal // Browser settings + property bool showBrowserSelector: defaultAppSettings.showBrowserSelector + property bool openLinksInStatus: defaultAppSettings.openLinksInStatus property bool showFavoritesBar: defaultAppSettings.showFavoritesBar property bool autoLoadImages: defaultAppSettings.autoLoadImages property bool javaScriptEnabled: defaultAppSettings.javaScriptEnabled diff --git a/ui/nim-status-client.pro b/ui/nim-status-client.pro index d86f73827b..47e7508256 100644 --- a/ui/nim-status-client.pro +++ b/ui/nim-status-client.pro @@ -168,6 +168,7 @@ DISTFILES += \ app/AppLayouts/Chat/ChatColumn/MessageComponents/qmldir \ app/AppLayouts/Chat/ContactsColumn/AddChat.qml \ app/AppLayouts/Chat/ContactsColumn/ClosedEmptyView.qml \ + app/AppLayouts/Chat/components/ChooseBrowserPopup.qml \ app/AppLayouts/Chat/components/EmojiCategoryButton.qml \ app/AppLayouts/Chat/components/EmojiPopup.qml \ app/AppLayouts/Chat/components/EmojiReaction.qml \ diff --git a/ui/shared/ToastMessage.qml b/ui/shared/ToastMessage.qml index 549bf29911..c44dcfa419 100644 --- a/ui/shared/ToastMessage.qml +++ b/ui/shared/ToastMessage.qml @@ -99,7 +99,7 @@ Popup { font.weight: Font.Medium anchors.leftMargin: 12 onLinkActivated: { - Qt.openUrlExternally(root.link) + appMain.openLink(root.link) root.close() } } diff --git a/ui/shared/status/StatusCheckBox.qml b/ui/shared/status/StatusCheckBox.qml index 10b21c991a..0a0448c480 100644 --- a/ui/shared/status/StatusCheckBox.qml +++ b/ui/shared/status/StatusCheckBox.qml @@ -28,6 +28,8 @@ CheckBox { text: control.text opacity: enabled ? 1.0 : 0.3 verticalAlignment: Text.AlignVCenter + wrapMode: Text.WordWrap + width: parent.width leftPadding: !!control.text ? control.indicator.width + control.spacing : control.indicator.width } }