From 3bd10716b2ee19a0446e9d9d60c708444e65e48f Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Fri, 19 Oct 2018 16:06:28 -0700 Subject: [PATCH] wip --- .../resources/images/high-fidelity-banner.svg | 17 + interface/resources/qml/LoginDialog.qml | 10 +- .../qml/LoginDialog/LinkAccountBody.qml | 393 +++++++----------- .../qml/LoginDialog/LoggingInDialog.qml | 9 + .../resources/qml/LoginDialog/SignInBody.qml | 217 +++++++--- .../resources/qml/LoginDialog/SignUpBody.qml | 6 +- .../LoginDialog/images/loader-snake-128.gif | Bin 0 -> 59768 bytes .../LoginDialog/images/loader-snake-64-w.gif | Bin 0 -> 50046 bytes interface/src/Application.cpp | 7 +- interface/src/ui/DialogsManager.cpp | 1 - interface/src/ui/LoginScreenDialog.cpp | 18 + interface/src/ui/LoginScreenDialog.h | 16 +- libraries/networking/src/DomainHandler.cpp | 18 +- 13 files changed, 383 insertions(+), 329 deletions(-) create mode 100644 interface/resources/images/high-fidelity-banner.svg create mode 100644 interface/resources/qml/LoginDialog/LoggingInDialog.qml create mode 100644 interface/resources/qml/LoginDialog/images/loader-snake-128.gif create mode 100644 interface/resources/qml/LoginDialog/images/loader-snake-64-w.gif diff --git a/interface/resources/images/high-fidelity-banner.svg b/interface/resources/images/high-fidelity-banner.svg new file mode 100644 index 0000000000..d5666be0fa --- /dev/null +++ b/interface/resources/images/high-fidelity-banner.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/interface/resources/qml/LoginDialog.qml b/interface/resources/qml/LoginDialog.qml index 65ac50a234..ebf4e9e3a6 100644 --- a/interface/resources/qml/LoginDialog.qml +++ b/interface/resources/qml/LoginDialog.qml @@ -1,8 +1,8 @@ // // LoginDialog.qml // -// Created by David Rowe on 3 Jun 2015 -// Copyright 2015 High Fidelity, Inc. +// Created by Wayne Chen +// Copyright 2018 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -23,10 +23,12 @@ Windows.ModalWindow { objectName: "LoginDialog" implicitWidth: 520 implicitHeight: 320 - closeButtonVisible: true destroyOnCloseButton: true destroyOnHidden: true visible: true + frame: Item {} + + anchors.fill: parent readonly property bool isTablet: false @@ -36,8 +38,6 @@ Windows.ModalWindow { property string title: "" property int titleWidth: 0 - keyboardOverride: true // Disable ModalWindow's keyboard. - function tryDestroy() { root.destroy() } diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index 48cf124127..758e8555cd 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -13,44 +13,36 @@ import QtQuick 2.7 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 as OriginalStyles -import "../controls-uit" -import "../styles-uit" +import "qrc:///qml//controls-uit" as HifiControlsUit +import "qrc:///qml//styles-uit" as HifiStylesUit Item { id: linkAccountBody clip: true height: root.pane.height width: root.pane.width + property bool isTablet: root.isTablet property bool failAfterSignUp: false - function login() { - flavorText.visible = false - mainTextContainer.visible = false - toggleLoading(true) - loginDialog.login(usernameField.text, passwordField.text) - } - property bool keyboardEnabled: false property bool keyboardRaised: false property bool punctuationMode: false + onKeyboardRaisedChanged: d.resize(); QtObject { id: d readonly property int minWidth: 480 - readonly property int maxWidth: 1280 + property int maxWidth: root.isTablet ? 1280 : Window.innerWidth readonly property int minHeight: 120 - readonly property int maxHeight: 720 + property int maxHeight: root.isTablet ? 720 : Window.innerHeight function resize() { - var targetWidth = Math.max(titleWidth, form.contentWidth); - var targetHeight = hifi.dimensions.contentSpacing.y + flavorText.height + mainTextContainer.height + - 4 * hifi.dimensions.contentSpacing.y + form.height; - - if (additionalInformation.visible) { - targetWidth = Math.max(targetWidth, additionalInformation.width); - targetHeight += hifi.dimensions.contentSpacing.y + additionalInformation.height - } + maxWidth = root.isTablet ? 1280 : Window.innerWidth; + maxHeight = root.isTablet ? 720 : Window.innerHeight; + var targetWidth = Math.max(Math.max(titleWidth, topContainer.width), bottomContainer.width); + var targetHeight = hifi.dimensions.contentSpacing.y + topContainer.height + bottomContainer.height + + 4 * hifi.dimensions.contentSpacing.y; var newWidth = Math.max(d.minWidth, Math.min(d.maxWidth, targetWidth)); if(!isNaN(newWidth)) { @@ -71,253 +63,159 @@ Item { } } - BusyIndicator { - id: linkAccountSpinner - - anchors { - top: parent.top - horizontalCenter: parent.horizontalCenter - topMargin: hifi.dimensions.contentSpacing.y - } - - visible: false - running: true - - width: 48 - height: 48 - } - - ShortcutText { - id: flavorText - anchors { - top: parent.top - left: parent.left - margins: 0 - topMargin: hifi.dimensions.contentSpacing.y - } - - text: qsTr("Sign in to High Fidelity to make friends, get HFC, and buy interesting things on the Marketplace!") - width: parent.width - wrapMode: Text.WordWrap - lineHeight: 1 - lineHeightMode: Text.ProportionalHeight - horizontalAlignment: Text.AlignHCenter - } - - ShortcutText { - id: mainTextContainer - anchors { - top: flavorText.bottom - left: parent.left - margins: 0 - topMargin: 1.5 * hifi.dimensions.contentSpacing.y - } - - visible: false - text: qsTr("Username or password incorrect.") - height: flavorText.height - 20 - wrapMode: Text.WordWrap - color: hifi.colors.redAccent - lineHeight: 1 - lineHeightMode: Text.ProportionalHeight - horizontalAlignment: Text.AlignHCenter - } - - Column { - id: form - width: parent.width + Item { + id: topContainer + width: root.pane.width + height: 0.6 * root.pane.height onHeightChanged: d.resize(); onWidthChanged: d.resize(); - anchors { - top: mainTextContainer.bottom - topMargin: 1.5 * hifi.dimensions.contentSpacing.y - } - spacing: 2 * hifi.dimensions.contentSpacing.y - - TextField { - id: usernameField - text: Settings.getValue("wallet/savedUsername", ""); + Item { + id: bannerContainer width: parent.width - focus: true - placeholderText: "Username or Email" - activeFocusOnPress: true - onHeightChanged: d.resize(); onWidthChanged: d.resize(); - - ShortcutText { - z: 10 - y: usernameField.height - anchors { - right: usernameField.right - top: usernameField.bottom - topMargin: 4 - } - - text: "Forgot Username?" - - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - linkColor: hifi.colors.blueAccent - - onLinkActivated: loginDialog.openUrl(link) + height: banner.height + anchors { + top: parent.top + topMargin: 0.17 * parent.height } - - onFocusChanged: { - root.text = ""; - } - Component.onCompleted: { - var savedUsername = Settings.getValue("wallet/savedUsername", ""); - usernameField.text = savedUsername === "Unknown user" ? "" : savedUsername; + Image { + id: banner + anchors.centerIn: parent + source: "../../images/high-fidelity-banner.svg" + horizontalAlignment: Image.AlignHCenter } } - - TextField { - id: passwordField - width: parent.width - placeholderText: "Password" - activeFocusOnPress: true - echoMode: passwordFieldMouseArea.showPassword ? TextInput.Normal : TextInput.Password - onHeightChanged: d.resize(); onWidthChanged: d.resize(); - - ShortcutText { - id: forgotPasswordShortcut - y: passwordField.height - z: 10 - anchors { - right: passwordField.right - top: passwordField.bottom - topMargin: 4 - } - - text: "Forgot Password?" - - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - linkColor: hifi.colors.blueAccent - - onLinkActivated: loginDialog.openUrl(link) + Text { + id: flavorText + text: qsTr("BE ANYWHERE, WITH ANYONE RIGHT NOW") + width: 0.48 * parent.width + anchors.centerIn: parent + anchors { + top: bannerContainer.bottom + topMargin: 0.1 * parent.height } - - onFocusChanged: { - root.text = ""; - root.isPassword = true; - } - - Rectangle { - id: showPasswordHitbox - z: 10 - x: passwordField.width - ((passwordField.height) * 31 / 23) - width: parent.width - (parent.width - (parent.height * 31/16)) - height: parent.height - anchors { - right: parent.right - } - color: "transparent" - - Image { - id: showPasswordImage - width: passwordField.height * 16 / 23 - height: passwordField.height * 16 / 23 - anchors { - right: parent.right - rightMargin: 8 - top: parent.top - topMargin: passwordFieldMouseArea.showPassword ? 6 : 8 - bottom: parent.bottom - bottomMargin: passwordFieldMouseArea.showPassword ? 5 : 8 - } - source: passwordFieldMouseArea.showPassword ? "../../images/eyeClosed.svg" : "../../images/eyeOpen.svg" - MouseArea { - id: passwordFieldMouseArea - anchors.fill: parent - acceptedButtons: Qt.LeftButton - property bool showPassword: false - onClicked: { - showPassword = !showPassword; - } - } - } - - } - - Keys.onReturnPressed: linkAccountBody.login() - } - - InfoItem { - id: additionalInformation - - visible: loginDialog.isSteamRunning() - - text: qsTr("Your steam account informations will not be exposed to other users.") wrapMode: Text.WordWrap - color: hifi.colors.baseGrayHighlight lineHeight: 1 + color: "white" + font.family: "Raleway" + font.pixelSize: 55 + font.bold: true lineHeightMode: Text.ProportionalHeight horizontalAlignment: Text.AlignHCenter } - Row { - id: buttons - spacing: hifi.dimensions.contentSpacing.y*2 - onHeightChanged: d.resize(); onWidthChanged: d.resize(); - anchors.horizontalCenter: parent.horizontalCenter - - CheckBox { - id: autoLogoutCheckbox - checked: !Settings.getValue("wallet/autoLogout", true) - text: "Keep me signed in" - boxSize: 20; - labelFontSize: 15 - color: hifi.colors.black - onCheckedChanged: { - Settings.setValue("wallet/autoLogout", !checked); - if (checked) { - Settings.setValue("wallet/savedUsername", Account.username); - } else { - Settings.setValue("wallet/savedUsername", ""); - } - } - Component.onDestruction: { - Settings.setValue("wallet/autoLogout", !checked); - } + HifiControlsUit.Button { + id: signUpButton + text: qsTr("Sign Up") + width: 0.17 * parent.width + height: 0.068 * parent.height + color: hifi.buttons.blue + fontSize: 30 + anchors { + top: flavorText.bottom + topMargin: 0.1 * parent.height + left: parent.left + leftMargin: (parent.width - signUpButton.width) / 2 } - Button { - id: linkAccountButton - anchors.verticalCenter: parent.verticalCenter - width: 200 - - text: qsTr(loginDialog.isSteamRunning() ? "Link Account" : "Log in") - color: hifi.buttons.blue - - onClicked: linkAccountBody.login() + onClicked: { + bodyLoader.setSource("SignUpBody.qml") + if (!linkAccountBody.isTablet) { + bodyLoader.item.width = root.pane.width + bodyLoader.item.height = root.pane.height + } } } + } + Item { + id: bottomContainer + width: root.pane.width + height: 0.4 * root.pane.height + onHeightChanged: d.resize(); onWidthChanged: d.resize(); + anchors.top: topContainer.bottom - Row { - id: leftButton + Rectangle { + height: root.pane.height + width: root.pane.width + opacity: 0.7 + color: "black" + } - anchors.horizontalCenter: parent.horizontalCenter - spacing: hifi.dimensions.contentSpacing.y*2 - onHeightChanged: d.resize(); onWidthChanged: d.resize(); - - RalewaySemiBold { - size: hifi.fontSizes.inputLabel - anchors.verticalCenter: parent.verticalCenter - text: qsTr("New to High Fidelity?") + HifiControlsUit.Button { + id: loginButton + width: signUpButton.width + height: signUpButton.height + text: qsTr("Log In") + fontSize: signUpButton.fontSize + // background: Rectangle { + // radius: hifi.buttons.radius + // + // } + anchors { + top: parent.top + topMargin: 0.245 * parent.height + left: parent.left + leftMargin: (parent.width - loginButton.width) / 2 } - Button { - anchors.verticalCenter: parent.verticalCenter + onClicked: { + bodyLoader.setSource("SignInBody.qml") + if (!linkAccountBody.isTablet) { + loginDialog.bodyLoader.item.width = root.pane.width + loginDialog.bodyLoader.item.height = root.pane.height + } + } + } + HifiControlsUit.Button { + id: steamLoginButton + width: signUpButton.width + height: signUpButton.height + text: qsTr("Link Account") + fontSize: signUpButton.fontSize + color: hifi.buttons.black + anchors { + top: loginButton.bottom + topMargin: 0.04 * parent.height + left: parent.left + leftMargin: (parent.width - steamLoginButton.width) / 2 + } - text: qsTr("Sign Up") - visible: !loginDialog.isSteamRunning() + onClicked: { + if (loginDialog.isSteamRunning()) { + loginDialog.linkSteam(); + } + if (!linkAccountBody.isTablet) { + bodyLoader.item.width = root.pane.width + bodyLoader.item.height = root.pane.height + } + } + } + Item { + id: dismissTextContainer + width: dismissText.width + height: dismissText.height + anchors { + bottom: parent.bottom + right: parent.right + margins: 10 + } + Text { + id: dismissText + text: qsTr("No thanks, take me in-world! >") + lineHeight: 1 + color: "white" + font.family: "Raleway" + font.pixelSize: 20 + font.bold: true + lineHeightMode: Text.ProportionalHeight + // horizontalAlignment: Text.AlignHCenter + } + MouseArea { + id: dismissMouseArea + anchors.fill: parent + acceptedButtons: Qt.LeftButton onClicked: { - bodyLoader.setSource("SignUpBody.qml") - if (!root.isTablet) { - bodyLoader.item.width = root.pane.width - bodyLoader.item.height = root.pane.height - } + root.tryDestroy(); } } } @@ -336,13 +234,12 @@ Item { } d.resize(); - if (failAfterSignUp) { - mainTextContainer.text = "Account created successfully." - flavorText.visible = true - mainTextContainer.visible = true - } + // if (failAfterSignUp) { + // mainTextContainer.text = "Account created successfully." + // flavorText.visible = true + // mainTextContainer.visible = true + // } - usernameField.forceActiveFocus(); } Connections { diff --git a/interface/resources/qml/LoginDialog/LoggingInDialog.qml b/interface/resources/qml/LoginDialog/LoggingInDialog.qml new file mode 100644 index 0000000000..e00f1178b1 --- /dev/null +++ b/interface/resources/qml/LoginDialog/LoggingInDialog.qml @@ -0,0 +1,9 @@ +// +// LoggingInDialog.qml +// +// Created by Wayne Chen +// Copyright 2018 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// diff --git a/interface/resources/qml/LoginDialog/SignInBody.qml b/interface/resources/qml/LoginDialog/SignInBody.qml index 9cb1add704..e3b490300b 100644 --- a/interface/resources/qml/LoginDialog/SignInBody.qml +++ b/interface/resources/qml/LoginDialog/SignInBody.qml @@ -12,8 +12,8 @@ import Hifi 1.0 import QtQuick 2.7 import QtQuick.Controls.Styles 1.4 as OriginalStyles -import "../controls-uit" -import "../styles-uit" +import "qrc:///qml//controls-uit" as HifiControlsUit +import "qrc:///qml//styles-uit" as HifiStylesUit Item { id: signInBody @@ -24,87 +24,186 @@ Item { property bool required: false function login() { - console.log("Trying to log in") - loginDialog.loginThroughSteam() + bodyLoader.setSource("LoggingInBody.qml"); + if (!root.isTablet) { + bodyLoader.item.width = root.pane.width; + bodyLoader.item.height = root.pane.height; + } + loginDialog.login(usernameField.text, passwordField.text); } function cancel() { - root.tryDestroy() + bodyLoader.setSource("LinkAccountBody.qml"); + if (!root.isTablet) { + bodyLoader.item.width = root.pane.width; + bodyLoader.item.height = root.pane.height; + } } QtObject { id: d readonly property int minWidth: 480 - readonly property int maxWidth: 1280 + property int maxWidth: root.isTablet ? 1280 : Window.innerWidth readonly property int minHeight: 120 - readonly property int maxHeight: 720 + property int maxHeight: root.isTablet ? 720 : Window.innerHeight function resize() { - var targetWidth = Math.max(titleWidth, mainTextContainer.contentWidth) - var targetHeight = mainTextContainer.height + 3 * hifi.dimensions.contentSpacing.y + buttons.height + maxWidth = root.isTablet ? 1280 : Window.innerWidth; + maxHeight = root.isTablet ? 720 : Window.innerHeight; + var targetWidth = Math.max(titleWidth, form.contentWidth) + var targetHeight = 4 * hifi.dimensions.contentSpacing.y + form.height parent.width = root.width = Math.max(d.minWidth, Math.min(d.maxWidth, targetWidth)) parent.height = root.height = Math.max(d.minHeight, Math.min(d.maxHeight, targetHeight)) } } - - InfoItem { - id: mainTextContainer - anchors { - top: parent.top - horizontalCenter: parent.horizontalCenter - margins: 0 - topMargin: hifi.dimensions.contentSpacing.y + + Item { + width: parent.width + height: parent.height + Rectangle { + width: parent.width + height: parent.height + opacity: 0.7 + color: "black" } - - text: required ? qsTr("This domain's owner requires that you sign in:") - : qsTr("Sign in to access your user account:") - wrapMode: Text.WordWrap - color: hifi.colors.baseGrayHighlight - lineHeight: 2 - lineHeightMode: Text.ProportionalHeight - horizontalAlignment: Text.AlignHCenter - } - - Row { - id: buttons - anchors { - top: mainTextContainer.bottom - horizontalCenter: parent.horizontalCenter - margins: 0 - topMargin: 2 * hifi.dimensions.contentSpacing.y - } - spacing: hifi.dimensions.contentSpacing.x - onHeightChanged: d.resize(); onWidthChanged: d.resize(); - - Button { - anchors.verticalCenter: parent.verticalCenter - - width: undefined // invalidate so that the image's size sets the width - height: undefined // invalidate so that the image's size sets the height - focus: true - - background: Image { - id: buttonImage - source: "../../images/steam-sign-in.png" + Item { + id: bannerContainer + width: parent.width + height: banner.height + anchors { + top: parent.top + topMargin: 0.17 * parent.height + } + Image { + id: banner + anchors.centerIn: parent + source: "../../images/high-fidelity-banner.svg" + horizontalAlignment: Image.AlignHCenter } - onClicked: signInBody.login() } - Button { - anchors.verticalCenter: parent.verticalCenter + Column { + id: form + width: parent.width + onHeightChanged: d.resize(); onWidthChanged: d.resize(); - text: qsTr("Cancel"); + anchors { + top: bannerContainer.bottom + topMargin: 1.5 * hifi.dimensions.contentSpacing.y + } + spacing: 2 * hifi.dimensions.contentSpacing.y - onClicked: signInBody.cancel() + HifiControlsUit.TextField { + id: usernameField + width: 0.254 * parent.width + text: Settings.getValue("wallet/savedUsername", ""); + focus: true + placeholderText: "Username or Email" + activeFocusOnPress: true + onHeightChanged: d.resize(); onWidthChanged: d.resize(); + + onFocusChanged: { + root.text = ""; + } + Component.onCompleted: { + var savedUsername = Settings.getValue("wallet/savedUsername", ""); + usernameField.text = savedUsername === "Unknown user" ? "" : savedUsername; + } + } + HifiControlsUit.TextField { + id: passwordField + width: 0.254 * parent.width + placeholderText: "Password" + activeFocusOnPress: true + echoMode: passwordFieldMouseArea.showPassword ? TextInput.Normal : TextInput.Password + onHeightChanged: d.resize(); onWidthChanged: d.resize(); + + onFocusChanged: { + root.text = ""; + root.isPassword = true; + } + + Rectangle { + id: showPasswordHitbox + z: 10 + x: passwordField.width - ((passwordField.height) * 31 / 23) + width: parent.width - (parent.width - (parent.height * 31/16)) + height: parent.height + anchors { + right: parent.right + } + color: "transparent" + + Image { + id: showPasswordImage + width: passwordField.height * 16 / 23 + height: passwordField.height * 16 / 23 + anchors { + right: parent.right + rightMargin: 8 + top: parent.top + topMargin: passwordFieldMouseArea.showPassword ? 6 : 8 + bottom: parent.bottom + bottomMargin: passwordFieldMouseArea.showPassword ? 5 : 8 + } + source: passwordFieldMouseArea.showPassword ? "../../images/eyeClosed.svg" : "../../images/eyeOpen.svg" + MouseArea { + id: passwordFieldMouseArea + anchors.fill: parent + acceptedButtons: Qt.LeftButton + property bool showPassword: false + onClicked: { + showPassword = !showPassword; + } + } + } + + } + + Keys.onReturnPressed: signInBody.login() + } } } - Component.onCompleted: { - root.title = required ? qsTr("Sign In Required") - : qsTr("Sign In") - root.iconText = "" - d.resize(); - } + // Row { + // id: buttons + // anchors { + // top: mainTextContainer.bottom + // horizontalCenter: parent.horizontalCenter + // margins: 0 + // topMargin: 2 * hifi.dimensions.contentSpacing.y + // } + // spacing: hifi.dimensions.contentSpacing.x + // onHeightChanged: d.resize(); onWidthChanged: d.resize(); + // + // Button { + // anchors.verticalCenter: parent.verticalCenter + // + // width: undefined // invalidate so that the image's size sets the width + // height: undefined // invalidate so that the image's size sets the height + // focus: true + // + // background: Image { + // id: buttonImage + // source: "../../images/steam-sign-in.png" + // } + // onClicked: signInBody.login() + // } + // Button { + // anchors.verticalCenter: parent.verticalCenter + // + // text: qsTr("Cancel"); + // + // onClicked: signInBody.cancel() + // } + // } + + // Component.onCompleted: { + // root.title = required ? qsTr("Sign In Required") + // : qsTr("Sign In") + // root.iconText = "" + // d.resize(); + // } Connections { target: loginDialog diff --git a/interface/resources/qml/LoginDialog/SignUpBody.qml b/interface/resources/qml/LoginDialog/SignUpBody.qml index bb30696e4c..f2980f22c5 100644 --- a/interface/resources/qml/LoginDialog/SignUpBody.qml +++ b/interface/resources/qml/LoginDialog/SignUpBody.qml @@ -1,7 +1,7 @@ // // SignUpBody.qml // -// Created by Stephen Birarda on 7 Dec 2016 +// Created by Wayne Chen on Oct 18 2018 // Copyright 2016 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. @@ -12,8 +12,8 @@ import Hifi 1.0 import QtQuick 2.7 import QtQuick.Controls 1.4 -import "../controls-uit" -import "../styles-uit" +import "qrc:///qml//controls-uit" +import "qrc:///qml//styles-uit" Item { id: signupBody diff --git a/interface/resources/qml/LoginDialog/images/loader-snake-128.gif b/interface/resources/qml/LoginDialog/images/loader-snake-128.gif new file mode 100644 index 0000000000000000000000000000000000000000..8b9e17053b2420e2ea3dcf68e3677d172858a9b5 GIT binary patch literal 59768 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 K@P|MDwfPqs;|oUs literal 0 HcmV?d00001 diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 54df0ac3a5..cfe656aabd 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2885,9 +2885,11 @@ static void addDisplayPluginToMenu(const DisplayPluginPointer& displayPlugin, in void Application::showLoginScreen() { auto accountManager = DependencyManager::get(); + auto dialogsManager = DependencyManager::get(); if (!accountManager->isLoggedIn()) { Setting::Handle{"loginDialogPoppedUp", false}.set(true); // dialogsManager->showLoginScreenDialog(); + dialogsManager->showLoginDialog(); QJsonObject loginData = {}; loginData["action"] = "login dialog shown"; UserActivityLogger::getInstance().logAction("encourageLoginDialog", loginData); @@ -3566,11 +3568,6 @@ void Application::setIsServerlessMode(bool serverlessDomain) { } std::map Application::prepareServerlessDomainContents(QUrl domainURL) { - if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "prepareServerlessDomainContents", Q_ARG(QUrl, domainURL)); - return; - } - QUuid serverlessSessionID = QUuid::createUuid(); getMyAvatar()->setSessionUUID(serverlessSessionID); auto nodeList = DependencyManager::get(); diff --git a/interface/src/ui/DialogsManager.cpp b/interface/src/ui/DialogsManager.cpp index e2721f4ebb..517785a168 100644 --- a/interface/src/ui/DialogsManager.cpp +++ b/interface/src/ui/DialogsManager.cpp @@ -119,7 +119,6 @@ void DialogsManager::showLoginDialog() { } void DialogsManager::showLoginScreenDialog() { - LoginScreenDialog::showWithSelection(); } void DialogsManager::showUpdateDialog() { diff --git a/interface/src/ui/LoginScreenDialog.cpp b/interface/src/ui/LoginScreenDialog.cpp index 8ffc332ef1..7c1a1d7ea1 100644 --- a/interface/src/ui/LoginScreenDialog.cpp +++ b/interface/src/ui/LoginScreenDialog.cpp @@ -9,3 +9,21 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // #include "LoginScreenDialog.h" + +#include + +#include "ui/overlays/Overlays.h" +#include "ui/overlays/Overlay.h" +#include "avatar/AvatarManager.h" +#include "avatar/MyAvatar.h" +#include "DependencyManager.h" + +#include "Application.h" + +void LoginScreenDialog::createLoginScreen() { + Overlays& overlays = qApp->getOverlays(); + + //QVariantMap loginScreenOverlayProperties { + // { "url", } + //} +} \ No newline at end of file diff --git a/interface/src/ui/LoginScreenDialog.h b/interface/src/ui/LoginScreenDialog.h index ee82c81c44..ce94b4247b 100644 --- a/interface/src/ui/LoginScreenDialog.h +++ b/interface/src/ui/LoginScreenDialog.h @@ -8,6 +8,18 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -class HMDLoginScreenDialog : public QmlWindowClass { - virtual QString qmlSource() const override { return "hifi/dialogs/.qml"; } +#ifndef hifi_LoginScreenDialog_h +#define hifi_LoginScreenDialog_h + +#include + +class PointerEvent; + +class LoginScreenDialog : public Dependency, QObject { + LoginScreenDialog(); + void createLoginScreen(); + +public slots: }; + +#endif // hifi_LoginScreenDialog_h \ No newline at end of file diff --git a/libraries/networking/src/DomainHandler.cpp b/libraries/networking/src/DomainHandler.cpp index bcaa55d2f3..a2293c485d 100644 --- a/libraries/networking/src/DomainHandler.cpp +++ b/libraries/networking/src/DomainHandler.cpp @@ -65,6 +65,13 @@ DomainHandler::DomainHandler(QObject* parent) : // stop the refresh timer if redirected to the login screen domain connect(this, &DomainHandler::redirectToLoginScreenDomainURL, &_apiRefreshTimer, &QTimer::stop); + + + // stop the refresh timer if redirected to the login screen domain + connect(this, &DomainHandler::redirectToLoginScreenDomainURL, [this]() { + _isInLoginScreenState = true; + qCDebug(networking) << "Redirecting user to " << _loginScreenDomainURL; + }); } void DomainHandler::disconnect() { @@ -169,6 +176,11 @@ void DomainHandler::setErrorDomainURL(const QUrl& url) { return; } +void DomainHandler::setLoginScreenDomainURL(const QUrl& url) { + _loginScreenDomainURL = url; + return; +} + void DomainHandler::setSockAddr(const HifiSockAddr& sockAddr, const QString& hostname) { if (_sockAddr != sockAddr) { // we should reset on a sockAddr change @@ -395,12 +407,6 @@ void DomainHandler::setRedirectErrorState(QUrl errorUrl, QString reasonMessage, } } -void DomainHandler::redirectToLoginScreenDomainURL() { - _isInLoginScreenState = true; - qCDebug(networking) << "Redirecting user to " << _loginScreenDomainURL; - -} - void DomainHandler::requestDomainSettings() { qCDebug(networking) << "Requesting settings from domain server";