From 8675b4debf86b281c803e69e19123702b9e8d1bb Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Tue, 12 Oct 2021 10:36:24 +0200 Subject: [PATCH] Use a webview for account creation # Conflicts: # linphone-app/src/components/settings/AccountSettingsModel.cpp # linphone-app/src/components/settings/SettingsModel.cpp # linphone-app/src/components/settings/SettingsModel.hpp # linphone-app/ui/views/App/Main/Assistant/UseOtherSipAccount.qml --- linphone-app/src/app/main.cpp | 2 +- .../settings/AccountSettingsModel.cpp | 17 +- .../settings/AccountSettingsModel.hpp | 1 + .../src/components/settings/SettingsModel.cpp | 18 ++ .../src/components/settings/SettingsModel.hpp | 19 +- linphone-app/src/utils/Constants.cpp | 2 + linphone-app/src/utils/Constants.hpp | 3 +- linphone-app/ui/views/App/Main/Assistant.qml | 8 +- .../Main/Assistant/AssistantAbstractView.qml | 211 +++++++++--------- .../App/Main/Assistant/AssistantHome.qml | 62 +++-- .../Main/Assistant/CreateAppSipAccount.qml | 131 ++++++++--- .../Assistant/FetchRemoteConfiguration.qml | 105 +++++---- .../App/Main/Assistant/UseOtherSipAccount.qml | 171 +++++++------- .../App/Settings/SettingsSipAccounts.qml | 31 ++- .../Assistant/AssistantAbstractViewStyle.qml | 2 +- .../Assistant/CreateAppSipAccountStyle.qml | 4 + linphone-sdk | 2 +- 17 files changed, 469 insertions(+), 320 deletions(-) diff --git a/linphone-app/src/app/main.cpp b/linphone-app/src/app/main.cpp index d602b035e..33149793b 100644 --- a/linphone-app/src/app/main.cpp +++ b/linphone-app/src/app/main.cpp @@ -28,8 +28,8 @@ // ============================================================================= int main (int argc, char *argv[]) { - QtWebView::initialize(); AppController controller(argc, argv); + QtWebView::initialize(); #ifdef QT_QML_DEBUG QQmlDebuggingEnabler enabler; #endif diff --git a/linphone-app/src/components/settings/AccountSettingsModel.cpp b/linphone-app/src/components/settings/AccountSettingsModel.cpp index 72c8a86ec..e66b8b21a 100644 --- a/linphone-app/src/components/settings/AccountSettingsModel.cpp +++ b/linphone-app/src/components/settings/AccountSettingsModel.cpp @@ -330,13 +330,28 @@ bool AccountSettingsModel::addOrUpdateProxyConfig ( return addOrUpdateProxyConfig(proxyConfig); } +bool AccountSettingsModel::addOrUpdateProxyConfig ( + const QVariantMap &data +) { + shared_ptr proxyConfig; + QString sipAddress = data["sipAddress"].toString(); + shared_ptr address = CoreManager::getInstance()->getCore()->interpretUrl(sipAddress.toStdString()); + + for (const auto &databaseProxyConfig : CoreManager::getInstance()->getCore()->getProxyConfigList()) + if (databaseProxyConfig->getIdentityAddress()->weakEqual(address)) { + proxyConfig = databaseProxyConfig; + } + if(!proxyConfig) + proxyConfig = createProxyConfig(); + return addOrUpdateProxyConfig(proxyConfig, data); +} + shared_ptr AccountSettingsModel::createProxyConfig () { shared_ptr core = CoreManager::getInstance()->getCore(); core->getConfig()->loadFromXmlFile( Paths::getAssistantConfigDirPath() + "create-app-sip-account.rc" ); - return core->createProxyConfig(); } diff --git a/linphone-app/src/components/settings/AccountSettingsModel.hpp b/linphone-app/src/components/settings/AccountSettingsModel.hpp index 40913901b..b654b89ae 100644 --- a/linphone-app/src/components/settings/AccountSettingsModel.hpp +++ b/linphone-app/src/components/settings/AccountSettingsModel.hpp @@ -74,6 +74,7 @@ public: Q_INVOKABLE void setDefaultProxyConfigFromSipAddress (const QString &sipAddress); Q_INVOKABLE bool addOrUpdateProxyConfig (const std::shared_ptr &proxyConfig, const QVariantMap &data); + Q_INVOKABLE bool addOrUpdateProxyConfig (const QVariantMap &data);// Create default proxy config and apply data Q_INVOKABLE void removeProxyConfig (const std::shared_ptr &proxyConfig); Q_INVOKABLE std::shared_ptr createProxyConfig (); diff --git a/linphone-app/src/components/settings/SettingsModel.cpp b/linphone-app/src/components/settings/SettingsModel.cpp index ec6d98276..2ba927b07 100644 --- a/linphone-app/src/components/settings/SettingsModel.cpp +++ b/linphone-app/src/components/settings/SettingsModel.cpp @@ -161,6 +161,24 @@ void SettingsModel::setAssistantSupportsPhoneNumbers (bool status) { emit assistantSupportsPhoneNumbersChanged(status); } +QString SettingsModel::getAssistantRegistrationUrl () const { + return Utils::coreStringToAppString(mConfig->getString(UiSection, "assistant_registration_url", Constants::DefaultAssistantRegistrationUrl)); +} + +void SettingsModel::setAssistantRegistrationUrl (QString url) { + mConfig->setString(UiSection, "assistant_registration_url", Utils::appStringToCoreString(url)); + emit assistantRegistrationUrlChanged(url); +} + +QString SettingsModel::getAssistantLoginUrl () const { + return Utils::coreStringToAppString(mConfig->getString(UiSection, "assistant_login_url", Constants::DefaultAssistantLoginUrl)); +} + +void SettingsModel::setAssistantLoginUrl (QString url) { + mConfig->setString(UiSection, "assistant_login_url", Utils::appStringToCoreString(url)); + emit assistantLoginUrlChanged(url); +} + // ============================================================================= // Audio. // ============================================================================= diff --git a/linphone-app/src/components/settings/SettingsModel.hpp b/linphone-app/src/components/settings/SettingsModel.hpp index 43fa5b192..a52b176e6 100644 --- a/linphone-app/src/components/settings/SettingsModel.hpp +++ b/linphone-app/src/components/settings/SettingsModel.hpp @@ -40,14 +40,16 @@ class SettingsModel : public QObject { // =========================================================================== // Assistant. ---------------------------------------------------------------- - + Q_PROPERTY(bool createAppSipAccountEnabled READ getCreateAppSipAccountEnabled WRITE setCreateAppSipAccountEnabled NOTIFY createAppSipAccountEnabledChanged) Q_PROPERTY(bool fetchRemoteConfigurationEnabled READ getFetchRemoteConfigurationEnabled WRITE setFetchRemoteConfigurationEnabled NOTIFY fetchRemoteConfigurationEnabledChanged) Q_PROPERTY(bool useAppSipAccountEnabled READ getUseAppSipAccountEnabled WRITE setUseAppSipAccountEnabled NOTIFY useAppSipAccountEnabledChanged) Q_PROPERTY(bool useOtherSipAccountEnabled READ getUseOtherSipAccountEnabled WRITE setUseOtherSipAccountEnabled NOTIFY useOtherSipAccountEnabledChanged) Q_PROPERTY(bool assistantSupportsPhoneNumbers READ getAssistantSupportsPhoneNumbers WRITE setAssistantSupportsPhoneNumbers NOTIFY assistantSupportsPhoneNumbersChanged) - + Q_PROPERTY(QString assistantRegistrationUrl READ getAssistantRegistrationUrl WRITE setAssistantRegistrationUrl NOTIFY assistantRegistrationUrlChanged) + Q_PROPERTY(QString assistantLoginUrl READ getAssistantLoginUrl WRITE setAssistantLoginUrl NOTIFY assistantLoginUrlChanged) + // Audio. -------------------------------------------------------------------- Q_PROPERTY(bool captureGraphRunning READ getCaptureGraphRunning NOTIFY captureGraphRunningChanged) @@ -228,7 +230,13 @@ public: bool getAssistantSupportsPhoneNumbers () const; void setAssistantSupportsPhoneNumbers (bool status); - + + QString getAssistantRegistrationUrl () const; + void setAssistantRegistrationUrl (QString url); + + QString getAssistantLoginUrl () const; + void setAssistantLoginUrl (QString url); + // Audio. -------------------------------------------------------------------- void createCaptureGraph(); @@ -502,7 +510,10 @@ signals: void useOtherSipAccountEnabledChanged (bool status); void assistantSupportsPhoneNumbersChanged (bool status); - + + void assistantRegistrationUrlChanged (QString url); + void assistantLoginUrlChanged (QString url); + // Audio. -------------------------------------------------------------------- void captureGraphRunningChanged(bool running); diff --git a/linphone-app/src/utils/Constants.cpp b/linphone-app/src/utils/Constants.cpp index 21aaeb47d..c3366c604 100644 --- a/linphone-app/src/utils/Constants.cpp +++ b/linphone-app/src/utils/Constants.cpp @@ -62,6 +62,8 @@ constexpr qint64 Constants::FileSizeLimit; constexpr char Constants::DefaultXmlrpcUri[]; constexpr char Constants::DefaultConferenceURI[]; constexpr char Constants::DefaultLimeServerURL[]; +constexpr char Constants::DefaultAssistantRegistrationUrl[]; +constexpr char Constants::DefaultAssistantLoginUrl[]; #if defined(Q_OS_LINUX) || defined(Q_OS_WIN) diff --git a/linphone-app/src/utils/Constants.hpp b/linphone-app/src/utils/Constants.hpp index b9310f455..6f85ecbf6 100644 --- a/linphone-app/src/utils/Constants.hpp +++ b/linphone-app/src/utils/Constants.hpp @@ -64,7 +64,8 @@ public: static constexpr char DefaultLogsEmail[] = "linphone-desktop@belledonne-communications.com"; static constexpr char DefaultConferenceURI[] = "sip:conference-factory@sip.linphone.org"; static constexpr char DefaultLimeServerURL[] = "https://lime.linphone.org/lime-server/lime-server.php"; - + static constexpr char DefaultAssistantRegistrationUrl[] = "https://subscribe.linphone.org/register"; + static constexpr char DefaultAssistantLoginUrl[] = "https://subscribe.linphone.org/login"; // Max image size in bytes. (100Kb) static constexpr qint64 MaxImageSize = 102400;// In Bytes. diff --git a/linphone-app/ui/views/App/Main/Assistant.qml b/linphone-app/ui/views/App/Main/Assistant.qml index 19c0983c0..c3787658c 100644 --- a/linphone-app/ui/views/App/Main/Assistant.qml +++ b/linphone-app/ui/views/App/Main/Assistant.qml @@ -42,14 +42,10 @@ Item { StackView { id: stack + clip:true anchors { - fill: parent - - bottomMargin: AssistantStyle.bottomMargin - leftMargin: AssistantStyle.leftMargin - rightMargin: AssistantStyle.rightMargin - topMargin: AssistantStyle.topMargin + fill: parent } initialItem: assistant.viewsPath + 'AssistantHome.qml' diff --git a/linphone-app/ui/views/App/Main/Assistant/AssistantAbstractView.qml b/linphone-app/ui/views/App/Main/Assistant/AssistantAbstractView.qml index f993555a3..ab2b87142 100644 --- a/linphone-app/ui/views/App/Main/Assistant/AssistantAbstractView.qml +++ b/linphone-app/ui/views/App/Main/Assistant/AssistantAbstractView.qml @@ -8,107 +8,112 @@ import App.Styles 1.0 // ============================================================================= Item { - id: view - - // --------------------------------------------------------------------------- - - property alias mainActionEnabled: mainActionButton.enabled - property alias mainActionLabel: mainActionButton.text - property var mainAction - - property alias description: description.text - property alias title: title.text - - property bool backEnabled: true - property bool maximized: false // Used to stretch content to fit all the view (the title will be set to top) - - default property alias _content: content.data - - // --------------------------------------------------------------------------- - - height: stack.height - width: stack.width - - // --------------------------------------------------------------------------- - // Info. - // --------------------------------------------------------------------------- - - Column { - id:titleBar - anchors.centerIn: parent - - spacing: AssistantAbstractViewStyle.info.spacing - width: parent.width - - Text { - id: title - - color: AssistantAbstractViewStyle.info.title.color - elide: Text.ElideRight - - font { - pointSize: AssistantAbstractViewStyle.info.title.pointSize - bold: true - } - - horizontalAlignment: Text.AlignHCenter - width: parent.width - } - - Text { - id: description - - color: AssistantAbstractViewStyle.info.description.color - elide: Text.ElideRight - - font.pointSize: AssistantAbstractViewStyle.info.description.pointSize - - horizontalAlignment: Text.AlignHCenter - width: parent.width - - visible: text.length > 0 - } - - // ------------------------------------------------------------------------- - // Content. - // ------------------------------------------------------------------------- - - Item { - id: content - - anchors.horizontalCenter: parent.horizontalCenter - height: (maximized?view.height - description.height - title.height - buttons.height -titleBar.spacing*3 : AssistantAbstractViewStyle.content.height) - width: AssistantAbstractViewStyle.content.width - } - } - - // --------------------------------------------------------------------------- - // Nav buttons. - // --------------------------------------------------------------------------- - - Row { - id: buttons - - anchors { - bottom: parent.bottom - horizontalCenter: parent.horizontalCenter - } - - spacing: AssistantAbstractViewStyle.buttons.spacing - - TextButtonA { - text: qsTr('back') - visible: view.backEnabled - - onClicked: assistant.popView() - } - - TextButtonB { - id: mainActionButton - - visible: !!view.mainAction - - onClicked: view.mainAction() - } - } + id: view + + // --------------------------------------------------------------------------- + + property alias mainActionEnabled: mainActionButton.enabled + property alias mainActionLabel: mainActionButton.text + property var mainAction + + property alias description: description.text + property alias title: title.text + + property bool backEnabled: true + property bool maximized: false // Used to stretch content to fit all the view (the title will be set to top) + + default property alias _content: content.data + property alias contentItem: content + + // --------------------------------------------------------------------------- + + height: (maximized?stack.height:AssistantAbstractViewStyle.content.height) + width: (maximized?stack.width:AssistantAbstractViewStyle.content.width) + + // --------------------------------------------------------------------------- + // Info. + // --------------------------------------------------------------------------- + Text { + id: title + anchors.top:parent.top + anchors.topMargin:(visible?AssistantAbstractViewStyle.info.spacing:0) + anchors.horizontalCenter: parent.horizontalCenter + color: AssistantAbstractViewStyle.info.title.color + elide: Text.ElideRight + + font { + pointSize: AssistantAbstractViewStyle.info.title.pointSize + bold: true + } + + horizontalAlignment: Text.AlignHCenter + width: parent.width + visible: text.length > 0 + height:(visible?contentHeight:0) + } + + Text { + id: description + anchors.top:title.bottom + anchors.topMargin:(visible?AssistantAbstractViewStyle.info.spacing:0) + anchors.horizontalCenter: parent.horizontalCenter + + color: AssistantAbstractViewStyle.info.description.color + elide: Text.ElideRight + + font.pointSize: AssistantAbstractViewStyle.info.description.pointSize + + horizontalAlignment: Text.AlignHCenter + width: parent.width + + visible: text.length > 0 + height:(visible?contentHeight:0) + } + + // ------------------------------------------------------------------------- + // Content. + // ------------------------------------------------------------------------- + + Item { + id: content + anchors.top:description.bottom + anchors.topMargin:(description.visible || title.visible?AssistantAbstractViewStyle.info.spacing:0) + anchors.bottom:buttons.top + anchors.horizontalCenter: parent.horizontalCenter + width: parent.width + } + + // --------------------------------------------------------------------------- + // Nav buttons. + // --------------------------------------------------------------------------- + + Row { + id: buttons + + anchors { + bottom: parent.bottom + bottomMargin:AssistantAbstractViewStyle.info.spacing + horizontalCenter: parent.horizontalCenter + + } + + spacing: AssistantAbstractViewStyle.buttons.spacing + + TextButtonA { + text: qsTr('back') + visible: view.backEnabled + + onClicked: assistant.popView() + anchors.verticalCenter: parent.verticalCenter + } + + TextButtonB { + id: mainActionButton + + visible: !!view.mainAction + + onClicked: view.mainAction() + anchors.verticalCenter: parent.verticalCenter + } + } } diff --git a/linphone-app/ui/views/App/Main/Assistant/AssistantHome.qml b/linphone-app/ui/views/App/Main/Assistant/AssistantHome.qml index e34dee327..8b661d4eb 100644 --- a/linphone-app/ui/views/App/Main/Assistant/AssistantHome.qml +++ b/linphone-app/ui/views/App/Main/Assistant/AssistantHome.qml @@ -10,7 +10,7 @@ import App.Styles 1.0 ColumnLayout { spacing: 0 - + // --------------------------------------------------------------------------- // Info. // --------------------------------------------------------------------------- @@ -79,6 +79,12 @@ ColumnLayout { cellHeight: height / 2 cellWidth: width / 2 + anchors.bottom:parent.bottom + anchors.bottomMargin: AssistantStyle.bottomMargin + anchors.left:parent.left + anchors.leftMargin: AssistantStyle.leftMargin + anchors.right:parent.right + anchors.rightMargin: AssistantStyle.rightMargin delegate: Item { height: buttons.cellHeight @@ -93,7 +99,7 @@ ColumnLayout { enabled: SettingsModel[$viewType.charAt(0).toLowerCase() + $viewType.slice(1) + "Enabled"] text: $text.replace('%1', Qt.application.name.toUpperCase()) - onClicked: assistant.pushView($view) + onClicked:{ assistant.pushView($view, $props) } } } @@ -101,43 +107,29 @@ ColumnLayout { Component.onCompleted: { insert(0, { $text: qsTr('createAppSipAccount'), - $view: SettingsModel.assistantSupportsPhoneNumbers - ? 'CreateAppSipAccount' - : 'CreateAppSipAccountWithEmail', - $viewType: 'CreateAppSipAccount' + $view: 'CreateAppSipAccount', + $viewType: 'CreateAppSipAccount', + $props:{url: SettingsModel.assistantRegistrationUrl} + }) + append({ + $text: qsTr('useAppSipAccount'), + $view: 'CreateAppSipAccount', + $viewType: 'UseAppSipAccount', + $props:{url: SettingsModel.assistantLoginUrl} + }) + append({ + $text: qsTr('useOtherSipAccount'), + $view: 'UseOtherSipAccount', + $viewType: 'UseOtherSipAccount' + }) + append( { + $text: qsTr('fetchRemoteConfiguration'), + $view: 'FetchRemoteConfiguration', + $viewType: 'FetchRemoteConfiguration' }) - } - - ListElement { - $text: qsTr('useAppSipAccount') - $view: 'UseAppSipAccount' - $viewType: 'UseAppSipAccount' - } - - ListElement { - $text: qsTr('useOtherSipAccount') - $view: 'UseOtherSipAccount' - $viewType: 'UseOtherSipAccount' - } - - ListElement { - $text: qsTr('fetchRemoteConfiguration') - $view: 'FetchRemoteConfiguration' - $viewType: 'FetchRemoteConfiguration' } } interactive: false - - Connections { - target: SettingsModel - onAssistantSupportsPhoneNumbersChanged: buttons.model.setProperty( - 0, - '$view', - SettingsModel.assistantSupportsPhoneNumbers ? - 'CreateAppSipAccount' : - 'CreateAppSipAccountWithEmail' - ) - } } } diff --git a/linphone-app/ui/views/App/Main/Assistant/CreateAppSipAccount.qml b/linphone-app/ui/views/App/Main/Assistant/CreateAppSipAccount.qml index d0158c470..39631090d 100644 --- a/linphone-app/ui/views/App/Main/Assistant/CreateAppSipAccount.qml +++ b/linphone-app/ui/views/App/Main/Assistant/CreateAppSipAccount.qml @@ -1,53 +1,112 @@ import QtQuick 2.7 -import QtWebView 1.15 +import QtWebView 1.1 +import QtQuick.Controls 1.3 // Busy indicator import Common 1.0 +import Linphone 1.0 as Linphone import App.Styles 1.0 // ============================================================================= AssistantAbstractView { - description: qsTr('createAppSipAccountDescription') - title: qsTr('createAppSipAccountTitle').replace('%1', Qt.application.name.toUpperCase()) - maximized:true - - // --------------------------------------------------------------------------- - // Menu. - // --------------------------------------------------------------------------- - + maximized:true + height: (parent?parent.height:0) + width: (parent?parent.width:0) + property alias url : webview.url + // --------------------------------------------------------------------------- + // Menu. + // --------------------------------------------------------------------------- +// Note : Use opcity and not visibility to allow smooth updating (when moving visibility to true, we could show the old page) WebView{ + id:webview + property int status : 0 // 0:nothing, -1:error, 1:ok + property bool newPage : true anchors.fill:parent - httpUserAgent: 'Linphone Desktop' - //url:'https://www.whatismybrowser.com/detect/what-is-my-user-agent' - url: 'https://subscribe.linphone.org/register' + Component.onCompleted: if(httpUserAgent) httpUserAgent = Linphone.App.getUserAgent() // only available on Qt 5.15 (QtWebView 1.15) + function getData(){// Check if account_infos exists in the page and retrieve data to make/update an account + if(webview.loading){ + webview.status = 0 + }else { + var js = "(typeof account_infos !== 'undefined'?account_infos:'')"; + webview.runJavaScript(js, function(result) { + if( result == ''){ + webview.status = 0 + }else{ + webview.opacity=0 + reloadTimer.stop(); + console.log(result); + console.log("[CreateAccount] SIP : " +result.sip); + console.log("[CreateAccount] Username : " +result.username); + console.log("[CreateAccount] Registrar : " +result.registrar_address); + console.log("[CreateAccount] Domain : " +result.domain); + if (Linphone.AccountSettingsModel.addOrUpdateProxyConfig( { + sipAddress: result.sip, + serverAddress: result.registrar_address + })) { + + console.log("[CreateAccount] Account created") + webview.status = 1 + Linphone.AccountSettingsModel.setDefaultProxyConfigFromSipAddress("sip:"+result.sip) + } else { + console.error("[CreateAccount] Cannot create account. Check logs.") + webview.status = -1 + } + + } + }); + } + } + + Timer {// Check data + id:reloadTimer + interval: 1000; + running: true; repeat: true + onTriggered: {webview.getData();} + } + onLoadingChanged: { - if (loadRequest.errorString) - console.error(loadRequest.errorString); + if (loadRequest.errorString) + console.error("[CreateAccount] error on loading page : " +loadRequest.errorString); + if(loading) + newPage = true; + else if(newPage) { + newPage = false; + webview.runJavaScript("document.querySelector('nav').remove(); document.querySelector('footer').remove();"); + } + webview.opacity= (loading?0:1) + if(!loading){ + reloadTimer.stop(); + webview.getData(); + if(webview.status == 0) + reloadTimer.start(); + }else + reloadTimer.stop(); } } -/* - Column { - anchors.centerIn: parent - spacing: CreateAppSipAccountStyle.buttons.spacing - width: CreateAppSipAccountStyle.buttons.button.width - TextButtonA { - text: qsTr('withPhoneNumber') + Rectangle{ + id:statusPage + anchors.fill:parent + visible: webview.loading || webview.opacity==0 + BusyIndicator{ + id:busy + anchors.centerIn : parent + running:true + width:CreateAppSipAccountStyle.busy.size + height:CreateAppSipAccountStyle.busy.size + } - height: CreateAppSipAccountStyle.buttons.button.height - width: parent.width - - onClicked: assistant.pushView('CreateAppSipAccountWithPhoneNumber') - } - - TextButtonA { - text: qsTr('withEmailAddress') - - height: CreateAppSipAccountStyle.buttons.button.height - width: parent.width - - onClicked: assistant.pushView('CreateAppSipAccountWithEmail') - } - }*/ + Icon{ + visible: webview.status != 0 + icon: (webview.status>0?"chat_read":"chat_error") + iconSize:busy.width + anchors.fill:busy + onVisibleChanged:if(visible)webview.visible=false + MouseArea{ + anchors.fill:parent + onClicked:assistant.popView() + } + } + } } diff --git a/linphone-app/ui/views/App/Main/Assistant/FetchRemoteConfiguration.qml b/linphone-app/ui/views/App/Main/Assistant/FetchRemoteConfiguration.qml index 3833c4f98..b47320f5f 100644 --- a/linphone-app/ui/views/App/Main/Assistant/FetchRemoteConfiguration.qml +++ b/linphone-app/ui/views/App/Main/Assistant/FetchRemoteConfiguration.qml @@ -4,66 +4,73 @@ import Common 1.0 import Linphone 1.0 import Utils 1.0 +import App.Styles 1.0 // ============================================================================= +Item{ + AssistantAbstractView { + mainAction: requestBlock.execute + mainActionEnabled: url.text.length > 0 + mainActionLabel: qsTr('confirmAction') -AssistantAbstractView { - mainAction: requestBlock.execute - mainActionEnabled: url.text.length > 0 - mainActionLabel: qsTr('confirmAction') + title: qsTr('fetchRemoteConfigurationTitle') + width: AssistantAbstractViewStyle.content.width + height: AssistantAbstractViewStyle.content.height + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + // --------------------------------------------------------------------------- - title: qsTr('fetchRemoteConfigurationTitle') + Connections { + target: SettingsModel - // --------------------------------------------------------------------------- + onRemoteProvisioningChanged: { + requestBlock.stop('') + window.detachVirtualWindow() + window.attachVirtualWindow(Utils.buildDialogUri('ConfirmDialog'), { + descriptionText: qsTr('remoteProvisioningUpdateDescription'), + }, function (status) { + if (status) { + App.restart() + } else { + window.setView('Home') + } + }) + } - Connections { - target: SettingsModel + onRemoteProvisioningNotChanged: requestBlock.stop(qsTr('remoteProvisioningError')) + } - onRemoteProvisioningChanged: { - requestBlock.stop('') + // --------------------------------------------------------------------------- - window.detachVirtualWindow() - window.attachVirtualWindow(Utils.buildDialogUri('ConfirmDialog'), { - descriptionText: qsTr('remoteProvisioningUpdateDescription'), - }, function (status) { - if (status) { - App.restart() - } else { - window.setView('Home') - } - }) - } + Column { + anchors.fill: parent.contentItem + anchors.topMargin: AssistantAbstractViewStyle.info.spacing + width: AssistantAbstractViewStyle.content.width + height: AssistantAbstractViewStyle.content.height - onRemoteProvisioningNotChanged: requestBlock.stop(qsTr('remoteProvisioningError')) - } + Form { + orientation: Qt.Vertical + width: parent.width - // --------------------------------------------------------------------------- + FormLine { + FormGroup { + label: qsTr('urlLabel') - Column { - anchors.fill: parent + TextField { + id: url + } + } + } + } - Form { - orientation: Qt.Vertical - width: parent.width + RequestBlock { + id: requestBlock - FormLine { - FormGroup { - label: qsTr('urlLabel') + action: (function () { + SettingsModel.remoteProvisioning = url.text + }) - TextField { - id: url - } - } - } - } - - RequestBlock { - id: requestBlock - - action: (function () { - SettingsModel.remoteProvisioning = url.text - }) - - width: parent.width - } - } + width: parent.width + } + } + } } diff --git a/linphone-app/ui/views/App/Main/Assistant/UseOtherSipAccount.qml b/linphone-app/ui/views/App/Main/Assistant/UseOtherSipAccount.qml index 49d743e35..d85953a5c 100644 --- a/linphone-app/ui/views/App/Main/Assistant/UseOtherSipAccount.qml +++ b/linphone-app/ui/views/App/Main/Assistant/UseOtherSipAccount.qml @@ -3,102 +3,113 @@ import QtQuick 2.7 import Common 1.0 import Linphone 1.0 +import App.Styles 1.0 + // ============================================================================= +Item{ + + AssistantAbstractView { + mainAction: requestBlock.execute + + mainActionEnabled: username.text.length && + sipDomain.text.length && + password.text.length -AssistantAbstractView { - mainAction: requestBlock.execute + mainActionLabel: qsTr('confirmAction') - mainActionEnabled: username.text.length && - sipDomain.text.length && - password.text.length + title: qsTr('useOtherSipAccountTitle') - mainActionLabel: qsTr('confirmAction') + width: AssistantAbstractViewStyle.content.width + height: AssistantAbstractViewStyle.content.height + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter - title: qsTr('useOtherSipAccountTitle') + // --------------------------------------------------------------------------- + //anchors.centerIn: parent + //anchors.horizontalCenter:parent.horizontalCenter + Column { + anchors.fill: parent.contentItem + width: AssistantAbstractViewStyle.content.width + height: AssistantAbstractViewStyle.content.height - // --------------------------------------------------------------------------- + Form { + dealWithErrors: true + orientation: Qt.Vertical + width: parent.width - Column { - anchors.fill: parent + FormLine { + FormGroup { + label: qsTr('usernameLabel') - Form { - orientation: Qt.Vertical - width: parent.width + TextField { + id: username + } + } - FormLine { - FormGroup { - label: qsTr('usernameLabel') + FormGroup { + label: qsTr('displayNameLabel') - TextField { - id: username - } - } + TextField { + id: displayName + } + } + } - FormGroup { - label: qsTr('displayNameLabel') + FormLine { + FormGroup { + label: qsTr('sipDomainLabel') - TextField { - id: displayName - } - } - } + TextField { + id: sipDomain + } + } + } - FormLine { - FormGroup { - label: qsTr('sipDomainLabel') + FormLine { + FormGroup { + label: qsTr('passwordLabel') - TextField { - id: sipDomain - } - } - } + PasswordField { + id: password + } + } + } - FormLine { - FormGroup { - label: qsTr('passwordLabel') + FormLine { + FormGroup { + label: qsTr('transportLabel') - PasswordField { - id: password - } - } - } + ComboBox { + id: transport + model: [ 'UDP', 'TCP', 'TLS'] + } + } + } + } - FormLine { - FormGroup { - label: qsTr('transportLabel') + RequestBlock { + id: requestBlock + width: parent.width - ComboBox { - id: transport - model: [ 'UDP', 'TCP', 'TLS'] - } - } - } - } - - RequestBlock { - id: requestBlock - - action: (function () { - if (!assistantModel.addOtherSipAccount({ - username: username.text, - displayName: displayName.text, - sipDomain: sipDomain.text, - password: password.text, - transport: transport.model[transport.currentIndex] - })) { - requestBlock.stop(qsTr('addOtherSipAccountError')) - } else { - requestBlock.stop('') - window.setView('Home') - } - }) - - width: parent.width - } - } - - AssistantModel { - id: assistantModel - configFilename: 'use-other-sip-account.rc' - } + action: (function () { + if (!assistantModel.addOtherSipAccount({ + username: username.text, + displayName: displayName.text, + sipDomain: sipDomain.text, + password: password.text, + transport: transport.model[transport.currentIndex] + })) { + requestBlock.stop(qsTr('addOtherSipAccountError')) + } else { + requestBlock.stop('') + window.setView('Home') + } + }) + } + } + AssistantModel { + id: assistantModel + configFilename: 'use-other-sip-account.rc' + } + } } diff --git a/linphone-app/ui/views/App/Settings/SettingsSipAccounts.qml b/linphone-app/ui/views/App/Settings/SettingsSipAccounts.qml index ced920119..65afc4e2f 100644 --- a/linphone-app/ui/views/App/Settings/SettingsSipAccounts.qml +++ b/linphone-app/ui/views/App/Settings/SettingsSipAccounts.qml @@ -58,7 +58,7 @@ TabContainer { } } } - + // ------------------------------------------------------------------------- // Proxy accounts. // ------------------------------------------------------------------------- @@ -129,10 +129,35 @@ TabContainer { Form { title: qsTr('assistantTitle') - visible: SettingsModel.developerSettingsEnabled + width: parent.width + + FormLine { + FormGroup { + label: 'Registration URL' + + TextField { + text: SettingsModel.assistantRegistrationUrl + + onEditingFinished: SettingsModel.assistantRegistrationUrl = text + } + } + } + + FormLine { + FormGroup { + label: 'Login URL' + + TextField { + text: SettingsModel.assistantLoginUrl + + onEditingFinished: SettingsModel.assistantLoginUrl = text + } + } + } FormLine { + visible: SettingsModel.developerSettingsEnabled FormGroup { label: qsTr('createAppSipAccountEnabledLabel') @@ -155,6 +180,7 @@ TabContainer { } FormLine { + visible: SettingsModel.developerSettingsEnabled FormGroup { label: qsTr('useOtherSipAccountEnabledLabel') @@ -177,6 +203,7 @@ TabContainer { } FormLine { + visible: SettingsModel.developerSettingsEnabled FormGroup { label: qsTr('assistantSupportsPhoneNumbersLabel') diff --git a/linphone-app/ui/views/App/Styles/Main/Assistant/AssistantAbstractViewStyle.qml b/linphone-app/ui/views/App/Styles/Main/Assistant/AssistantAbstractViewStyle.qml index 30d79a7ce..ff76fe0c6 100644 --- a/linphone-app/ui/views/App/Styles/Main/Assistant/AssistantAbstractViewStyle.qml +++ b/linphone-app/ui/views/App/Styles/Main/Assistant/AssistantAbstractViewStyle.qml @@ -12,7 +12,7 @@ QtObject { } property QtObject content: QtObject { - property int height: 375 + property int height: 375+60//+button bar property int width: 400 } diff --git a/linphone-app/ui/views/App/Styles/Main/Assistant/CreateAppSipAccountStyle.qml b/linphone-app/ui/views/App/Styles/Main/Assistant/CreateAppSipAccountStyle.qml index 2a582464a..4e3e4b380 100644 --- a/linphone-app/ui/views/App/Styles/Main/Assistant/CreateAppSipAccountStyle.qml +++ b/linphone-app/ui/views/App/Styles/Main/Assistant/CreateAppSipAccountStyle.qml @@ -12,4 +12,8 @@ QtObject { property int width: 258 } } + + property QtObject busy: QtObject { + property int size: 40 + } } diff --git a/linphone-sdk b/linphone-sdk index 2a087c0f7..16f9b6cb0 160000 --- a/linphone-sdk +++ b/linphone-sdk @@ -1 +1 @@ -Subproject commit 2a087c0f73e2658a5efa7357725e1d009a5c51a7 +Subproject commit 16f9b6cb075ada944e58f6d6e66521aed9b33940