diff --git a/interface/resources/qml/hifi/tablet/Tablet.qml b/interface/resources/qml/hifi/tablet/Tablet.qml index 43672190dd..66e3dfdbbb 100644 --- a/interface/resources/qml/hifi/tablet/Tablet.qml +++ b/interface/resources/qml/hifi/tablet/Tablet.qml @@ -1,5 +1,6 @@ import QtQuick 2.5 import QtGraphicalEffects 1.0 +import QtQuick.Layouts 1.3 import "../../styles-uit" import "../audio" as HifiAudio @@ -109,15 +110,45 @@ Item { } } - RalewaySemiBold { - id: usernameText - text: tabletRoot.username - anchors.verticalCenter: parent.verticalCenter + Item { + width: 150 + height: 50 anchors.right: parent.right - anchors.rightMargin: 20 - horizontalAlignment: Text.AlignRight - font.pixelSize: 20 - color: "#afafaf" + anchors.rightMargin: 30 + anchors.verticalCenter: parent.verticalCenter + + ColumnLayout { + anchors.fill: parent + + RalewaySemiBold { + text: Account.loggedIn ? qsTr("Log out") : qsTr("Log in") + horizontalAlignment: Text.AlignRight + anchors.right: parent.right + font.pixelSize: 20 + color: "#afafaf" + } + + RalewaySemiBold { + visible: Account.loggedIn + height: Account.loggedIn ? parent.height/2 - parent.spacing/2 : 0 + text: Account.loggedIn ? "[" + tabletRoot.usernameShort + "]" : "" + horizontalAlignment: Text.AlignRight + anchors.right: parent.right + font.pixelSize: 20 + color: "#afafaf" + } + } + + MouseArea { + anchors.fill: parent + onClicked: { + if (!Account.loggedIn) { + DialogsManager.showLoginDialog() + } else { + Account.logOut() + } + } + } } } diff --git a/interface/resources/qml/hifi/tablet/TabletRoot.qml b/interface/resources/qml/hifi/tablet/TabletRoot.qml index 2f4c3cf62a..5084377273 100644 --- a/interface/resources/qml/hifi/tablet/TabletRoot.qml +++ b/interface/resources/qml/hifi/tablet/TabletRoot.qml @@ -8,6 +8,7 @@ Item { id: tabletRoot objectName: "tabletRoot" property string username: "Unknown user" + property string usernameShort: "Unknown user" property var rootMenu; property var openModal: null; property var openMessage: null; @@ -157,6 +158,11 @@ Item { function setUsername(newUsername) { username = newUsername; + usernameShort = newUsername.substring(0, 8); + + if (newUsername.length > 8) { + usernameShort = usernameShort + "..." + } } ListModel { diff --git a/interface/src/scripting/AccountScriptingInterface.cpp b/interface/src/scripting/AccountScriptingInterface.cpp index d8533bb769..068cccdc50 100644 --- a/interface/src/scripting/AccountScriptingInterface.cpp +++ b/interface/src/scripting/AccountScriptingInterface.cpp @@ -18,6 +18,8 @@ AccountScriptingInterface* AccountScriptingInterface::getInstance() { auto accountManager = DependencyManager::get(); QObject::connect(accountManager.data(), &AccountManager::profileChanged, &sharedInstance, &AccountScriptingInterface::usernameChanged); + QObject::connect(accountManager.data(), &AccountManager::usernameChanged, + &sharedInstance, &AccountScriptingInterface::onUsernameChanged); return &sharedInstance; } @@ -31,6 +33,21 @@ bool AccountScriptingInterface::checkAndSignalForAccessToken() { return accountManager->checkAndSignalForAccessToken(); } +void AccountScriptingInterface::logOut() { + auto accountManager = DependencyManager::get(); + return accountManager->logout(); +} + +AccountScriptingInterface::AccountScriptingInterface(QObject *parent): QObject(parent) { + m_loggedIn = isLoggedIn(); + emit loggedInChanged(m_loggedIn); +} + +void AccountScriptingInterface::onUsernameChanged(QString username) { + m_loggedIn = (username != QString()); + emit loggedInChanged(m_loggedIn); +} + QString AccountScriptingInterface::getUsername() { auto accountManager = DependencyManager::get(); if (accountManager->isLoggedIn()) { diff --git a/interface/src/scripting/AccountScriptingInterface.h b/interface/src/scripting/AccountScriptingInterface.h index 748f110356..4f87e02dce 100644 --- a/interface/src/scripting/AccountScriptingInterface.h +++ b/interface/src/scripting/AccountScriptingInterface.h @@ -18,6 +18,7 @@ class AccountScriptingInterface : public QObject { Q_OBJECT Q_PROPERTY(QString username READ getUsername NOTIFY usernameChanged) + Q_PROPERTY(bool loggedIn READ loggedIn NOTIFY loggedInChanged) /**jsdoc * @namespace Account @@ -32,6 +33,7 @@ signals: * @return {Signal} */ void usernameChanged(); + void loggedInChanged(bool loggedIn); public slots: static AccountScriptingInterface* getInstance(); @@ -50,6 +52,20 @@ public slots: */ bool isLoggedIn(); bool checkAndSignalForAccessToken(); + void logOut(); + +public: + AccountScriptingInterface(QObject* parent = nullptr); + bool loggedIn() const { + return m_loggedIn; + } + +private slots: + void onUsernameChanged(QString username); + +private: + bool m_loggedIn { false }; + }; #endif // hifi_AccountScriptingInterface_h diff --git a/interface/src/scripting/DialogsManagerScriptingInterface.cpp b/interface/src/scripting/DialogsManagerScriptingInterface.cpp index 0fb6078290..596320eb3c 100644 --- a/interface/src/scripting/DialogsManagerScriptingInterface.cpp +++ b/interface/src/scripting/DialogsManagerScriptingInterface.cpp @@ -33,7 +33,12 @@ void DialogsManagerScriptingInterface::showAddressBar() { void DialogsManagerScriptingInterface::hideAddressBar() { QMetaObject::invokeMethod(DependencyManager::get().data(), - "hideAddressBar", Qt::QueuedConnection); + "hideAddressBar", Qt::QueuedConnection); +} + +void DialogsManagerScriptingInterface::showLoginDialog() { + QMetaObject::invokeMethod(DependencyManager::get().data(), + "showLoginDialog", Qt::QueuedConnection); } void DialogsManagerScriptingInterface::showFeed() { diff --git a/interface/src/scripting/DialogsManagerScriptingInterface.h b/interface/src/scripting/DialogsManagerScriptingInterface.h index e4dd18aedf..b223799cfe 100644 --- a/interface/src/scripting/DialogsManagerScriptingInterface.h +++ b/interface/src/scripting/DialogsManagerScriptingInterface.h @@ -24,6 +24,7 @@ public: public slots: void showAddressBar(); void hideAddressBar(); + void showLoginDialog(); signals: void addressBarShown(bool visible);