adding hooks for application for pause/resume

This commit is contained in:
Wayne Chen 2018-10-25 17:25:44 -07:00
parent 5e73fe3e41
commit 955b0a580e
12 changed files with 92 additions and 148 deletions

View file

@ -178,7 +178,9 @@ Item {
fontBold: completeProfileBody.fontBold
onClicked: {
loginErrorMessage.visible = false;
loginDialog.createAccountFromStream()
loginDialog.createAccountFromSteam();
bodyLoader.setSource("LoggingInBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader,
"withSteam": true, "fromBody": "CompleteProfileBody" })
}
}
}
@ -246,41 +248,4 @@ Item {
Component.onCompleted: {
d.resize();
}
Connections {
target: loginDialog
onHandleCreateCompleted: {
console.log("Create Succeeded")
loginDialog.loginThroughSteam()
bodyLoader.setSource("LoggingInBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "withSteam": true, "fromBody": "CompleteProfileBody" })
}
onHandleCreateFailed: {
console.log("Create Failed: " + error)
var poppedUp = Settings.getValue("loginDialogPoppedUp", false);
if (poppedUp) {
console.log("[ENCOURAGELOGINDIALOG]: failed creating an account")
var data = {
"action": "user failed creating an account"
};
UserActivityLogger.logAction("encourageLoginDialog", data);
}
bodyLoader.setSource("UsernameCollisionBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "errorString": "" });
}
onHandleLoginCompleted: {
console.log("Login Succeeded")
loginSuccess(true)
}
onHandleLoginFailed: {
console.log("Login Failed")
var poppedUp = Settings.getValue("loginDialogPoppedUp", false);
if (poppedUp) {
console.log("[ENCOURAGELOGINDIALOG]: failed logging in")
var data = {
"action": "user failed logging in"
};
UserActivityLogger.logAction("encourageLoginDialog", data);
}
loginSuccess(false)
}
}
}

View file

@ -239,7 +239,7 @@ Item {
right: parent.right
margins: 10
}
visible: !root.isTablet
visible: !root.isTablet && !HMD.active
Text {
id: dismissText
text: qsTr("No thanks, take me in-world! >")
@ -257,13 +257,13 @@ Item {
anchors.fill: parent
acceptedButtons: Qt.LeftButton
onClicked: {
var poppedUp = Settings.getValue("loginDialogPoppedUp", false);
if (poppedUp) {
if (loginDialog.getLoginDialogPoppedUp()) {
console.log("[ENCOURAGELOGINDIALOG]: user dismissed login screen")
var data = {
"action": "user dismissed login screen"
};
Settings.setValue("loginDialogPoppedUp", false);
UserActivityLogger.logAction("encourageLoginDialog", data);
loginDialog.dismissLoginDialog();
}
root.tryDestroy();
}
@ -282,14 +282,14 @@ Item {
d.resize();
}
Component.onDestruction: {
var poppedUp = Settings.getValue("loginDialogPoppedUp", false);
if (poppedUp && root.isTablet) {
if (loginDialog.getLoginDialogPoppedUp() && root.isTablet) {
// it popped up and was clicked with the X
console.log("[ENCOURAGELOGINDIALOG]: user dismissed login screen")
console.log("[ENCOURAGELOGINDIALOG]: user closed login screen")
var data = {
"action": "user dismissed login screen"
};
Settings.setValue("loginDialogPoppedUp", false);
UserActivityLogger.logAction("encourageLoginDialog", data);
loginDialog.dismissLoginDialog();
}
}
}

View file

@ -102,6 +102,7 @@ Item {
loggingInText.text = "You are now logged in!";
}
successTimer.start();
loginDialog.resumeLoading();
}
Item {
@ -245,14 +246,13 @@ Item {
onHandleSignupCompleted: {
console.log("SignUp completed!");
successTimer.start();
}
onHandleSignupFailed: {
console.log("SignUp failed!");
var errorStringEdited = errorString.replace(/[\n\r]+/g, ' ');
console.log(errorStringEdited);
bodyLoader.setSource("SignInBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "errorString": errorStringEdited });
// bodyLoader.setSource("SignInBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "errorString": "yellow" });
}
onHandleLoginCompleted: {
@ -275,7 +275,11 @@ Item {
bodyLoader.setSource("UsernameCollisionBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "errorString": errorString });
} else {
errorString = loginDialog.isLogIn ? "Username or password is incorrect." : "Failed to sign up. Please try again.";
bodyLoader.setSource("SignInBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "errorString": errorString });
if (loginDialog.isLogIn && loginDialog.isSteamRunning()) {
bodyLoader.setSource("CompleteProfileBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader });
} else {
bodyLoader.setSource("SignInBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "errorString": errorString });
}
}
}
}

View file

@ -373,69 +373,6 @@ Item {
print(signInBody.errorString);
}
Connections {
target: loginDialog
onHandleCreateFailed: {
console.log("Create Failed")
var error = "There was an unknown error while creating your account. Please try again later.";
loadingSuccess(false, error);
}
onHandleCreateCompleted: {
console.log("Create Completed")
}
onHandleSignupFailed: {
console.log("Sign Up Failed")
loadingSuccess(false, "");
}
onHandleSignupCompleted: {
console.log("Sign Up Completed");
loadingSuccess(true, "");
}
onHandleLoginCompleted: {
console.log("Login Succeeded")
var poppedUp = Settings.getValue("loginDialogPoppedUp", false);
if (poppedUp) {
console.log("[ENCOURAGELOGINDIALOG]: logging in")
var data = {
"action": "user logged in"
};
UserActivityLogger.logAction("encourageLoginDialog", data);
Settings.setValue("loginDialogPoppedUp", false);
}
if (loginDialog.isSteamRunning()) {
loginDialog.linkSteam();
}
loadingSuccess(true, "")
}
onHandleLoginFailed: {
console.log("Login Failed")
var poppedUp = Settings.getValue("loginDialogPoppedUp", false);
if (poppedUp) {
console.log("[ENCOURAGELOGINDIALOG]: failed logging in")
var data = {
"action": "user failed logging in"
};
UserActivityLogger.logAction("encourageLoginDialog", data);
Settings.setValue("loginDialogPoppedUp", false);
}
if (loginDialog.isSteamRunning()) {
bodyLoader.setSource("CompleteProfileBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader });
}
var error = "Username or password incorrect."
loadingSuccess(false, error)
}
onHandleLinkCompleted: {
console.log("Link Succeeded")
loadingSuccess(true, "")
}
onHandleLinkFailed: {
console.log("Link Failed")
var error = "There was an unknown error while creating your account. Please try again later.";
loadingSuccess(false, error);
}
}
Keys.onPressed: {
if (!visible) {
return;

View file

@ -28,7 +28,8 @@ Item {
function create() {
mainTextContainer.visible = false
loginDialog.createAccountFromStream(textField.text)
loginDialog.createAccountFromSteam(textField.text)
bodyLoader.setSource("LoggingInBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "withSteam": true, "fromBody": "UsernameCollisionBody" });
}
property bool keyboardEnabled: false
@ -248,7 +249,7 @@ Item {
target: loginDialog
onHandleCreateCompleted: {
console.log("Create Succeeded")
loginDialog.loginThroughSteam()
loginDialog.loginThroughSteam();
bodyLoader.setSource("LoggingInBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "withSteam": true, "fromBody": "UsernameCollisionBody" })
}
onHandleCreateFailed: {
@ -258,11 +259,14 @@ Item {
mainTextContainer.text = "\"" + textField.text + qsTr("\" is invalid or already taken.")
}
onHandleLoginCompleted: {
console.log("Login Succeeded")
console.log("Login Succeeded");
loginDialog.dismissLoginDialog();
root.tryDestroy();
}
onHandleLoginFailed: {
console.log("Login Failed")
mainTextContainer.text = "Login Failed";
}
}
}

View file

@ -138,11 +138,6 @@ Windows.TabletModalWindow {
}
break
} else switch (event.key) {
case Qt.Key_Escape:
case Qt.Key_Back:
event.accepted = true
destroy()
break
case Qt.Key_Enter:
case Qt.Key_Return:

View file

@ -373,7 +373,9 @@ static const float INITIAL_QUERY_RADIUS = 10.0f; // priority radius for entitie
static const QString DESKTOP_LOCATION = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
Setting::Handle<int> maxOctreePacketsPerSecond("maxOctreePPS", DEFAULT_MAX_OCTREE_PPS);
Setting::Handle<int> maxOctreePacketsPerSecond{"maxOctreePPS", DEFAULT_MAX_OCTREE_PPS};
Setting::Handle<bool> loginDialogPoppedUp{"loginDialogPoppedUp", false};
static const QString MARKETPLACE_CDN_HOSTNAME = "mpassets.highfidelity.com";
static const int INTERVAL_TO_CHECK_HMD_WORN_STATUS = 500; // milliseconds
@ -2472,7 +2474,7 @@ void Application::onAboutToQuit() {
// so its persisted explicitly here
Setting::Handle<QString>{ ACTIVE_DISPLAY_PLUGIN_SETTING_NAME }.set(getActiveDisplayPlugin()->getName());
Setting::Handle<bool>{"loginDialogPoppedUp", false}.set(false);
loginDialogPoppedUp.set(false);
getActiveDisplayPlugin()->deactivate();
if (_autoSwitchDisplayModeSupportedHMDPlugin
@ -2889,8 +2891,8 @@ void Application::showLoginScreen() {
auto accountManager = DependencyManager::get<AccountManager>();
auto dialogsManager = DependencyManager::get<DialogsManager>();
if (!accountManager->isLoggedIn()) {
Setting::Handle<bool>{"loginDialogPoppedUp", false}.set(true);
// dialogsManager->showLoginScreenDialog();
_loginDialogPoppedUp = true;
dialogsManager->showLoginDialog();
QJsonObject loginData = {};
loginData["action"] = "login dialog shown";
@ -2902,7 +2904,8 @@ void Application::showLoginScreen() {
goToLoginScreenDomainURL(loginScreenDomainURL);
}
}
Setting::Handle<bool>{"loginDialogPoppedUp", false}.set(false);
_loginDialogPoppedUp = !accountManager->isLoggedIn();
loginDialogPoppedUp.set(_loginDialogPoppedUp);
}
void Application::initializeQml() {
@ -8390,6 +8393,13 @@ void Application::setShowBulletConstraintLimits(bool value) {
_physicsEngine->setShowBulletConstraintLimits(value);
}
void Application::onDismissedLoginDialog() {
// TODO something with login dialog.
qDebug() << "dismissed login dialog";
_loginDialogPoppedUp = false;
loginDialogPoppedUp.set(false);
}
void Application::startHMDStandBySession() {
_autoSwitchDisplayModeSupportedHMDPlugin->startStandBySession();
}

View file

@ -232,7 +232,7 @@ public:
float getSettingConstrainToolbarPosition() { return _constrainToolbarPosition.get(); }
void setSettingConstrainToolbarPosition(bool setting);
Q_INVOKABLE void setMinimumGPUTextureMemStabilityCount(int stabilityCount) { _minimumGPUTextureMemSizeStabilityCount = stabilityCount; }
Q_INVOKABLE void setMinimumGPUTextureMemStabilityCount(int stabilityCount) { _minimumGPUTextureMemSizeStabilityCount = stabilityCount; }
NodeToOctreeSceneStats* getOcteeSceneStats() { return &_octreeServerSceneStats; }
@ -319,6 +319,10 @@ public:
int getOtherAvatarsReplicaCount() { return DependencyManager::get<AvatarHashMap>()->getReplicaCount(); }
void setOtherAvatarsReplicaCount(int count) { DependencyManager::get<AvatarHashMap>()->setReplicaCount(count); }
bool getLoginDialogPoppedUp() const { return _loginDialogPoppedUp; }
void pauseUntilLoginDetermined();
void resumeAfterLoginDialogActionTaken();
#if defined(Q_OS_ANDROID)
void beforeEnterBackground();
void enterBackground();
@ -338,7 +342,6 @@ signals:
void interstitialModeChanged(bool isInInterstitialMode);
void loginScreenStateChanged(bool isInLoginScreenState);
void loginDialogPoppedUp();
public slots:
QVector<EntityItemID> pasteEntities(float x, float y, float z);
@ -507,6 +510,8 @@ private slots:
void setShowBulletConstraints(bool value);
void setShowBulletConstraintLimits(bool value);
void onDismissedLoginDialog();
private:
void init();
bool handleKeyEventForFocusedEntityOrOverlay(QEvent* event);
@ -676,6 +681,7 @@ private:
glm::uvec2 _renderResolution;
int _maxOctreePPS = DEFAULT_MAX_OCTREE_PPS;
bool _loginDialogPoppedUp = false;
quint64 _lastFaceTrackerUpdate;

View file

@ -118,9 +118,6 @@ void DialogsManager::showLoginDialog() {
LoginDialog::showWithSelection();
}
void DialogsManager::showLoginScreenDialog() {
}
void DialogsManager::showUpdateDialog() {
UpdateDialog::show();
}

View file

@ -50,8 +50,6 @@ public slots:
void toggleLoginDialog();
// shows login screen that appears upon `File > Log In/Sign Up`.
void showLoginDialog();
// toggles login screen that appears upon application startup.
void showLoginScreenDialog();
void octreeStatsDetails();
void lodTools();
void hmdTools(bool showTools);

View file

@ -33,22 +33,17 @@ HIFI_QML_DEF(LoginDialog)
LoginDialog::LoginDialog(QQuickItem *parent) : OffscreenQmlDialog(parent) {
auto accountManager = DependencyManager::get<AccountManager>();
// the login hasn't been dismissed yet if the user isn't logged in and is encouraged to login.
#if !defined(Q_OS_ANDROID)
connect(accountManager.data(), &AccountManager::loginComplete,
this, &LoginDialog::handleLoginCompleted);
connect(accountManager.data(), &AccountManager::loginFailed,
this, &LoginDialog::handleLoginFailed);
#endif
connect(this, SIGNAL(dismissedLoginDialog()), qApp, SLOT(onDismissedLoginDialog()));
}
LoginDialog::~LoginDialog() {
Setting::Handle<bool> loginDialogPoppedUp{ "loginDialogPoppedUp", false };
if (loginDialogPoppedUp.get()) {
QJsonObject data;
data["action"] = "user opted out";
UserActivityLogger::getInstance().logAction("encourageLoginDialog", data);
}
loginDialogPoppedUp.set(false);
}
void LoginDialog::showWithSelection() {
@ -56,14 +51,28 @@ void LoginDialog::showWithSelection() {
auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system"));
auto hmd = DependencyManager::get<HMDScriptingInterface>();
if (tablet->getToolbarMode()) {
LoginDialog::show();
} else {
static const QUrl url("dialogs/TabletLoginDialog.qml");
tablet->initialScreen(url);
if (!hmd->getShouldShowTablet()) {
hmd->openTablet();
static const QUrl url("dialogs/TabletLoginDialog.qml");
if (!qApp->isHMDMode()) {
if (qApp->getLoginDialogPoppedUp()) {
LoginDialog::show();
return;
} else {
if (!tablet->isPathLoaded(url)) {
tablet->loadQMLSource(url);
}
}
} else {
//if (qApp->getLoginDialogPoppedUp()) {
// // pop up those overlay things.
// return;
//} else {
// tablet->initialScreen(url);
//}
}
if (!hmd->getShouldShowTablet()) {
hmd->openTablet();
}
}
@ -92,6 +101,12 @@ bool LoginDialog::isSteamRunning() const {
return steamClient && steamClient->isRunning();
}
void LoginDialog::dismissLoginDialog() {
// it'll only pop up once.
qDebug() << "LoginDialog::dismissLoginDialog";
emit dismissedLoginDialog();
}
void LoginDialog::login(const QString& username, const QString& password) const {
qDebug() << "Attempting to login " << username;
DependencyManager::get<AccountManager>()->requestAccessToken(username, password);
@ -138,7 +153,7 @@ void LoginDialog::linkSteam() {
}
}
void LoginDialog::createAccountFromStream(QString username) {
void LoginDialog::createAccountFromSteam(QString username) {
qDebug() << "Attempting to create account from Steam info";
if (auto steamClient = PluginManager::getInstance()->getSteamClientPlugin()) {
steamClient->requestTicket([this, username](Ticket ticket) {
@ -162,7 +177,7 @@ void LoginDialog::createAccountFromStream(QString username) {
auto accountManager = DependencyManager::get<AccountManager>();
accountManager->sendRequest(CREATE_ACCOUNT_FROM_STEAM_PATH, AccountManagerAuth::None,
QNetworkAccessManager::PostOperation, callbackParams,
NetworkAccessManager::PostOperation, callbackParams,
QJsonDocument(payload).toJson());
});
}
@ -233,6 +248,10 @@ void LoginDialog::signupCompleted(QNetworkReply* reply) {
emit handleSignupCompleted();
}
bool LoginDialog::getLoginDialogPoppedUp() const {
return qApp->getLoginDialogPoppedUp();
}
QString errorStringFromAPIObject(const QJsonValue& apiObject) {
if (apiObject.isArray()) {
return apiObject.toArray()[0].toString();

View file

@ -15,6 +15,7 @@
#define hifi_LoginDialog_h
#include <OffscreenQmlDialog.h>
#include <SettingHandle.h>
class QNetworkReply;
@ -45,6 +46,9 @@ signals:
void handleSignupCompleted();
void handleSignupFailed(QString errorString);
// occurs upon dismissing the encouraging log in.
void dismissedLoginDialog();
public slots:
void linkCompleted(QNetworkReply* reply);
void linkFailed(QNetworkReply* reply);
@ -55,17 +59,22 @@ public slots:
void signupCompleted(QNetworkReply* reply);
void signupFailed(QNetworkReply* reply);
protected slots:
Q_INVOKABLE void dismissLoginDialog();
Q_INVOKABLE bool isSteamRunning() const;
Q_INVOKABLE void login(const QString& username, const QString& password) const;
Q_INVOKABLE void loginThroughSteam();
Q_INVOKABLE void linkSteam();
Q_INVOKABLE void createAccountFromStream(QString username = QString());
Q_INVOKABLE void createAccountFromSteam(QString username = QString());
Q_INVOKABLE void signup(const QString& email, const QString& username, const QString& password);
Q_INVOKABLE void openUrl(const QString& url) const;
Q_INVOKABLE bool getLoginDialogPoppedUp() const;
private:
bool getIsLogIn() const { return _isLogIn; }
void setIsLogIn(const bool isLogIn) { _isLogIn = isLogIn; }