// // Help.qml // qml/hifi/commerce/wallet // // Help // // Created by Zach Fox on 2017-08-18 // Copyright 2017 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 // import Hifi 1.0 as Hifi import QtQuick 2.7 import QtQuick.Controls 2.2 import "../../../styles-uit" import "../../../controls-uit" as HifiControlsUit import "../../../controls" as HifiControls // references XXX from root context Item { HifiConstants { id: hifi; } id: root; property string keyFilePath; Connections { target: Commerce; onKeyFilePathIfExistsResult: { root.keyFilePath = path; } } onVisibleChanged: { if (visible) { Commerce.getKeyFilePathIfExists(); } } RalewaySemiBold { id: helpTitleText; text: "Help Topics"; // Anchors anchors.top: parent.top; anchors.left: parent.left; anchors.leftMargin: 20; width: paintedWidth; height: 30; // Text size size: 18; // Style color: hifi.colors.blueHighlight; } ListModel { id: helpModel; ListElement { isExpanded: false; question: "How can I get HFC?"; answer: "High Fidelity commerce is in open beta right now. Want more HFC? \ Get it by going to

BankOfHighFidelity. and meeting with the banker!"; } ListElement { isExpanded: false; question: "What are private keys and where are they stored?"; answer: "A private key is a secret piece of text that is used to prove ownership, unlock confidential information, and sign transactions. \ In High Fidelity, your private key is used to securely access the contents of your Wallet and Purchases. \ After wallet setup, a hifikey file is stored on your computer in High Fidelity Interface's AppData directory. \ Your hifikey file contains your private key and is protected by your wallet passphrase. \

It is very important to back up your hifikey file! \ Tap here to open the folder where your HifiKeys are stored on your main display." } ListElement { isExpanded: false; question: "How do I back up my private keys?"; answer: "You can back up your hifikey file (which contains your private key and is encrypted using your wallet passphrase) by copying it to a USB flash drive, or to a service like Dropbox or Google Drive. \ Restore your hifikey file by replacing the file in Interface's AppData directory with your backup copy. \ Others with access to your back up should not be able to spend your HFC without your passphrase. \ Tap here to open the folder where your HifiKeys are stored on your main display."; } ListElement { isExpanded: false; question: "What happens if I lose my private keys?"; answer: "We cannot stress enough that you should keep a backup! For security reasons, High Fidelity does not keep a copy, and cannot restore it for you. \ If you lose your private key, you will no longer have access to the contents of your Wallet or My Purchases. \ Here are some things to try:

As a last resort, you can set up your Wallet again and generate a new hifikey file. \ Unfortunately, this means you will start with 0 HFC and your purchased items will not be transferred over."; } ListElement { isExpanded: false; question: "What if I forget my wallet passphrase?"; answer: "Your wallet passphrase is used to encrypt your private keys. Please write it down and store it securely! \

If you forget your passphrase, you will no longer be able to decrypt the hifikey file that the passphrase protects. \ You will also no longer have access to the contents of your Wallet or My Purchases. \ For security reasons, High Fidelity does not keep a copy of your passphrase, and can't restore it for you. \

