// // AndroidHelper.cpp // interface/src // // Created by Gabriel Calero & Cristian Duarte on 3/30/18. // 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 // #include "AndroidHelper.h" #include #include #include #include #include "Application.h" #include "Constants.h" #include "avatar/AvatarManager.h" #if defined(qApp) #undef qApp #endif #define qApp (static_cast(QCoreApplication::instance())) AndroidHelper::AndroidHelper() { qRegisterMetaType("QAudio::Mode"); } AndroidHelper::~AndroidHelper() { } void AndroidHelper::requestActivity(const QString &activityName, const bool backToScene, QMap args) { emit androidActivityRequested(activityName, backToScene, args); } void AndroidHelper::notifyLoadComplete() { emit qtAppLoadComplete(); } void AndroidHelper::notifyEnterForeground() { emit enterForeground(); } void AndroidHelper::notifyBeforeEnterBackground() { emit beforeEnterBackground(); } void AndroidHelper::notifyToggleAwayMode() { emit toggleAwayMode(); } void AndroidHelper::notifyEnterBackground() { emit enterBackground(); } void AndroidHelper::performHapticFeedback(int duration) { emit hapticFeedbackRequested(duration); } void AndroidHelper::showLoginDialog(QUrl url) { QMap args; args["url"] = url.toString(); emit androidActivityRequested("Login", true, args); } void AndroidHelper::processURL(const QString &url) { if (qApp->canAcceptURL(url)) { qApp->acceptURL(url); } } void AndroidHelper::notifyHeadsetOn(bool pluggedIn) { #if defined (Q_OS_ANDROID) auto audioClient = DependencyManager::get(); if (audioClient) { QMetaObject::invokeMethod(audioClient.data(), "setHeadsetPluggedIn", Q_ARG(bool, pluggedIn)); } #endif } void AndroidHelper::muteMic() { auto audioClient = DependencyManager::get(); if (audioClient) { QMetaObject::invokeMethod(audioClient.data(), "setMuted", Q_ARG(bool, true), Q_ARG(bool, true)); } } void AndroidHelper::signup(QString email, QString username, QString password) { JSONCallbackParameters callbackParams; callbackParams.callbackReceiver = this; callbackParams.jsonCallbackMethod = "signupCompleted"; callbackParams.errorCallbackMethod = "signupFailed"; QJsonObject payload; QJsonObject userObject; userObject.insert("email", email); userObject.insert("username", username); userObject.insert("password", password); payload.insert("user", userObject); auto accountManager = DependencyManager::get(); accountManager->sendRequest(API_SIGNUP_PATH, AccountManagerAuth::None, QNetworkAccessManager::PostOperation, callbackParams, QJsonDocument(payload).toJson()); } void AndroidHelper::signupCompleted(QNetworkReply* reply) { emit handleSignupCompleted(); } QString AndroidHelper::errorStringFromAPIObject(const QJsonValue& apiObject) { if (apiObject.isArray()) { return apiObject.toArray()[0].toString(); } else if (apiObject.isString()) { return apiObject.toString(); } else { return "is invalid"; } } void AndroidHelper::signupFailed(QNetworkReply* reply) { // parse the returned JSON to see what the problem was auto jsonResponse = QJsonDocument::fromJson(reply->readAll()); static const QString RESPONSE_DATA_KEY = "data"; auto dataJsonValue = jsonResponse.object()[RESPONSE_DATA_KEY]; if (dataJsonValue.isObject()) { auto dataObject = dataJsonValue.toObject(); static const QString EMAIL_DATA_KEY = "email"; static const QString USERNAME_DATA_KEY = "username"; static const QString PASSWORD_DATA_KEY = "password"; QStringList errorStringList; if (dataObject.contains(EMAIL_DATA_KEY)) { errorStringList.append(QString("Email %1.").arg(errorStringFromAPIObject(dataObject[EMAIL_DATA_KEY]))); } if (dataObject.contains(USERNAME_DATA_KEY)) { errorStringList.append(QString("Username %1.").arg(errorStringFromAPIObject(dataObject[USERNAME_DATA_KEY]))); } if (dataObject.contains(PASSWORD_DATA_KEY)) { errorStringList.append(QString("Password %1.").arg(errorStringFromAPIObject(dataObject[PASSWORD_DATA_KEY]))); } emit handleSignupFailed(errorStringList.join('\n')); } else { static const QString DEFAULT_SIGN_UP_FAILURE_MESSAGE = "There was an unknown error while creating your account. Please try again later."; emit handleSignupFailed(DEFAULT_SIGN_UP_FAILURE_MESSAGE); } } QString AndroidHelper::getDisplayName() { return DependencyManager::get()->getMyAvatar()->getDisplayName(); } void AndroidHelper::setDisplayName(const QString &displayName) { DependencyManager::get()->getMyAvatar()->setDisplayName(displayName); } void AndroidHelper::setMyAvatarUrl(const QString &avatarUrl) { QUrl url = QUrl(avatarUrl); DependencyManager::get()->getMyAvatar()->useFullAvatarURL(url); }