If you still cannot remember your wallet passphrase, you can set up your Wallet again and generate a new hifikey file. \ Unfortunately, this means you will start with 0 HFC and your purchased items will not be transferred over."; } ListElement { isExpanded: false; question: "How do I send HFC to other people?"; answer: "You can send HFC to a High Fidelity connection (someone you've shaken hands with in-world) or somebody Nearby (currently in the same domain as you). \ In your Wallet's Send Money tab, choose from your list of connections, or choose Nearby and select the glowing sphere of the person's avatar."; } ListElement { isExpanded: false; question: "What is a Security Pic?" answer: "Your Security Pic acts as an extra layer of Wallet security. \ When you see your Security Pic, you know that your actions and data are securely making use of your account. \ Tap here to change your Security Pic."; } ListElement { isExpanded: false; question: "Why does my HFC balance not update instantly?"; answer: "HFC transations sometimes takes a few seconds to update as they are backed by a blockchain. \

Tap here to learn more about the blockchain."; } ListElement { isExpanded: false; question: "Do I get charged money if a transaction fails?"; answer: "No. Your HFC balance only changes after a transaction is confirmed."; } ListElement { isExpanded: false; question: "How do I convert HFC to other currencies?" answer: "We are hard at work building the tools needed to support a vibrant economy in High Fidelity. \ At the moment, there is currently no way to convert HFC to other currencies. Stay tuned..."; } ListElement { isExpanded: false; question: "Who can I reach out to with questions?"; answer: "Please email us if you have any issues or questions: \ support@highfidelity.com"; } } ListView { id: helpListView; ScrollBar.vertical: ScrollBar { policy: helpListView.contentHeight > helpListView.height ? ScrollBar.AlwaysOn : ScrollBar.AsNeeded; parent: helpListView.parent; anchors.top: helpListView.top; anchors.right: helpListView.right; anchors.bottom: helpListView.bottom; width: 20; } anchors.top: helpTitleText.bottom; anchors.topMargin: 30; anchors.bottom: parent.bottom; anchors.left: parent.left; anchors.right: parent.right clip: true; model: helpModel; delegate: Item { width: parent.width; height: model.isExpanded ? questionContainer.height + answerContainer.height : questionContainer.height; HifiControlsUit.Separator { colorScheme: 1; visible: index === 0; anchors.left: parent.left; anchors.right: parent.right; anchors.top: parent.top; } Item { id: questionContainer; anchors.top: parent.top; anchors.left: parent.left; width: parent.width; height: questionText.paintedHeight + 50; RalewaySemiBold { id: plusMinusButton; text: model.isExpanded ? "-" : "+"; // Anchors anchors.top: parent.top; anchors.topMargin: model.isExpanded ? -9 : 0; anchors.bottom: parent.bottom; anchors.left: parent.left; width: 60; // Text size size: 60; // Style color: hifi.colors.white; horizontalAlignment: Text.AlignHCenter; verticalAlignment: Text.AlignVCenter; } RalewaySemiBold { id: questionText; text: model.question; size: 18; anchors.verticalCenter: parent.verticalCenter; anchors.left: plusMinusButton.right; anchors.leftMargin: 4; anchors.right: parent.right; anchors.rightMargin: 10; wrapMode: Text.WordWrap; height: paintedHeight; color: hifi.colors.white; verticalAlignment: Text.AlignVCenter; } MouseArea { id: securityTabMouseArea; anchors.fill: parent; onClicked: { model.isExpanded = !model.isExpanded; if (model.isExpanded) { collapseAllOtherHelpItems(index); } } } } Rectangle { id: answerContainer; visible: model.isExpanded; color: Qt.rgba(0, 0, 0, 0.5); anchors.top: questionContainer.bottom; anchors.left: parent.left; anchors.right: parent.right; height: answerText.paintedHeight + 50; RalewayRegular { id: answerText; text: model.answer; size: 18; anchors.verticalCenter: parent.verticalCenter; anchors.left: parent.left; anchors.leftMargin: 32; anchors.right: parent.right; anchors.rightMargin: 32; wrapMode: Text.WordWrap; height: paintedHeight; color: hifi.colors.white; onLinkActivated: { if (link === "#privateKeyPath") { Qt.openUrlExternally("file:///" + root.keyFilePath.substring(0, root.keyFilePath.lastIndexOf('/'))); } else if (link === "#blockchain") { Qt.openUrlExternally("https://docs.highfidelity.com/high-fidelity-commerce"); } else if (link === "#bank") { if ((Account.metaverseServerURL).toString().indexOf("staging") >= 0) { Qt.openUrlExternally("hifi://hifiqa-master-metaverse-staging"); // So that we can test in staging. } else { Qt.openUrlExternally("hifi://BankOfHighFidelity"); } } else if (link === "#support") { Qt.openUrlExternally("mailto:support@highfidelity.com"); } else if (link === "#securitypic") { console.log("HRS FIXME here"); sendSignalToWallet({method: 'walletSecurity_changeSecurityImage'}); } } } } HifiControlsUit.Separator { colorScheme: 1; anchors.left: parent.left; anchors.right: parent.right; anchors.bottom: parent.bottom; } } } // // FUNCTION DEFINITIONS START // // // Function Name: fromScript() // // Relevant Variables: // None // // Arguments: // message: The message sent from the JavaScript. // Messages are in format "{method, params}", like json-rpc. // // Description: // Called when a message is received from a script. // function fromScript(message) { switch (message.method) { default: console.log('Unrecognized message from wallet.js:', JSON.stringify(message)); } } signal sendSignalToWallet(var msg); function collapseAllOtherHelpItems(thisIndex) { for (var i = 0; i < helpModel.count; i++) { if (i !== thisIndex) { helpModel.setProperty(i, "isExpanded", false); } } } // // FUNCTION DEFINITIONS END // }