diff --git a/CMakeLists.txt b/CMakeLists.txt index a75870e0..99e69f1b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,9 @@ cmake_minimum_required( VERSION 3.1 ) #set(CMAKE_OSX_DEPLOYMENT_TARGET "10.14" CACHE STRING "Minimum OS X deployment version") if(UNIX AND APPLE) - project(Nunchuk VERSION 1.9.36) + project(Nunchuk VERSION 1.9.37) else() - project(nunchuk-qt VERSION 1.9.36) + project(nunchuk-qt VERSION 1.9.37) endif() set( CMAKE_CXX_STANDARD 20 ) @@ -176,6 +176,7 @@ set(Views_SRCS Views/STATE_ID_SCR_REPLACE_SELECT_KEY.cpp Views/STATE_ID_SCR_REPLACE_KEYS.cpp Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.cpp + Views/STATE_ID_SCR_EDIT_MEMBERS.cpp ) set(Views_MOCS diff --git a/Images/create-hot-wallet.png b/Images/create-hot-wallet.png deleted file mode 100644 index d5e81f72..00000000 Binary files a/Images/create-hot-wallet.png and /dev/null differ diff --git a/Images/create-hot-wallet.svg b/Images/create-hot-wallet.svg deleted file mode 100644 index b35ceeb0..00000000 --- a/Images/create-hot-wallet.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Images/groups-dark.svg b/Images/groups-dark.svg new file mode 100644 index 00000000..6f958c4b --- /dev/null +++ b/Images/groups-dark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Images/health-check-light.svg b/Images/health-check-light.svg new file mode 100644 index 00000000..65f35f22 --- /dev/null +++ b/Images/health-check-light.svg @@ -0,0 +1,3 @@ + + + diff --git a/Images/person-add-24px.svg b/Images/person-add-24px.svg new file mode 100644 index 00000000..31e4f0d1 --- /dev/null +++ b/Images/person-add-24px.svg @@ -0,0 +1,4 @@ + + + + diff --git a/Models/AppModel.cpp b/Models/AppModel.cpp index 2584d290..d9f4b8d4 100644 --- a/Models/AppModel.cpp +++ b/Models/AppModel.cpp @@ -474,6 +474,11 @@ void AppModel::setSoftwareSignerDeviceList(const QDeviceListModelPtr &value) emit softwareSignerDeviceListChanged(); } +qint64 AppModel::hourFeeOrigin() const +{ + return hourFee_; +} + QString AppModel::hourFeeCurrency() const { double fee = (double)hourFee_/1000; @@ -498,6 +503,11 @@ void AppModel::setHourFee(qint64 fee) } } +qint64 AppModel::minFeeOrigin() const +{ + return minFee_; +} + QString AppModel::minFeeCurrency() const { double btcRate = btcRates()/100000000; @@ -532,6 +542,11 @@ void AppModel::resetSignersChecked() } } +qint64 AppModel::halfHourFeeOrigin() const +{ + return halfHourFee_; +} + QString AppModel::halfHourFeeCurrency() const { double btcRate = btcRates()/100000000; @@ -556,6 +571,11 @@ void AppModel::setHalfHourFee(qint64 fee) } } +qint64 AppModel::fastestFeeOrigin() const +{ + return fastestFee_; +} + QString AppModel::fastestFeeCurrency() const { double btcRate = btcRates()/100000000; @@ -699,12 +719,8 @@ void AppModel::requestCreateUserWallets() WalletsMng->GetListWallet(USER_WALLET); WalletsMng->GetListWallet(GROUP_WALLET); AppModel::instance()->startReloadUserDb(); - static bool needCheckOnboarding = true; - if(needCheckOnboarding){ - needCheckOnboarding = false; - AppModel::instance()->requestOnboarding(); - } }); + AppModel::instance()->requestOnboarding(); } void AppModel::requestSyncSharedWallets() @@ -765,11 +781,10 @@ void AppModel::requestClearData() void AppModel::requestOnboarding() { - timeoutHandler(1000,[=]{ - if (CLIENT_INSTANCE->isSubscribed() || !QGroupWallets::instance()->existGroupPending()) { + timeoutHandler(1000,[=, this]{ + if (CLIENT_INSTANCE->isSubscribed() || QGroupWallets::instance()->existGroupPending() || AppModel::instance()->walletListPtr()->existGroupWallet()) { AppSetting::instance()->setIsFirstTimeOnboarding(true); - } - else { + } else { DBG_INFO << "Checking Onboarding " << AppSetting::instance()->isFirstTimeOnboarding(); if (!AppSetting::instance()->isFirstTimeOnboarding()) { OnBoardingModel::instance()->setState("onboarding"); @@ -991,6 +1006,7 @@ void AppModel::setWalletInfo(const QWalletPtr &d, bool force) << "Wallet Role:" << walletInfo_.data()->myRole() << "Wallet Slug:" << walletInfo_.data()->slug() << "Wallet Status:" << walletInfo_.data()->status(); + QGroupWallets::instance()->setDashboardInfo(walletInfo_); } } diff --git a/Models/AppModel.h b/Models/AppModel.h index 1484df7e..ffff5865 100644 --- a/Models/AppModel.h +++ b/Models/AppModel.h @@ -175,18 +175,22 @@ class AppModel final : public Controller, QString getTxidReplacing() const; void setTxidReplacing(const QString &txidReplacing); + qint64 fastestFeeOrigin() const; QString fastestFeeCurrency() const; QString fastestFee() const; void setFastestFee(qint64 fee); + qint64 halfHourFeeOrigin() const; QString halfHourFeeCurrency() const; QString halfHourFee() const; void setHalfHourFee(qint64 fee); + qint64 hourFeeOrigin() const; QString hourFeeCurrency() const; QString hourFee() const; void setHourFee(qint64 fee); + qint64 minFeeOrigin() const; QString minFeeCurrency() const; QString minFee() const; void setMinFee(qint64 fee); diff --git a/Models/Chats/QNunchukRoomModel.cpp b/Models/Chats/QNunchukRoomModel.cpp index 1dc49580..4d26becb 100755 --- a/Models/Chats/QNunchukRoomModel.cpp +++ b/Models/Chats/QNunchukRoomModel.cpp @@ -1871,15 +1871,18 @@ void QNunchukRoom::nunchukNoticeEvent(const RoomEvent &evt) msgtype.contains("io.nunchuk.custom.key_name_changed", Qt::CaseInsensitive) || msgtype.contains("io.nunchuk.custom.key_updated", Qt::CaseInsensitive)) { + if (dashboard) { + dashboard->GetAlertsInfo(); + } AppModel::instance()->requestCreateUserWallets(); } else if(msgtype.contains("io.nunchuk.custom.transaction", Qt::CaseInsensitive)) { QJsonObject content = evt.fullJson()["content"].toObject(); + DBG_INFO << content; QString wallet_id = content["wallet_local_id"].toString(); if (wallet_id != "") { if(msgtype.contains("io.nunchuk.custom.transaction_canceled") || msgtype.contains("io.nunchuk.custom.transaction_batch_created")){ - DBG_INFO << content; AppModel::instance()->startSyncWalletDb(wallet_id); } else { @@ -1897,6 +1900,7 @@ void QNunchukRoom::nunchukNoticeEvent(const RoomEvent &evt) if(!data.isEmpty()){ trans->setServerKeyMessage(data); } + DBG_INFO << trans.data()->memo(); wallet.data()->transactionHistory()->updateTransaction(trans->txid(), trans); if(AppModel::instance()->transactionInfo()){ QString current_tx_wallet_id = AppModel::instance()->transactionInfo()->walletId(); @@ -2003,6 +2007,7 @@ void QNunchukRoom::nunchukNoticeEvent(const RoomEvent &evt) dashboard->GetWalletInfo(); if(dashboard->isReplaced()){ dashboard->setShowDashBoard(false); + AppModel::instance()->requestCreateUserWallets(); } if (auto walletList = AppModel::instance()->walletListPtr()) { walletList->refresh(); diff --git a/Models/Commons/ReplaceKeyFreeUser.cpp b/Models/Commons/ReplaceKeyFreeUser.cpp index 410eee43..c7af8250 100644 --- a/Models/Commons/ReplaceKeyFreeUser.cpp +++ b/Models/Commons/ReplaceKeyFreeUser.cpp @@ -8,6 +8,7 @@ #include "Premiums/QAssistedDraftWallets.h" #include "Premiums/QWalletServicesTag.h" +bool ReplaceKeyFreeUser::m_tranReplace = false; void ReplaceKeyFreeUser::MixMasterSignerAndSingleSignerAll() { m_replaceFree = true; @@ -173,6 +174,19 @@ bool ReplaceKeyFreeUser::updateKeyReplace(const QString &xfp, const int index) return false; } +bool ReplaceKeyFreeUser::tranReplace() const +{ + return m_tranReplace; +} + +void ReplaceKeyFreeUser::setTranReplace(bool newTranReplace) +{ + if (m_tranReplace == newTranReplace) + return; + m_tranReplace = newTranReplace; + emit tranReplaceChanged(); +} + bool ReplaceKeyFreeUser::replaceFree() const { return m_replaceFree; diff --git a/Models/Commons/ReplaceKeyFreeUser.h b/Models/Commons/ReplaceKeyFreeUser.h index 05959b1b..29ae59b7 100644 --- a/Models/Commons/ReplaceKeyFreeUser.h +++ b/Models/Commons/ReplaceKeyFreeUser.h @@ -29,6 +29,10 @@ class ReplaceKeyFreeUser QString deviceType(const QString &xfp); bool ImportColdcardViaFile(const QString &fileName, int new_index); + + bool tranReplace() const; + void setTranReplace(bool newTranReplace); + public slots: virtual int reuseKeyGetCurrentIndex(const QString &xfp); virtual QString bip32path(const QString &xfp, int index); @@ -38,6 +42,7 @@ public slots: virtual void replaceFlowChanged() = 0; virtual void deviceListChanged() = 0; virtual void deviceTypeChanged() = 0; + virtual void tranReplaceChanged() = 0; private: QJsonArray m_signerExistList {}; QString m_replaceFlow {"replace-key-info"}; @@ -49,6 +54,7 @@ public slots: bool m_replaceFree {false}; QDeviceListModelPtr deviceList_; QString m_deviceType; + static bool m_tranReplace; }; #endif // REPLACEKEYFREEUSER_H diff --git a/Models/Premiums/QAssistedDraftWallets.cpp b/Models/Premiums/QAssistedDraftWallets.cpp index 5d21af8a..5052516d 100644 --- a/Models/Premiums/QAssistedDraftWallets.cpp +++ b/Models/Premiums/QAssistedDraftWallets.cpp @@ -162,6 +162,12 @@ bool QAssistedDraftWallets::RequestAddOrUpdateAKeyToDraftWallet(StructAddHardwar } else { ret = Byzantine::instance()->DraftWalletAddKey(hardware.mGroupId, hardware.mRequestId, data, isDuplicateKey, error_msg); DBG_INFO << data << ret << error_msg << isDuplicateKey; + if (ret) { + if (auto dashboard = QGroupWallets::instance()->dashboardInfoPtr()) { + dashboard->GetAlertsInfo(); + dashboard->GetHealthCheckInfo(); + } + } } if (ret) { AppModel::instance()->setAddSignerWizard(3); @@ -218,6 +224,12 @@ bool QAssistedDraftWallets::RequestAddOrUpdateReuseKeyToDraftWallet(StructAddHar else { ret = Byzantine::instance()->DraftWalletAddKey(hardware.mGroupId, hardware.mRequestId, data, isDuplicateKey, error_msg); DBG_INFO << data << ret << error_msg << isDuplicateKey; + if (ret) { + if (auto dashboard = QGroupWallets::instance()->dashboardInfoPtr()) { + dashboard->GetAlertsInfo(); + dashboard->GetHealthCheckInfo(); + } + } } if (ret) { return true; diff --git a/Models/Premiums/QGroupDashboard.cpp b/Models/Premiums/QGroupDashboard.cpp index fe4750f1..09717fee 100644 --- a/Models/Premiums/QGroupDashboard.cpp +++ b/Models/Premiums/QGroupDashboard.cpp @@ -84,7 +84,8 @@ QString QGroupDashboard::groupStatus() const QString QGroupDashboard::myRole() const { - DBG_INFO << myInfo()["role"].toString(); + // return "FACILITATOR_ADMIN"; //FIXME TBD + // DBG_INFO << myInfo()["role"].toString(); return myInfo()["role"].toString(); } @@ -720,6 +721,50 @@ void QGroupDashboard::setGroupChatExisted(bool existed) } } +bool QGroupDashboard::EditGroupMembers() +{ + QJsonObject output; + QString error_msg = ""; + bool ret = Byzantine::instance()->EditGroupMembers(groupId(), + servicesTagPtr()->confirmCodeNonceBody(), + {}, + servicesTagPtr()->passwordToken(), + servicesTagPtr()->secQuesToken(), + servicesTagPtr()->confirmToken(), + output, + error_msg); + if(ret){ + DBG_INFO << output; + QEventProcessor::instance()->sendEvent(E::EVT_ONS_CLOSE_REQUEST); + GetMemberInfo(); + } + return ret; +} + +bool QGroupDashboard::CalculateRequireSignaturesForEditingMembers() +{ + QJsonObject output; + QString error_msg = ""; + bool ret = Byzantine::instance()->CalculateRequireSignaturesForEditingMembers(groupId(), bodyEditMembers(), output, error_msg); + if(ret){ + DBG_INFO << output; + QJsonObject resultObj = output["result"].toObject(); + servicesTagPtr()->setReqiredSignatures(resultObj); + auto info = servicesTagPtr()->reqiredSignaturesInfo(); + if (info.type == (int)REQUIRED_SIGNATURE_TYPE_INT::CONFIRMATION_CODE) { + if (RequestConfirmationCodeEditMembers()) { + emit editMembersSuccessChanged(); + } + } else if (info.type == (int)REQUIRED_SIGNATURE_TYPE_INT::SECURITY_QUESTION) { + emit editMembersSuccessChanged(); + } else { + QString message = QString("Not Support Dummy Transaction"); + AppModel::instance()->showToast(0, message, EWARNING::WarningType::EXCEPTION_MSG); + } + } + return ret; +} + bool QGroupDashboard::requestStartKeyReplacement(const QString &tag) { if (ServiceSetting::instance()->existHardware(tag)) { @@ -815,6 +860,33 @@ void QGroupDashboard::requestShowLetAddYourKeys() QEventProcessor::instance()->sendEvent(E::EVT_SHOW_GROUP_WALLET_CONFIG_REQUEST); } +bool QGroupDashboard::isDowngrade(QString email_or_username, QString roleNew) +{ + QString roleOld = ""; + for (auto js : groupInfo()["members"].toArray()) { + auto email_or_username_tmp = js.toObject()["email_or_username"].toString(); + if (qUtils::strCompare(email_or_username, email_or_username_tmp)) { + roleOld = js.toObject()["role"].toString(); + } + } + DBG_INFO << email_or_username << roleOld << roleNew; + if (roleOld.isEmpty()) return false; + + static QMap maps = { + {"MASTER", 1}, + {"ADMIN", 2}, + {"KEYHOLDER", 3}, + {"KEYHOLDER_LIMITED", 4}, + {"FACILITATOR_ADMIN", 5}, + {"OBSERVER", 6}, + {"CUSTOMIZE", 7} + }; + if (qUtils::strCompare(roleOld, "FACILITATOR_ADMIN") && qUtils::strCompare(myRole(), "FACILITATOR_ADMIN")) { + return false; + } + return maps[roleOld] < maps[roleNew] && qUtils::strCompare(myRole(), "FACILITATOR_ADMIN"); +} + bool QGroupDashboard::deviceExport(const QStringList tags, nunchuk::SignerType type) { DBG_INFO << tags << qUtils::GetSignerTypeString(type); @@ -942,6 +1014,17 @@ int QGroupDashboard::nInfo() const QJsonObject QGroupDashboard::GetSigner(const QString &xfp) const { + QJsonArray origin = groupInfo()["members"].toArray(); + QString our_id = ""; + for (auto member : origin) { + QJsonObject it = member.toObject(); + QString user_id = it["user"].toObject()["id"].toString(); + QString email_or_username = it["email_or_username"].toString(); + if (qUtils::strCompare(ClientController::instance()->getMe().email, email_or_username)) { + our_id = user_id; + break; + } + } for (QJsonValue js : m_signerInfo) { QJsonObject signer = js.toObject(); if (signer["xfp"].toString() == xfp) { @@ -963,6 +1046,11 @@ QJsonObject QGroupDashboard::GetSigner(const QString &xfp) const } } signer["signer_is_primary"] = qUtils::isPrimaryKey(xfp); + QString added_by_user_id = signer["added_by_user_id"].toString(); + signer["ourAccount"] = false; + if (our_id == added_by_user_id) { + signer["ourAccount"] = true; + } return signer; } } @@ -1057,6 +1145,8 @@ bool QGroupDashboard::FinishKeyReplacement(const QJsonObject &requestBody) if(ret){ DBG_INFO << ret << error_msg; // Handle preparing model here. + GetAlertsInfo(); + GetHealthCheckInfo(); } else{ //Show error @@ -1095,4 +1185,107 @@ QJsonObject QGroupDashboard::alertJson() const return m_currentAlertInfo; } +QVariantList QGroupDashboard::editMembers() const +{ + return m_editMembers.toVariantList(); +} +void QGroupDashboard::initMembers() +{ + m_editMembers = groupInfo()["members"].toArray(); + emit editMembersChanged(); +} + +bool QGroupDashboard::addMember(const QJsonObject &aEditMember) +{ + QJsonObject obj = aEditMember; + obj["isNew"] = true; + DBG_INFO << obj; + m_editMembers.append(obj); + emit editMembersChanged(); + return true; +} + +bool QGroupDashboard::removeMember(const QJsonObject &aEditMember) +{ + QString email_or_username = aEditMember["email_or_username"].toString(); + for (int i = 0; i < m_editMembers.size(); i++) { + auto js = m_editMembers.at(i); + auto email_or_username_tmp = js.toObject()["email_or_username"].toString(); + if (qUtils::strCompare(email_or_username, email_or_username_tmp)) { + m_editMembers.removeAt(i); + emit editMembersChanged(); + return true; + } + } + return false; +} + +bool QGroupDashboard::editMembers(const QJsonObject &aEditMember, int index) +{ + QString email_or_username = aEditMember["email_or_username"].toString(); + auto old = m_editMembers.at(index).toObject(); + QString email_or_username_old = old["email_or_username"].toString(); + DBG_INFO << aEditMember << index; + QJsonObject replace = old; + for (auto it = aEditMember.begin(); it != aEditMember.end(); ++it) { + replace[it.key()] = aEditMember[it.key()]; + } + if (qUtils::strCompare(email_or_username, email_or_username_old)) { + m_editMembers.replace(index, replace); + emit editMembersChanged(); + return true; + } else { + if (containEditMeber(replace)) { + return false; + } else { + m_editMembers.replace(index, replace); + emit editMembersChanged(); + return true; + } + } +} + +bool QGroupDashboard::containEditMeber(const QJsonObject &aEditMember) +{ + QString email_or_username = aEditMember["email_or_username"].toString(); + for (auto js : m_editMembers) { + auto email_or_username_tmp = js.toObject()["email_or_username"].toString(); + if (qUtils::strCompare(email_or_username, email_or_username_tmp)) { + return true; + } + } + return false; +} + +bool QGroupDashboard::RequestConfirmationCodeEditMembers() +{ + QJsonObject data; + data["nonce"] = Draco::instance()->randomNonce(); + data["body"] = bodyEditMembers(); + servicesTagPtr()->setConfirmCodeNonceBody(data); + QString errormsg; + QJsonObject output; + bool ret = Draco::instance()->RequestConfirmationCode("EDIT_GROUP_MEMBERS", data, output, errormsg); + if (ret) { + QString code_id = output["code_id"].toString(); + servicesTagPtr()->setCode_id(code_id); + } + return ret; +} + +QJsonObject QGroupDashboard::bodyEditMembers() +{ + QJsonArray arrays; + for (auto js : m_editMembers) { + auto member = js.toObject(); + QJsonObject newMember; + newMember["email_or_username"] = member["email_or_username"]; + newMember["role"] = member["role"]; + newMember["permissions"] = member["permissions"]; + arrays.append(newMember); + } + QJsonObject requestBody; + requestBody["members"] = arrays; + return requestBody; +} diff --git a/Models/Premiums/QGroupDashboard.h b/Models/Premiums/QGroupDashboard.h index 1300be77..fb4b3ac0 100644 --- a/Models/Premiums/QGroupDashboard.h +++ b/Models/Premiums/QGroupDashboard.h @@ -114,6 +114,7 @@ class QGroupDashboard : public QBasePremium Q_PROPERTY(int inheritanceCount READ inheritanceCount NOTIFY inheritanceCountChanged) Q_PROPERTY(QString historyPeriodId READ historyPeriodId NOTIFY historyPeriodIdChanged) Q_PROPERTY(bool groupChatExisted READ groupChatExisted NOTIFY groupChatExistedChanged) + Q_PROPERTY(QVariantList editMembers READ editMembers NOTIFY editMembersChanged) public: QGroupDashboard(const QString& wallet_id); @@ -211,6 +212,16 @@ class QGroupDashboard : public QBasePremium bool groupChatExisted(); void setGroupChatExisted(bool existed); + bool EditGroupMembers(); + bool CalculateRequireSignaturesForEditingMembers(); + QVariantList editMembers() const; + void initMembers(); + bool addMember(const QJsonObject &aEditMember); + bool removeMember(const QJsonObject &aEditMember); + bool editMembers(const QJsonObject &aEditMember, int index); + bool containEditMeber(const QJsonObject &aEditMember); + bool RequestConfirmationCodeEditMembers(); + QJsonObject bodyEditMembers(); public slots: bool requestStartKeyReplacement(const QString &tag); void requestHealthCheck(const QString &xfp); @@ -220,6 +231,7 @@ public slots: void byzantineRoomDeleted(QString room_id, QString group_id); void requestShowLetAddYourKeys(); + bool isDowngrade(QString email_or_username, QString roleNew); private: bool deviceExport(const QStringList tags, nunchuk::SignerType type); bool xfpExport(const QString xfp); @@ -235,6 +247,8 @@ public slots: void historyPeriodIdChanged(); void groupChatExistedChanged(); + void editMembersChanged(); + void editMembersSuccessChanged(); private: QJsonObject m_groupInfo {}; QJsonObject m_alertInfo {}; @@ -255,5 +269,6 @@ public slots: int m_inheritanceCount {0}; QString mHistoryPeriodId {}; bool m_groupChatExisted {false}; + QJsonArray m_editMembers; }; #endif // QGROUPDASHBOARD_H diff --git a/Models/Premiums/QGroupWalletHealthCheck.cpp b/Models/Premiums/QGroupWalletHealthCheck.cpp index 264f07c3..0d7e44e6 100644 --- a/Models/Premiums/QGroupWalletHealthCheck.cpp +++ b/Models/Premiums/QGroupWalletHealthCheck.cpp @@ -317,6 +317,11 @@ bool QGroupWalletHealthCheck::SkipKeyHealthReminder() ret = Byzantine::instance()->SkipKeyHealthReminder(dashboard->groupId(), wallet_id(), xfp, output, errormsg); } DBG_INFO << ret << output; + if (ret) { + if (auto dash = dashBoardPtr()) { + dash->GetAlertsInfo(); + } + } return ret; } return false; @@ -343,7 +348,18 @@ bool QGroupWalletHealthCheck::CancelHealthCheckPending() QVariantList QGroupWalletHealthCheck::healthStatuses() const { - return m_healthStatuses.toVariantList(); + if (qUtils::strCompare(dashBoardPtr()->myRole(), "FACILITATOR_ADMIN")) { + return m_healthStatuses.toVariantList(); + } else { + QJsonArray list; + for (auto js : m_healthStatuses) { + auto key = js.toObject()["keyinfo"].toObject(); + if (key["ourAccount"].toBool()) { + list.append(js); + } + } + return list.toVariantList(); + } } QVariant QGroupWalletHealthCheck::aKeyStatus() const diff --git a/Models/Premiums/QGroupWallets.cpp b/Models/Premiums/QGroupWallets.cpp index faa40b47..9f485fc9 100644 --- a/Models/Premiums/QGroupWallets.cpp +++ b/Models/Premiums/QGroupWallets.cpp @@ -397,23 +397,13 @@ void QGroupWallets::reset() bool QGroupWallets::AddOrUpdateAKeyToDraftWallet() { - bool ret = QAssistedDraftWallets::AddOrUpdateAKeyToDraftWallet(); - if (ret && mDashboard) { - mDashboard->GetAlertsInfo(); - mDashboard->GetHealthCheckInfo(); - } - return ret; + return QAssistedDraftWallets::AddOrUpdateAKeyToDraftWallet(); } bool QGroupWallets::requestKeyReplacement(QSingleSignerPtr signer) { - bool ret = QAssistedDraftWallets::requestKeyReplacement(signer); - if (ret && mDashboard) { - mDashboard->GetAlertsInfo(); - mDashboard->GetHealthCheckInfo(); - } - return ret; + return QAssistedDraftWallets::requestKeyReplacement(signer); } @@ -459,6 +449,8 @@ void QGroupWallets::findPermissionAccount() currentMember = new_role == "KEYHOLDER" ? dash->myInfo() : currentMember; } else if (new_role == "KEYHOLDER_LIMITED" || cur_role == "KEYHOLDER_LIMITED") { currentMember = new_role == "KEYHOLDER_LIMITED" ? dash->myInfo() : currentMember; + } else if (new_role == "FACILITATOR_ADMIN" || cur_role == "FACILITATOR_ADMIN") { + currentMember = new_role == "FACILITATOR_ADMIN" ? dash->myInfo() : currentMember; } else if (new_role == "OBSERVER" || cur_role == "OBSERVER") { currentMember = new_role == "OBSERVER" ? dash->myInfo() : currentMember; } else if (new_role == "CUSTOMIZE" || cur_role == "CUSTOMIZE") { diff --git a/Models/Premiums/QKeyRecovery.cpp b/Models/Premiums/QKeyRecovery.cpp index fccc8546..c6b9056a 100644 --- a/Models/Premiums/QKeyRecovery.cpp +++ b/Models/Premiums/QKeyRecovery.cpp @@ -347,7 +347,7 @@ bool QKeyRecovery::UpdateSecurityQuestions() output, errormsg); if (ret) { - UpdateRequiredQuestion(); + AutomaticGenerateSecurityQuestions(); } return ret; } diff --git a/Models/Premiums/QWalletManagement.cpp b/Models/Premiums/QWalletManagement.cpp index ad916527..4c5e0c4f 100644 --- a/Models/Premiums/QWalletManagement.cpp +++ b/Models/Premiums/QWalletManagement.cpp @@ -258,7 +258,11 @@ void QWalletManagement::GetListWallet(int mode) else if (status == "DELETED" && bridge::nunchukHasWallet(wallet_id)){ QWarningMessage msgwarning; bridge::nunchukDeleteWallet(wallet_id, msgwarning); - AppSetting::instance()->deleteWalletCached(wallet_id); + if((int)EWARNING::WarningType::NONE_MSG == msgwarning.type()){ + AppModel::instance()->removeWallet(wallet_id); + AppModel::instance()->setWalletListCurrentIndex(0); + AppSetting::instance()->deleteWalletCached(wallet_id); + } } else{} } diff --git a/Models/Premiums/QWalletServicesTag.cpp b/Models/Premiums/QWalletServicesTag.cpp index 82c7fa52..4ae2b670 100644 --- a/Models/Premiums/QWalletServicesTag.cpp +++ b/Models/Premiums/QWalletServicesTag.cpp @@ -80,6 +80,11 @@ bool QWalletServicesTag::requestReplaceKeysVerifyPassword(const QString &passwor return requestVerifyPassword(password,(int)TARGET_ACTION::REPLACE_KEYS); } +bool QWalletServicesTag::requestEditMemberVerifyPassword(const QString &password) +{ + return requestVerifyPassword(password,(int)TARGET_ACTION::EDIT_GROUP_MEMBERS); +} + bool QWalletServicesTag::RequestConfirmationCodeEmergencyLockdown() { QWalletPtr w = ServiceSetting::instance()->walletInfoPtr(); @@ -105,7 +110,7 @@ bool QWalletServicesTag::RequestConfirmationCodeEmergencyLockdown() bool QWalletServicesTag::verifyConfirmationCode(const QString &code) { - DBG_INFO << code; + DBG_INFO << "id: " << m_code_id << "code: " << code; QString errormsg; QJsonObject output; bool ret = Draco::instance()->VerifyConfirmationCode(m_code_id, code, output, errormsg); @@ -772,7 +777,7 @@ void QWalletServicesTag::setListPolicy() if (!server->hasServerKey()) continue; } if (auto dash = w->dashboard()) { - auto hasPermission = dash->role() == "KEYHOLDER" || dash->role() == "MASTER" || dash->role() == "ADMIN"; + auto hasPermission = dash->role() == "KEYHOLDER" || dash->role() == "MASTER" || dash->role() == "ADMIN" || dash->role() == "FACILITATOR_ADMIN"; if (hasPermission) { setuped << wallet_id; } diff --git a/Models/Premiums/QWalletServicesTag.h b/Models/Premiums/QWalletServicesTag.h index 8e8201be..60795ddd 100644 --- a/Models/Premiums/QWalletServicesTag.h +++ b/Models/Premiums/QWalletServicesTag.h @@ -88,6 +88,7 @@ class QWalletServicesTag : public QSwitchAPI bool requestDeleteWalletVerifyPassword(const QString &password); bool requestChangeEmailVerifyPassword(const QString &password); bool requestReplaceKeysVerifyPassword(const QString &password); + bool requestEditMemberVerifyPassword(const QString &password); Q_INVOKABLE bool verifyConfirmationCode(const QString &code); QVariantList securityQuestions(); diff --git a/Models/ServiceSetting.h b/Models/ServiceSetting.h index 2de7a9db..02ff5f8b 100644 --- a/Models/ServiceSetting.h +++ b/Models/ServiceSetting.h @@ -13,7 +13,7 @@ class ServiceSetting : public QObject Q_OBJECT Q_PROPERTY(int optionIndex READ optionIndex WRITE setOptionIndex NOTIFY optionIndexChanged) Q_PROPERTY(int claimInheritanceFlow READ claimInheritanceFlow WRITE setClaimInheritanceFlow NOTIFY claimInheritanceFlowChanged) - Q_PROPERTY(QVariant servicesTag READ servicesTag CONSTANT) + Q_PROPERTY(QVariant servicesTag READ servicesTag NOTIFY walletInfoChanged) Q_PROPERTY(Wallet* walletInfo READ walletInfo NOTIFY walletInfoChanged) public: diff --git a/Models/TransactionModel.cpp b/Models/TransactionModel.cpp index 16c43217..f5f93f08 100644 --- a/Models/TransactionModel.cpp +++ b/Models/TransactionModel.cpp @@ -225,8 +225,12 @@ QString Transaction::memo() const { void Transaction::setMemo(const QString &memo) { - m_transaction.set_memo(memo.toStdString()); - emit memoChanged(); + DBG_INFO << memo; + if(!qUtils::strCompare(memo, QString::fromStdString(m_transaction.get_memo()))){ + m_transaction.set_memo(memo.toStdString()); + bridge::nunchukUpdateTransactionMemo(walletId(), txid(), memo); + emit memoChanged(); + } } int Transaction::status() const { @@ -935,7 +939,7 @@ void TransactionListModel::addTransaction(const QTransactionPtr &d){ void TransactionListModel::updateTransactionMemo(const QString &tx_id, const QString &memo) { for (int i = 0; i < m_data.count(); i++) { - if(m_data.at(i) && (0 == QString::compare(tx_id, m_data.at(i).data()->txid(), Qt::CaseInsensitive))){ + if(m_data.at(i) && qUtils::strCompare(tx_id, m_data.at(i).data()->txid())){ m_data.at(i)->setMemo(memo); emit dataChanged(index(i),index(i)); } @@ -947,7 +951,7 @@ void TransactionListModel::updateTransaction(const QString &tx_id, const QTransa if(tx){ bool existed = false; for (int i = 0; i < m_data.count(); i++) { - if(m_data.at(i) && (0 == QString::compare(tx_id, m_data.at(i).data()->txid(), Qt::CaseInsensitive))){ + if(m_data.at(i) && qUtils::strCompare(tx_id, m_data.at(i).data()->txid())){ m_data.at(i)->setNunchukTransaction(tx.data()->nunchukTransaction()); emit dataChanged(index(i),index(i)); existed = true; diff --git a/Models/WalletModel.cpp b/Models/WalletModel.cpp index 63ae67ce..72be4431 100644 --- a/Models/WalletModel.cpp +++ b/Models/WalletModel.cpp @@ -788,7 +788,7 @@ QVariantList Wallet::ownerMembers() const QJsonObject it = member.toObject(); QJsonObject user = it["user"].toObject(); QString role = it["role"].toString(); - if (role == "KEYHOLDER" || role == "MASTER" || role == "ADMIN") { + if (role == "KEYHOLDER" || role == "MASTER" || role == "ADMIN" || role == "FACILITATOR_ADMIN") { if (!user.isEmpty()) { arrs.append(member); } @@ -960,24 +960,23 @@ void Wallet::GetUserTxs() if(isUserWallet()){ QString wallet_id = id(); QJsonObject data = Draco::instance()->assistedWalletGetListTx(wallet_id); - QJsonArray transactions = data.value("transactions").toArray(); + QJsonArray transactions = data["transactions"].toArray(); for(QJsonValue js_value : transactions){ QJsonObject transaction = js_value.toObject(); QString status = transaction.value("status").toString(); QString psbt = transaction.value("psbt").toString(); - QString note = transaction.value("note").toString(); - QString memo = note; + QString memo = transaction.value("note").toString();; QString type = transaction.value("type").toString(); QString transaction_id = transaction.value("transaction_id").toString(); if (status == "READY_TO_BROADCAST" || status == "PENDING_SIGNATURES" ) { QWarningMessage _msg; QTransactionPtr tran = bridge::nunchukImportPsbt(wallet_id, psbt, _msg); if(tran && (int)EWARNING::WarningType::NONE_MSG == _msg.type()){ - if(transactionHistory()){ - QTransactionPtr tx = transactionHistory()->getTransactionByTxid(transaction_id); - if(tx && 0 != QString::compare(memo, tx.data()->memo(), Qt::CaseInsensitive)){ - bridge::nunchukUpdateTransactionMemo(wallet_id, transaction_id, memo); - } + if(transactionHistory() && transactionHistory()->contains(transaction_id)){ + transactionHistory()->updateTransactionMemo(transaction_id, memo); + } + else { + bridge::nunchukUpdateTransactionMemo(wallet_id, transaction_id, memo); } long int broadcast_time_milis = static_cast(transaction.value("broadcast_time_milis").toDouble()); // honey badger feature: schedule broadcast @@ -990,6 +989,7 @@ void Wallet::GetUserTxs() } //Remove cancelled txs GetUserCancelledTxs(); + GetUserTxNotes(); } } @@ -1018,6 +1018,43 @@ void Wallet::GetUserCancelledTxs() } } +void Wallet::GetUserTxNotes() +{ + if(isUserWallet()){ + QString wallet_id = id(); + QJsonObject output; + QString errormsg = ""; + bool ret = Draco::instance()->assistedWalletGetTxNotes(wallet_id, output, errormsg); + if(ret && transactionHistory() && output.contains("notes")){ + QJsonArray notes = output["notes"].toArray(); + for (auto i : notes) { + QJsonObject note = i.toObject(); + transactionHistory()->updateTransactionMemo(note["transaction_id"].toString(), note["note"].toString()); + } + } + } +} + +QString Wallet::GetUserTxNote(const QString &txid) +{ + if(isUserWallet()){ + QString wallet_id = id(); + QJsonObject output; + QString errormsg = ""; + bool ret = Draco::instance()->assistedWalletGetTxNotes(wallet_id, output, errormsg); + if(ret && transactionHistory() && output.contains("notes")){ + QJsonArray notes = output["notes"].toArray(); + for (auto i : notes) { + QJsonObject note = i.toObject(); + if(qUtils::strCompare(note["transaction_id"].toString(), txid)){ + return note["note"].toString(); + } + } + } + } + return ""; +} + QTransactionPtr Wallet::SyncUserTxs(const nunchuk::Transaction &tx) { QString wallet_id = id(); @@ -1036,18 +1073,17 @@ QTransactionPtr Wallet::SyncUserTxs(const nunchuk::Transaction &tx) QString reject_msg = transaction.value("reject_msg").toString(); QString note = transaction.value("note").toString(); QString replace_txid = transaction.value("replace_txid").toString(); - long int broadcast_time_milis = static_cast(transaction.value("broadcast_time_milis").toDouble()); // honey badger feature: schedule broadcast long int current_time_stamp_milis = static_cast(std::time(nullptr)) * 1000; - if(type == "SCHEDULED" && broadcast_time_milis > current_time_stamp_milis && broadcast_time_milis / 1000 != tx.get_schedule_time()) { bridge::nunchukUpdateTransactionSchedule(wallet_id, QString::fromStdString(tx.get_txid()), broadcast_time_milis/1000,msg); - } else if (type != "SCHEDULED" && tx.get_schedule_time() != -1) { + } + else if (type != "SCHEDULED" && tx.get_schedule_time() != -1) { bridge::nunchukUpdateTransactionSchedule(wallet_id, QString::fromStdString(tx.get_txid()), -1,msg); } - + else{} if (status == "PENDING_CONFIRMATION" || status == "CONFIRMED" || status == "NETWORK_REJECTED") { msg.resetWarningMessage(); bridge::nunchukImportPsbt(wallet_id, psbt,msg); @@ -1067,8 +1103,22 @@ QTransactionPtr Wallet::SyncUserTxs(const nunchuk::Transaction &tx) } } else{} - return bridge::nunchukGetTransaction(wallet_id, transaction_id); + QTransactionPtr trans = bridge::nunchukGetTransaction(wallet_id, transaction_id); + if(trans){ + if (status == "READY_TO_BROADCAST" || status == "PENDING_SIGNATURES" ) { + trans.data()->setMemo(note); + } + } + return trans; + } + } + else { + QString note = GetUserTxNote(QString::fromStdString(tx.get_txid())); + QTransactionPtr trans = bridge::convertTransaction(tx, wallet_id); + if(trans){ + trans.data()->setMemo(note); } + return trans; } } return bridge::convertTransaction(tx, wallet_id); @@ -1162,27 +1212,18 @@ void Wallet::GetGroupTxs() QJsonObject transaction = i.toObject(); QString status = transaction.value("status").toString(); QString psbt = transaction.value("psbt").toString(); - QString note = transaction.value("note").toString(); - QString memo = note; + QString memo = transaction.value("note").toString();; QString type = transaction.value("type").toString(); QString transaction_id = transaction.value("transaction_id").toString(); if (status == "READY_TO_BROADCAST" || status == "PENDING_SIGNATURES" ) { QWarningMessage warningmsg; QTransactionPtr tran = bridge::nunchukImportPsbt(wallet_id, psbt, warningmsg); if(tran && (int)EWARNING::WarningType::NONE_MSG == warningmsg.type()){ - DBG_INFO << ">>>>>>>>>>>" << name() << transaction_id << status << memo << tran.data()->txid(); - QString old_memo = ""; - if(transactionHistory()){ - QTransactionPtr tx = transactionHistory()->getTransactionByTxid(transaction_id); - if(tx){ - old_memo = tx.data()->memo(); - } - else { - old_memo = tran.data()->memo(); - } - if(!qUtils::strCompare(memo, old_memo)){ - bridge::nunchukUpdateTransactionMemo(wallet_id, transaction_id, memo); - } + if(transactionHistory() && transactionHistory()->contains(transaction_id)){ + transactionHistory()->updateTransactionMemo(transaction_id, memo); + } + else { + bridge::nunchukUpdateTransactionMemo(wallet_id, transaction_id, memo); } long int broadcast_time_milis = static_cast(transaction.value("broadcast_time_milis").toDouble()); // honey badger feature: schedule broadcast @@ -1198,6 +1239,7 @@ void Wallet::GetGroupTxs() } //Remove cancelled txs GetGroupCancelledTxs(); + GetGroupTxNotes(); } } @@ -1234,6 +1276,44 @@ void Wallet::GetGroupCancelledTxs() } } +void Wallet::GetGroupTxNotes() +{ + if(isGroupWallet()){ + QString wallet_id = id(); + QString group_id = groupId(); + QJsonObject output; + QString errormsg = ""; + bool ret = Byzantine::instance()->GetAllTransactionNotes(group_id, wallet_id, output, errormsg); + if(ret && transactionHistory() && output.contains("notes")){ + QJsonArray notes = output["notes"].toArray(); + for (auto i : notes) { + QJsonObject note = i.toObject(); + transactionHistory()->updateTransactionMemo(note["transaction_id"].toString(), note["note"].toString()); + } + } + } +} + +QString Wallet::GetGroupTxNote(const QString &txid) { + if(isGroupWallet()){ + QString wallet_id = id(); + QString group_id = groupId(); + QJsonObject output; + QString errormsg = ""; + bool ret = Byzantine::instance()->GetAllTransactionNotes(group_id, wallet_id, output, errormsg); + if(ret && transactionHistory() && output.contains("notes")){ + QJsonArray notes = output["notes"].toArray(); + for (auto i : notes) { + QJsonObject note = i.toObject(); + if(qUtils::strCompare(note["transaction_id"].toString(), txid)){ + return note["note"].toString(); + } + } + } + } + return ""; +} + QTransactionPtr Wallet::SyncGroupTxs(const nunchuk::Transaction &tx) { QString wallet_id = id(); @@ -1254,16 +1334,17 @@ QTransactionPtr Wallet::SyncGroupTxs(const nunchuk::Transaction &tx) QString hex = transaction.value("hex").toString(); QString reject_msg = transaction.value("reject_msg").toString(); QString note = transaction.value("note").toString(); - long int broadcast_time_milis = static_cast(transaction.value("broadcast_time_milis").toDouble()); // honey badger feature: schedule broadcast long int current_time_stamp_milis = static_cast(std::time(nullptr)) * 1000; if(type == "SCHEDULED" && broadcast_time_milis > current_time_stamp_milis && broadcast_time_milis / 1000 != tx.get_schedule_time()) { bridge::nunchukUpdateTransactionSchedule(wallet_id, QString::fromStdString(tx.get_txid()), broadcast_time_milis/1000,msg); - } else if (type != "SCHEDULED" && tx.get_schedule_time() != -1) { + } + else if (type != "SCHEDULED" && tx.get_schedule_time() != -1) { bridge::nunchukUpdateTransactionSchedule(wallet_id, QString::fromStdString(tx.get_txid()), -1,msg); } + else{} if (status == "PENDING_CONFIRMATION" || status == "CONFIRMED" || status == "NETWORK_REJECTED") { bridge::nunchukImportPsbt(wallet_id, psbt, msg); @@ -1283,8 +1364,22 @@ QTransactionPtr Wallet::SyncGroupTxs(const nunchuk::Transaction &tx) } } else{} - return bridge::nunchukGetTransaction(wallet_id, transaction_id); + QTransactionPtr trans = bridge::nunchukGetTransaction(wallet_id, transaction_id); + if(trans ){ + if (status == "READY_TO_BROADCAST" || status == "PENDING_SIGNATURES" ) { + trans.data()->setMemo(note); + } + } + return trans; + } + } + else { + QString note = GetGroupTxNote(QString::fromStdString(tx.get_txid())); + QTransactionPtr trans = bridge::convertTransaction(tx, wallet_id); + if(trans){ + trans.data()->setMemo(note); } + return trans; } } return bridge::convertTransaction(tx, wallet_id); @@ -1598,8 +1693,6 @@ QString Wallet::slug() const QString Wallet::myRole() const { - // return "FACILITATOR_ADMIN"; //FIXME TBD - QString role = ""; if(dashboard()){ role = dashboard().data()->myRole(); diff --git a/Models/WalletModel.h b/Models/WalletModel.h index 10f76c63..1656c37b 100644 --- a/Models/WalletModel.h +++ b/Models/WalletModel.h @@ -89,6 +89,9 @@ class Wallet : public QObject, public Slugs, public ReplaceKeyFreeUser Q_PROPERTY(QString replaceFlow READ replaceFlow NOTIFY replaceFlowChanged) Q_PROPERTY(DeviceListModel* deviceList READ deviceList NOTIFY deviceListChanged) Q_PROPERTY(QString deviceType READ deviceType NOTIFY deviceTypeChanged) + Q_PROPERTY(bool tranReplace READ tranReplace NOTIFY tranReplaceChanged) + Q_PROPERTY(bool isHoneyBadger READ isHoneyBadger CONSTANT) + Q_PROPERTY(bool isIronHand READ isIronHand CONSTANT) public: Wallet(); Wallet(const nunchuk::Wallet &w); @@ -245,6 +248,8 @@ class Wallet : public QObject, public Slugs, public ReplaceKeyFreeUser //User wallet void GetUserTxs(); void GetUserCancelledTxs(); + void GetUserTxNotes(); + QString GetUserTxNote(const QString &txid); QTransactionPtr SyncUserTxs(const nunchuk::Transaction &tx); void UpdateUserTxs(const QString &txid, const QString &memo); void CancelUserTxs(const QString &txid); @@ -255,6 +260,8 @@ class Wallet : public QObject, public Slugs, public ReplaceKeyFreeUser //Group wallet void GetGroupTxs(); void GetGroupCancelledTxs(); + void GetGroupTxNotes(); + QString GetGroupTxNote(const QString &txid); QTransactionPtr SyncGroupTxs(const nunchuk::Transaction &tx); void UpdateGroupTxs(const QString &txid, const QString &memo); void CancelGroupTxs(const QString &txid); @@ -334,6 +341,7 @@ class Wallet : public QObject, public Slugs, public ReplaceKeyFreeUser void replaceFlowChanged() override; void deviceListChanged() override; void deviceTypeChanged() override; + void tranReplaceChanged() override; void rollOverProcess(const QString& address); public slots: void slotSyncCollabKeyname(QList users); diff --git a/Models/Worker.cpp b/Models/Worker.cpp index 8f5e4a53..90ae31d0 100644 --- a/Models/Worker.cpp +++ b/Models/Worker.cpp @@ -473,9 +473,7 @@ void Worker::slotStartGetTransactionHistory(const QString wallet_id) void Worker::slotStartGetEstimatedFee() { - if(AppSetting::instance()->primaryServer() == (int)AppSetting::Chain::MAIN){ - Draco::instance()->feeRates(); - } + Draco::instance()->feeRates(); } void Worker::slotStartSendPinToDevice(const int state_id, const int device_idx, const QString &pin) diff --git a/Qml/Components/LeftPannel/QServiceLeftPannel.qml b/Qml/Components/LeftPannel/QServiceLeftPannel.qml index 4c9bac90..847a78f0 100644 --- a/Qml/Components/LeftPannel/QServiceLeftPannel.qml +++ b/Qml/Components/LeftPannel/QServiceLeftPannel.qml @@ -29,23 +29,25 @@ Item { property bool hasGroupPending: highestPermissionAccount.hasGroupPending property bool isObserver: highestPermissionAccount.role === "OBSERVER" property bool hasWalletLockdown: ServiceSetting.servicesTag.listLockdown.length > 0 + property bool isFacilitatorAdmin: highestPermissionAccount.role === "FACILITATOR_ADMIN" + Loader { anchors.fill: parent sourceComponent: { var user = ClientController.user if (user.isMultiSubscriptions) { - if (hasGroupWallet) { return isObserver ? b_observer_subscriber : b_subscriber } + if (hasGroupWallet) { return isFacilitatorAdmin ? b_facilitator_admin_subscriber : isObserver ? b_observer_subscriber : b_subscriber } else { return b_empty_state } } else if (user.isHoneyBadgerUser) { return hb_subscriber } else if (user.isIronHandUser) { return ih_subscriber } else if (user.isByzantineUser || user.isFinneyUser) { - if (hasGroupWallet) { return isObserver ? b_observer_subscriber : b_subscriber } + if (hasGroupWallet) { return isFacilitatorAdmin ? b_facilitator_admin_subscriber : isObserver ? b_observer_subscriber : b_subscriber } else { return b_empty_state } } else { if (!hasGroupWallet && hasGroupPending) { return b_empty_state } - if (hasGroupWallet) { return isObserver ? b_observer_subscriber : b_subscriber } + if (hasGroupWallet) { return isFacilitatorAdmin ? b_facilitator_admin_subscriber : isObserver ? b_observer_subscriber : b_subscriber } else { return notSubscriber } } } @@ -70,6 +72,10 @@ Item { id: b_observer_subscriber B.QServiceObserverIterationLeftPannel { } } + Component { + id: b_facilitator_admin_subscriber + B.QServiceFacilitatorAdminSubscriberLeftPannel { } + } Component { id: b_empty_state B.QServiceEmptyStateLeftPannel { } diff --git a/Qml/Components/LeftPannel/Service/Byzantine/QServiceFacilitatorAdminSubscriberLeftPannel.qml b/Qml/Components/LeftPannel/Service/Byzantine/QServiceFacilitatorAdminSubscriberLeftPannel.qml new file mode 100644 index 00000000..1f606e6d --- /dev/null +++ b/Qml/Components/LeftPannel/Service/Byzantine/QServiceFacilitatorAdminSubscriberLeftPannel.qml @@ -0,0 +1,117 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.12 +import QtQuick.Controls 2.0 +import QtGraphicalEffects 1.0 +import Qt.labs.platform 1.1 +import HMIEVENTS 1.0 +import NUNCHUCKTYPE 1.0 +import QRCodeItem 1.0 +import DataPool 1.0 +import DRACO_CODE 1.0 +import EWARNING 1.0 +import "../../../origins" +import "../../../customizes" +import "../../../customizes/Chats" +import "../../../customizes/Texts" +import "../../../customizes/Buttons" +import "../../../../../localization/STR_QML.js" as STR + +Item { + id: leftpanel1 + readonly property var option_map: [ + {screen:_EMERGENCY, visible: true, enable:false, title:STR.STR_QML_702, icon: "qrc:/Images/Images/emergency-light.svg" ,action: function(){ return true; } }, + {screen:_KEY_RECOVERY, visible: true, enable:true, title:STR.STR_QML_698, icon: "" ,action: function(){ return true;} }, + {screen:_INHERITANCE_PLANING, visible: true, enable:false, title:STR.STR_QML_736, icon: "qrc:/Images/Images/inheritance-light.svg" ,action: function(){ return true;} }, + {screen:_CLAIM_AN_INHERITANCE, visible: true, enable:true, title:STR.STR_QML_737, icon: "" ,action: function(){ ServiceSetting.servicesTag.clearClaimAnInheritance(); return true; }}, + ] + property var itemOption: option_map.find(function(e) { if (e.screen === ServiceSetting.optionIndex) return true; else return false } ) + Component.onCompleted: { + ServiceSetting.optionIndex = 2 + var access = option_map.find(function(e) { if (e.screen === ServiceSetting.optionIndex) return true; else return false } ) + if (access) { + var isOK = access.visible && access.enable + if (!isOK) { + var index = option_map.find(function(e) { if (e.visible && e.enable) return true; else return false } ).screen + ServiceSetting.optionIndex = index + } + } + } + + Column { + anchors.fill: parent + anchors.topMargin: 24 + spacing: 12 + Column { + spacing: 0 + Repeater { + model: option_map.length + Rectangle { + id: _item + width: leftpanel1.width + height: 48 + visible: option_map[index].visible + enabled: option_map[index].enable + color: itemOption.screen === option_map[index].screen ? Qt.rgba(255, 255, 255, 0.3) : itemSetingMouse.containsMouse ? Qt.rgba(255, 255, 255, 0.1) : "transparent" + Row { + spacing: 8 + anchors.fill: parent + Item { + width: 8; + height: parent.height + Rectangle { + width: 4 + height: parent.height + color: itemOption.screen === option_map[index].screen ? "#F6D65D" : "transparent" + anchors.verticalCenter: parent.verticalCenter + } + } + QIcon { + id:_icon + iconSize: 24 + anchors.verticalCenter: parent.verticalCenter + source: option_map[index].icon + visible: source != "" + } + QText { + anchors.verticalCenter: parent.verticalCenter + text: option_map[index].title + color: "#FFFFFF" + font.family: "Lato" + font.pixelSize: 16 + font.weight: _icon.visible ? Font.DemiBold : Font.Normal + } + } + MouseArea { + id: itemSetingMouse + anchors.fill: parent + hoverEnabled: true + onClicked: { + var _item = option_map[index] + if (_item.action()) { + ServiceSetting.optionIndex = _item.screen + } + } + } + } + } + } + } +} diff --git a/Qml/Components/RightPannel/Service/Byzantine/QServiceSubscriberRightPannel.qml b/Qml/Components/RightPannel/Service/Byzantine/QServiceSubscriberRightPannel.qml index 24620c41..1df59dc4 100644 --- a/Qml/Components/RightPannel/Service/Byzantine/QServiceSubscriberRightPannel.qml +++ b/Qml/Components/RightPannel/Service/Byzantine/QServiceSubscriberRightPannel.qml @@ -19,6 +19,8 @@ **************************************************************************/ import QtQuick 2.12 import "../Common" +import "../Byzantine" as B +import "../HoneyBadger-IronHand" as HBIR Item { readonly property var option_map: [ @@ -26,16 +28,30 @@ Item { {screen:_KEY_RECOVERY, screen_component: _key_recovery }, {screen:_VIEW_INHERITANCE_PLANING, screen_component: _view_inheritance_planing }, {screen:_CLAIM_AN_INHERITANCE, screen_component: _claim_an_inheritance }, - {screen:_PLATFORM_KEY_CO_SIGNING_POLICIES, screen_component: _platform_key_co_signing_policies }, + {screen:_PLATFORM_KEY_CO_SIGNING_POLICIES, screen_component: _platform_key_co_signing_policies_B }, {screen:_GET_ADDITIONAL_WALLETS, screen_component: "" }, {screen:_REPLACE_KEY_IN_AN_ASSISTED_WALLET, screen_component: "" }, {screen:_ORDER_NEW_HARDWARE, screen_component: "" }, {screen:_MANAGE_SUBSCRIPTION, screen_component: "" }, ] property var itemOption: option_map.find(function(e) {if (e.screen === ServiceSetting.optionIndex) return true; else return false}) + + function platform_key_co_signing_policies() { + if (ServiceSetting.walletInfo === null) { + return _platform_key_co_signing_policies_B + } else { + return (ServiceSetting.walletInfo.isHoneyBadger || ServiceSetting.walletInfo.isIronHand) ? _platform_key_co_signing_policies_HBIR : _platform_key_co_signing_policies_B + } + } + Loader { anchors.fill: parent - sourceComponent: itemOption.screen_component + sourceComponent: if(ServiceSetting.optionIndex !== _PLATFORM_KEY_CO_SIGNING_POLICIES) { + itemOption.screen_component + } + else { + platform_key_co_signing_policies() + } } Component { id: _claim_an_inheritance @@ -58,8 +74,13 @@ Item { } } Component { - id: _platform_key_co_signing_policies - QServicePlatformKeyCoSigningPolicies { + id: _platform_key_co_signing_policies_B + B.QServicePlatformKeyCoSigningPolicies { + } + } + Component { + id: _platform_key_co_signing_policies_HBIR + HBIR.QServicePlatformKeyCoSigningPolicies { } } } diff --git a/Qml/Components/RightPannel/Service/HoneyBadger-IronHand/QServicePlatformKeyCoSigningPoliciesDetails.qml b/Qml/Components/RightPannel/Service/HoneyBadger-IronHand/QServicePlatformKeyCoSigningPoliciesDetails.qml index c2a533a9..3b79e5a7 100644 --- a/Qml/Components/RightPannel/Service/HoneyBadger-IronHand/QServicePlatformKeyCoSigningPoliciesDetails.qml +++ b/Qml/Components/RightPannel/Service/HoneyBadger-IronHand/QServicePlatformKeyCoSigningPoliciesDetails.qml @@ -82,7 +82,7 @@ Item { } Column { id: honey_badger - visible: ClientController.user.isHoneyBadgerUser + visible: ServiceSetting.walletInfo.isHoneyBadger spacing: 16 Item { width: 627 diff --git a/Qml/Components/customizes/Members/QMemberRole.qml b/Qml/Components/customizes/Members/QMemberRole.qml index 2310f380..9b537f26 100644 --- a/Qml/Components/customizes/Members/QMemberRole.qml +++ b/Qml/Components/customizes/Members/QMemberRole.qml @@ -28,6 +28,7 @@ QBadge { "ADMIN": STR.STR_QML_950, "KEYHOLDER": STR.STR_QML_951, "KEYHOLDER_LIMITED": STR.STR_QML_952, + "FACILITATOR_ADMIN": STR.STR_QML_1396, "OBSERVER": STR.STR_QML_953, "CUSTOMIZE": STR.STR_QML_849, } diff --git a/Qml/Components/customizes/QAreaWalletDetail.qml b/Qml/Components/customizes/QAreaWalletDetail.qml index 09788d61..71acbcbf 100644 --- a/Qml/Components/customizes/QAreaWalletDetail.qml +++ b/Qml/Components/customizes/QAreaWalletDetail.qml @@ -30,8 +30,8 @@ Item { property bool isHotWallet: false property bool isLocked: false property bool isReplaced: false - property bool isFacilitatorAdmin: false property real ratio: 0.55 + property string myRole: AppModel.walletInfo.myRole Item { id: area_wldetail anchors.fill: parent @@ -46,13 +46,6 @@ Item { GradientStop { position: 0.0; color: isHotWallet ? "#A66800" : (isReplaced || isLocked) ? "#595959" : (isAssisted ? "#2F766D" : "#2F466C") } GradientStop { position: 1.0; color: isHotWallet ? "#A66800" : (isReplaced || isLocked) ? "#595959" : (isAssisted ? "#1C4A21" : "#031F2B") } } - Rectangle { - width: parent.width * (1.0 - ratio) - height: parent.height - anchors.right: parent.right - color: "#F5F5F5" - visible: !isFacilitatorAdmin - } } } Rectangle { @@ -76,4 +69,18 @@ Item { color: "#80000000" source: realBalanceCard } + Rectangle { + width: parent.width * (1.0 - ratio) + height: parent.height + anchors.right: parent.right + color: "#F5F5F5" + visible: (myRole !== "FACILITATOR_ADMIN") + radius: 24 + Rectangle { + width: 24 + height: parent.height + anchors.left: parent.left + color: "#F5F5F5" + } + } } diff --git a/Qml/Components/customizes/QHomeInitialStep1.qml b/Qml/Components/customizes/QHomeInitialStep1.qml index 4e2e3903..c707edf6 100644 --- a/Qml/Components/customizes/QHomeInitialStep1.qml +++ b/Qml/Components/customizes/QHomeInitialStep1.qml @@ -45,7 +45,7 @@ Rectangle { titleSuggest: STR.STR_QML_1251 content: STR.STR_QML_1252 height: 180 - icon:"qrc:/Images/Images/create-hot-wallet.png" + icon:"qrc:/Images/Images/person-add-24px.svg" onBtnClicked: { OnBoarding.state = "hotWallet" QMLHandle.sendEvent(EVT.EVT_ONBOARDING_REQUEST) diff --git a/Qml/Components/customizes/QHomeInitialStep2.qml b/Qml/Components/customizes/QHomeInitialStep2.qml index c6ce19b0..61fc8c4d 100644 --- a/Qml/Components/customizes/QHomeInitialStep2.qml +++ b/Qml/Components/customizes/QHomeInitialStep2.qml @@ -45,7 +45,7 @@ Rectangle { titleSuggest: STR.STR_QML_1251 content: STR.STR_QML_1252 height: 180 - icon:"qrc:/Images/Images/create-hot-wallet.png" + icon:"qrc:/Images/Images/person-add-24px.svg" onBtnClicked: { OnBoarding.state = "hotWallet" QMLHandle.sendEvent(EVT.EVT_ONBOARDING_REQUEST) diff --git a/Qml/Components/customizes/QHomeInitialStep3.qml b/Qml/Components/customizes/QHomeInitialStep3.qml index f42033dd..475e02cc 100644 --- a/Qml/Components/customizes/QHomeInitialStep3.qml +++ b/Qml/Components/customizes/QHomeInitialStep3.qml @@ -97,12 +97,11 @@ Item { isHotWallet: AppModel.walletInfo.needBackup isLocked: AppModel.walletInfo.isLocked isReplaced: AppModel.walletInfo.isReplaced - isFacilitatorAdmin: (myRole === "FACILITATOR_ADMIN") Row{ anchors.fill: parent Item { height: parent.height - width: parent.width * _walletDes.ratio + width: parent.width * (myRole === "FACILITATOR_ADMIN" ? 1 : _walletDes.ratio) QText { id: displayWalletname width: 380 @@ -120,22 +119,36 @@ Item { topMargin: 24 } } - QIconButton{ - id:_more - width: 24 - height: 24 + Row { + spacing: 8 anchors{ right: parent.right rightMargin: 36 top: parent.top topMargin: 30*QAPP_DEVICE_HEIGHT_RATIO } - visible: (myRole !== "OBSERVER") && (myRole !== "FACILITATOR_ADMIN") - icon: "qrc:/Images/Images/OnlineMode/more_horiz_24px.png" - onClicked: { - optionMenu.popup(_more,mouse.x - 250 + 24,24) + QIconButton{ + id: _group + width: 24 + height: 24 + visible: (myRole !== "OBSERVER") && (myRole !== "") + icon: (AppModel.walletInfo.isHoneyBadger || AppModel.walletInfo.isIronHand) ? "qrc:/Images/Images/health-check-light.svg" : "qrc:/Images/Images/groups-dark.svg" + onClicked: { + GroupWallet.dashboardInfo.isShowDashBoard = true + } + } + QIconButton{ + id:_more + width: 24 + height: 24 + visible: (myRole !== "OBSERVER") && (myRole !== "FACILITATOR_ADMIN") + icon: "qrc:/Images/Images/OnlineMode/more_horiz_24px.png" + onClicked: { + optionMenu.popup(_more,mouse.x - 250 + 24,24) + } } } + QText { id: displayDescription text: AppModel.walletInfo.walletDescription @@ -303,9 +316,10 @@ Item { } Row { id: buttongHandles - spacing: parent.width - 204 *2 - 24*2 + spacing: 12 anchors { - horizontalCenter: parent.horizontalCenter + left: parent.left + leftMargin: 24 bottom: parent.bottom bottomMargin: 24*QAPP_DEVICE_HEIGHT_RATIO } diff --git a/Qml/Components/customizes/QHomePendingWallet.qml b/Qml/Components/customizes/QHomePendingWallet.qml index 83d0a446..432c4ead 100644 --- a/Qml/Components/customizes/QHomePendingWallet.qml +++ b/Qml/Components/customizes/QHomePendingWallet.qml @@ -108,7 +108,7 @@ Rectangle { height: 48 bgColor: "#F5F5F5" icon: "qrc:/Images/Images/more-horizontal-dark.svg" - visible: !AppModel.walletInfo.isLocked + visible: !AppModel.walletInfo.isLocked && myRole !== "FACILITATOR_ADMIN" onClicked: { if("PENDING_WALLET" === pendingDashboard.groupStatus){ pendingOptionMenu.popup() @@ -224,6 +224,7 @@ Rectangle { } } Item { + id: alertGroup width: parent.width height: Math.min(224, 24 + 12 + 12 + 88*_alert.count) visible: _alert.count > 0 @@ -308,6 +309,7 @@ Rectangle { } } Item { + id: healthyGroup width: parent.width height: 104 visible: (_healthy.count > 0) @@ -377,9 +379,10 @@ Rectangle { width: parent.width height: 1 color: "#EAEAEA" - visible: (myRole !== "KEYHOLDER_LIMITED") + visible: memberGroup.visible && (alertGroup.visible || healthyGroup.visible) } Column { + id: memberGroup width: parent.width height: childrenRect.height spacing: 12 @@ -387,7 +390,7 @@ Rectangle { Item { width: parent.width height: 24 - visible: dashboardInfo.members.count > 0 + visible: _members.count > 0 Row { anchors.fill: parent spacing: 8 @@ -405,6 +408,21 @@ Rectangle { horizontalAlignment: Text.AlignLeft } } + QTextLink { + id: _edit + width: _edit.paintedWidth + height: 20 + text: STR.STR_QML_849 + visible: (myRole === "MASTER" || myRole === "ADMIN" || myRole === "FACILITATOR_ADMIN") + anchors { + verticalCenter: parent.verticalCenter + right: parent.right + rightMargin: 12 + } + onTextClicked: { + QMLHandle.sendEvent(EVT.EVT_EDIT_MEMBERS_REQUEST) + } + } } QListView { id: _members diff --git a/Qml/Components/customizes/QSendDelegate.qml b/Qml/Components/customizes/QSendDelegate.qml index 4aca578c..62be8551 100644 --- a/Qml/Components/customizes/QSendDelegate.qml +++ b/Qml/Components/customizes/QSendDelegate.qml @@ -53,7 +53,6 @@ Rectangle { signal qrCodeRequest() signal removeItemRequest() signal favoriteRequest() - signal monneyRequest() function setFavorite(fav) { if ((fav.toType === "Address") || (fav.toType === "Wallet")){ @@ -166,7 +165,7 @@ Rectangle { QTextInputBoxTypeB { id: amountInput label: STR.STR_QML_214 - boxWidth: parent.width - 1 + boxWidth: 620 boxHeight: 48 isValid: true validator: (AppSetting.unit === NUNCHUCKTYPE.SATOSHI) ? intvalidator : doubleValidator @@ -201,17 +200,14 @@ Rectangle { source: "qrc:/Images/Images/fav_swapt-24px.png" transformOrigin: Item.Center scale: moneyMouse.pressed ? 0.95 : 1 - visible: false MouseArea { id: moneyMouse property bool onCurrency: false - enabled: false hoverEnabled: true cursorShape: Qt.PointingHandCursor anchors.fill: parent onClicked: { onCurrency = !onCurrency - monneyRequest() } } } diff --git a/Qml/Components/customizes/Signers/QAddRequestKey.qml b/Qml/Components/customizes/Signers/QAddRequestKey.qml index f8c7493a..1d27a1e5 100644 --- a/Qml/Components/customizes/Signers/QAddRequestKey.qml +++ b/Qml/Components/customizes/Signers/QAddRequestKey.qml @@ -33,11 +33,10 @@ import "../../../../localization/STR_QML.js" as STR Item { width: 322 - height: 84 + height: 72 signal tapsignerClicked() signal serkeyClicked() signal hardwareClicked() - property bool ourAccount: modelData.added_by_user_id === ClientController.user.email Loader { id: _source anchors.fill: parent @@ -97,7 +96,7 @@ Item { rightMargin: 12 } width: label.paintedWidth + 2*20 - height: 48 + height: 36 type: eTypeB label.text: STR.STR_QML_941 label.font.pixelSize: 16 @@ -237,7 +236,7 @@ Item { rightMargin: 12 } width: label.paintedWidth + 2*20 - height: 48 + height: 36 type: eTypeB label.text: STR.STR_QML_941 label.font.pixelSize: 16 @@ -375,7 +374,7 @@ Item { rightMargin: 12 } width: label.paintedWidth + 2*20 - height: 48 + height: 36 type: eTypeB label.text: STR.STR_QML_958 label.font.pixelSize: 16 diff --git a/Qml/Components/customizes/Transactions/QCreateTransaction.qml b/Qml/Components/customizes/Transactions/QCreateTransaction.qml index c7312df6..1d1580df 100644 --- a/Qml/Components/customizes/Transactions/QCreateTransaction.qml +++ b/Qml/Components/customizes/Transactions/QCreateTransaction.qml @@ -926,7 +926,7 @@ QOnScreenContent { QTextButton { width: 265 height: 48 - label.text: STR.STR_QML_235 + label.text: AppModel.walletInfo.tranReplace ? STR.STR_QML_784 : STR.STR_QML_235 label.font.pixelSize: 16 label.font.family: "Lato" type: eTypeE diff --git a/Qml/Components/customizes/Transactions/QOnScreenCancelPendingTransaction.qml b/Qml/Components/customizes/Transactions/QOnScreenCancelPendingTransaction.qml index a003156f..c976e7b6 100644 --- a/Qml/Components/customizes/Transactions/QOnScreenCancelPendingTransaction.qml +++ b/Qml/Components/customizes/Transactions/QOnScreenCancelPendingTransaction.qml @@ -76,7 +76,7 @@ QOnScreenContent { QTextButton { width: 254 height: 48 - label.text: STR.STR_QML_235 + label.text: AppModel.walletInfo.tranReplace ? STR.STR_QML_784 : STR.STR_QML_235 label.font.pixelSize: 16 type: eTypeE enabled: contenCenter.contentItem.new_fee !== 0 diff --git a/Qml/Components/customizes/Transactions/QOnScreenCustomizeDestination.qml b/Qml/Components/customizes/Transactions/QOnScreenCustomizeDestination.qml index 5a39cc80..7020b227 100644 --- a/Qml/Components/customizes/Transactions/QOnScreenCustomizeDestination.qml +++ b/Qml/Components/customizes/Transactions/QOnScreenCustomizeDestination.qml @@ -62,7 +62,7 @@ QOnScreenContent { bottomRight: QTextButton { width: 254 height: 48 - label.text: STR.STR_QML_235 + label.text: AppModel.walletInfo.tranReplace ? STR.STR_QML_784 : STR.STR_QML_235 label.font.pixelSize: 16 type: eTypeE onButtonClicked: { diff --git a/Qml/Components/customizes/Wallets/QWalletConfig.qml b/Qml/Components/customizes/Wallets/QWalletConfig.qml index a5aefcf6..a8d13b5c 100644 --- a/Qml/Components/customizes/Wallets/QWalletConfig.qml +++ b/Qml/Components/customizes/Wallets/QWalletConfig.qml @@ -294,9 +294,8 @@ QOnScreenContent { } QContextMenu { id: othersContextMenu - property string myRole: AppModel.walletInfo.groupId !== "" ? AppModel.walletInfo.myRole : "" + property string myRole: AppModel.walletInfo.myRole property bool isAssisted: { - var isAss = AppModel.walletInfo.isAssistedWallet && parseFloat(AppModel.walletInfo.walletBalance) === 0 if (AppModel.walletInfo.isGroupWallet) { return isAss && (AppModel.walletInfo.groupId !== "" ? myRole === "MASTER" : true) @@ -340,7 +339,24 @@ QOnScreenContent { } return ls } - enables: [true, true, true , true, true, true, true] + enables: [ + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + true, + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN") + ] + visibles: [ + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + true, + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN") + ] functions: { var ls = []; ls.push(function(){ QMLHandle.sendEvent(EVT.EVT_WALLET_INFO_UTXOS_REQUEST); }) diff --git a/Qml/Components/customizes/Wallets/QWalletInfo.qml b/Qml/Components/customizes/Wallets/QWalletInfo.qml index 216b267c..5e1c8090 100644 --- a/Qml/Components/customizes/Wallets/QWalletInfo.qml +++ b/Qml/Components/customizes/Wallets/QWalletInfo.qml @@ -526,7 +526,7 @@ QOnScreenContent { } QContextMenu { id: othersContextMenu - property string myRole: AppModel.walletInfo.groupId !== "" ? AppModel.walletInfo.myRole : "" + property string myRole: AppModel.walletInfo.myRole property bool isAssisted: { if (AppModel.walletInfo.isAssistedWallet && parseFloat(AppModel.walletInfo.walletBalance) === 0) { if (AppModel.walletInfo.isAssistedWallet) { @@ -565,7 +565,23 @@ QOnScreenContent { } return ls } - enables: [true, true, true , true, true, true] + enables: [ + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + true, + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN") + ] + visibles: [ + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + true, + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN") + ] + functions: { var ls = []; ls.push(function(){ QMLHandle.sendEvent(EVT.EVT_WALLET_INFO_UTXOS_REQUEST); }) diff --git a/Qml/Components/customizes/Wallets/QWalletKeyDelegate.qml b/Qml/Components/customizes/Wallets/QWalletKeyDelegate.qml index 8e1ece9c..b99bf286 100644 --- a/Qml/Components/customizes/Wallets/QWalletKeyDelegate.qml +++ b/Qml/Components/customizes/Wallets/QWalletKeyDelegate.qml @@ -137,7 +137,7 @@ Item { label.font.pixelSize: 12 type: eTypeB enabled: !AppModel.walletInfo.isLocked - visible: signerType === NUNCHUCKTYPE.SERVER && !AppModel.walletInfo.isReplaced + visible: signerType === NUNCHUCKTYPE.SERVER && !AppModel.walletInfo.isReplaced && myRole !== "FACILITATOR_ADMIN" onButtonClicked: { viewPoliciesRequest() } diff --git a/Qml/Screens/LocalMode/Onboarding/QAddAWallet.qml b/Qml/Screens/LocalMode/Onboarding/QAddAWallet.qml index aeef08a6..5d093b04 100644 --- a/Qml/Screens/LocalMode/Onboarding/QAddAWallet.qml +++ b/Qml/Screens/LocalMode/Onboarding/QAddAWallet.qml @@ -41,57 +41,42 @@ QOnScreenContentTypeA { onCloseClicked: closeTo(NUNCHUCKTYPE.WALLET_TAB) content: Item { Column { - anchors.horizontalCenter: parent.horizontalCenter - width: 500 + anchors.left: parent.left + width: 539 spacing: 24 - QImage { - width: 96 - height: 96 - anchors.horizontalCenter: parent.horizontalCenter - source: "qrc:/Images/Images/wallet.svg" - } QLato { + anchors.left: parent.left width: parent.width text: STR.STR_QML_1250 lineHeightMode: Text.FixedHeight lineHeight: 28 wrapMode: Text.WordWrap - horizontalAlignment: Text.AlignHCenter + horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter } - Column { - width: 500 - spacing: 16 - QTextButton { - width: 343 - height: 48 - label.text: STR.STR_QML_1262 - label.font.pixelSize: 16 - type: eTypeE - anchors.horizontalCenter: parent.horizontalCenter - onButtonClicked: { - var _input = { - type: "create-new-wallet" - } - QMLHandle.sendEvent(EVT.EVT_ONBOARDING_ACTION_REQUEST, _input) + QCreateHotWallet { + width: 539 + height: 92 + anchors.left: parent.left + color: "#FFFFFF" + title: STR.STR_QML_1262 + description: STR.STR_QML_1405 + desImg: "qrc:/Images/Images/wallet.svg" + onItemclicked: { + var _input = { + type: "create-new-wallet" } - } - QLato { - anchors.horizontalCenter: parent.horizontalCenter - width: parent.width - text: "Or" - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter + QMLHandle.sendEvent(EVT.EVT_ONBOARDING_ACTION_REQUEST, _input) } } QCreateHotWallet { - width: 500 - height: 128 - anchors.horizontalCenter: parent.horizontalCenter + width: 539 + height: 120 + anchors.left: parent.left color: "#FFFFFF" title: STR.STR_QML_1251 description: STR.STR_QML_1252 - desImg: "qrc:/Images/Images/create-hot-wallet.png" + desImg: "qrc:/Images/Images/person-add-24px.svg" onItemclicked: { OnBoarding.state = "hotWallet" } @@ -99,7 +84,7 @@ QOnScreenContentTypeA { } } - onPrevClicked: closeTo(NUNCHUCKTYPE.WALLET_TAB) + bottomLeft: Item {} bottomRight: Row { spacing: 12 QTextButton { diff --git a/Qml/Screens/LocalMode/Onboarding/QCreateHotWallet.qml b/Qml/Screens/LocalMode/Onboarding/QCreateHotWallet.qml index 630b3504..00bfadf7 100644 --- a/Qml/Screens/LocalMode/Onboarding/QCreateHotWallet.qml +++ b/Qml/Screens/LocalMode/Onboarding/QCreateHotWallet.qml @@ -51,26 +51,26 @@ QBoxShadow { } Row { anchors { - fill: parent + left: parent.left leftMargin: 28 - topMargin: 24 - bottomMargin: 24 - rightMargin: 28 + verticalCenter: parent.verticalCenter + } + spacing: 24 + QImage { + source: desImg + width: 48 + height: 48 + anchors.verticalCenter: parent.verticalCenter } - spacing: 16 Item { - anchors { - left: parent.left - bottom: parent.bottom - } - width: 308 + width: 363 height: _col.childrenRect.height - + anchors.verticalCenter: parent.verticalCenter Column { id: _col spacing: 8 QLato { - width: 308 + width: 363 height: 28 text: title font.bold: true @@ -80,7 +80,7 @@ QBoxShadow { horizontalAlignment: Text.AlignLeft } QLato { - width: 308 + width: 363 height: paintedHeight text: description font.pixelSize: 16 @@ -92,15 +92,11 @@ QBoxShadow { } } } - QImage { - anchors { - right: parent.right - verticalCenter: parent.verticalCenter - } - source: desImg - width: 96 - height: 96 + source: "qrc:/Images/Images/right-arrow-dark.svg" + width: 24 + height: 24 + anchors.verticalCenter: parent.verticalCenter } } } diff --git a/Qml/Screens/LocalMode/SCR_ADD_NEW_SOFTWARE_SIGNER.qml b/Qml/Screens/LocalMode/SCR_ADD_NEW_SOFTWARE_SIGNER.qml index e43dc959..2c496d3c 100644 --- a/Qml/Screens/LocalMode/SCR_ADD_NEW_SOFTWARE_SIGNER.qml +++ b/Qml/Screens/LocalMode/SCR_ADD_NEW_SOFTWARE_SIGNER.qml @@ -42,7 +42,7 @@ QScreen { QMLHandle.sendEvent(EVT.EVT_ONS_CLOSE_ALL_REQUEST) } QText { - width: 540 + width: 646 height: 56 text: STR.STR_QML_143 anchors { diff --git a/Qml/Screens/LocalMode/SCR_CREATE_NEW_SEED.qml b/Qml/Screens/LocalMode/SCR_CREATE_NEW_SEED.qml index 78d5141a..8900d070 100644 --- a/Qml/Screens/LocalMode/SCR_CREATE_NEW_SEED.qml +++ b/Qml/Screens/LocalMode/SCR_CREATE_NEW_SEED.qml @@ -30,6 +30,7 @@ import "../../Components/origins" import "../../Components/customizes" import "../../Components/customizes/Texts" import "../../Components/customizes/Buttons" +import "../../Components/customizes/Popups" import "../../../localization/STR_QML.js" as STR QScreen { @@ -121,13 +122,7 @@ QScreen { label.font.pixelSize: 16 type: eTypeE onButtonClicked: { - var valid = random1.correct && random2.correct && random3.correct - if(valid){ - QMLHandle.sendEvent(EVT.EVT_CREATE_NEW_SEED_SUCCEED) - } - else{ - AppModel.showToast(-1, STR.STR_QML_207, EWARNING.EXCEPTION_MSG); - } + _InfoReview.open() } } } @@ -168,4 +163,24 @@ QScreen { console.log(randomValues) return randomValues; } + QPopupInfoTwoButtons { + id: _InfoReview + title: STR.STR_QML_339 + contentText: STR.STR_QML_1406 + labels: [STR.STR_QML_1274,STR.STR_QML_1275] + funcs: [ + function() { + QMLHandle.sendEvent(EVT.EVT_CREATE_NEW_SEED_BACK) + }, + function() { + var valid = random1.correct && random2.correct && random3.correct + if(valid){ + QMLHandle.sendEvent(EVT.EVT_CREATE_NEW_SEED_SUCCEED) + } + else{ + AppModel.showToast(-1, STR.STR_QML_207, EWARNING.EXCEPTION_MSG); + } + } + ] + } } diff --git a/Qml/Screens/LocalMode/SCR_TRANSACTION_INFO.qml b/Qml/Screens/LocalMode/SCR_TRANSACTION_INFO.qml index 48f91f3a..4bd3663f 100644 --- a/Qml/Screens/LocalMode/SCR_TRANSACTION_INFO.qml +++ b/Qml/Screens/LocalMode/SCR_TRANSACTION_INFO.qml @@ -45,7 +45,7 @@ QScreen { width: popupWidth height: popupHeight anchors.centerIn: parent - label.text: STR.STR_QML_282 + label.text: STR.STR_QML_785 label.font.pixelSize: 32 label.font.weight: Font.Medium extraHeader: Row { @@ -109,8 +109,7 @@ QScreen { return receiveTxBtnLeft } else { - if(AppModel.transactionInfo.status === NUNCHUCKTYPE.PENDING_CONFIRMATION){ return btnPendingConfirmationLeft } - else { return null } + return btnPendingConfirmationLeft } } bottomRight: { @@ -261,7 +260,7 @@ QScreen { enableCancelTransaction: AppModel.walletInfo.isGroupWallet ? allowMoreOption : true isAssisedWallet: AppModel.walletInfo.isAssistedWallet isSharedWallet: AppModel.walletInfo.isSharedWallet - visible: myRole !== "OBSERVER" + visible: myRole !== "OBSERVER" && !AppModel.walletInfo.tranReplace funcs: [ function(){ // Request signature groupMembers.open() @@ -324,6 +323,7 @@ QScreen { enableCancelTransaction: true isAssisedWallet: AppModel.walletInfo.isAssistedWallet isSharedWallet: AppModel.walletInfo.isSharedWallet + visible: false funcs: [ function(){ // Request signature @@ -354,6 +354,7 @@ QScreen { type: eSECONDARY label: STR.STR_QML_294 optionVisible: imExContextMenu.visible + visible: false onButtonClicked: { imExContextMenu.x = 20 imExContextMenu.y = 20 - imExContextMenu.height @@ -391,7 +392,7 @@ QScreen { id: startbroatcast width: 180 height: 48 - label.text: STR.STR_QML_295 + label.text: STR.STR_QML_497 label.font.pixelSize: 16 type: eTypeE onButtonClicked: { diff --git a/Qml/Screens/OnlineMode/EditMembers/QEditMemberConfirmEmail.qml b/Qml/Screens/OnlineMode/EditMembers/QEditMemberConfirmEmail.qml new file mode 100644 index 00000000..ce75de96 --- /dev/null +++ b/Qml/Screens/OnlineMode/EditMembers/QEditMemberConfirmEmail.qml @@ -0,0 +1,80 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.4 +import QtQuick.Controls 2.3 +import QtGraphicalEffects 1.12 +import HMIEVENTS 1.0 +import EWARNING 1.0 +import NUNCHUCKTYPE 1.0 +import DataPool 1.0 +import "../../../Components/origins" +import "../../../Components/customizes" +import "../../../Components/customizes/Chats" +import "../../../Components/customizes/Texts" +import "../../../Components/customizes/Buttons" +import "../../../../localization/STR_QML.js" as STR + +QOnScreenContentTypeB { + id:_content + width: popupWidth + height: popupHeight + anchors.centerIn: parent + label.text: STR.STR_QML_1305 + extraHeader: Item {} + onCloseClicked: closeTo(NUNCHUCKTYPE.CURRENT_TAB) + property string code_email: "" + content: Item { + Column { + anchors.fill: parent + spacing: 24 + QTextInputBoxTypeB { + id: _name + label: STR.STR_QML_1027 + boxWidth: 539 + boxHeight: 48 + textInputted: code_email + onTextInputtedChanged: { + if(!_name.isValid){ + _name.isValid = true + _name.errorText = "" + } + _name.showError = false; + code_email = _name.textInputted + } + } + } + QWarningBg { + width: 728 + iSize: 60 + icon: "qrc:/Images/Images/info-60px.png" + txt.text: STR.STR_QML_1028_bottom.arg(ClientController.user.email) + anchors.bottom: parent.bottom + } + } + onPrevClicked: closeTo(NUNCHUCKTYPE.CURRENT_TAB) + nextEnable: code_email !== "" + onNextClicked: { + var _input = { + type: "edit-member-email-code", + codeEmail: code_email + } + QMLHandle.sendEvent(EVT.EVT_EDIT_MEMBERS_ENTER_REQUEST, _input) + } +} diff --git a/Qml/Screens/OnlineMode/EditMembers/QEditMemberDelegate.qml b/Qml/Screens/OnlineMode/EditMembers/QEditMemberDelegate.qml new file mode 100644 index 00000000..c3f664ea --- /dev/null +++ b/Qml/Screens/OnlineMode/EditMembers/QEditMemberDelegate.qml @@ -0,0 +1,118 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.0 +import "../../../Components/customizes" +import "../../../Components/customizes/Texts" +import "../../../Components/customizes/Members" +import "../../../../localization/STR_QML.js" as STR + +Column { + id: _colId + spacing: 12 + width: 539 + property var member + property int roleHeight: 24 + signal arrowClicked() + QLato { + height: 20 + text: modelData.role === "MASTER" ? STR.STR_QML_949 : STR.STR_QML_1031.arg(1 + index) + font.pixelSize: 16 + font.weight: Font.Bold + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + Rectangle { + color: "#F5F5F5" + radius: 12 + width: 539 + height: 164 + Item { + anchors.fill: parent + anchors.margins: 16 + Column { + spacing: 16 + Item { + width: 507 + height: 48 + QAvatar { + width: 48 + height: 48 + avatarLocal: member.user ? member.user.avatar : "" + avatarUrl: member.user ? member.user.avatar : "" + username: member.user ? member.user.name : "" + displayStatus: false + activeStatus: member.status === "PENDING" ? false : true + anchors.verticalCenter: parent.verticalCenter + color: member.status === "PENDING" ? "#EAEAEA" : "#FDD95C" + } + Column { + id: _col + anchors { + left: parent.left + leftMargin: 48 + 12 + verticalCenter: parent.verticalCenter + } + spacing: 4 + QLato { + height: 20 + text: member.user ? member.user.name : member.email_or_username + font.pixelSize: 16 + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + QLato { + height: 16 + font.pixelSize: 12 + color: "#595959" + text: member.user ? member.user.email : member.email_or_username + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + QLato { + anchors { + right: parent.right + rightMargin: 0 + verticalCenter: parent.verticalCenter + } + height: 16 + font.pixelSize: 12 + text: member.status === "PENDING" ? STR.STR_QML_469 : "" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + QEditMemberRole { + boxWidth: 507 + boxHeight: 48 + label: STR.STR_QML_1395 + textInputted: roles.find(function(e) { if (e.id === member.role) return true; else return false }).name + enabled: modelData.role !== "MASTER" + showArrow: modelData.role !== "MASTER" + input.readOnly: true + onArrowClicked: { + _colId.arrowClicked() + } + } + } + } + } +} + diff --git a/Qml/Screens/OnlineMode/EditMembers/QEditMemberNewMemberDelegate.qml b/Qml/Screens/OnlineMode/EditMembers/QEditMemberNewMemberDelegate.qml new file mode 100644 index 00000000..22c1b670 --- /dev/null +++ b/Qml/Screens/OnlineMode/EditMembers/QEditMemberNewMemberDelegate.qml @@ -0,0 +1,89 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.0 +import "../../../Components/customizes" +import "../../../Components/customizes/Texts" +import "../../../Components/customizes/Members" +import "../../../../localization/STR_QML.js" as STR + +Column { + id: _colId + spacing: 12 + width: 539 + property var member + property int roleHeight: 24 + signal arrowClicked() + QLato { + height: 20 + text: modelData.role === "MASTER" ? STR.STR_QML_949 : STR.STR_QML_1031.arg(1 + index) + font.pixelSize: 16 + font.weight: Font.Bold + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + Rectangle { + color: "#F5F5F5" + radius: 12 + width: 539 + height: 192 + Item { + anchors.fill: parent + anchors.margins: 16 + Column { + spacing: 16 + QTextInputBoxTypeB { + id: email + label: STR.STR_QML_394 + boxWidth: 507 + boxHeight: 48 + isValid: true + textInputted: modelData.email_or_username + onTextInputtedChanged: { + if(!email.isValid){ + email.isValid = true + email.errorText = "" + } + email.showError = false; + memberIndex = index + memberEmail = email.textInputted + memberRole = modelData.role + } + onEnterKeyRequest: { + replaceMember() + } + } + QEditMemberRole { + boxWidth: 507 + boxHeight: 48 + label: STR.STR_QML_1395 + textInputted: roles.find(function(e) { if (e.id === member.role) return true; else return false }).name + enabled: modelData.role !== "MASTER" + showArrow: modelData.role !== "MASTER" + input.readOnly: true + onArrowClicked: { + replaceMember() + _colId.arrowClicked() + } + } + } + } + } +} + diff --git a/Qml/Screens/OnlineMode/EditMembers/QEditMemberRole.qml b/Qml/Screens/OnlineMode/EditMembers/QEditMemberRole.qml new file mode 100644 index 00000000..8e3811f8 --- /dev/null +++ b/Qml/Screens/OnlineMode/EditMembers/QEditMemberRole.qml @@ -0,0 +1,120 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.4 +import QtGraphicalEffects 1.0 +import "../../../Components/origins" +import "../../../Components/customizes" +import "../../../Components/customizes/Texts" + +Column { + id: textipboxType + property string label: "This is label" + property alias textInputted: _input.text + property alias validator: _input.validator + property alias acceptableInput : _input.acceptableInput + property var textweight: Font.Bold + property alias echoMode: _input.echoMode + property alias maxLength: _input.maximumLength + property alias length: _input.length + property bool enableLengthLimit: false + property int boxWidth: 338 + property int boxHeight: 48 + property bool isValid: true + property bool showError: false + property bool showWarning: false + signal typingFinished(var currentText) + property alias textBoxFocus: _input.focus + property alias input: _input + property int titleFontSize: 16 + property string disabledColor: "#EAEAEA" + property bool showArrow: false + spacing: 4 + + signal downKeyRequest() + signal upKeyRequest() + signal enterKeyRequest() + signal pasteKeyRequest() + signal tabKeyRequest() + signal arrowClicked() + + Row { + width: parent.width + QLato { + id:txt1 + width: paintedWidth + font.family: "Lato" + font.pixelSize: titleFontSize + font.weight: Font.Bold + text: label + visible: label != "" + anchors.bottom: parent.bottom + } + } + Item { + width: myRectangle.width+2 + height: myRectangle.height+2 + Item { + id: _background + width: myRectangle.width+2 + height: myRectangle.height+2 + Rectangle { + id: myRectangle + anchors.centerIn: parent + width: boxWidth + height: boxHeight + radius: 8 + color: textipboxType.enabled ? (isValid ? "#FFFFFF" : "#FFD7D9") : disabledColor + border.color: isValid ? "#DEDEDE" : "#CF4018" + } + } + QTextField { + id: _input + anchors.fill: parent + background: _background + color: "#031F2B" + font.pixelSize: 16 + clip: true + echoMode: TextInput.Normal + onTypingFinished: textipboxType.typingFinished(currentText) + Keys.onDownPressed: { downKeyRequest() } + Keys.onUpPressed: { upKeyRequest() } + Keys.onReturnPressed: { enterKeyRequest() } + Keys.onEnterPressed: { enterKeyRequest() } + Keys.onPressed: function (keyEvent) { + if (keyEvent.matches(StandardKey.Paste)) { pasteKeyRequest() } + if (keyEvent.key === Qt.Key_Tab) { keyEvent.accepted = false; tabKeyRequest() } + } + } + QIcon { + iconSize: 24 + source: "qrc:/Images/Images/right-arrow-dark.svg" + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 12 + visible: showArrow + MouseArea { + anchors.fill: parent + onClicked: { + arrowClicked() + } + } + } + } +} diff --git a/Qml/Screens/OnlineMode/EditMembers/QEditMemberSelectRoleDelegate.qml b/Qml/Screens/OnlineMode/EditMembers/QEditMemberSelectRoleDelegate.qml new file mode 100644 index 00000000..3aea3a65 --- /dev/null +++ b/Qml/Screens/OnlineMode/EditMembers/QEditMemberSelectRoleDelegate.qml @@ -0,0 +1,85 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.0 +import "../../../Components/customizes" +import "../../../Components/customizes/Texts" +import "../../../Components/customizes/Members" +import "../../../Components/customizes/Buttons" +import "../../../../localization/STR_QML.js" as STR + +Rectangle { + border.width: 1 + border.color: "#DEDEDE" + height: _col.childrenRect.height + 18 + radius: 12 + Item { + id: _col + anchors { + top: parent.top + left: parent.left + leftMargin: 18 + } + QRadioButtonTypeA { + id: _radio + width: 538 + height: 48 + label: modelData.name + fontPixelSize: 16 + fontWeight: Font.Bold + selected: option === modelData.id + layoutDirection: Qt.RightToLeft + onButtonClicked: { + option = modelData.id + } + } + + QLato { + anchors { + top: _radio.bottom + topMargin: -8 + left: parent.left + leftMargin: 54 - 18 + } + height: modelData.des1 !== "" ? 20 : 0 + text: modelData.des1 + font.pixelSize: 12 + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + visible: modelData.des1 !== "" + color: "#595959" + } + QLato { + anchors { + top: _radio.bottom + topMargin: modelData.des1 !== "" ? 24 : -4 + left: parent.left + leftMargin: 54 - 18 + } + width: parent.width + height: modelData.des1 !== "" ? (paintedHeight - 12) : (paintedHeight - 8) + text: modelData.des2 + lineHeightMode: Text.FixedHeight + lineHeight: 28 + wrapMode: Text.WordWrap + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + } + } +} diff --git a/Qml/Screens/OnlineMode/EditMembers/QEditMemberSuccess.qml b/Qml/Screens/OnlineMode/EditMembers/QEditMemberSuccess.qml new file mode 100644 index 00000000..e7e3a5ea --- /dev/null +++ b/Qml/Screens/OnlineMode/EditMembers/QEditMemberSuccess.qml @@ -0,0 +1,69 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.4 +import QtQuick.Controls 2.3 +import QtGraphicalEffects 1.12 +import Qt.labs.platform 1.1 +import HMIEVENTS 1.0 +import EWARNING 1.0 +import NUNCHUCKTYPE 1.0 +import DataPool 1.0 +import "../../../Components/origins" +import "../../../Components/customizes" +import "../../../Components/customizes/Chats" +import "../../../Components/customizes/Texts" +import "../../../Components/customizes/Buttons" +import "../../../Components/customizes/services" +import "../../../../localization/STR_QML.js" as STR + +Item { + id:_screen + property var reqiredSignature: ServiceSetting.servicesTag.reqiredSignatures + Loader { + width: popupWidth + height: popupHeight + anchors.centerIn: parent + sourceComponent: { + if (reqiredSignature.type === "SECURITY_QUESTION") { + return security_question + } else { + return _ConfirmEmail + } + } + } + + Component { + id: security_question + QAnswerSecurityQuestion { + onCloseClicked: closeTo(NUNCHUCKTYPE.CURRENT_TAB) + + onPrevClicked: closeTo(NUNCHUCKTYPE.CURRENT_TAB) + + onNextClicked: { + ProfileSetting.seccurityQuestion() + } + } + } + + Component { + id: _ConfirmEmail + QEditMemberConfirmEmail {} + } +} diff --git a/Qml/Screens/OnlineMode/EditMembers/QEditMembers.qml b/Qml/Screens/OnlineMode/EditMembers/QEditMembers.qml new file mode 100644 index 00000000..22b3cb72 --- /dev/null +++ b/Qml/Screens/OnlineMode/EditMembers/QEditMembers.qml @@ -0,0 +1,146 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.4 +import QtQuick.Controls 2.3 +import QtQuick.Controls 1.4 +import QtGraphicalEffects 1.12 +import QtQuick.Controls.Styles 1.4 +import HMIEVENTS 1.0 +import EWARNING 1.0 +import NUNCHUCKTYPE 1.0 +import DataPool 1.0 +import "../../../Components/origins" +import "../../../Components/customizes" +import "../../../Components/customizes/Chats" +import "../../../Components/customizes/Texts" +import "../../../Components/customizes/Buttons" +import "../../../../localization/STR_QML.js" as STR + +QOnScreenContentTypeB { + id: _Message + width: popupWidth + height: popupHeight + anchors.centerIn: parent + label.text: STR.STR_QML_472 + onCloseClicked: closeTo(NUNCHUCKTYPE.WALLET_TAB) + readonly property var roles: [ + {id: "MASTER", name: STR.STR_QML_949 }, + {id: "ADMIN", name: STR.STR_QML_950 }, + {id: "KEYHOLDER", name: STR.STR_QML_951 }, + {id: "KEYHOLDER_LIMITED", name: STR.STR_QML_952 }, + {id: "FACILITATOR_ADMIN", name: STR.STR_QML_1396 }, + {id: "OBSERVER", name: STR.STR_QML_953 }, + {id: "NEW-MEMBER", name: STR.STR_QML_1403 } + ] + property int memberIndex: 0 + property string memberRole: "" + property string memberEmail: "" + content: Item { + QListView { + id: _members + width: 539 + 24 + height: 506 + model: dashboardInfo.editMembers + clip: true + ScrollBar.vertical: ScrollBar { active: true } + spacing: 25 + delegate: Loader { + sourceComponent: modelData.isNew ? _editNew : _edit + Component { + id: _edit + QEditMemberDelegate { + width: ListView.view.width - 24 + member: modelData + onArrowClicked: { + memberIndex = index + memberRole = modelData.role + memberEmail = modelData.email_or_username + _editMemberSelectARole.open() + } + } + } + Component { + id: _editNew + QEditMemberNewMemberDelegate { + width: ListView.view.width - 24 + member: modelData + onArrowClicked: { + memberIndex = index + memberRole = modelData.role + memberEmail = modelData.email_or_username + _editMemberSelectARole.open() + } + } + } + + } + } + } + function replaceMember() { + var _input = { + type: "replace-new-member", + roleId: memberRole, + email_or_username: memberEmail, + indexMember: memberIndex + } + QMLHandle.notifySendEvent(EVT.EVT_EDIT_MEMBERS_ENTER_REQUEST, _input) + } + isShowLine: true + onPrevClicked: closeTo(NUNCHUCKTYPE.WALLET_TAB) + bottomRight: Row { + spacing: 12 + QIconTextButton { + width: 154 + height: 48 + label: STR.STR_QML_386 + icons: ["add-dark.svg", "add-dark.svg", "add-dark.svg","add-dark.svg"] + fontPixelSize: 16 + iconSize: 16 + type: eTypeB + onButtonClicked: { + var _input = { + type: "add-new-member", + roleId: "NEW-MEMBER", + } + QMLHandle.notifySendEvent(EVT.EVT_EDIT_MEMBERS_ENTER_REQUEST, _input) + } + } + QTextButton { + width: 66 + height: 48 + label.text: STR.STR_QML_835 + label.font.pixelSize: 16 + type: eTypeE + onButtonClicked: { + var _input = { + type: "save-member-changed" + } + QMLHandle.notifySendEvent(EVT.EVT_EDIT_MEMBERS_ENTER_REQUEST, _input) + } + } + } + QPopupEditMemberSelectARole { + id: _editMemberSelectARole + anchors.centerIn: parent + width: 600 + height: 600 + } +} + diff --git a/Qml/Screens/OnlineMode/EditMembers/QPopupEditMemberSelectARole.qml b/Qml/Screens/OnlineMode/EditMembers/QPopupEditMemberSelectARole.qml new file mode 100644 index 00000000..2f805fe8 --- /dev/null +++ b/Qml/Screens/OnlineMode/EditMembers/QPopupEditMemberSelectARole.qml @@ -0,0 +1,99 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.4 +import QtQuick.Controls 2.3 +import QtGraphicalEffects 1.12 +import Qt.labs.platform 1.1 +import HMIEVENTS 1.0 +import EWARNING 1.0 +import NUNCHUCKTYPE 1.0 +import DataPool 1.0 +import "../../../Components/origins" +import "../../../Components/customizes" +import "../../../Components/customizes/Chats" +import "../../../Components/customizes/Texts" +import "../../../Components/customizes/Buttons" +import "../../../Components/customizes/QRCodes" +import "../../../Components/customizes/Popups" +import "../../../Components/customizes/services" +import "../../../../localization/STR_QML.js" as STR + + +QPopupEmpty { + id: _select_a_role + readonly property var roles: [ + {id: "ADMIN", name: STR.STR_QML_950, des1: "", des2: STR.STR_QML_1397}, + {id: "KEYHOLDER", name: STR.STR_QML_951, des1: "", des2: STR.STR_QML_1398}, + {id: "KEYHOLDER_LIMITED", name: STR.STR_QML_952, des1: STR.STR_QML_1402, des2: STR.STR_QML_1399}, + {id: "FACILITATOR_ADMIN", name: STR.STR_QML_1396, des1: "", des2: STR.STR_QML_1400}, + {id: "OBSERVER", name: STR.STR_QML_953, des1: "", des2: STR.STR_QML_1401}, + ] + property string option: "" + onOpened: { + option = memberRole + } + closePolicy:Popup.NoAutoClose + content: QOnScreenContentTypeB { + width: 600 + height: 600 + anchors.centerIn: parent + label.text: STR.STR_QML_1403 + extraHeader: Item {} + onCloseClicked: { _select_a_role.close() } + content: Item { + anchors.fill: parent + QListView { + id: _list + width: 528 + height: parent.height + model: roles + clip: true + spacing: 16 + ScrollBar.vertical: ScrollBar { active: true } + delegate: QEditMemberSelectRoleDelegate { + width: parent.width - 18 + } + } + } + isShowLine: true + onPrevClicked: { _select_a_role.close() } + bottomRight: QTextButton { + width: 66 + height: 48 + label.text: STR.STR_QML_835 + label.font.pixelSize: 16 + type: eTypeE + onButtonClicked: { + if (dashboardInfo.isDowngrade(memberEmail, option)) { + _info1.open() + } else { + memberRole = option + replaceMember() + _select_a_role.close() + } + } + } + } + QPopupInfo{ + id:_info1 + title: STR.STR_QML_339 + contentText: STR.STR_QML_1404 + } +} diff --git a/Qml/Screens/OnlineMode/Healths/QSavingAccountDelegate.qml b/Qml/Screens/OnlineMode/Healths/QSavingAccountDelegate.qml index a526bc4c..cc3c1e0f 100644 --- a/Qml/Screens/OnlineMode/Healths/QSavingAccountDelegate.qml +++ b/Qml/Screens/OnlineMode/Healths/QSavingAccountDelegate.qml @@ -91,6 +91,7 @@ Rectangle { label.font.pixelSize: 16 type: eTypeB onButtonClicked: healthCheck() + enabled: AppModel.walletInfo.myRole !== "FACILITATOR_ADMIN" } QTextButton { width: 200 diff --git a/Qml/Screens/OnlineMode/SCR_EDIT_MEMBERS.qml b/Qml/Screens/OnlineMode/SCR_EDIT_MEMBERS.qml new file mode 100644 index 00000000..b995c008 --- /dev/null +++ b/Qml/Screens/OnlineMode/SCR_EDIT_MEMBERS.qml @@ -0,0 +1,67 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.4 +import QtQuick.Controls 2.3 +import QtGraphicalEffects 1.12 +import HMIEVENTS 1.0 +import EWARNING 1.0 +import NUNCHUCKTYPE 1.0 +import DataPool 1.0 +import "../../Components/origins" +import "../../Components/customizes" +import "../../Components/customizes/Chats" +import "../../Components/customizes/Texts" +import "../../Components/customizes/Buttons" +import "../../Components/customizes/Signers" +import "../OnlineMode/EditMembers" +import "../../Components/customizes/services" +import "../../../localization/STR_QML.js" as STR + +QScreen { + property var dashboardInfo: GroupWallet.dashboardInfo + property string config_flow: "edit_members" + readonly property var map_screens: [ + {screen_name: "edit_members", screen_component: _edit_members}, + {screen_name: "edit_members_success", screen_component: _edit_members_success}, + ] + + Loader { + width: popupWidth + height: popupHeight + anchors.centerIn: parent + sourceComponent: map_screens.find(function(e) {if (e.screen_name === config_flow) return true; else return false}).screen_component + } + Connections { + target: dashboardInfo + onEditMembersSuccessChanged: { + config_flow = "edit_members_success" + } + } + Component { + id: _edit_members + QEditMembers {} + } + Component { + id: _edit_members_success + QEditMemberSuccess { + + } + } +} diff --git a/Qml/Screens/OnlineMode/SCR_HOME_ONLINE.qml b/Qml/Screens/OnlineMode/SCR_HOME_ONLINE.qml index 03f95fc6..ddbd6f02 100644 --- a/Qml/Screens/OnlineMode/SCR_HOME_ONLINE.qml +++ b/Qml/Screens/OnlineMode/SCR_HOME_ONLINE.qml @@ -624,7 +624,7 @@ QScreen { titleSuggest: STR.STR_QML_1251 content: STR.STR_QML_1252 height: 180 - icon:"qrc:/Images/Images/create-hot-wallet.png" + icon:"qrc:/Images/Images/person-add-24px.svg" onBtnClicked: { OnBoarding.state = "hotWallet" QMLHandle.sendEvent(EVT.EVT_ONBOARDING_REQUEST) diff --git a/Views/Common/ViewStates.h b/Views/Common/ViewStates.h index 7017eb2f..523bfdec 100644 --- a/Views/Common/ViewStates.h +++ b/Views/Common/ViewStates.h @@ -52,6 +52,7 @@ #include "STATE_ID_SCR_DASHBOARD_ALERT_INFO.h" #include "STATE_ID_SCR_DASHBOARD_ALERT_SUCCESS.h" #include "STATE_ID_SCR_DUMMY_TRANSACTION_INFO.h" +#include "STATE_ID_SCR_EDIT_MEMBERS.h" #include "STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN.h" #include "STATE_ID_SCR_ENTER_BACKUP_PASSWORD.h" #include "STATE_ID_SCR_HEALTH_CHECK_STARTING.h" diff --git a/Views/Common/ViewsDefines.h b/Views/Common/ViewsDefines.h index 6b09e155..435ab49b 100644 --- a/Views/Common/ViewsDefines.h +++ b/Views/Common/ViewsDefines.h @@ -111,6 +111,7 @@ namespace OnlineMode { #define SCR_RECURRING_PAYMENTS "qrc:/Qml/Screens/OnlineMode/SCR_RECURRING_PAYMENTS.qml" #define SCR_REPLACE_KEYS "qrc:/Qml/Screens/OnlineMode/SCR_REPLACE_KEYS.qml" #define SCR_SIGN_IN_VIA_XPUB "qrc:/Qml/Screens/OnlineMode/SCR_SIGN_IN_VIA_XPUB.qml" +#define SCR_EDIT_MEMBERS "qrc:/Qml/Screens/OnlineMode/SCR_EDIT_MEMBERS.qml" } namespace Popups { diff --git a/Views/Common/ViewsEnums.h b/Views/Common/ViewsEnums.h index b36c1911..c14257dd 100644 --- a/Views/Common/ViewsEnums.h +++ b/Views/Common/ViewsEnums.h @@ -113,6 +113,7 @@ class E: public QObject Q_ENUMS(EVT_STATE_ID_SCR_CHANGE_EMAIL) Q_ENUMS(EVT_STATE_ID_SCR_REPLACE_SELECT_KEY) Q_ENUMS(EVT_STATE_ID_SCR_REPLACE_KEYS) + Q_ENUMS(EVT_STATE_ID_SCR_EDIT_MEMBERS) Q_ENUMS(EVT_STATE_ID_SCR_SIGN_IN_VIA_XPUB) public: enum EVT_STATE_ID_REGISTED @@ -204,858 +205,868 @@ class E: public QObject STATE_ID_SCR_CHANGE_EMAIL , // 84 STATE_ID_SCR_REPLACE_SELECT_KEY , // 85 STATE_ID_SCR_REPLACE_KEYS , // 86 - STATE_ID_SCR_SIGN_IN_VIA_XPUB , // 87 - EVT_STATE_ID_REGISTED_MAX , // 88 + STATE_ID_SCR_EDIT_MEMBERS , // 87 + STATE_ID_SCR_SIGN_IN_VIA_XPUB , // 88 + EVT_STATE_ID_REGISTED_MAX , // 89 }; enum EVT_STATE_ID_ROOT { - EVT_STATE_ID_ROOT_MIN=EVT_STATE_ID_REGISTED_MAX+1, // 89 - EVT_STARTING_APPLICATION_LOCALMODE , // 90 - EVT_STARTING_APPLICATION_ONLINEMODE , // 91 - EVT_STARTING_APPLICATION_ONLINE_HWL , // 92 - EVT_SETTING_ACCOUNT_CHANGE_PASSWORD , // 93 - EVT_ONS_CLOSE_ALL_REQUEST , // 94 - EVT_ROOT_SIGN_IN_PRIMARY_KEY_REQUEST , // 95 - EVT_ROOT_CREATE_PRIMARY_KEY_REQUEST , // 96 - EVT_GOTO_HOME_WALLET_TAB , // 97 - EVT_ONS_CLOSE_REQUEST , // 98 - EVT_LOGIN_DB_REQUEST , // 99 - EVT_ROOT_PROMT_PIN , // 100 - EVT_ROOT_PROMT_PASSPHRASE , // 101 - EVT_LOGIN_MATRIX_REQUEST , // 102 - EVT_GOTO_HOME_CHAT_TAB , // 103 - EVT_ONLINE_ONS_CLOSE_REQUEST , // 104 - EVT_SHOW_TOAST_MESSAGE , // 105 - EVT_ROOT_UPDATE_PROFILE , // 106 - EVT_SHOW_CREATE_ACCOUNT_REQUEST , // 107 - EVT_GOTO_APP_SETTINGS_TAB , // 108 - EVT_SIGN_IN_REQUEST , // 109 - EVT_ROOT_ENTRY_PRIMARY_KEY_REQUEST , // 110 - EVT_LOGIN_WITH_SOFTWARE_KEY_REQUEST , // 111 - EVT_GOTO_SERVICE_SETTING_TAB , // 112 - EVT_CLOSE_TO_SERVICE_SETTINGS_REQUEST , // 113 - EVT_NUNCHUK_LOGIN_SUCCEEDED , // 114 - EVT_HEALTH_CHECK_STARTING_REQUEST , // 115 - EVT_DUMMY_TRANSACTION_INFO_REQUEST , // 116 - EVT_DASHBOARD_ALERT_SUCCESS_REQUEST , // 117 - EVT_SHARE_YOUR_SECRET_REQUEST , // 118 - EVT_REENTER_YOUR_PASSWORD_REQUEST , // 119 - EVT_ONBOARDING_REQUEST , // 120 - EVT_REPLACE_SELECT_KEY_REQUEST , // 121 - EVT_SIGN_IN_VIA_XPUB_REQUEST , // 122 - EVT_STATE_ID_ROOT_MAX , // 123 + EVT_STATE_ID_ROOT_MIN=EVT_STATE_ID_REGISTED_MAX+1, // 90 + EVT_STARTING_APPLICATION_LOCALMODE , // 91 + EVT_STARTING_APPLICATION_ONLINEMODE , // 92 + EVT_STARTING_APPLICATION_ONLINE_HWL , // 93 + EVT_SETTING_ACCOUNT_CHANGE_PASSWORD , // 94 + EVT_ONS_CLOSE_ALL_REQUEST , // 95 + EVT_ROOT_SIGN_IN_PRIMARY_KEY_REQUEST , // 96 + EVT_ROOT_CREATE_PRIMARY_KEY_REQUEST , // 97 + EVT_GOTO_HOME_WALLET_TAB , // 98 + EVT_ONS_CLOSE_REQUEST , // 99 + EVT_LOGIN_DB_REQUEST , // 100 + EVT_ROOT_PROMT_PIN , // 101 + EVT_ROOT_PROMT_PASSPHRASE , // 102 + EVT_LOGIN_MATRIX_REQUEST , // 103 + EVT_GOTO_HOME_CHAT_TAB , // 104 + EVT_ONLINE_ONS_CLOSE_REQUEST , // 105 + EVT_SHOW_TOAST_MESSAGE , // 106 + EVT_ROOT_UPDATE_PROFILE , // 107 + EVT_SHOW_CREATE_ACCOUNT_REQUEST , // 108 + EVT_GOTO_APP_SETTINGS_TAB , // 109 + EVT_SIGN_IN_REQUEST , // 110 + EVT_ROOT_ENTRY_PRIMARY_KEY_REQUEST , // 111 + EVT_LOGIN_WITH_SOFTWARE_KEY_REQUEST , // 112 + EVT_GOTO_SERVICE_SETTING_TAB , // 113 + EVT_CLOSE_TO_SERVICE_SETTINGS_REQUEST , // 114 + EVT_NUNCHUK_LOGIN_SUCCEEDED , // 115 + EVT_HEALTH_CHECK_STARTING_REQUEST , // 116 + EVT_DUMMY_TRANSACTION_INFO_REQUEST , // 117 + EVT_DASHBOARD_ALERT_SUCCESS_REQUEST , // 118 + EVT_SHARE_YOUR_SECRET_REQUEST , // 119 + EVT_REENTER_YOUR_PASSWORD_REQUEST , // 120 + EVT_ONBOARDING_REQUEST , // 121 + EVT_REPLACE_SELECT_KEY_REQUEST , // 122 + EVT_EDIT_MEMBERS_REQUEST , // 123 + EVT_SIGN_IN_VIA_XPUB_REQUEST , // 124 + EVT_STATE_ID_ROOT_MAX , // 125 }; enum EVT_STATE_ID_SCR_HOME { - EVT_STATE_ID_SCR_HOME_MIN=EVT_STATE_ID_ROOT_MAX+1, // 124 - EVT_HOME_WALLET_SELECTED , // 125 - EVT_HOME_WALLET_COPY_ADDRESS , // 126 - EVT_HOME_SETTING_REQUEST , // 127 - EVT_HOME_DISPLAY_ADDRESS , // 128 - EVT_HOME_IMPORT_PSBT , // 129 - EVT_HOME_EXPORT_BSMS , // 130 - EVT_HOME_ADD_WALLET_REQUEST , // 131 - EVT_HOME_MASTER_SIGNER_INFO_REQUEST , // 132 - EVT_HOME_SEND_REQUEST , // 133 - EVT_HOME_RECEIVE_REQUEST , // 134 - EVT_HOME_TRANSACTION_HISTORY_REQUEST , // 135 - EVT_HOME_WALLET_INFO_REQUEST , // 136 - EVT_HOME_TRANSACTION_INFO_REQUEST , // 137 - EVT_HOME_REMOTE_SIGNER_INFO_REQUEST , // 138 - EVT_HOME_ADD_NEW_SIGNER_REQUEST , // 139 - EVT_HOME_COLDCARD_NFC_SIGNER_INFO_REQUEST , // 140 - EVT_ASK_HARDWARE_REQ , // 141 - EVT_EXIST_HARDWARE_REQ , // 142 - EVT_SHOW_GROUP_WALLET_CONFIG_REQUEST , // 143 - EVT_KEY_HEALTH_CHECK_STATUS_REQUEST , // 144 - EVT_RECURRING_PAYMENTS_REQUEST , // 145 - EVT_ADD_HARDWARE_REQUEST , // 146 - EVT_ADD_SOFTWARE_SIGNER_RESULT , // 147 - EVT_REPLACE_KEYS_REQUEST , // 148 - EVT_STATE_ID_SCR_HOME_MAX , // 149 + EVT_STATE_ID_SCR_HOME_MIN=EVT_STATE_ID_ROOT_MAX+1, // 126 + EVT_HOME_WALLET_SELECTED , // 127 + EVT_HOME_WALLET_COPY_ADDRESS , // 128 + EVT_HOME_SETTING_REQUEST , // 129 + EVT_HOME_DISPLAY_ADDRESS , // 130 + EVT_HOME_IMPORT_PSBT , // 131 + EVT_HOME_EXPORT_BSMS , // 132 + EVT_HOME_ADD_WALLET_REQUEST , // 133 + EVT_HOME_MASTER_SIGNER_INFO_REQUEST , // 134 + EVT_HOME_SEND_REQUEST , // 135 + EVT_HOME_RECEIVE_REQUEST , // 136 + EVT_HOME_TRANSACTION_HISTORY_REQUEST , // 137 + EVT_HOME_WALLET_INFO_REQUEST , // 138 + EVT_HOME_TRANSACTION_INFO_REQUEST , // 139 + EVT_HOME_REMOTE_SIGNER_INFO_REQUEST , // 140 + EVT_HOME_ADD_NEW_SIGNER_REQUEST , // 141 + EVT_HOME_COLDCARD_NFC_SIGNER_INFO_REQUEST , // 142 + EVT_ASK_HARDWARE_REQ , // 143 + EVT_EXIST_HARDWARE_REQ , // 144 + EVT_SHOW_GROUP_WALLET_CONFIG_REQUEST , // 145 + EVT_KEY_HEALTH_CHECK_STATUS_REQUEST , // 146 + EVT_RECURRING_PAYMENTS_REQUEST , // 147 + EVT_ADD_HARDWARE_REQUEST , // 148 + EVT_ADD_SOFTWARE_SIGNER_RESULT , // 149 + EVT_REPLACE_KEYS_REQUEST , // 150 + EVT_STATE_ID_SCR_HOME_MAX , // 151 }; enum EVT_STATE_ID_SCR_ADD_WALLET { - EVT_STATE_ID_SCR_ADD_WALLET_MIN=EVT_STATE_ID_SCR_HOME_MAX+1, // 150 - EVT_ADD_WALLET_IMPORT , // 151 - EVT_ADD_WALLET_BACK_REQUEST , // 152 - EVT_ADD_WALLET_SIGNER_CONFIGURATION_REQUEST , // 153 - EVT_ADD_WALLET_IMPORT_SUCCEED , // 154 - EVT_STATE_ID_SCR_ADD_WALLET_MAX , // 155 + EVT_STATE_ID_SCR_ADD_WALLET_MIN=EVT_STATE_ID_SCR_HOME_MAX+1, // 152 + EVT_ADD_WALLET_IMPORT , // 153 + EVT_ADD_WALLET_BACK_REQUEST , // 154 + EVT_ADD_WALLET_SIGNER_CONFIGURATION_REQUEST , // 155 + EVT_ADD_WALLET_IMPORT_SUCCEED , // 156 + EVT_STATE_ID_SCR_ADD_WALLET_MAX , // 157 }; enum EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER { - EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_MIN=EVT_STATE_ID_SCR_ADD_WALLET_MAX+1, // 156 - EVT_ADD_HARDWARE_SIGNER_ADD_MASTER_SIGNER_REQUEST , // 157 - EVT_ADD_HARDWARE_SIGNER_REFRESH_REQUEST , // 158 - EVT_ADD_HARDWARE_SIGNER_ADD_REMOTE_SIGNER_REQUEST , // 159 - EVT_ADD_HARDWARE_SIGNER_PROMT_PIN_REQUEST , // 160 - EVT_ADD_HARDWARE_SIGNER_SEND_PIN_REQUEST , // 161 - EVT_ADD_MASTER_SIGNER_RESULT , // 162 - EVT_ADD_REMOTE_SIGNER_RESULT , // 163 - EVT_ADD_HARDWARE_SIGNER_BACK_REQUEST , // 164 - EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_MAX , // 165 + EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_MIN=EVT_STATE_ID_SCR_ADD_WALLET_MAX+1, // 158 + EVT_ADD_HARDWARE_SIGNER_ADD_MASTER_SIGNER_REQUEST , // 159 + EVT_ADD_HARDWARE_SIGNER_REFRESH_REQUEST , // 160 + EVT_ADD_HARDWARE_SIGNER_ADD_REMOTE_SIGNER_REQUEST , // 161 + EVT_ADD_HARDWARE_SIGNER_PROMT_PIN_REQUEST , // 162 + EVT_ADD_HARDWARE_SIGNER_SEND_PIN_REQUEST , // 163 + EVT_ADD_MASTER_SIGNER_RESULT , // 164 + EVT_ADD_REMOTE_SIGNER_RESULT , // 165 + EVT_ADD_HARDWARE_SIGNER_BACK_REQUEST , // 166 + EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_MAX , // 167 }; enum EVT_STATE_ID_SCR_MASTER_SIGNER_INFO { - EVT_STATE_ID_SCR_MASTER_SIGNER_INFO_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_MAX+1, // 166 - EVT_MASTER_SIGNER_INFO_EDIT_NAME , // 167 - EVT_MASTER_SIGNER_INFO_HEALTH_CHECK , // 168 - EVT_MASTER_SIGNER_INFO_REMOVE_REQUEST , // 169 - EVT_MASTER_SIGNER_INFO_PROMT_PIN , // 170 - EVT_MASTER_SIGNER_INFO_SEND_PIN , // 171 - EVT_MASTER_SIGNER_INFO_SEND_PASSPHRASE , // 172 - EVT_MASTER_SIGNER_INFO_GET_XPUBS , // 173 - EVT_MASTER_SIGNER_INFO_BACK_REQUEST , // 174 - EVT_MASTER_SIGNER_INFO_BACK_WALLET_INFO , // 175 - EVT_STATE_ID_SCR_MASTER_SIGNER_INFO_MAX , // 176 + EVT_STATE_ID_SCR_MASTER_SIGNER_INFO_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_MAX+1, // 168 + EVT_MASTER_SIGNER_INFO_EDIT_NAME , // 169 + EVT_MASTER_SIGNER_INFO_HEALTH_CHECK , // 170 + EVT_MASTER_SIGNER_INFO_REMOVE_REQUEST , // 171 + EVT_MASTER_SIGNER_INFO_PROMT_PIN , // 172 + EVT_MASTER_SIGNER_INFO_SEND_PIN , // 173 + EVT_MASTER_SIGNER_INFO_SEND_PASSPHRASE , // 174 + EVT_MASTER_SIGNER_INFO_GET_XPUBS , // 175 + EVT_MASTER_SIGNER_INFO_BACK_REQUEST , // 176 + EVT_MASTER_SIGNER_INFO_BACK_WALLET_INFO , // 177 + EVT_STATE_ID_SCR_MASTER_SIGNER_INFO_MAX , // 178 }; enum EVT_STATE_ID_SCR_ADD_WALLET_SIGNER_CONFIGURATION { - EVT_STATE_ID_SCR_ADD_WALLET_SIGNER_CONFIGURATION_MIN=EVT_STATE_ID_SCR_MASTER_SIGNER_INFO_MAX+1, // 177 - EVT_SIGNER_CONFIGURATION_SELECT_MASTER_SIGNER , // 178 - EVT_SIGNER_CONFIGURATION_REMOVE_SIGNER , // 179 - EVT_SIGNER_CONFIGURATION_SELECT_REMOTE_SIGNER , // 180 - EVT_SIGNER_CONFIGURATION_MASTER_SIGNER_SEND_PASSPHRASE , // 181 - EVT_SIGNER_CONFIGURATION_TRY_REVIEW , // 182 - EVT_ADD_WALLET_SIGNER_CONFIGURATION_BACK , // 183 - EVT_ADD_WALLET_SIGNER_CONFIGURATION_REVIEW , // 184 - EVT_ADD_SIGNER_TO_WALLET_REQUEST , // 185 - EVT_STATE_ID_SCR_ADD_WALLET_SIGNER_CONFIGURATION_MAX , // 186 + EVT_STATE_ID_SCR_ADD_WALLET_SIGNER_CONFIGURATION_MIN=EVT_STATE_ID_SCR_MASTER_SIGNER_INFO_MAX+1, // 179 + EVT_SIGNER_CONFIGURATION_SELECT_MASTER_SIGNER , // 180 + EVT_SIGNER_CONFIGURATION_REMOVE_SIGNER , // 181 + EVT_SIGNER_CONFIGURATION_SELECT_REMOTE_SIGNER , // 182 + EVT_SIGNER_CONFIGURATION_MASTER_SIGNER_SEND_PASSPHRASE , // 183 + EVT_SIGNER_CONFIGURATION_TRY_REVIEW , // 184 + EVT_ADD_WALLET_SIGNER_CONFIGURATION_BACK , // 185 + EVT_ADD_WALLET_SIGNER_CONFIGURATION_REVIEW , // 186 + EVT_ADD_SIGNER_TO_WALLET_REQUEST , // 187 + EVT_STATE_ID_SCR_ADD_WALLET_SIGNER_CONFIGURATION_MAX , // 188 }; enum EVT_STATE_ID_SCR_RECEIVE { - EVT_STATE_ID_SCR_RECEIVE_MIN=EVT_STATE_ID_SCR_ADD_WALLET_SIGNER_CONFIGURATION_MAX+1, // 187 - EVT_BTN_GEN_NEW_ADDRESS , // 188 - EVT_RECEIVE_COPY_ADDRESS , // 189 - EVT_RECEIVE_SET_QUICK_RECEIVE_ADDRESS , // 190 - EVT_RECEIVE_DISPLAY_ADDRESS , // 191 - EVT_RECEIVE_ADDRESS_BALANCE , // 192 - EVT_RECEIVE_BACK_REQUEST , // 193 - EVT_STATE_ID_SCR_RECEIVE_MAX , // 194 + EVT_STATE_ID_SCR_RECEIVE_MIN=EVT_STATE_ID_SCR_ADD_WALLET_SIGNER_CONFIGURATION_MAX+1, // 189 + EVT_BTN_GEN_NEW_ADDRESS , // 190 + EVT_RECEIVE_COPY_ADDRESS , // 191 + EVT_RECEIVE_SET_QUICK_RECEIVE_ADDRESS , // 192 + EVT_RECEIVE_DISPLAY_ADDRESS , // 193 + EVT_RECEIVE_ADDRESS_BALANCE , // 194 + EVT_RECEIVE_BACK_REQUEST , // 195 + EVT_STATE_ID_SCR_RECEIVE_MAX , // 196 }; enum EVT_STATE_ID_SCR_SEND { - EVT_STATE_ID_SCR_SEND_MIN=EVT_STATE_ID_SCR_RECEIVE_MAX+1, // 195 - EVT_SEND_ADD_DESTINATION_REQUEST , // 196 - EVT_SEND_CREATE_TRANSACTION_REQUEST , // 197 - EVT_SEND_BACK_REQUEST , // 198 - EVT_SEND_CREATE_TRANSACTION_SUCCEED , // 199 - EVT_SEND_BACK_HOME_SHARED_WL , // 200 - EVT_STATE_ID_SCR_SEND_MAX , // 201 + EVT_STATE_ID_SCR_SEND_MIN=EVT_STATE_ID_SCR_RECEIVE_MAX+1, // 197 + EVT_SEND_ADD_DESTINATION_REQUEST , // 198 + EVT_SEND_CREATE_TRANSACTION_REQUEST , // 199 + EVT_SEND_BACK_REQUEST , // 200 + EVT_SEND_CREATE_TRANSACTION_SUCCEED , // 201 + EVT_SEND_BACK_HOME_SHARED_WL , // 202 + EVT_STATE_ID_SCR_SEND_MAX , // 203 }; enum EVT_STATE_ID_SCR_CREATE_TRANSACTION { - EVT_STATE_ID_SCR_CREATE_TRANSACTION_MIN=EVT_STATE_ID_SCR_SEND_MAX+1, // 202 - EVT_CREATE_TRANSACTION_MAKE_DRAFT_TX , // 203 - EVT_CREATE_TRANSACTION_SAVE_REQUEST , // 204 - EVT_CREATE_TRANSACTION_UTXO_SORT_REQUEST , // 205 - EVT_CREATE_TRANSACTION_SIGN_REQUEST , // 206 - EVT_CREATE_TRANSACTION_BACK_REQUEST , // 207 - EVT_CREATE_TRANSACTION_SIGN_SUCCEED , // 208 - EVR_CREATE_TRANSACTION_BACK_UTXO_CONSILIDATE , // 209 - EVT_STATE_ID_SCR_CREATE_TRANSACTION_MAX , // 210 + EVT_STATE_ID_SCR_CREATE_TRANSACTION_MIN=EVT_STATE_ID_SCR_SEND_MAX+1, // 204 + EVT_CREATE_TRANSACTION_MAKE_DRAFT_TX , // 205 + EVT_CREATE_TRANSACTION_SAVE_REQUEST , // 206 + EVT_CREATE_TRANSACTION_UTXO_SORT_REQUEST , // 207 + EVT_CREATE_TRANSACTION_SIGN_REQUEST , // 208 + EVT_CREATE_TRANSACTION_BACK_REQUEST , // 209 + EVT_CREATE_TRANSACTION_SIGN_SUCCEED , // 210 + EVR_CREATE_TRANSACTION_BACK_UTXO_CONSILIDATE , // 211 + EVT_STATE_ID_SCR_CREATE_TRANSACTION_MAX , // 212 }; enum EVT_STATE_ID_SCR_TRANSACTION_INFO { - EVT_STATE_ID_SCR_TRANSACTION_INFO_MIN=EVT_STATE_ID_SCR_CREATE_TRANSACTION_MAX+1, // 211 - EVT_TRANSACTION_SIGN_REQUEST , // 212 - EVT_TRANSACTION_EXPORT_REQUEST , // 213 - EVT_TRANSACTION_EXPORT_QRCODE , // 214 - EVT_TRANSACTION_IMPORT_REQUEST , // 215 - EVT_TRANSACTION_IMPORT_QRCODE , // 216 - EVT_TRANSACTION_BROADCAST_REQUEST , // 217 - EVT_TRANSACTION_SET_MEMO_REQUEST , // 218 - EVT_TRANSACTION_SCAN_DEVICE_REQUEST , // 219 - EVT_TRANSACTION_REMOVE_REQUEST , // 220 - EVT_TRANSACTION_SEND_PIN_REQUEST , // 221 - EVT_TRANSACTION_PROMT_PIN_REQUEST , // 222 - EVT_TRANSACTION_VERIFY_ADDRESS , // 223 - EVT_TRANSACTION_SEND_PASSPHRASE , // 224 - EVT_TRANSACTION_CANCEL_REQUEST , // 225 - EVT_TRANSACTION_INFO_BACK_REQUEST , // 226 - EVT_TRANSACTION_INFO_BACK_TO_CREATE_TRANSACTION_REQUEST , // 227 - EVT_TRANSACTION_REPLACE_BY_FEE_REQUEST , // 228 - EVT_TRANSACTION_INFO_BACK_UTXO_INFO , // 229 - EVT_STATE_ID_SCR_TRANSACTION_INFO_MAX , // 230 + EVT_STATE_ID_SCR_TRANSACTION_INFO_MIN=EVT_STATE_ID_SCR_CREATE_TRANSACTION_MAX+1, // 213 + EVT_TRANSACTION_SIGN_REQUEST , // 214 + EVT_TRANSACTION_EXPORT_REQUEST , // 215 + EVT_TRANSACTION_EXPORT_QRCODE , // 216 + EVT_TRANSACTION_IMPORT_REQUEST , // 217 + EVT_TRANSACTION_IMPORT_QRCODE , // 218 + EVT_TRANSACTION_BROADCAST_REQUEST , // 219 + EVT_TRANSACTION_SET_MEMO_REQUEST , // 220 + EVT_TRANSACTION_SCAN_DEVICE_REQUEST , // 221 + EVT_TRANSACTION_REMOVE_REQUEST , // 222 + EVT_TRANSACTION_SEND_PIN_REQUEST , // 223 + EVT_TRANSACTION_PROMT_PIN_REQUEST , // 224 + EVT_TRANSACTION_VERIFY_ADDRESS , // 225 + EVT_TRANSACTION_SEND_PASSPHRASE , // 226 + EVT_TRANSACTION_CANCEL_REQUEST , // 227 + EVT_TRANSACTION_INFO_BACK_REQUEST , // 228 + EVT_TRANSACTION_INFO_BACK_TO_CREATE_TRANSACTION_REQUEST , // 229 + EVT_TRANSACTION_REPLACE_BY_FEE_REQUEST , // 230 + EVT_TRANSACTION_INFO_BACK_UTXO_INFO , // 231 + EVT_STATE_ID_SCR_TRANSACTION_INFO_MAX , // 232 }; enum EVT_STATE_ID_SCR_TRANSACTION_HISTORY { - EVT_STATE_ID_SCR_TRANSACTION_HISTORY_MIN=EVT_STATE_ID_SCR_TRANSACTION_INFO_MAX+1, // 231 - EVT_TRANSACTION_HISTORY_SORT_REQUEST , // 232 - EVT_TRANSACTION_HISTORY_BACK_REQUEST , // 233 - EVT_TRANSACTION_INFO_ITEM_SELECTED , // 234 - EVT_STATE_ID_SCR_TRANSACTION_HISTORY_MAX , // 235 + EVT_STATE_ID_SCR_TRANSACTION_HISTORY_MIN=EVT_STATE_ID_SCR_TRANSACTION_INFO_MAX+1, // 233 + EVT_TRANSACTION_HISTORY_SORT_REQUEST , // 234 + EVT_TRANSACTION_HISTORY_BACK_REQUEST , // 235 + EVT_TRANSACTION_INFO_ITEM_SELECTED , // 236 + EVT_STATE_ID_SCR_TRANSACTION_HISTORY_MAX , // 237 }; enum EVT_STATE_ID_SCR_APP_SETTINGS { - EVT_STATE_ID_SCR_APP_SETTINGS_MIN=EVT_STATE_ID_SCR_TRANSACTION_HISTORY_MAX+1, // 236 - EVT_APP_SETTING_DELETE_ACCOUNT_REQUEST , // 237 - EVT_APP_SETTING_CHANGE_PASSPHRASE , // 238 - EVT_APP_SETTING_REQUEST_RESTART , // 239 - EVT_APP_SETTING_REQUEST_RESCAN , // 240 - EVT_APP_SETTING_DELETE_PRIMARY_KEY_ACCOUNT_REQUEST , // 241 - EVT_APP_SETTING_BACK_REQUEST , // 242 - EVT_APP_SETTING_BACK_TO_ONLINE_MODE , // 243 - EVT_SHOW_REPLACE_PRIMARY_KEY_REQUEST , // 244 - EVT_SELECT_SERVER_REQUEST , // 245 - EVT_CHANGE_EMAIL_REQUEST , // 246 - EVT_STATE_ID_SCR_APP_SETTINGS_MAX , // 247 + EVT_STATE_ID_SCR_APP_SETTINGS_MIN=EVT_STATE_ID_SCR_TRANSACTION_HISTORY_MAX+1, // 238 + EVT_APP_SETTING_DELETE_ACCOUNT_REQUEST , // 239 + EVT_APP_SETTING_CHANGE_PASSPHRASE , // 240 + EVT_APP_SETTING_REQUEST_RESTART , // 241 + EVT_APP_SETTING_REQUEST_RESCAN , // 242 + EVT_APP_SETTING_DELETE_PRIMARY_KEY_ACCOUNT_REQUEST , // 243 + EVT_APP_SETTING_BACK_REQUEST , // 244 + EVT_APP_SETTING_BACK_TO_ONLINE_MODE , // 245 + EVT_SHOW_REPLACE_PRIMARY_KEY_REQUEST , // 246 + EVT_SELECT_SERVER_REQUEST , // 247 + EVT_CHANGE_EMAIL_REQUEST , // 248 + EVT_STATE_ID_SCR_APP_SETTINGS_MAX , // 249 }; enum EVT_STATE_ID_SCR_ADD_REMOTE_SIGNER_RESULT { - EVT_STATE_ID_SCR_ADD_REMOTE_SIGNER_RESULT_MIN=EVT_STATE_ID_SCR_APP_SETTINGS_MAX+1, // 248 - EVT_REMOTE_SIGNER_RESULT_HEALTH_CHECK , // 249 - EVT_REMOTE_SIGNER_RESULT_EDIT_NAME , // 250 - EVT_REMOTE_SIGNER_RESULT_IMPORT_SIGNATURE , // 251 - EVT_REMOTE_SIGNER_RESULT_EXPORT_MESSAGE , // 252 - EVT_REMOTE_SIGNER_RESULT_GET_XPUBS , // 253 - EVT_REMOTE_SIGNER_RESULT_DELETE_REQUEST , // 254 - EVT_REMOTE_SIGNER_RESULT_CONFIRM_ADD_TO_WALLET_SIGNER_CONFIG , // 255 - EVT_STATE_ID_SCR_ADD_REMOTE_SIGNER_RESULT_MAX , // 256 + EVT_STATE_ID_SCR_ADD_REMOTE_SIGNER_RESULT_MIN=EVT_STATE_ID_SCR_APP_SETTINGS_MAX+1, // 250 + EVT_REMOTE_SIGNER_RESULT_HEALTH_CHECK , // 251 + EVT_REMOTE_SIGNER_RESULT_EDIT_NAME , // 252 + EVT_REMOTE_SIGNER_RESULT_IMPORT_SIGNATURE , // 253 + EVT_REMOTE_SIGNER_RESULT_EXPORT_MESSAGE , // 254 + EVT_REMOTE_SIGNER_RESULT_GET_XPUBS , // 255 + EVT_REMOTE_SIGNER_RESULT_DELETE_REQUEST , // 256 + EVT_REMOTE_SIGNER_RESULT_CONFIRM_ADD_TO_WALLET_SIGNER_CONFIG , // 257 + EVT_STATE_ID_SCR_ADD_REMOTE_SIGNER_RESULT_MAX , // 258 }; enum EVT_STATE_ID_SCR_UTXOS { - EVT_STATE_ID_SCR_UTXOS_MIN=EVT_STATE_ID_SCR_ADD_REMOTE_SIGNER_RESULT_MAX+1, // 257 - EVT_UTXOS_SORT_REQUEST , // 258 - EVT_UTXOS_BACK_REQUEST , // 259 - EVT_UTXOS_CONSOLIDATE_REQUEST , // 260 - EVT_UTXOS_ITEM_SELECTED , // 261 - EVT_UTXO_OUTPUT_BACK_SHARED_WALLET , // 262 - EVT_STATE_ID_SCR_UTXOS_MAX , // 263 + EVT_STATE_ID_SCR_UTXOS_MIN=EVT_STATE_ID_SCR_ADD_REMOTE_SIGNER_RESULT_MAX+1, // 259 + EVT_UTXOS_SORT_REQUEST , // 260 + EVT_UTXOS_BACK_REQUEST , // 261 + EVT_UTXOS_CONSOLIDATE_REQUEST , // 262 + EVT_UTXOS_ITEM_SELECTED , // 263 + EVT_UTXO_OUTPUT_BACK_SHARED_WALLET , // 264 + EVT_STATE_ID_SCR_UTXOS_MAX , // 265 }; enum EVT_STATE_ID_SCR_WALLET_INFO { - EVT_STATE_ID_SCR_WALLET_INFO_MIN=EVT_STATE_ID_SCR_UTXOS_MAX+1, // 264 - EVT_WALLET_INFO_EDIT_NAME , // 265 - EVT_WALLET_INFO_REMOVE , // 266 - EVT_WALLET_INFO_EXPORT_DB , // 267 - EVT_WALLET_INFO_EXPORT_CSV , // 268 - EVT_WALLET_INFO_EXPORT_DESCRIPTOR , // 269 - EVT_WALLET_INFO_EXPORT_COLDCARD , // 270 - EVT_WALLET_INFO_EXPORT_QRCODE , // 271 - EVT_WALLET_INFO_SIGNER_INFO_REQUEST , // 272 - EVT_WALLET_INFO_EDIT_DESCRIPTION , // 273 - EVT_WALLET_INFO_IMPORT_PSBT , // 274 - EVT_WALLET_INFO_REFRESH_WALLET_REQUEST , // 275 - EVT_WALLET_INFO_GAP_LIMIT_REQUEST , // 276 - EVT_WALLET_INFO_BACK_REQUEST , // 277 - EVT_WALLET_INFO_UTXOS_REQUEST , // 278 - EVT_WALLET_INFO_CHANGE_ADDRESS_REQUEST , // 279 - EVT_WALLET_INFO_MASTER_SIGNER_INFO_REQUEST , // 280 - EVT_WALLET_INFO_REMOTE_SIGNER_INFO_REQUEST , // 281 - EVT_STATE_ID_SCR_WALLET_INFO_MAX , // 282 + EVT_STATE_ID_SCR_WALLET_INFO_MIN=EVT_STATE_ID_SCR_UTXOS_MAX+1, // 266 + EVT_WALLET_INFO_EDIT_NAME , // 267 + EVT_WALLET_INFO_REMOVE , // 268 + EVT_WALLET_INFO_EXPORT_DB , // 269 + EVT_WALLET_INFO_EXPORT_CSV , // 270 + EVT_WALLET_INFO_EXPORT_DESCRIPTOR , // 271 + EVT_WALLET_INFO_EXPORT_COLDCARD , // 272 + EVT_WALLET_INFO_EXPORT_QRCODE , // 273 + EVT_WALLET_INFO_SIGNER_INFO_REQUEST , // 274 + EVT_WALLET_INFO_EDIT_DESCRIPTION , // 275 + EVT_WALLET_INFO_IMPORT_PSBT , // 276 + EVT_WALLET_INFO_REFRESH_WALLET_REQUEST , // 277 + EVT_WALLET_INFO_GAP_LIMIT_REQUEST , // 278 + EVT_WALLET_INFO_BACK_REQUEST , // 279 + EVT_WALLET_INFO_UTXOS_REQUEST , // 280 + EVT_WALLET_INFO_CHANGE_ADDRESS_REQUEST , // 281 + EVT_WALLET_INFO_MASTER_SIGNER_INFO_REQUEST , // 282 + EVT_WALLET_INFO_REMOTE_SIGNER_INFO_REQUEST , // 283 + EVT_STATE_ID_SCR_WALLET_INFO_MAX , // 284 }; enum EVT_STATE_ID_SCR_ADD_WALLET_CONFIRMATION { - EVT_STATE_ID_SCR_ADD_WALLET_CONFIRMATION_MIN=EVT_STATE_ID_SCR_WALLET_INFO_MAX+1, // 283 - EVT_ADD_WALLET_CONFIRM_CREATE , // 284 - EVT_ADD_WALLET_TOP_UP_XPUBS_REQUEST , // 285 - EVT_ADD_WALLET_DOWNLOAD_DESCRIPTOR , // 286 - EVT_ADD_WALLET_GENERATE_SIGNER , // 287 - EVT_ADD_WALLET_GET_WALLET_DESCRIPTOR , // 288 - EVT_ADD_WALLET_COPY_WALLET_DESCRIPTOR , // 289 - EVT_ADD_WALLET_CONFIRMATION_BACK_REQUEST , // 290 - EVT_ADD_WALLET_SUCCESSFULLY , // 291 - EVT_STATE_ID_SCR_ADD_WALLET_CONFIRMATION_MAX , // 292 + EVT_STATE_ID_SCR_ADD_WALLET_CONFIRMATION_MIN=EVT_STATE_ID_SCR_WALLET_INFO_MAX+1, // 285 + EVT_ADD_WALLET_CONFIRM_CREATE , // 286 + EVT_ADD_WALLET_TOP_UP_XPUBS_REQUEST , // 287 + EVT_ADD_WALLET_DOWNLOAD_DESCRIPTOR , // 288 + EVT_ADD_WALLET_GENERATE_SIGNER , // 289 + EVT_ADD_WALLET_GET_WALLET_DESCRIPTOR , // 290 + EVT_ADD_WALLET_COPY_WALLET_DESCRIPTOR , // 291 + EVT_ADD_WALLET_CONFIRMATION_BACK_REQUEST , // 292 + EVT_ADD_WALLET_SUCCESSFULLY , // 293 + EVT_STATE_ID_SCR_ADD_WALLET_CONFIRMATION_MAX , // 294 }; enum EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_TO_WALLET { - EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_TO_WALLET_MIN=EVT_STATE_ID_SCR_ADD_WALLET_CONFIRMATION_MAX+1, // 293 - EVT_ADD_HARDWARE_SIGNER_TO_WALLET_MASTER_SIGNER , // 294 - EVT_ADD_HARDWARE_SIGNER_TO_WALLET_REMOTE_SIGNER , // 295 - EVT_ADD_HARDWARE_SIGNER_TO_WALLET_MASTER_SIGNER_REFRESH , // 296 - EVT_ADD_HARDWARE_SIGNER_TO_WALLET_SEND_PIN , // 297 - EVT_ADD_HARDWARE_SIGNER_TO_WALLET_PROMT_PIN , // 298 - EVT_ADD_HARDWARE_SIGNER_TO_WALLET_REMOTE_SIGNER_RESULT , // 299 - EVT_ADD_HARDWARE_SIGNER_TO_WALLET_MASTER_SIGNER_RESULT , // 300 - EVT_ADD_HARDWARE_SIGNER_TO_WALLET_BACK , // 301 - EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_TO_WALLET_MAX , // 302 + EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_TO_WALLET_MIN=EVT_STATE_ID_SCR_ADD_WALLET_CONFIRMATION_MAX+1, // 295 + EVT_ADD_HARDWARE_SIGNER_TO_WALLET_MASTER_SIGNER , // 296 + EVT_ADD_HARDWARE_SIGNER_TO_WALLET_REMOTE_SIGNER , // 297 + EVT_ADD_HARDWARE_SIGNER_TO_WALLET_MASTER_SIGNER_REFRESH , // 298 + EVT_ADD_HARDWARE_SIGNER_TO_WALLET_SEND_PIN , // 299 + EVT_ADD_HARDWARE_SIGNER_TO_WALLET_PROMT_PIN , // 300 + EVT_ADD_HARDWARE_SIGNER_TO_WALLET_REMOTE_SIGNER_RESULT , // 301 + EVT_ADD_HARDWARE_SIGNER_TO_WALLET_MASTER_SIGNER_RESULT , // 302 + EVT_ADD_HARDWARE_SIGNER_TO_WALLET_BACK , // 303 + EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_TO_WALLET_MAX , // 304 }; enum EVT_STATE_ID_SCR_WALLET_CHANGE_ADDRESSES { - EVT_STATE_ID_SCR_WALLET_CHANGE_ADDRESSES_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_TO_WALLET_MAX+1, // 303 - EVT_WALLET_CHANGE_ADDRESSES_GEN_NEW_ADDRESS , // 304 - EVT_WALLET_CHANGE_ADDRESSES_COPY , // 305 - EVT_WALLET_CHANGE_ADDRESS_BACK_REQUEST , // 306 - EVT_CHANGE_ADDRESS_BACK_SHARED_WALLET , // 307 - EVT_STATE_ID_SCR_WALLET_CHANGE_ADDRESSES_MAX , // 308 + EVT_STATE_ID_SCR_WALLET_CHANGE_ADDRESSES_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_TO_WALLET_MAX+1, // 305 + EVT_WALLET_CHANGE_ADDRESSES_GEN_NEW_ADDRESS , // 306 + EVT_WALLET_CHANGE_ADDRESSES_COPY , // 307 + EVT_WALLET_CHANGE_ADDRESS_BACK_REQUEST , // 308 + EVT_CHANGE_ADDRESS_BACK_SHARED_WALLET , // 309 + EVT_STATE_ID_SCR_WALLET_CHANGE_ADDRESSES_MAX , // 310 }; enum EVT_STATE_ID_SCR_ADD_MASTER_SIGNER_RESULT { - EVT_STATE_ID_SCR_ADD_MASTER_SIGNER_RESULT_MIN=EVT_STATE_ID_SCR_WALLET_CHANGE_ADDRESSES_MAX+1, // 309 - EVT_ADD_MASTER_SIGNER_RESULT_RUN_HEALTHCHECK , // 310 - EVT_ADD_MASTER_SIGNER_RESULT_PROMT_PIN , // 311 - EVT_ADD_MASTER_SIGNER_RESULT_GET_XPUBS , // 312 - EVT_ADD_MASTER_SIGNER_INFO_REMOVE_REQUEST , // 313 - EVT_ADD_MASTER_SIGNER_FINISHED , // 314 - EVT_ADD_MASTER_SIGNER_RESULT_CONFIRM_ADD_TO_WALLET_CONFIGURATION , // 315 - EVT_STATE_ID_SCR_ADD_MASTER_SIGNER_RESULT_MAX , // 316 + EVT_STATE_ID_SCR_ADD_MASTER_SIGNER_RESULT_MIN=EVT_STATE_ID_SCR_WALLET_CHANGE_ADDRESSES_MAX+1, // 311 + EVT_ADD_MASTER_SIGNER_RESULT_RUN_HEALTHCHECK , // 312 + EVT_ADD_MASTER_SIGNER_RESULT_PROMT_PIN , // 313 + EVT_ADD_MASTER_SIGNER_RESULT_GET_XPUBS , // 314 + EVT_ADD_MASTER_SIGNER_INFO_REMOVE_REQUEST , // 315 + EVT_ADD_MASTER_SIGNER_FINISHED , // 316 + EVT_ADD_MASTER_SIGNER_RESULT_CONFIRM_ADD_TO_WALLET_CONFIGURATION , // 317 + EVT_STATE_ID_SCR_ADD_MASTER_SIGNER_RESULT_MAX , // 318 }; enum EVT_STATE_ID_SCR_REMOTE_SIGNER_INFO { - EVT_STATE_ID_SCR_REMOTE_SIGNER_INFO_MIN=EVT_STATE_ID_SCR_ADD_MASTER_SIGNER_RESULT_MAX+1, // 317 - EVT_REMOTE_SIGNER_INFO_HEALTH_CHECK , // 318 - EVT_REMOTE_SIGNER_INFO_EDIT_NAME , // 319 - EVT_REMOTE_SIGNER_INFO_IMPORT_SIGNATURE , // 320 - EVT_REMOTE_SIGNER_INFO_EXPORT_MESSAGE , // 321 - EVT_REMOTE_SIGNER_INFO_DELETE_REQUEST , // 322 - EVT_REMOTE_SIGNER_INFO_GET_XPUBS , // 323 - EVT_REMOTE_SIGNER_INFO_BACK_WALLET_INFO , // 324 - EVT_REMOTE_SIGNER_INFO_BACK_HOME , // 325 - EVT_STATE_ID_SCR_REMOTE_SIGNER_INFO_MAX , // 326 + EVT_STATE_ID_SCR_REMOTE_SIGNER_INFO_MIN=EVT_STATE_ID_SCR_ADD_MASTER_SIGNER_RESULT_MAX+1, // 319 + EVT_REMOTE_SIGNER_INFO_HEALTH_CHECK , // 320 + EVT_REMOTE_SIGNER_INFO_EDIT_NAME , // 321 + EVT_REMOTE_SIGNER_INFO_IMPORT_SIGNATURE , // 322 + EVT_REMOTE_SIGNER_INFO_EXPORT_MESSAGE , // 323 + EVT_REMOTE_SIGNER_INFO_DELETE_REQUEST , // 324 + EVT_REMOTE_SIGNER_INFO_GET_XPUBS , // 325 + EVT_REMOTE_SIGNER_INFO_BACK_WALLET_INFO , // 326 + EVT_REMOTE_SIGNER_INFO_BACK_HOME , // 327 + EVT_STATE_ID_SCR_REMOTE_SIGNER_INFO_MAX , // 328 }; enum EVT_STATE_ID_SCR_UNLOCK_DB { - EVT_STATE_ID_SCR_UNLOCK_DB_MIN=EVT_STATE_ID_SCR_REMOTE_SIGNER_INFO_MAX+1, // 327 - EVT_LOGIN_PERFORM_PASSWORD_REQUEST , // 328 - EVT_STATE_ID_SCR_UNLOCK_DB_MAX , // 329 + EVT_STATE_ID_SCR_UNLOCK_DB_MIN=EVT_STATE_ID_SCR_REMOTE_SIGNER_INFO_MAX+1, // 329 + EVT_LOGIN_PERFORM_PASSWORD_REQUEST , // 330 + EVT_STATE_ID_SCR_UNLOCK_DB_MAX , // 331 }; enum EVT_STATE_ID_SCR_CONSOLIDATE_OUTPUT { - EVT_STATE_ID_SCR_CONSOLIDATE_OUTPUT_MIN=EVT_STATE_ID_SCR_UNLOCK_DB_MAX+1, // 330 - EVT_CONSOLIDATE_MAKE_TRANSACTION , // 331 - EVT_CONSOLIDATE_BACK_REQUEST , // 332 - EVT_CONSOLIDATE_MAKE_TRANSACTION_SUCCEED , // 333 - EVT_STATE_ID_SCR_CONSOLIDATE_OUTPUT_MAX , // 334 + EVT_STATE_ID_SCR_CONSOLIDATE_OUTPUT_MIN=EVT_STATE_ID_SCR_UNLOCK_DB_MAX+1, // 332 + EVT_CONSOLIDATE_MAKE_TRANSACTION , // 333 + EVT_CONSOLIDATE_BACK_REQUEST , // 334 + EVT_CONSOLIDATE_MAKE_TRANSACTION_SUCCEED , // 335 + EVT_STATE_ID_SCR_CONSOLIDATE_OUTPUT_MAX , // 336 }; enum EVT_STATE_ID_SCR_UTXO_OUTPUT { - EVT_STATE_ID_SCR_UTXO_OUTPUT_MIN=EVT_STATE_ID_SCR_CONSOLIDATE_OUTPUT_MAX+1, // 335 - EVT_UTXO_INFO_CHECKOUT_TX_RELATED , // 336 - EVT_UTXO_INFO_BACK_REQUEST , // 337 - EVT_UTXO_INFO_VIEW_TX_RELATED , // 338 - EVT_STATE_ID_SCR_UTXO_OUTPUT_MAX , // 339 + EVT_STATE_ID_SCR_UTXO_OUTPUT_MIN=EVT_STATE_ID_SCR_CONSOLIDATE_OUTPUT_MAX+1, // 337 + EVT_UTXO_INFO_CHECKOUT_TX_RELATED , // 338 + EVT_UTXO_INFO_BACK_REQUEST , // 339 + EVT_UTXO_INFO_VIEW_TX_RELATED , // 340 + EVT_STATE_ID_SCR_UTXO_OUTPUT_MAX , // 341 }; enum EVT_STATE_ID_SCR_INPUT_PIN { - EVT_STATE_ID_SCR_INPUT_PIN_MIN=EVT_STATE_ID_SCR_UTXO_OUTPUT_MAX+1, // 340 - EVT_INPUT_PIN_SEND_PIN , // 341 - EVT_INPUT_PIN_CLOSE , // 342 - EVT_STATE_ID_SCR_INPUT_PIN_MAX , // 343 + EVT_STATE_ID_SCR_INPUT_PIN_MIN=EVT_STATE_ID_SCR_UTXO_OUTPUT_MAX+1, // 342 + EVT_INPUT_PIN_SEND_PIN , // 343 + EVT_INPUT_PIN_CLOSE , // 344 + EVT_STATE_ID_SCR_INPUT_PIN_MAX , // 345 }; enum EVT_STATE_ID_SCR_ADD_NEW_SIGNER { - EVT_STATE_ID_SCR_ADD_NEW_SIGNER_MIN=EVT_STATE_ID_SCR_INPUT_PIN_MAX+1, // 344 - EVT_ADD_HARDWARE_SIGNER_REQUEST , // 345 - EVT_ADD_NEW_SIGNER_BACK_REQUEST , // 346 - EVT_ADD_NEW_SIGNER_SOFTWARE_SIGNER_NEW_SEED , // 347 - EVT_ADD_NEW_SIGNER_SOFTWARE_SIGNER_EXIST_SEED , // 348 - EVT_ADD_NEW_SIGNER_BACK_TO_HOME_ONLINE , // 349 - EVT_STATE_ID_SCR_ADD_NEW_SIGNER_MAX , // 350 + EVT_STATE_ID_SCR_ADD_NEW_SIGNER_MIN=EVT_STATE_ID_SCR_INPUT_PIN_MAX+1, // 346 + EVT_ADD_HARDWARE_SIGNER_REQUEST , // 347 + EVT_ADD_NEW_SIGNER_BACK_REQUEST , // 348 + EVT_ADD_NEW_SIGNER_SOFTWARE_SIGNER_NEW_SEED , // 349 + EVT_ADD_NEW_SIGNER_SOFTWARE_SIGNER_EXIST_SEED , // 350 + EVT_ADD_NEW_SIGNER_BACK_TO_HOME_ONLINE , // 351 + EVT_STATE_ID_SCR_ADD_NEW_SIGNER_MAX , // 352 }; enum EVT_STATE_ID_SCR_ADD_NEW_SOFTWARE_SIGNER { - EVT_STATE_ID_SCR_ADD_NEW_SOFTWARE_SIGNER_MIN=EVT_STATE_ID_SCR_ADD_NEW_SIGNER_MAX+1, // 351 - EVT_ADD_NEW_SOFTWARE_SIGNER_BACK , // 352 - EVT_CREATE_NEW_SEED , // 353 - EVT_ADD_NEW_SOFTWARE_SIGNER_TO_WALLET_BACK , // 354 - EVT_NEW_SOFTWARE_SIGNER_BACK_TO_WALLET_SIGNER_CONFIGURATION , // 355 - EVT_STATE_ID_SCR_ADD_NEW_SOFTWARE_SIGNER_MAX , // 356 + EVT_STATE_ID_SCR_ADD_NEW_SOFTWARE_SIGNER_MIN=EVT_STATE_ID_SCR_ADD_NEW_SIGNER_MAX+1, // 353 + EVT_ADD_NEW_SOFTWARE_SIGNER_BACK , // 354 + EVT_CREATE_NEW_SEED , // 355 + EVT_ADD_NEW_SOFTWARE_SIGNER_TO_WALLET_BACK , // 356 + EVT_NEW_SOFTWARE_SIGNER_BACK_TO_WALLET_SIGNER_CONFIGURATION , // 357 + EVT_STATE_ID_SCR_ADD_NEW_SOFTWARE_SIGNER_MAX , // 358 }; enum EVT_STATE_ID_SCR_RECOVER_SOFTWARE_SIGNER { - EVT_STATE_ID_SCR_RECOVER_SOFTWARE_SIGNER_MIN=EVT_STATE_ID_SCR_ADD_NEW_SOFTWARE_SIGNER_MAX+1, // 357 - EVT_RECOVER_SOFTWARE_SIGNER_REQUEST , // 358 - EVT_RECOVER_SOFTWARE_SIGNER_BACK , // 359 - EVT_RECOVER_SOFTWARE_SIGNER_SUCCEED , // 360 - EVT_RECOVER_SOFTWARE_SIGNER_TO_WALLET_BACK , // 361 - EVT_RECOVER_SOFTWARE_SIGNER_BACK_TO_WALLET_SIGNER_CONFIGURATION , // 362 - EVT_STATE_ID_SCR_RECOVER_SOFTWARE_SIGNER_MAX , // 363 + EVT_STATE_ID_SCR_RECOVER_SOFTWARE_SIGNER_MIN=EVT_STATE_ID_SCR_ADD_NEW_SOFTWARE_SIGNER_MAX+1, // 359 + EVT_RECOVER_SOFTWARE_SIGNER_REQUEST , // 360 + EVT_RECOVER_SOFTWARE_SIGNER_BACK , // 361 + EVT_RECOVER_SOFTWARE_SIGNER_SUCCEED , // 362 + EVT_RECOVER_SOFTWARE_SIGNER_TO_WALLET_BACK , // 363 + EVT_RECOVER_SOFTWARE_SIGNER_BACK_TO_WALLET_SIGNER_CONFIGURATION , // 364 + EVT_STATE_ID_SCR_RECOVER_SOFTWARE_SIGNER_MAX , // 365 }; enum EVT_STATE_ID_SCR_CREATE_NEW_SEED { - EVT_STATE_ID_SCR_CREATE_NEW_SEED_MIN=EVT_STATE_ID_SCR_RECOVER_SOFTWARE_SIGNER_MAX+1, // 364 - EVT_CREATE_NEW_SEED_BACK , // 365 - EVT_CREATE_NEW_SEED_SUCCEED , // 366 - EVT_NEW_SEED_BACK_TO_WALLET_SIGNER_CONFIGURATION , // 367 - EVT_STATE_ID_SCR_CREATE_NEW_SEED_MAX , // 368 + EVT_STATE_ID_SCR_CREATE_NEW_SEED_MIN=EVT_STATE_ID_SCR_RECOVER_SOFTWARE_SIGNER_MAX+1, // 366 + EVT_CREATE_NEW_SEED_BACK , // 367 + EVT_CREATE_NEW_SEED_SUCCEED , // 368 + EVT_NEW_SEED_BACK_TO_WALLET_SIGNER_CONFIGURATION , // 369 + EVT_STATE_ID_SCR_CREATE_NEW_SEED_MAX , // 370 }; enum EVT_STATE_ID_SCR_SOFTWARE_SIGNER_CONFIGURATION { - EVT_STATE_ID_SCR_SOFTWARE_SIGNER_CONFIGURATION_MIN=EVT_STATE_ID_SCR_CREATE_NEW_SEED_MAX+1, // 369 - EVT_SOFTWARE_SIGNER_REQUEST_CREATE , // 370 - EVT_SOFTWARE_SIGNER_CONFIGURATION_BACK , // 371 - EVT_SOFTWARE_SIGNER_CONFIGURATION_BACK_TO_WALLET_SIGNER_CONFIGURATION , // 372 - EVT_PRIMARY_KEY_CONFIGURATION_REQUEST , // 373 - EVT_STATE_ID_SCR_SOFTWARE_SIGNER_CONFIGURATION_MAX , // 374 + EVT_STATE_ID_SCR_SOFTWARE_SIGNER_CONFIGURATION_MIN=EVT_STATE_ID_SCR_CREATE_NEW_SEED_MAX+1, // 371 + EVT_SOFTWARE_SIGNER_REQUEST_CREATE , // 372 + EVT_SOFTWARE_SIGNER_CONFIGURATION_BACK , // 373 + EVT_SOFTWARE_SIGNER_CONFIGURATION_BACK_TO_WALLET_SIGNER_CONFIGURATION , // 374 + EVT_PRIMARY_KEY_CONFIGURATION_REQUEST , // 375 + EVT_STATE_ID_SCR_SOFTWARE_SIGNER_CONFIGURATION_MAX , // 376 }; enum EVT_STATE_ID_SCR_ADD_NEW_SIGNER_TO_WALLET { - EVT_STATE_ID_SCR_ADD_NEW_SIGNER_TO_WALLET_MIN=EVT_STATE_ID_SCR_SOFTWARE_SIGNER_CONFIGURATION_MAX+1, // 375 - EVT_ADD_SIGNER_TO_WALLET_BACK_REQUEST , // 376 - EVT_ADD_HARDWARE_SIGNER_TO_WALLET , // 377 - EVT_ADD_NEW_SOFTWARE_SIGNER_TO_WALLET , // 378 - EVT_RECOVER_SOFTWARE_SIGNER_TO_WALLET , // 379 - EVT_STATE_ID_SCR_ADD_NEW_SIGNER_TO_WALLET_MAX , // 380 + EVT_STATE_ID_SCR_ADD_NEW_SIGNER_TO_WALLET_MIN=EVT_STATE_ID_SCR_SOFTWARE_SIGNER_CONFIGURATION_MAX+1, // 377 + EVT_ADD_SIGNER_TO_WALLET_BACK_REQUEST , // 378 + EVT_ADD_HARDWARE_SIGNER_TO_WALLET , // 379 + EVT_ADD_NEW_SOFTWARE_SIGNER_TO_WALLET , // 380 + EVT_RECOVER_SOFTWARE_SIGNER_TO_WALLET , // 381 + EVT_STATE_ID_SCR_ADD_NEW_SIGNER_TO_WALLET_MAX , // 382 }; enum EVT_STATE_ID_SCR_INPUT_PASSPHRASE { - EVT_STATE_ID_SCR_INPUT_PASSPHRASE_MIN=EVT_STATE_ID_SCR_ADD_NEW_SIGNER_TO_WALLET_MAX+1, // 381 - EVT_INPUT_PASSPHRASE_SEND_PASSPHRASE , // 382 - EVT_INPUT_PASSPHRASE_CLOSE , // 383 - EVT_STATE_ID_SCR_INPUT_PASSPHRASE_MAX , // 384 + EVT_STATE_ID_SCR_INPUT_PASSPHRASE_MIN=EVT_STATE_ID_SCR_ADD_NEW_SIGNER_TO_WALLET_MAX+1, // 383 + EVT_INPUT_PASSPHRASE_SEND_PASSPHRASE , // 384 + EVT_INPUT_PASSPHRASE_CLOSE , // 385 + EVT_STATE_ID_SCR_INPUT_PASSPHRASE_MAX , // 386 }; enum EVT_STATE_ID_SCR_LOGIN_ONLINE { - EVT_STATE_ID_SCR_LOGIN_ONLINE_MIN=EVT_STATE_ID_SCR_INPUT_PASSPHRASE_MAX+1, // 385 - EVT_LOGIN_ONLINE_CREATE_ACCOUNT , // 386 - EVT_LOGIN_ONLINE_SIGN_IN , // 387 - EVT_LOGIN_ONLINE_SWITCH_LOCAL_MODE , // 388 - EVT_LOGIN_ONLINE_CHANGE_PASSWORD , // 389 - EVT_LOGIN_ONLINE_FORGOT_PASSWORD , // 390 - EVT_LOGIN_ONLINE_RECOVER_PASSWORD , // 391 - EVT_LOGIN_ONLINE_STAY_SIGNED_IN , // 392 - EVT_LOGIN_ONLINE_VERIFY_NEW_DEVICE , // 393 - EVT_LOGIN_ONLINE_RESEND_CONFIRM_CODE , // 394 - EVT_STATE_ID_SCR_LOGIN_ONLINE_MAX , // 395 + EVT_STATE_ID_SCR_LOGIN_ONLINE_MIN=EVT_STATE_ID_SCR_INPUT_PASSPHRASE_MAX+1, // 387 + EVT_LOGIN_ONLINE_CREATE_ACCOUNT , // 388 + EVT_LOGIN_ONLINE_SIGN_IN , // 389 + EVT_LOGIN_ONLINE_SWITCH_LOCAL_MODE , // 390 + EVT_LOGIN_ONLINE_CHANGE_PASSWORD , // 391 + EVT_LOGIN_ONLINE_FORGOT_PASSWORD , // 392 + EVT_LOGIN_ONLINE_RECOVER_PASSWORD , // 393 + EVT_LOGIN_ONLINE_STAY_SIGNED_IN , // 394 + EVT_LOGIN_ONLINE_VERIFY_NEW_DEVICE , // 395 + EVT_LOGIN_ONLINE_RESEND_CONFIRM_CODE , // 396 + EVT_STATE_ID_SCR_LOGIN_ONLINE_MAX , // 397 }; enum EVT_STATE_ID_SCR_HOME_ONLINE { - EVT_STATE_ID_SCR_HOME_ONLINE_MIN=EVT_STATE_ID_SCR_LOGIN_ONLINE_MAX+1, // 396 - EVT_HOME_ONLINE_ADD_SIGNER , // 397 - EVT_HOME_ONLINE_CREATE_CHAT_ROOM , // 398 - EVT_HOME_ONLINE_CREATE_DIRECT_CHAT , // 399 - EVT_HOME_ONLINE_DELETE_DIRECT_ROOM , // 400 - EVT_HOME_ONLINE_DELETE_ROOM , // 401 - EVT_HOME_ONLINE_SEND_CHAT_CONTENT , // 402 - EVT_HOME_ONLINE_CANCEL_SHARED_WL , // 403 - EVT_HOME_ONLINE_CREATE_SHARED_WALLET , // 404 - EVT_HOME_ONLINE_CANCEL_TRANSACTION , // 405 - EVT_HOME_ONLINE_SERVICE_SUPPORT_REQ , // 406 - EVT_HOME_ONLINE_ADD_CONTACT , // 407 - EVT_HOME_SHOW_ALL_PENDING_CONTACT , // 408 - EVT_HOME_ONLINE_SIGNER_AVAILABLE_FOR_SWL , // 409 - EVT_HOME_SHARED_WALLET_CONFIGURE , // 410 - EVT_HOME_BACKUP_SHARED_WALLET , // 411 - EVT_HOME_ONLINE_SIGNER_UNAVAILABLE_FOR_SWL , // 412 - EVT_HOME_SHARED_WL_SEND_REQUEST , // 413 - EVT_HOME_ONLINE_TRANSACTION_INFO_REQUEST , // 414 - EVT_STATE_ID_SCR_HOME_ONLINE_MAX , // 415 + EVT_STATE_ID_SCR_HOME_ONLINE_MIN=EVT_STATE_ID_SCR_LOGIN_ONLINE_MAX+1, // 398 + EVT_HOME_ONLINE_ADD_SIGNER , // 399 + EVT_HOME_ONLINE_CREATE_CHAT_ROOM , // 400 + EVT_HOME_ONLINE_CREATE_DIRECT_CHAT , // 401 + EVT_HOME_ONLINE_DELETE_DIRECT_ROOM , // 402 + EVT_HOME_ONLINE_DELETE_ROOM , // 403 + EVT_HOME_ONLINE_SEND_CHAT_CONTENT , // 404 + EVT_HOME_ONLINE_CANCEL_SHARED_WL , // 405 + EVT_HOME_ONLINE_CREATE_SHARED_WALLET , // 406 + EVT_HOME_ONLINE_CANCEL_TRANSACTION , // 407 + EVT_HOME_ONLINE_SERVICE_SUPPORT_REQ , // 408 + EVT_HOME_ONLINE_ADD_CONTACT , // 409 + EVT_HOME_SHOW_ALL_PENDING_CONTACT , // 410 + EVT_HOME_ONLINE_SIGNER_AVAILABLE_FOR_SWL , // 411 + EVT_HOME_SHARED_WALLET_CONFIGURE , // 412 + EVT_HOME_BACKUP_SHARED_WALLET , // 413 + EVT_HOME_ONLINE_SIGNER_UNAVAILABLE_FOR_SWL , // 414 + EVT_HOME_SHARED_WL_SEND_REQUEST , // 415 + EVT_HOME_ONLINE_TRANSACTION_INFO_REQUEST , // 416 + EVT_STATE_ID_SCR_HOME_ONLINE_MAX , // 417 }; enum EVT_STATE_ID_SCR_ONLINE_ADD_CONTACTS { - EVT_STATE_ID_SCR_ONLINE_ADD_CONTACTS_MIN=EVT_STATE_ID_SCR_HOME_ONLINE_MAX+1, // 416 - EVT_ONLINE_ADD_CONTACTS_SEARCH_ID , // 417 - EVT_ONLINE_ADD_CONTACTS_SEND_INVITATION , // 418 - EVT_ONLINE_ADD_CONTACTS_BACK , // 419 - EVT_STATE_ID_SCR_ONLINE_ADD_CONTACTS_MAX , // 420 + EVT_STATE_ID_SCR_ONLINE_ADD_CONTACTS_MIN=EVT_STATE_ID_SCR_HOME_ONLINE_MAX+1, // 418 + EVT_ONLINE_ADD_CONTACTS_SEARCH_ID , // 419 + EVT_ONLINE_ADD_CONTACTS_SEND_INVITATION , // 420 + EVT_ONLINE_ADD_CONTACTS_BACK , // 421 + EVT_STATE_ID_SCR_ONLINE_ADD_CONTACTS_MAX , // 422 }; enum EVT_STATE_ID_SCR_PENDING_REQUEST { - EVT_STATE_ID_SCR_PENDING_REQUEST_MIN=EVT_STATE_ID_SCR_ONLINE_ADD_CONTACTS_MAX+1, // 421 - EVT_PENDING_REQUEST_ACCEPT , // 422 - EVT_PENDING_REQUEST_IGNORE , // 423 - EVT_PENDING_REQUEST_BACK , // 424 - EVT_STATE_ID_SCR_PENDING_REQUEST_MAX , // 425 + EVT_STATE_ID_SCR_PENDING_REQUEST_MIN=EVT_STATE_ID_SCR_ONLINE_ADD_CONTACTS_MAX+1, // 423 + EVT_PENDING_REQUEST_ACCEPT , // 424 + EVT_PENDING_REQUEST_IGNORE , // 425 + EVT_PENDING_REQUEST_BACK , // 426 + EVT_STATE_ID_SCR_PENDING_REQUEST_MAX , // 427 }; enum EVT_STATE_ID_SCR_CREATE_SHARED_WALLET { - EVT_STATE_ID_SCR_CREATE_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_PENDING_REQUEST_MAX+1, // 426 - EVT_CREATE_SHARED_WALLET_REQUEST , // 427 - EVT_CANCEL_SHARED_WALLET_REQUEST , // 428 - EVT_CREATE_SHARED_WALLET_BACK , // 429 - EVT_CREATE_SHARED_WALLET_REQUEST_CONFIGURATION , // 430 - EVT_RECOVER_SHARED_WALLET_REQUEST , // 431 - EVT_STATE_ID_SCR_CREATE_SHARED_WALLET_MAX , // 432 + EVT_STATE_ID_SCR_CREATE_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_PENDING_REQUEST_MAX+1, // 428 + EVT_CREATE_SHARED_WALLET_REQUEST , // 429 + EVT_CANCEL_SHARED_WALLET_REQUEST , // 430 + EVT_CREATE_SHARED_WALLET_BACK , // 431 + EVT_CREATE_SHARED_WALLET_REQUEST_CONFIGURATION , // 432 + EVT_RECOVER_SHARED_WALLET_REQUEST , // 433 + EVT_STATE_ID_SCR_CREATE_SHARED_WALLET_MAX , // 434 }; enum EVT_STATE_ID_SCR_CONFIGURE_SHARED_WALLET { - EVT_STATE_ID_SCR_CONFIGURE_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_CREATE_SHARED_WALLET_MAX+1, // 433 - EVT_CONFIGURE_SHARED_WALLET_REQUEST , // 434 - EVT_CONFIGURE_SHARED_WALLET_BACK , // 435 - EVT_CONFIGURE_SHARED_WALLET_REVIEW_REQUEST , // 436 - EVT_STATE_ID_SCR_CONFIGURE_SHARED_WALLET_MAX , // 437 + EVT_STATE_ID_SCR_CONFIGURE_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_CREATE_SHARED_WALLET_MAX+1, // 435 + EVT_CONFIGURE_SHARED_WALLET_REQUEST , // 436 + EVT_CONFIGURE_SHARED_WALLET_BACK , // 437 + EVT_CONFIGURE_SHARED_WALLET_REVIEW_REQUEST , // 438 + EVT_STATE_ID_SCR_CONFIGURE_SHARED_WALLET_MAX , // 439 }; enum EVT_STATE_ID_SCR_REVIEW_SHARED_WALLET { - EVT_STATE_ID_SCR_REVIEW_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_CONFIGURE_SHARED_WALLET_MAX+1, // 438 - EVT_REVIEW_SHARED_WALLET_BACK , // 439 - EVT_REVIEW_SHARED_WALLET_INVITE_SIGNER , // 440 - EVT_STATE_ID_SCR_REVIEW_SHARED_WALLET_MAX , // 441 + EVT_STATE_ID_SCR_REVIEW_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_CONFIGURE_SHARED_WALLET_MAX+1, // 440 + EVT_REVIEW_SHARED_WALLET_BACK , // 441 + EVT_REVIEW_SHARED_WALLET_INVITE_SIGNER , // 442 + EVT_STATE_ID_SCR_REVIEW_SHARED_WALLET_MAX , // 443 }; enum EVT_STATE_ID_SCR_ASSIGN_SIGNER_TO_SHARED_WALLET { - EVT_STATE_ID_SCR_ASSIGN_SIGNER_TO_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_REVIEW_SHARED_WALLET_MAX+1, // 442 - EVT_ASSIGN_SIGNER_TO_SHARED_REQUEST , // 443 - EVT_ASSIGN_SIGNER_TO_SHARED_WALLET_BACK_REVIEW_WALLET , // 444 - EVT_ASSIGN_SIGNER_TO_SHARED_BACK_WALLET_CONFIG , // 445 - EVT_STATE_ID_SCR_ASSIGN_SIGNER_TO_SHARED_WALLET_MAX , // 446 + EVT_STATE_ID_SCR_ASSIGN_SIGNER_TO_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_REVIEW_SHARED_WALLET_MAX+1, // 444 + EVT_ASSIGN_SIGNER_TO_SHARED_REQUEST , // 445 + EVT_ASSIGN_SIGNER_TO_SHARED_WALLET_BACK_REVIEW_WALLET , // 446 + EVT_ASSIGN_SIGNER_TO_SHARED_BACK_WALLET_CONFIG , // 447 + EVT_STATE_ID_SCR_ASSIGN_SIGNER_TO_SHARED_WALLET_MAX , // 448 }; enum EVT_STATE_ID_SCR_SHARED_WALLET_CONFIGURE { - EVT_STATE_ID_SCR_SHARED_WALLET_CONFIGURE_MIN=EVT_STATE_ID_SCR_ASSIGN_SIGNER_TO_SHARED_WALLET_MAX+1, // 447 - EVT_SHARED_WALLET_FINALIZE_WALLET , // 448 - EVT_SHARED_WALLET_CONFIGURE_CANCEL , // 449 - EVT_SHARED_WALLET_CONFIGURE_EXPORT_COLDCARD , // 450 - EVT_SHARED_WALLET_CONFIGURE_EXPORT_QRCODE , // 451 - EVT_SHARED_WALLET_CONFIGURE_DELETE_SWL , // 452 - EVT_SHARED_WALLET_CONFIGURE_EXPORT_BSMS , // 453 - EVT_SHARED_WALLET_CONFIGURE_BACK , // 454 - EVT_SHARED_WALLET_ADD_SIGNER_REQUEST , // 455 - EVT_SHARED_WALLET_UTXO_OUTPUT , // 456 - EVT_SHARED_WALLET_CHANGE_ADDRESS , // 457 - EVT_STATE_ID_SCR_SHARED_WALLET_CONFIGURE_MAX , // 458 + EVT_STATE_ID_SCR_SHARED_WALLET_CONFIGURE_MIN=EVT_STATE_ID_SCR_ASSIGN_SIGNER_TO_SHARED_WALLET_MAX+1, // 449 + EVT_SHARED_WALLET_FINALIZE_WALLET , // 450 + EVT_SHARED_WALLET_CONFIGURE_CANCEL , // 451 + EVT_SHARED_WALLET_CONFIGURE_EXPORT_COLDCARD , // 452 + EVT_SHARED_WALLET_CONFIGURE_EXPORT_QRCODE , // 453 + EVT_SHARED_WALLET_CONFIGURE_DELETE_SWL , // 454 + EVT_SHARED_WALLET_CONFIGURE_EXPORT_BSMS , // 455 + EVT_SHARED_WALLET_CONFIGURE_BACK , // 456 + EVT_SHARED_WALLET_ADD_SIGNER_REQUEST , // 457 + EVT_SHARED_WALLET_UTXO_OUTPUT , // 458 + EVT_SHARED_WALLET_CHANGE_ADDRESS , // 459 + EVT_STATE_ID_SCR_SHARED_WALLET_CONFIGURE_MAX , // 460 }; enum EVT_STATE_ID_SCR_BACKUP_SHARED_WALLET { - EVT_STATE_ID_SCR_BACKUP_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_SHARED_WALLET_CONFIGURE_MAX+1, // 459 - EVT_BACKUP_SHARED_WALLET_REQUEST , // 460 - EVT_BACKUP_SHARED_WALLET_SKIP , // 461 - EVT_BACKUP_SHARED_WALLET_EXPORT_BSMS , // 462 - EVT_BACKUP_SHARED_WALLET_BACK , // 463 - EVT_BACKUP_WALLET_DEVICE_REGISTRATION , // 464 - EVT_STATE_ID_SCR_BACKUP_SHARED_WALLET_MAX , // 465 + EVT_STATE_ID_SCR_BACKUP_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_SHARED_WALLET_CONFIGURE_MAX+1, // 461 + EVT_BACKUP_SHARED_WALLET_REQUEST , // 462 + EVT_BACKUP_SHARED_WALLET_SKIP , // 463 + EVT_BACKUP_SHARED_WALLET_EXPORT_BSMS , // 464 + EVT_BACKUP_SHARED_WALLET_BACK , // 465 + EVT_BACKUP_WALLET_DEVICE_REGISTRATION , // 466 + EVT_STATE_ID_SCR_BACKUP_SHARED_WALLET_MAX , // 467 }; enum EVT_STATE_ID_SCR_SHARED_WL_DEVICE_REGISTRATION { - EVT_STATE_ID_SCR_SHARED_WL_DEVICE_REGISTRATION_MIN=EVT_STATE_ID_SCR_BACKUP_SHARED_WALLET_MAX+1, // 466 - EVT_SHARED_WALLET_EXPORT_COLDCARD , // 467 - EVT_SHARED_WALLET_EXPORT_QRCODE , // 468 - EVT_SHARED_WALLET_SKIP_REGISTRATION , // 469 - EVT_SHARED_WL_DEVICE_REGISTRAION_BACK , // 470 - EVT_STATE_ID_SCR_SHARED_WL_DEVICE_REGISTRATION_MAX , // 471 + EVT_STATE_ID_SCR_SHARED_WL_DEVICE_REGISTRATION_MIN=EVT_STATE_ID_SCR_BACKUP_SHARED_WALLET_MAX+1, // 468 + EVT_SHARED_WALLET_EXPORT_COLDCARD , // 469 + EVT_SHARED_WALLET_EXPORT_QRCODE , // 470 + EVT_SHARED_WALLET_SKIP_REGISTRATION , // 471 + EVT_SHARED_WL_DEVICE_REGISTRAION_BACK , // 472 + EVT_STATE_ID_SCR_SHARED_WL_DEVICE_REGISTRATION_MAX , // 473 }; enum EVT_STATE_ID_SCR_STARTING_CREATE_SIGNER { - EVT_STATE_ID_SCR_STARTING_CREATE_SIGNER_MIN=EVT_STATE_ID_SCR_SHARED_WL_DEVICE_REGISTRATION_MAX+1, // 472 - EVT_STARTING_CREATE_SIGNER_DUMMY , // 473 - EVT_STARTING_CREATE_SIGNER_BACK , // 474 - EVT_ONLINE_MODE_ADD_NEW_SIGNER , // 475 - EVT_STATE_ID_SCR_STARTING_CREATE_SIGNER_MAX , // 476 + EVT_STATE_ID_SCR_STARTING_CREATE_SIGNER_MIN=EVT_STATE_ID_SCR_SHARED_WL_DEVICE_REGISTRATION_MAX+1, // 474 + EVT_STARTING_CREATE_SIGNER_DUMMY , // 475 + EVT_STARTING_CREATE_SIGNER_BACK , // 476 + EVT_ONLINE_MODE_ADD_NEW_SIGNER , // 477 + EVT_STATE_ID_SCR_STARTING_CREATE_SIGNER_MAX , // 478 }; enum EVT_STATE_ID_TOAST_MESSAGE_DISPLAY { - EVT_STATE_ID_TOAST_MESSAGE_DISPLAY_MIN=EVT_STATE_ID_SCR_STARTING_CREATE_SIGNER_MAX+1, // 477 - EVT_CLOSE_TOAST_MESSAGE , // 478 - EVT_STATE_ID_TOAST_MESSAGE_DISPLAY_MAX , // 479 + EVT_STATE_ID_TOAST_MESSAGE_DISPLAY_MIN=EVT_STATE_ID_SCR_STARTING_CREATE_SIGNER_MAX+1, // 479 + EVT_CLOSE_TOAST_MESSAGE , // 480 + EVT_STATE_ID_TOAST_MESSAGE_DISPLAY_MAX , // 481 }; enum EVT_STATE_ID_SCR_RECOVER_SHARED_WALLET { - EVT_STATE_ID_SCR_RECOVER_SHARED_WALLET_MIN=EVT_STATE_ID_TOAST_MESSAGE_DISPLAY_MAX+1, // 480 - EVT_IMPORT_BSMS_SHARED_WALLET , // 481 - EVT_IMPORT_QR_SHARED_WALLET , // 482 - EVT_IMPORT_SHARED_WALLET_SUCCEED , // 483 - EVT_RECOVER_SHARED_WALLET_BACK , // 484 - EVT_STATE_ID_SCR_RECOVER_SHARED_WALLET_MAX , // 485 + EVT_STATE_ID_SCR_RECOVER_SHARED_WALLET_MIN=EVT_STATE_ID_TOAST_MESSAGE_DISPLAY_MAX+1, // 482 + EVT_IMPORT_BSMS_SHARED_WALLET , // 483 + EVT_IMPORT_QR_SHARED_WALLET , // 484 + EVT_IMPORT_SHARED_WALLET_SUCCEED , // 485 + EVT_RECOVER_SHARED_WALLET_BACK , // 486 + EVT_STATE_ID_SCR_RECOVER_SHARED_WALLET_MAX , // 487 }; enum EVT_STATE_ID_SCR_PRIMARY_KEY_ACCOUNT { - EVT_STATE_ID_SCR_PRIMARY_KEY_ACCOUNT_MIN=EVT_STATE_ID_SCR_RECOVER_SHARED_WALLET_MAX+1, // 486 - EVT_SELECT_PRIMARY_KEY_ACCOUNT_REQUEST , // 487 - EVT_PRIMARY_KEY_BACK_TO_CREATE_ACCOUNT , // 488 - EVT_PRIMARY_KEY_ACCOUNT_BACK , // 489 - EVT_ADD_PRIMARY_KEY_REQUEST , // 490 - EVT_SHOW_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_REQUEST , // 491 - EVT_SCR_SIGN_IN_MANUALLY_REQUEST , // 492 - EVT_PRIMARY_KEY_BACK_TO_SIGN_IN , // 493 - EVT_STATE_ID_SCR_PRIMARY_KEY_ACCOUNT_MAX , // 494 + EVT_STATE_ID_SCR_PRIMARY_KEY_ACCOUNT_MIN=EVT_STATE_ID_SCR_RECOVER_SHARED_WALLET_MAX+1, // 488 + EVT_SELECT_PRIMARY_KEY_ACCOUNT_REQUEST , // 489 + EVT_PRIMARY_KEY_BACK_TO_CREATE_ACCOUNT , // 490 + EVT_PRIMARY_KEY_ACCOUNT_BACK , // 491 + EVT_ADD_PRIMARY_KEY_REQUEST , // 492 + EVT_SHOW_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_REQUEST , // 493 + EVT_SCR_SIGN_IN_MANUALLY_REQUEST , // 494 + EVT_PRIMARY_KEY_BACK_TO_SIGN_IN , // 495 + EVT_STATE_ID_SCR_PRIMARY_KEY_ACCOUNT_MAX , // 496 }; enum EVT_STATE_ID_SCR_CREATE_ACCOUNT { - EVT_STATE_ID_SCR_CREATE_ACCOUNT_MIN=EVT_STATE_ID_SCR_PRIMARY_KEY_ACCOUNT_MAX+1, // 495 - EVT_CREATE_ACCOUNT_REQUEST , // 496 - EVT_CREATE_PRIMARY_KEY_REQUEST , // 497 - EVT_CREATE_ACCOUNT_PRIMARY_KEY_REQUEST , // 498 - EVT_CHANGE_PASSWORD_SHOW_REQUEST , // 499 - EVT_STATE_ID_SCR_CREATE_ACCOUNT_MAX , // 500 + EVT_STATE_ID_SCR_CREATE_ACCOUNT_MIN=EVT_STATE_ID_SCR_PRIMARY_KEY_ACCOUNT_MAX+1, // 497 + EVT_CREATE_ACCOUNT_REQUEST , // 498 + EVT_CREATE_PRIMARY_KEY_REQUEST , // 499 + EVT_CREATE_ACCOUNT_PRIMARY_KEY_REQUEST , // 500 + EVT_CHANGE_PASSWORD_SHOW_REQUEST , // 501 + EVT_STATE_ID_SCR_CREATE_ACCOUNT_MAX , // 502 }; enum EVT_STATE_ID_SCR_CHANGE_PASSWORD { - EVT_STATE_ID_SCR_CHANGE_PASSWORD_MIN=EVT_STATE_ID_SCR_CREATE_ACCOUNT_MAX+1, // 501 - EVT_CHANGE_PASSWORD_REQUEST , // 502 - EVT_CHANGE_PASSWORD_BACK , // 503 - EVT_CHANGE_PASSWORD_SUCCESS , // 504 - EVT_STATE_ID_SCR_CHANGE_PASSWORD_MAX , // 505 + EVT_STATE_ID_SCR_CHANGE_PASSWORD_MIN=EVT_STATE_ID_SCR_CREATE_ACCOUNT_MAX+1, // 503 + EVT_CHANGE_PASSWORD_REQUEST , // 504 + EVT_CHANGE_PASSWORD_BACK , // 505 + EVT_CHANGE_PASSWORD_SUCCESS , // 506 + EVT_STATE_ID_SCR_CHANGE_PASSWORD_MAX , // 507 }; enum EVT_STATE_ID_SCR_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY { - EVT_STATE_ID_SCR_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_MIN=EVT_STATE_ID_SCR_CHANGE_PASSWORD_MAX+1, // 506 - EVT_PRIMARY_KEY_ENTER_PASSPHRASE_REQUEST , // 507 - EVT_PRIMARY_KEY_ENTER_PASSPHRASE_SIGN_IN_REQUEST , // 508 - EVT_IMPORT_PRIMARY_KEY_WITH_SEED_REQUEST , // 509 - EVT_PRIMARY_KEY_ENTER_PASSPHRASE_SUCCEED , // 510 - EVT_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_BACK , // 511 - EVT_STATE_ID_SCR_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_MAX , // 512 + EVT_STATE_ID_SCR_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_MIN=EVT_STATE_ID_SCR_CHANGE_PASSWORD_MAX+1, // 508 + EVT_PRIMARY_KEY_ENTER_PASSPHRASE_REQUEST , // 509 + EVT_PRIMARY_KEY_ENTER_PASSPHRASE_SIGN_IN_REQUEST , // 510 + EVT_IMPORT_PRIMARY_KEY_WITH_SEED_REQUEST , // 511 + EVT_PRIMARY_KEY_ENTER_PASSPHRASE_SUCCEED , // 512 + EVT_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_BACK , // 513 + EVT_STATE_ID_SCR_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_MAX , // 514 }; enum EVT_STATE_ID_SCR_SIGN_IN_MANUALLY { - EVT_STATE_ID_SCR_SIGN_IN_MANUALLY_MIN=EVT_STATE_ID_SCR_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_MAX+1, // 513 - EVT_ADD_PRIMARY_KEY_ACCOUNT_REQUEST , // 514 - EVT_PRIMARY_KEY_CHECK_USERNAME_REQUEST , // 515 - EVT_CHALLENGE_MESSAGE_REFRESH_REQUEST , // 516 - EVT_ADD_PRIMARY_KEY_ACCOUNT_SUCCEED , // 517 - EVT_STATE_ID_SCR_SIGN_IN_MANUALLY_MAX , // 518 + EVT_STATE_ID_SCR_SIGN_IN_MANUALLY_MIN=EVT_STATE_ID_SCR_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_MAX+1, // 515 + EVT_ADD_PRIMARY_KEY_ACCOUNT_REQUEST , // 516 + EVT_PRIMARY_KEY_CHECK_USERNAME_REQUEST , // 517 + EVT_CHALLENGE_MESSAGE_REFRESH_REQUEST , // 518 + EVT_ADD_PRIMARY_KEY_ACCOUNT_SUCCEED , // 519 + EVT_STATE_ID_SCR_SIGN_IN_MANUALLY_MAX , // 520 }; enum EVT_STATE_ID_SCR_LOGIN_WITH_SOFTWARE_KEY { - EVT_STATE_ID_SCR_LOGIN_WITH_SOFTWARE_KEY_MIN=EVT_STATE_ID_SCR_SIGN_IN_MANUALLY_MAX+1, // 519 - EVT_PRIMARY_KEY_SIGNIN_ACCOUNT_REQUEST , // 520 - EVT_LOGIN_WITH_SOFTWARE_KEY_BACK , // 521 - EVT_LOGIN_WITH_SOFTWARE_KEY_SUCCEED , // 522 - EVT_STATE_ID_SCR_LOGIN_WITH_SOFTWARE_KEY_MAX , // 523 + EVT_STATE_ID_SCR_LOGIN_WITH_SOFTWARE_KEY_MIN=EVT_STATE_ID_SCR_SIGN_IN_MANUALLY_MAX+1, // 521 + EVT_PRIMARY_KEY_SIGNIN_ACCOUNT_REQUEST , // 522 + EVT_LOGIN_WITH_SOFTWARE_KEY_BACK , // 523 + EVT_LOGIN_WITH_SOFTWARE_KEY_SUCCEED , // 524 + EVT_STATE_ID_SCR_LOGIN_WITH_SOFTWARE_KEY_MAX , // 525 }; enum EVT_STATE_ID_SCR_REPLACE_PRIMARY_KEY { - EVT_STATE_ID_SCR_REPLACE_PRIMARY_KEY_MIN=EVT_STATE_ID_SCR_LOGIN_WITH_SOFTWARE_KEY_MAX+1, // 524 - EVT_REPLACE_PRIMARY_KEY_REQUEST , // 525 - EVT_STATE_ID_SCR_REPLACE_PRIMARY_KEY_MAX , // 526 + EVT_STATE_ID_SCR_REPLACE_PRIMARY_KEY_MIN=EVT_STATE_ID_SCR_LOGIN_WITH_SOFTWARE_KEY_MAX+1, // 526 + EVT_REPLACE_PRIMARY_KEY_REQUEST , // 527 + EVT_STATE_ID_SCR_REPLACE_PRIMARY_KEY_MAX , // 528 }; enum EVT_STATE_ID_SCR_PRIMARY_KEY_CONFIGURATION { - EVT_STATE_ID_SCR_PRIMARY_KEY_CONFIGURATION_MIN=EVT_STATE_ID_SCR_REPLACE_PRIMARY_KEY_MAX+1, // 527 - EVT_PRIMARY_KEY_SIGN_IN_REQUEST , // 528 - EVT_PRIMARY_KEY_SIGN_IN_SUCCEED , // 529 - EVT_PRIMARY_KEY_CONFIGURATION_BACK , // 530 - EVT_PRIMARY_KEY_CONFIGURATION_FINISHED , // 531 - EVT_STATE_ID_SCR_PRIMARY_KEY_CONFIGURATION_MAX , // 532 + EVT_STATE_ID_SCR_PRIMARY_KEY_CONFIGURATION_MIN=EVT_STATE_ID_SCR_REPLACE_PRIMARY_KEY_MAX+1, // 529 + EVT_PRIMARY_KEY_SIGN_IN_REQUEST , // 530 + EVT_PRIMARY_KEY_SIGN_IN_SUCCEED , // 531 + EVT_PRIMARY_KEY_CONFIGURATION_BACK , // 532 + EVT_PRIMARY_KEY_CONFIGURATION_FINISHED , // 533 + EVT_STATE_ID_SCR_PRIMARY_KEY_CONFIGURATION_MAX , // 534 }; enum EVT_STATE_ID_SCR_SIGN_IN { - EVT_STATE_ID_SCR_SIGN_IN_MIN=EVT_STATE_ID_SCR_PRIMARY_KEY_CONFIGURATION_MAX+1, // 533 - EVT_SIGN_IN_PASSWORD_REQUEST , // 534 - EVT_SIGN_IN_PRIMARY_KEY_REQUEST , // 535 - EVT_SHOW_SIGN_IN_PRIMARY_KEY_REQUEST , // 536 - EVT_STATE_ID_SCR_SIGN_IN_MAX , // 537 + EVT_STATE_ID_SCR_SIGN_IN_MIN=EVT_STATE_ID_SCR_PRIMARY_KEY_CONFIGURATION_MAX+1, // 535 + EVT_SIGN_IN_PASSWORD_REQUEST , // 536 + EVT_SIGN_IN_PRIMARY_KEY_REQUEST , // 537 + EVT_SHOW_SIGN_IN_PRIMARY_KEY_REQUEST , // 538 + EVT_STATE_ID_SCR_SIGN_IN_MAX , // 539 }; enum EVT_STATE_ID_SCR_UPDATE_PROFILE { - EVT_STATE_ID_SCR_UPDATE_PROFILE_MIN=EVT_STATE_ID_SCR_SIGN_IN_MAX+1, // 538 - EVT_UPDATE_PROFILE_REQUEST , // 539 - EVT_UPDATE_PROFILE_BACK , // 540 - EVT_STATE_ID_SCR_UPDATE_PROFILE_MAX , // 541 + EVT_STATE_ID_SCR_UPDATE_PROFILE_MIN=EVT_STATE_ID_SCR_SIGN_IN_MAX+1, // 540 + EVT_UPDATE_PROFILE_REQUEST , // 541 + EVT_UPDATE_PROFILE_BACK , // 542 + EVT_STATE_ID_SCR_UPDATE_PROFILE_MAX , // 543 }; enum EVT_STATE_ID_SCR_TAPSIGNER_RECOVERED_SUCCESS { - EVT_STATE_ID_SCR_TAPSIGNER_RECOVERED_SUCCESS_MIN=EVT_STATE_ID_SCR_UPDATE_PROFILE_MAX+1, // 542 - EVT_TAPSIGNER_RECOVERED_KEY_INFO_REQUEST , // 543 - EVT_STATE_ID_SCR_TAPSIGNER_RECOVERED_SUCCESS_MAX , // 544 + EVT_STATE_ID_SCR_TAPSIGNER_RECOVERED_SUCCESS_MIN=EVT_STATE_ID_SCR_UPDATE_PROFILE_MAX+1, // 544 + EVT_TAPSIGNER_RECOVERED_KEY_INFO_REQUEST , // 545 + EVT_STATE_ID_SCR_TAPSIGNER_RECOVERED_SUCCESS_MAX , // 546 }; enum EVT_STATE_ID_SCR_ENTER_BACKUP_PASSWORD { - EVT_STATE_ID_SCR_ENTER_BACKUP_PASSWORD_MIN=EVT_STATE_ID_SCR_TAPSIGNER_RECOVERED_SUCCESS_MAX+1, // 545 - EVT_INPUT_BACKUP_PASSWORD_REQUEST , // 546 - EVT_ENTER_BACKUP_PASSWORD_BACK , // 547 - EVT_TAPSIGNER_RECOVERED_SUCCESS_REQUEST , // 548 - EVT_STATE_ID_SCR_ENTER_BACKUP_PASSWORD_MAX , // 549 + EVT_STATE_ID_SCR_ENTER_BACKUP_PASSWORD_MIN=EVT_STATE_ID_SCR_TAPSIGNER_RECOVERED_SUCCESS_MAX+1, // 547 + EVT_INPUT_BACKUP_PASSWORD_REQUEST , // 548 + EVT_ENTER_BACKUP_PASSWORD_BACK , // 549 + EVT_TAPSIGNER_RECOVERED_SUCCESS_REQUEST , // 550 + EVT_STATE_ID_SCR_ENTER_BACKUP_PASSWORD_MAX , // 551 }; enum EVT_STATE_ID_SCR_KEY_RECOVERY_ANSER_SECURITY_QUESTION { - EVT_STATE_ID_SCR_KEY_RECOVERY_ANSER_SECURITY_QUESTION_MIN=EVT_STATE_ID_SCR_ENTER_BACKUP_PASSWORD_MAX+1, // 550 - EVT_INPUT_KEY_RECOVERY_ANSER_REQUEST , // 551 - EVT_ANSER_SECURITY_QUESTION_BACK , // 552 - EVT_ENTER_BACKUP_PASSWORD_RERQUEST , // 553 - EVT_STATE_ID_SCR_KEY_RECOVERY_ANSER_SECURITY_QUESTION_MAX , // 554 + EVT_STATE_ID_SCR_KEY_RECOVERY_ANSER_SECURITY_QUESTION_MIN=EVT_STATE_ID_SCR_ENTER_BACKUP_PASSWORD_MAX+1, // 552 + EVT_INPUT_KEY_RECOVERY_ANSER_REQUEST , // 553 + EVT_ANSER_SECURITY_QUESTION_BACK , // 554 + EVT_ENTER_BACKUP_PASSWORD_RERQUEST , // 555 + EVT_STATE_ID_SCR_KEY_RECOVERY_ANSER_SECURITY_QUESTION_MAX , // 556 }; enum EVT_STATE_ID_SCR_KEY_RECOVERY { - EVT_STATE_ID_SCR_KEY_RECOVERY_MIN=EVT_STATE_ID_SCR_KEY_RECOVERY_ANSER_SECURITY_QUESTION_MAX+1, // 555 - EVT_INPUT_TAPSIGNER_SELECT_REQUEST , // 556 - EVT_ANSER_SECURITY_QUESTION_REQUEST , // 557 - EVT_STATE_ID_SCR_KEY_RECOVERY_MAX , // 558 + EVT_STATE_ID_SCR_KEY_RECOVERY_MIN=EVT_STATE_ID_SCR_KEY_RECOVERY_ANSER_SECURITY_QUESTION_MAX+1, // 557 + EVT_INPUT_TAPSIGNER_SELECT_REQUEST , // 558 + EVT_ANSER_SECURITY_QUESTION_REQUEST , // 559 + EVT_STATE_ID_SCR_KEY_RECOVERY_MAX , // 560 }; enum EVT_STATE_ID_SCR_REENTER_YOUR_PASSWORD { - EVT_STATE_ID_SCR_REENTER_YOUR_PASSWORD_MIN=EVT_STATE_ID_SCR_KEY_RECOVERY_MAX+1, // 559 - EVT_INPUT_PASSWORD_REQUEST , // 560 - EVT_REENTER_YOUR_PASSWORD_BACK , // 561 - EVT_STATE_ID_SCR_REENTER_YOUR_PASSWORD_MAX , // 562 + EVT_STATE_ID_SCR_REENTER_YOUR_PASSWORD_MIN=EVT_STATE_ID_SCR_KEY_RECOVERY_MAX+1, // 561 + EVT_INPUT_PASSWORD_REQUEST , // 562 + EVT_REENTER_YOUR_PASSWORD_BACK , // 563 + EVT_STATE_ID_SCR_REENTER_YOUR_PASSWORD_MAX , // 564 }; enum EVT_STATE_ID_SCR_SERVICE_SETTINGS { - EVT_STATE_ID_SCR_SERVICE_SETTINGS_MIN=EVT_STATE_ID_SCR_REENTER_YOUR_PASSWORD_MAX+1, // 563 - EVT_CLAIM_INHERITANCE_CHECK_REQUEST , // 564 - EVT_CO_SIGNING_SERVER_KEY_UPDATE_REQUEST , // 565 - EVT_CO_SIGNING_SERVER_KEY_UPDATE_SUCCEED , // 566 - EVT_SERVICE_SELECT_WALLET_REQUEST , // 567 - EVT_INHERITANCE_PLAN_FINALIZE_REQUEST , // 568 - EVT_SERVICE_SUPPORT_REQUEST , // 569 - EVT_INHERITANCE_WITHDRAW_BALANCE_REQUEST , // 570 - EVT_EDIT_YOUR_INHERITANCE_PLAN_REQUEST , // 571 - EVT_KEY_RECOVERY_REQUEST , // 572 - EVT_SELECT_YOUR_LOCKDOWN_PERIOD_REQUEST , // 573 - EVT_WALLET_CO_SIGN_POLICE_REQUEST , // 574 - EVT_LOCKDOWN_SUCCESS_REQUEST , // 575 - EVT_SETUP_SECURITY_QUESTION_REQUEST , // 576 - EVT_STATE_ID_SCR_SERVICE_SETTINGS_MAX , // 577 + EVT_STATE_ID_SCR_SERVICE_SETTINGS_MIN=EVT_STATE_ID_SCR_REENTER_YOUR_PASSWORD_MAX+1, // 565 + EVT_CLAIM_INHERITANCE_CHECK_REQUEST , // 566 + EVT_CO_SIGNING_SERVER_KEY_UPDATE_REQUEST , // 567 + EVT_CO_SIGNING_SERVER_KEY_UPDATE_SUCCEED , // 568 + EVT_SERVICE_SELECT_WALLET_REQUEST , // 569 + EVT_INHERITANCE_PLAN_FINALIZE_REQUEST , // 570 + EVT_SERVICE_SUPPORT_REQUEST , // 571 + EVT_INHERITANCE_WITHDRAW_BALANCE_REQUEST , // 572 + EVT_EDIT_YOUR_INHERITANCE_PLAN_REQUEST , // 573 + EVT_KEY_RECOVERY_REQUEST , // 574 + EVT_SELECT_YOUR_LOCKDOWN_PERIOD_REQUEST , // 575 + EVT_WALLET_CO_SIGN_POLICE_REQUEST , // 576 + EVT_LOCKDOWN_SUCCESS_REQUEST , // 577 + EVT_SETUP_SECURITY_QUESTION_REQUEST , // 578 + EVT_STATE_ID_SCR_SERVICE_SETTINGS_MAX , // 579 }; enum EVT_STATE_ID_SCR_SELECT_YOUR_LOCKDOWN_PERIOD { - EVT_STATE_ID_SCR_SELECT_YOUR_LOCKDOWN_PERIOD_MIN=EVT_STATE_ID_SCR_SERVICE_SETTINGS_MAX+1, // 578 - EVT_INPUT_DAYS_VALUE_REQUEST , // 579 - EVT_LOCKDOWN_ANSER_SECURITY_QUESTION_REQUEST , // 580 - EVT_STATE_ID_SCR_SELECT_YOUR_LOCKDOWN_PERIOD_MAX , // 581 + EVT_STATE_ID_SCR_SELECT_YOUR_LOCKDOWN_PERIOD_MIN=EVT_STATE_ID_SCR_SERVICE_SETTINGS_MAX+1, // 580 + EVT_INPUT_DAYS_VALUE_REQUEST , // 581 + EVT_LOCKDOWN_ANSER_SECURITY_QUESTION_REQUEST , // 582 + EVT_STATE_ID_SCR_SELECT_YOUR_LOCKDOWN_PERIOD_MAX , // 583 }; enum EVT_STATE_ID_SCR_LOCKDOWN_ANSER_SECURITY_QUESTION { - EVT_STATE_ID_SCR_LOCKDOWN_ANSER_SECURITY_QUESTION_MIN=EVT_STATE_ID_SCR_SELECT_YOUR_LOCKDOWN_PERIOD_MAX+1, // 582 - EVT_INPUT_LOCKDOWN_ANSER_REQUEST , // 583 - EVT_LOCKDOWN_ANSER_SECURITY_QUESTION_BACK , // 584 - EVT_STATE_ID_SCR_LOCKDOWN_ANSER_SECURITY_QUESTION_MAX , // 585 + EVT_STATE_ID_SCR_LOCKDOWN_ANSER_SECURITY_QUESTION_MIN=EVT_STATE_ID_SCR_SELECT_YOUR_LOCKDOWN_PERIOD_MAX+1, // 584 + EVT_INPUT_LOCKDOWN_ANSER_REQUEST , // 585 + EVT_LOCKDOWN_ANSER_SECURITY_QUESTION_BACK , // 586 + EVT_STATE_ID_SCR_LOCKDOWN_ANSER_SECURITY_QUESTION_MAX , // 587 }; enum EVT_STATE_ID_SCR_LOCKDOWN_SUCCESS { - EVT_STATE_ID_SCR_LOCKDOWN_SUCCESS_MIN=EVT_STATE_ID_SCR_LOCKDOWN_ANSER_SECURITY_QUESTION_MAX+1, // 586 - EVT_LOCKDOWN_SUCCESS_CLOSE_REQUEST , // 587 - EVT_CLOSE_LOCKDOWN_SUCCESS , // 588 - EVT_STATE_ID_SCR_LOCKDOWN_SUCCESS_MAX , // 589 + EVT_STATE_ID_SCR_LOCKDOWN_SUCCESS_MIN=EVT_STATE_ID_SCR_LOCKDOWN_ANSER_SECURITY_QUESTION_MAX+1, // 588 + EVT_LOCKDOWN_SUCCESS_CLOSE_REQUEST , // 589 + EVT_CLOSE_LOCKDOWN_SUCCESS , // 590 + EVT_STATE_ID_SCR_LOCKDOWN_SUCCESS_MAX , // 591 }; enum EVT_STATE_ID_SCR_DUMMY_TRANSACTION_INFO { - EVT_STATE_ID_SCR_DUMMY_TRANSACTION_INFO_MIN=EVT_STATE_ID_SCR_LOCKDOWN_SUCCESS_MAX+1, // 590 - EVT_DUMMY_TRANSACTION_ACTION_ENTER_REQUEST , // 591 - EVT_DUMMY_TRANSACTION_INFO_BACK , // 592 - EVT_STATE_ID_SCR_DUMMY_TRANSACTION_INFO_MAX , // 593 + EVT_STATE_ID_SCR_DUMMY_TRANSACTION_INFO_MIN=EVT_STATE_ID_SCR_LOCKDOWN_SUCCESS_MAX+1, // 592 + EVT_DUMMY_TRANSACTION_ACTION_ENTER_REQUEST , // 593 + EVT_DUMMY_TRANSACTION_INFO_BACK , // 594 + EVT_STATE_ID_SCR_DUMMY_TRANSACTION_INFO_MAX , // 595 }; enum EVT_STATE_ID_SCR_INHERITANCE_CONFIRM_TRANSACTION { - EVT_STATE_ID_SCR_INHERITANCE_CONFIRM_TRANSACTION_MIN=EVT_STATE_ID_SCR_DUMMY_TRANSACTION_INFO_MAX+1, // 594 - EVT_INHERITANCE_CREATE_DRAFT_TX_FEE_REQ , // 595 - EVT_INHERITANCE_TRANSACTION_DETAILS_REQUEST , // 596 - EVT_INHERITANCE_CONFIRM_TRANSACTION_BACK , // 597 - EVT_STATE_ID_SCR_INHERITANCE_CONFIRM_TRANSACTION_MAX , // 598 + EVT_STATE_ID_SCR_INHERITANCE_CONFIRM_TRANSACTION_MIN=EVT_STATE_ID_SCR_DUMMY_TRANSACTION_INFO_MAX+1, // 596 + EVT_INHERITANCE_CREATE_DRAFT_TX_FEE_REQ , // 597 + EVT_INHERITANCE_TRANSACTION_DETAILS_REQUEST , // 598 + EVT_INHERITANCE_CONFIRM_TRANSACTION_BACK , // 599 + EVT_STATE_ID_SCR_INHERITANCE_CONFIRM_TRANSACTION_MAX , // 600 }; enum EVT_STATE_ID_SCR_INHERITANCE_TRANSACTION_DETAILS { - EVT_STATE_ID_SCR_INHERITANCE_TRANSACTION_DETAILS_MIN=EVT_STATE_ID_SCR_INHERITANCE_CONFIRM_TRANSACTION_MAX+1, // 599 - EVT_INHERITANCE_TRANSACTION_DETAILS_BACK , // 600 - EVT_STATE_ID_SCR_INHERITANCE_TRANSACTION_DETAILS_MAX , // 601 + EVT_STATE_ID_SCR_INHERITANCE_TRANSACTION_DETAILS_MIN=EVT_STATE_ID_SCR_INHERITANCE_CONFIRM_TRANSACTION_MAX+1, // 601 + EVT_INHERITANCE_TRANSACTION_DETAILS_BACK , // 602 + EVT_STATE_ID_SCR_INHERITANCE_TRANSACTION_DETAILS_MAX , // 603 }; enum EVT_STATE_ID_SCR_INHERITANCE_WITHDRAW_BALANCE { - EVT_STATE_ID_SCR_INHERITANCE_WITHDRAW_BALANCE_MIN=EVT_STATE_ID_SCR_INHERITANCE_TRANSACTION_DETAILS_MAX+1, // 602 - EVT_INHERITANCE_CREATE_DRAFT_TX_REQUEST , // 603 - EVT_INHERITANCE_NEW_TRANSACTION_REQ , // 604 - EVT_INHERITANCE_WITHDRAW_BALANCE_BACK , // 605 - EVT_INHERITANCE_CONFIRM_TRANSACTION_REQUEST , // 606 - EVT_STATE_ID_SCR_INHERITANCE_WITHDRAW_BALANCE_MAX , // 607 + EVT_STATE_ID_SCR_INHERITANCE_WITHDRAW_BALANCE_MIN=EVT_STATE_ID_SCR_INHERITANCE_TRANSACTION_DETAILS_MAX+1, // 604 + EVT_INHERITANCE_CREATE_DRAFT_TX_REQUEST , // 605 + EVT_INHERITANCE_NEW_TRANSACTION_REQ , // 606 + EVT_INHERITANCE_WITHDRAW_BALANCE_BACK , // 607 + EVT_INHERITANCE_CONFIRM_TRANSACTION_REQUEST , // 608 + EVT_STATE_ID_SCR_INHERITANCE_WITHDRAW_BALANCE_MAX , // 609 }; enum EVT_STATE_ID_SCR_ADD_HARDWARE_ASK { - EVT_STATE_ID_SCR_ADD_HARDWARE_ASK_MIN=EVT_STATE_ID_SCR_INHERITANCE_WITHDRAW_BALANCE_MAX+1, // 608 - EVT_ADD_HARDWARE_ASK_ENTER , // 609 - EVT_STATE_ID_SCR_ADD_HARDWARE_ASK_MAX , // 610 + EVT_STATE_ID_SCR_ADD_HARDWARE_ASK_MIN=EVT_STATE_ID_SCR_INHERITANCE_WITHDRAW_BALANCE_MAX+1, // 610 + EVT_ADD_HARDWARE_ASK_ENTER , // 611 + EVT_STATE_ID_SCR_ADD_HARDWARE_ASK_MAX , // 612 }; enum EVT_STATE_ID_SCR_ADD_HARDWARE { - EVT_STATE_ID_SCR_ADD_HARDWARE_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_ASK_MAX+1, // 611 - EVT_SCAN_HARDWARE_DEVICE_REQUEST , // 612 - EVT_ADD_HARDWARE_DEVICE_REQUEST , // 613 - EVT_STATE_ID_SCR_ADD_HARDWARE_MAX , // 614 + EVT_STATE_ID_SCR_ADD_HARDWARE_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_ASK_MAX+1, // 613 + EVT_SCAN_HARDWARE_DEVICE_REQUEST , // 614 + EVT_ADD_HARDWARE_DEVICE_REQUEST , // 615 + EVT_STATE_ID_SCR_ADD_HARDWARE_MAX , // 616 }; enum EVT_STATE_ID_SCR_SELECT_WALLET_CO_SIGN_POLICE { - EVT_STATE_ID_SCR_SELECT_WALLET_CO_SIGN_POLICE_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_MAX+1, // 615 - EVT_SELECT_WALLET_REQUEST , // 616 - EVT_STATE_ID_SCR_SELECT_WALLET_CO_SIGN_POLICE_MAX , // 617 + EVT_STATE_ID_SCR_SELECT_WALLET_CO_SIGN_POLICE_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_MAX+1, // 617 + EVT_SELECT_WALLET_REQUEST , // 618 + EVT_STATE_ID_SCR_SELECT_WALLET_CO_SIGN_POLICE_MAX , // 619 }; enum EVT_STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN { - EVT_STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN_MIN=EVT_STATE_ID_SCR_SELECT_WALLET_CO_SIGN_POLICE_MAX+1, // 618 - EVT_UPDATE_ACTIVATION_DATE_REQUEST , // 619 - EVT_UPDATE_MESSAGE_REQUEST , // 620 - EVT_UPDATE_BUFFER_PERIOD_REQUEST , // 621 - EVT_UPDATE_NOTIFICATION_PREFERENCE_REQ , // 622 - EVT_NOT_UPDATE_ANY_NOTI_REQ , // 623 - EVT_STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN_MAX , // 624 + EVT_STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN_MIN=EVT_STATE_ID_SCR_SELECT_WALLET_CO_SIGN_POLICE_MAX+1, // 620 + EVT_UPDATE_ACTIVATION_DATE_REQUEST , // 621 + EVT_UPDATE_MESSAGE_REQUEST , // 622 + EVT_UPDATE_BUFFER_PERIOD_REQUEST , // 623 + EVT_UPDATE_NOTIFICATION_PREFERENCE_REQ , // 624 + EVT_NOT_UPDATE_ANY_NOTI_REQ , // 625 + EVT_STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN_MAX , // 626 }; enum EVT_STATE_ID_SCR_SHARE_YOUR_SECRETS { - EVT_STATE_ID_SCR_SHARE_YOUR_SECRETS_MIN=EVT_STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN_MAX+1, // 625 - EVT_UPDATE_YOUR_SECRET_REQUEST , // 626 - EVT_STATE_ID_SCR_SHARE_YOUR_SECRETS_MAX , // 627 + EVT_STATE_ID_SCR_SHARE_YOUR_SECRETS_MIN=EVT_STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN_MAX+1, // 627 + EVT_UPDATE_YOUR_SECRET_REQUEST , // 628 + EVT_STATE_ID_SCR_SHARE_YOUR_SECRETS_MAX , // 629 }; enum EVT_STATE_ID_SCR_ADD_HARDWARE_EXIST { - EVT_STATE_ID_SCR_ADD_HARDWARE_EXIST_MIN=EVT_STATE_ID_SCR_SHARE_YOUR_SECRETS_MAX+1, // 628 - EVT_ADD_EXIST_HARDWARE_REQUEST , // 629 - EVT_ADD_NEW_HARDWARE_REQUEST , // 630 - EVT_STATE_ID_SCR_ADD_HARDWARE_EXIST_MAX , // 631 + EVT_STATE_ID_SCR_ADD_HARDWARE_EXIST_MIN=EVT_STATE_ID_SCR_SHARE_YOUR_SECRETS_MAX+1, // 630 + EVT_ADD_EXIST_HARDWARE_REQUEST , // 631 + EVT_ADD_NEW_HARDWARE_REQUEST , // 632 + EVT_STATE_ID_SCR_ADD_HARDWARE_EXIST_MAX , // 633 }; enum EVT_STATE_ID_SCR_DASHBOARD_ALERT_INFO { - EVT_STATE_ID_SCR_DASHBOARD_ALERT_INFO_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_EXIST_MAX+1, // 632 - EVT_DASHBOARD_ALERT_INFO_ENTER , // 633 - EVT_ADD_HARDWARE_KEY_EXIST_REQ , // 634 - EVT_ADD_HARDWARE_KEY_REQUEST , // 635 - EVT_STATE_ID_SCR_DASHBOARD_ALERT_INFO_MAX , // 636 + EVT_STATE_ID_SCR_DASHBOARD_ALERT_INFO_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_EXIST_MAX+1, // 634 + EVT_DASHBOARD_ALERT_INFO_ENTER , // 635 + EVT_ADD_HARDWARE_KEY_EXIST_REQ , // 636 + EVT_ADD_HARDWARE_KEY_REQUEST , // 637 + EVT_STATE_ID_SCR_DASHBOARD_ALERT_INFO_MAX , // 638 }; enum EVT_STATE_ID_SCR_KEY_HEALTH_CHECK_STATUS { - EVT_STATE_ID_SCR_KEY_HEALTH_CHECK_STATUS_MIN=EVT_STATE_ID_SCR_DASHBOARD_ALERT_INFO_MAX+1, // 637 - EVT_KEY_HEALTH_CHECK_STATUS_ENTER , // 638 - EVT_STATE_ID_SCR_KEY_HEALTH_CHECK_STATUS_MAX , // 639 + EVT_STATE_ID_SCR_KEY_HEALTH_CHECK_STATUS_MIN=EVT_STATE_ID_SCR_DASHBOARD_ALERT_INFO_MAX+1, // 639 + EVT_KEY_HEALTH_CHECK_STATUS_ENTER , // 640 + EVT_STATE_ID_SCR_KEY_HEALTH_CHECK_STATUS_MAX , // 641 }; enum EVT_STATE_ID_SCR_HEALTH_CHECK_STARTING { - EVT_STATE_ID_SCR_HEALTH_CHECK_STARTING_MIN=EVT_STATE_ID_SCR_KEY_HEALTH_CHECK_STATUS_MAX+1, // 640 - EVT_HEALTH_CHECK_ACTION_ENTER_REQUEST , // 641 - EVT_HEALTH_CHECK_STARTING_CLOSE , // 642 - EVT_STATE_ID_SCR_HEALTH_CHECK_STARTING_MAX , // 643 + EVT_STATE_ID_SCR_HEALTH_CHECK_STARTING_MIN=EVT_STATE_ID_SCR_KEY_HEALTH_CHECK_STATUS_MAX+1, // 642 + EVT_HEALTH_CHECK_ACTION_ENTER_REQUEST , // 643 + EVT_HEALTH_CHECK_STARTING_CLOSE , // 644 + EVT_STATE_ID_SCR_HEALTH_CHECK_STARTING_MAX , // 645 }; enum EVT_STATE_ID_SCR_DASHBOARD_ALERT_SUCCESS { - EVT_STATE_ID_SCR_DASHBOARD_ALERT_SUCCESS_MIN=EVT_STATE_ID_SCR_HEALTH_CHECK_STARTING_MAX+1, // 644 - EVT_DASHBOARD_ALERT_SUCCESS_ENTER_REQUEST , // 645 - EVT_DASHBOARD_ALERT_SUCCESS_CLOSE , // 646 - EVT_STATE_ID_SCR_DASHBOARD_ALERT_SUCCESS_MAX , // 647 + EVT_STATE_ID_SCR_DASHBOARD_ALERT_SUCCESS_MIN=EVT_STATE_ID_SCR_HEALTH_CHECK_STARTING_MAX+1, // 646 + EVT_DASHBOARD_ALERT_SUCCESS_ENTER_REQUEST , // 647 + EVT_DASHBOARD_ALERT_SUCCESS_CLOSE , // 648 + EVT_STATE_ID_SCR_DASHBOARD_ALERT_SUCCESS_MAX , // 649 }; enum EVT_STATE_ID_SCR_SETUP_SECURITY_QUESTION { - EVT_STATE_ID_SCR_SETUP_SECURITY_QUESTION_MIN=EVT_STATE_ID_SCR_DASHBOARD_ALERT_SUCCESS_MAX+1, // 648 - EVT_INPUT_SECURITY_QUESTION_REQUEST , // 649 - EVT_SETUP_ANSWER_SECURITY_QUESTION_REQ , // 650 - EVT_STATE_ID_SCR_SETUP_SECURITY_QUESTION_MAX , // 651 + EVT_STATE_ID_SCR_SETUP_SECURITY_QUESTION_MIN=EVT_STATE_ID_SCR_DASHBOARD_ALERT_SUCCESS_MAX+1, // 650 + EVT_INPUT_SECURITY_QUESTION_REQUEST , // 651 + EVT_SETUP_ANSWER_SECURITY_QUESTION_REQ , // 652 + EVT_STATE_ID_SCR_SETUP_SECURITY_QUESTION_MAX , // 653 }; enum EVT_STATE_ID_SCR_SETUP_ANSWER_SECURITY_QUESTION { - EVT_STATE_ID_SCR_SETUP_ANSWER_SECURITY_QUESTION_MIN=EVT_STATE_ID_SCR_SETUP_SECURITY_QUESTION_MAX+1, // 652 - EVT_INPUT_ANSWER_SECURITY_QUESTION_REQ , // 653 - EVT_SETUP_ANSWER_SECURITY_QUESTION_BACK , // 654 - EVT_STATE_ID_SCR_SETUP_ANSWER_SECURITY_QUESTION_MAX , // 655 + EVT_STATE_ID_SCR_SETUP_ANSWER_SECURITY_QUESTION_MIN=EVT_STATE_ID_SCR_SETUP_SECURITY_QUESTION_MAX+1, // 654 + EVT_INPUT_ANSWER_SECURITY_QUESTION_REQ , // 655 + EVT_SETUP_ANSWER_SECURITY_QUESTION_BACK , // 656 + EVT_STATE_ID_SCR_SETUP_ANSWER_SECURITY_QUESTION_MAX , // 657 }; enum EVT_STATE_ID_SCR_RECURRING_PAYMENTS { - EVT_STATE_ID_SCR_RECURRING_PAYMENTS_MIN=EVT_STATE_ID_SCR_SETUP_ANSWER_SECURITY_QUESTION_MAX+1, // 656 - EVT_RECURRING_PAYMENTS_ENTER , // 657 - EVT_STATE_ID_SCR_RECURRING_PAYMENTS_MAX , // 658 + EVT_STATE_ID_SCR_RECURRING_PAYMENTS_MIN=EVT_STATE_ID_SCR_SETUP_ANSWER_SECURITY_QUESTION_MAX+1, // 658 + EVT_RECURRING_PAYMENTS_ENTER , // 659 + EVT_STATE_ID_SCR_RECURRING_PAYMENTS_MAX , // 660 }; enum EVT_STATE_ID_SCR_ONBOARDING { - EVT_STATE_ID_SCR_ONBOARDING_MIN=EVT_STATE_ID_SCR_RECURRING_PAYMENTS_MAX+1, // 659 - EVT_ONBOARDING_ACTION_REQUEST , // 660 - EVT_ONBOARDING_CLOSE , // 661 - EVT_STATE_ID_SCR_ONBOARDING_MAX , // 662 + EVT_STATE_ID_SCR_ONBOARDING_MIN=EVT_STATE_ID_SCR_RECURRING_PAYMENTS_MAX+1, // 661 + EVT_ONBOARDING_ACTION_REQUEST , // 662 + EVT_ONBOARDING_CLOSE , // 663 + EVT_STATE_ID_SCR_ONBOARDING_MAX , // 664 }; enum EVT_STATE_ID_SCR_SELECT_SERVER { - EVT_STATE_ID_SCR_SELECT_SERVER_MIN=EVT_STATE_ID_SCR_ONBOARDING_MAX+1, // 663 - EVT_SELECT_SERVER_ENTER , // 664 - EVT_STATE_ID_SCR_SELECT_SERVER_MAX , // 665 + EVT_STATE_ID_SCR_SELECT_SERVER_MIN=EVT_STATE_ID_SCR_ONBOARDING_MAX+1, // 665 + EVT_SELECT_SERVER_ENTER , // 666 + EVT_STATE_ID_SCR_SELECT_SERVER_MAX , // 667 }; enum EVT_STATE_ID_SCR_CHANGE_EMAIL { - EVT_STATE_ID_SCR_CHANGE_EMAIL_MIN=EVT_STATE_ID_SCR_SELECT_SERVER_MAX+1, // 666 - EVT_CHANGE_EMAIL_ENTER , // 667 - EVT_STATE_ID_SCR_CHANGE_EMAIL_MAX , // 668 + EVT_STATE_ID_SCR_CHANGE_EMAIL_MIN=EVT_STATE_ID_SCR_SELECT_SERVER_MAX+1, // 668 + EVT_CHANGE_EMAIL_ENTER , // 669 + EVT_STATE_ID_SCR_CHANGE_EMAIL_MAX , // 670 }; enum EVT_STATE_ID_SCR_REPLACE_SELECT_KEY { - EVT_STATE_ID_SCR_REPLACE_SELECT_KEY_MIN=EVT_STATE_ID_SCR_CHANGE_EMAIL_MAX+1, // 669 - EVT_REPLACE_SELECT_KEY_ENTER , // 670 - EVT_STATE_ID_SCR_REPLACE_SELECT_KEY_MAX , // 671 + EVT_STATE_ID_SCR_REPLACE_SELECT_KEY_MIN=EVT_STATE_ID_SCR_CHANGE_EMAIL_MAX+1, // 671 + EVT_REPLACE_SELECT_KEY_ENTER , // 672 + EVT_STATE_ID_SCR_REPLACE_SELECT_KEY_MAX , // 673 }; enum EVT_STATE_ID_SCR_REPLACE_KEYS { - EVT_STATE_ID_SCR_REPLACE_KEYS_MIN=EVT_STATE_ID_SCR_REPLACE_SELECT_KEY_MAX+1, // 672 - EVT_REPLACE_KEYS_ENTER , // 673 - EVT_STATE_ID_SCR_REPLACE_KEYS_MAX , // 674 + EVT_STATE_ID_SCR_REPLACE_KEYS_MIN=EVT_STATE_ID_SCR_REPLACE_SELECT_KEY_MAX+1, // 674 + EVT_REPLACE_KEYS_ENTER , // 675 + EVT_STATE_ID_SCR_REPLACE_KEYS_MAX , // 676 + }; + enum EVT_STATE_ID_SCR_EDIT_MEMBERS + { + EVT_STATE_ID_SCR_EDIT_MEMBERS_MIN=EVT_STATE_ID_SCR_REPLACE_KEYS_MAX+1, // 677 + EVT_EDIT_MEMBERS_ENTER_REQUEST , // 678 + EVT_EDIT_MEMBERS_CLOSE , // 679 + EVT_STATE_ID_SCR_EDIT_MEMBERS_MAX , // 680 }; enum EVT_STATE_ID_SCR_SIGN_IN_VIA_XPUB { - EVT_STATE_ID_SCR_SIGN_IN_VIA_XPUB_MIN=EVT_STATE_ID_SCR_REPLACE_KEYS_MAX+1, // 675 - EVT_SIGN_IN_VIA_XPUB_ENTER , // 676 - EVT_STATE_ID_SCR_SIGN_IN_VIA_XPUB_MAX , // 677 + EVT_STATE_ID_SCR_SIGN_IN_VIA_XPUB_MIN=EVT_STATE_ID_SCR_EDIT_MEMBERS_MAX+1, // 681 + EVT_SIGN_IN_VIA_XPUB_ENTER , // 682 + EVT_SIGN_IN_VIA_XPUB_CLOSE , // 683 + EVT_STATE_ID_SCR_SIGN_IN_VIA_XPUB_MAX , // 684 }; }; diff --git a/Views/Diagram/NunchuckDiagram.asta b/Views/Diagram/NunchuckDiagram.asta index daebc6ee..62051bf4 100644 Binary files a/Views/Diagram/NunchuckDiagram.asta and b/Views/Diagram/NunchuckDiagram.asta differ diff --git a/Views/Diagram/NunchuckDiagram.xml b/Views/Diagram/NunchuckDiagram.xml index 3b4f1f91..ee5897b8 100644 --- a/Views/Diagram/NunchuckDiagram.xml +++ b/Views/Diagram/NunchuckDiagram.xml @@ -212,6 +212,8 @@ + + @@ -232,6 +234,8 @@ + + @@ -5602,6 +5606,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9103,6 +9183,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9232,6 +9380,10 @@ + + + + @@ -11095,6 +11247,46 @@ 2192.0087014603932 + + + + + + + + + + + + + + + + + -1929.6916523863752 + 3800.960212035567 + + + + + + + + + + + + + + + + + + + -598.0433333298256 + 3800.9567398133486 + + @@ -11114,7 +11306,7 @@ -701.6562500151983 - + -3465.4366360765816 -613.8537542150955 @@ -11164,7 +11356,7 @@ -701.6562500151983 - + -3416.6932082294265 -574.9310010848872 @@ -11214,7 +11406,7 @@ -701.6562500151983 - + -3263.720099783978 151.24276517468422 @@ -11272,7 +11464,7 @@ -701.6562500151983 - + -3300.3752721977708 201.30950309789685 @@ -11330,7 +11522,7 @@ -701.6562500151983 - + -4025.858169082271 -45.62217743994472 @@ -11373,7 +11565,7 @@ -701.6562500151983 - + -4135.358169082271 -45.62217743994472 @@ -11416,7 +11608,7 @@ -701.6562500151983 - + -4001.5976339008776 -590.6012374151242 @@ -11459,7 +11651,7 @@ -701.6562500151983 - + -4588.967982269121 -543.1036283238357 @@ -11509,7 +11701,7 @@ -701.6562500151983 - + -4550.765506583886 -584.1292693494768 @@ -11559,7 +11751,7 @@ -701.6562500151983 - + -3781.6313790954027 281.7354294057032 @@ -11602,7 +11794,7 @@ -701.6562500151983 - + -4058.896569990833 281.7354294057032 @@ -11645,7 +11837,7 @@ -697.1107954697438 - + -1984.4200166608694 -606.1922695046433 @@ -11688,7 +11880,7 @@ -697.1107954697438 - + -1958.4200166608694 -568.6571484166282 @@ -11731,7 +11923,7 @@ -697.1107954697438 - + -920.2899035516436 -725.550841097089 @@ -11774,7 +11966,7 @@ -697.1107954697438 - + -1500.1558264929793 -725.550841097089 @@ -11817,7 +12009,7 @@ -697.1107954697438 - + -3315.847955490415 -677.3342736809511 @@ -11875,7 +12067,7 @@ -697.1107954697438 - + -879.351963353248 -371.21915424301585 @@ -11918,7 +12110,7 @@ -697.1107954697438 - + -1429.4740034672288 960.2456015034014 @@ -11968,7 +12160,7 @@ -697.1107954697438 - + -752.4577489822182 1060.2456015034013 @@ -12026,7 +12218,7 @@ -697.1107954697438 - + -4653.890837923096 -236.30685241647302 @@ -12065,7 +12257,7 @@ -697.1107954697438 - + -4656.890837923096 -284.1641345101294 @@ -12104,7 +12296,7 @@ -697.1107954697438 - + -3439.088367287303 -780.1689771295894 @@ -12158,7 +12350,7 @@ -697.1107954697438 - + -5255.802841817371 -56.38024610783256 @@ -12201,7 +12393,7 @@ -697.1107954697438 - + -5604.078703886336 -56.38024610783256 @@ -12244,7 +12436,7 @@ -697.1107954697438 - + -4991.015329810498 458.4836088756332 @@ -12302,7 +12494,7 @@ -697.1107954697438 - + -5061.681996477164 248.07292199643342 @@ -12356,7 +12548,7 @@ -697.1107954697438 - + -4066.678678624242 -590.6012374151242 @@ -12399,7 +12591,7 @@ -697.1107954697438 - + -5183.002908335401 -661.5062753953052 @@ -12442,7 +12634,7 @@ -697.1107954697438 - + -5639.175322128504 -661.5062753953052 @@ -12485,7 +12677,7 @@ -697.1107954697438 - + -4670.441156136609 -304.8065514706275 @@ -12539,7 +12731,7 @@ -697.1107954697438 - + -4880.441156136609 -165.90251657422627 @@ -12593,7 +12785,7 @@ -697.1107954697438 - + -4022.7490550219 -1439.8727559557838 @@ -12651,7 +12843,7 @@ -697.1107954697438 - + -2739.9841864450864 352.7882200288675 @@ -12694,7 +12886,7 @@ -697.1107954697438 - + -3185.6856170253577 32.91579937266545 @@ -12752,7 +12944,7 @@ -697.1107954697438 - + -2073.403245404529 -45.51654719046505 @@ -12806,7 +12998,7 @@ -697.1107954697438 - + -1752.0211115196848 504.2718242731226 @@ -12856,7 +13048,7 @@ -697.1107954697438 - + -1506.1724761737607 -371.21915424301585 @@ -12899,7 +13091,7 @@ -697.1107954697438 - + -4282.055711405376 -1348.4009403407922 @@ -12957,7 +13149,7 @@ -697.1107954697438 - + -6308.295283512095 1012.1499364604692 @@ -13019,7 +13211,7 @@ -697.1107954697438 - + -4454.075208127684 624.1001437629707 @@ -13073,7 +13265,7 @@ -697.1107954697438 - + -4474.842972606101 740.3192959189714 @@ -13127,7 +13319,7 @@ -697.1107954697438 - + -5886.247958636628 1069.7005049108807 @@ -13185,7 +13377,7 @@ -697.1107954697438 - + -5943.273006957754 1119.7005049108807 @@ -13243,7 +13435,7 @@ -697.1107954697438 - + -4560.719833599496 -962.8294344195647 @@ -13301,7 +13493,7 @@ -697.1107954697438 - + -3079.9028171392406 -1457.8916969890574 @@ -13355,7 +13547,7 @@ -697.1107954697438 - + -5132.85798739706 169.43523766029574 @@ -13398,7 +13590,7 @@ -697.1107954697438 - + -5577.843062023925 169.43523766029574 @@ -13441,7 +13633,7 @@ -697.1107954697438 - + -4702.8047604943995 360.47656701048686 @@ -13487,7 +13679,7 @@ -697.1107954697438 - + -4666.5884336158015 299.51207266539507 @@ -13533,7 +13725,7 @@ -697.1107954697438 - + -5745.891419549895 468.6543410400628 @@ -13587,7 +13779,7 @@ -697.1107954697438 - + -5840.891419549895 462.10619674191867 @@ -13641,7 +13833,7 @@ -697.1107954697438 - + -6082.513041171516 30.646382803747372 @@ -13695,7 +13887,7 @@ -697.1107954697438 - + -6134.567095225569 38.717014554805246 @@ -13749,7 +13941,7 @@ -697.1107954697438 - + -4172.487432044621 -473.6097165263192 @@ -13807,7 +13999,7 @@ -697.1107954697438 - + -1929.900103661164 556.9271752366052 @@ -13861,7 +14053,7 @@ -697.1107954697438 - + -3402.358169082272 151.04923552755167 @@ -13919,7 +14111,7 @@ -697.1107954697438 - + -3322.478720473633 206.48217202544276 @@ -13977,7 +14169,7 @@ -697.1107954697438 - + -253.58393141203692 -1414.0137126630211 @@ -14031,7 +14223,7 @@ -697.1107954697438 - + -256.5996510851721 -1278.0323744257933 @@ -14085,7 +14277,7 @@ -697.1107954697438 - + -2097.9622528579835 23.236635594918766 @@ -14128,7 +14320,7 @@ -697.1107954697438 - + -2485.860889521144 23.236635594918766 @@ -14171,7 +14363,7 @@ -697.1107954697438 - + -3242.356730883347 -232.66985136607218 @@ -14225,7 +14417,7 @@ -697.1107954697438 - + -3239.356730883347 -173.15455797735405 @@ -14279,7 +14471,7 @@ -697.1107954697438 - + -3048.4231188109125 480.60966615364754 @@ -14337,7 +14529,7 @@ -697.1107954697438 - + -3085.4744008621938 652.7078750098394 @@ -14395,7 +14587,7 @@ -697.1107954697438 - + -1926.4385651996251 501.7285568993941 @@ -14449,7 +14641,7 @@ -697.1107954697438 - + -1868.9550487161089 665.9876123661734 @@ -14503,7 +14695,7 @@ -697.1107954697438 - + -1512.4481751037233 1296.681105023576 @@ -14546,7 +14738,7 @@ -697.1107954697438 - + -1551.4481751037233 1343.399175135743 @@ -14589,7 +14781,7 @@ -697.1107954697438 - + -1642.2169126975837 1660.9235803859483 @@ -14632,7 +14824,7 @@ -697.1107954697438 - + -1011.6627627625651 1433.737730963425 @@ -14671,7 +14863,7 @@ -697.1107954697438 - + -806.041938240259 21.737629164096518 @@ -14714,7 +14906,7 @@ -697.1107954697438 - + -1142.249319614799 21.737629164096518 @@ -14757,7 +14949,7 @@ -697.1107954697438 - + -1834.5771584480074 525.1658878667756 @@ -14811,7 +15003,7 @@ -697.1107954697438 - + -1831.4964345090943 603.4755051010169 @@ -14865,7 +15057,7 @@ -697.1107954697438 - + -1763.2355649438766 804.4631891798043 @@ -14919,7 +15111,7 @@ -697.1107954697438 - + -1756.4275682373125 874.1818397172829 @@ -14973,7 +15165,7 @@ -697.1107954697438 - + -499.7653268651295 1433.737730963425 @@ -15016,7 +15208,7 @@ -697.1107954697438 - + -416.8284211241636 163.78380386749092 @@ -15070,7 +15262,7 @@ -697.1107954697438 - + -523.8284211241636 311.9876993086604 @@ -15124,7 +15316,7 @@ -697.1107954697438 - + -430.18462431400803 1285.745061504671 @@ -15182,7 +15374,7 @@ -697.1107954697438 - + -450.8284211241636 1514.0428183626534 @@ -15240,7 +15432,7 @@ -697.1107954697438 - + 257.13795957375004 -1457.8916969890574 @@ -15294,7 +15486,7 @@ -697.1107954697438 - + 258.2493184903812 -1487.6235292075517 @@ -15348,7 +15540,7 @@ -230.80644764365695 - + -6459.860056649477 2281.5494614086574 @@ -15402,7 +15594,7 @@ -230.80644764365695 - + -6703.964278115455 3085.3172385884677 @@ -15456,7 +15648,7 @@ -230.80644764365695 - + -5263.873653276649 2885.700492070512 @@ -15510,7 +15702,7 @@ -230.80644764365695 - + -5175.901199428103 3018.126942853542 @@ -15564,7 +15756,7 @@ -230.80644764365695 - + -5226.9932801638915 3127.123723366318 @@ -15618,7 +15810,7 @@ -230.80644764365695 - + -5156.881345860535 3173.327337343403 @@ -15672,7 +15864,7 @@ -230.80644764365695 - + -5509.37683853562 3434.1281216501175 @@ -15722,7 +15914,7 @@ -230.80644764365695 - + -5503.7164611771295 3517.1469895746463 @@ -15772,7 +15964,7 @@ -230.80644764365695 - + -4230.307071417519 3560.695527606189 @@ -15815,7 +16007,7 @@ -230.80644764365695 - + -4122.307071417519 3464.2687430588385 @@ -15858,7 +16050,7 @@ -230.80644764365695 - + -3062.0778501203467 3447.583246095677 @@ -15901,7 +16093,7 @@ -230.80644764365695 - + -2957.0778501203467 3506.15216432241 @@ -15940,7 +16132,7 @@ -230.80644764365695 - + -1800.0667195724104 3447.583246095677 @@ -15983,7 +16175,7 @@ -230.80644764365695 - + -1923.0667195724104 3505.708187392518 @@ -16026,7 +16218,7 @@ -230.80644764365695 - + -6781.703738249707 3245.393768196993 @@ -16080,7 +16272,7 @@ -230.80644764365695 - + -5837.844119851388 4088.1368066114255 @@ -16130,7 +16322,7 @@ -230.80644764365695 - + -5881.658933727741 4126.633216758953 @@ -16180,7 +16372,7 @@ -230.80644764365695 - + -5965.482339875752 4447.461374452067 @@ -16230,7 +16422,7 @@ -230.80644764365695 - + -5920.206477806786 4381.313394382259 @@ -16280,7 +16472,7 @@ 269.19355235634305 - + -4149.405628017125 4663.04291019314 @@ -16323,7 +16515,7 @@ 269.19355235634305 - + -4145.405628017125 4556.439136608235 @@ -16366,7 +16558,7 @@ -230.80644764365695 - + -5406.7537562565085 3211.5549685803385 @@ -16420,7 +16612,7 @@ -230.80644764365695 - + -5321.7537562565085 3256.6605917749175 @@ -16470,7 +16662,7 @@ -230.80644764365695 - + -3145.9148011327825 1952.6609553925746 @@ -16524,7 +16716,7 @@ -230.80644764365695 - + -3143.084952132618 2065.2083815227265 @@ -16578,7 +16770,7 @@ -230.80644764365695 - + -7043.549830511265 -1269.6444507754513 @@ -16636,7 +16828,7 @@ -215.4731143103237 - + -2272.998604210608 4219.512962385836 @@ -16686,7 +16878,7 @@ -215.4731143103237 - + -2473.225238382363 4157.295745097037 @@ -16736,7 +16928,7 @@ -215.4731143103237 - + -7300.243013950485 2729.03277051553 @@ -16794,7 +16986,7 @@ -215.4731143103237 - + -7404.760255329797 2642.388850564707 @@ -16852,7 +17044,7 @@ -215.4731143103237 - + -7290.66966545596 2784.628427190492 @@ -16906,7 +17098,7 @@ -215.4731143103237 - + -6942.645772682066 2788.0327653344266 @@ -16960,7 +17152,7 @@ -215.4731143103237 - + -6456.794201297476 1795.9786742819442 @@ -17014,7 +17206,7 @@ -215.4731143103237 - + -6460.794201297476 1709.7919167262721 @@ -17068,7 +17260,7 @@ -215.4731143103237 - + -4429.535277573868 2184.099947725079 @@ -17134,7 +17326,7 @@ -215.4731143103237 - + -4517.918530579889 2088.483224995943 @@ -17200,7 +17392,7 @@ -215.4731143103237 - + -6685.046712819636 932.6164080173463 @@ -17258,7 +17450,7 @@ -213.62126245847196 - + -2416.6737484329474 4823.492554588166 @@ -17312,7 +17504,7 @@ -213.62126245847196 - + -2487.9026978647216 4854.600199280906 @@ -17366,7 +17558,7 @@ -213.62126245847196 - + -2681.960465821991 3846.5164410677285 @@ -17416,7 +17608,7 @@ -213.62126245847196 - + -4237.829818440684 3682.4903994010606 @@ -17466,7 +17658,7 @@ -213.62126245847196 - + -6560.812909679041 1167.7752106723938 @@ -17516,7 +17708,7 @@ -213.62126245847196 - + -6007.7359321759295 1318.703320754818 @@ -17559,7 +17751,7 @@ -213.62126245847196 - + -6457.379070948662 1328.6568313190594 @@ -17609,7 +17801,7 @@ -213.62126245847196 - + -5536.988109512843 1219.5490988973236 @@ -17648,7 +17840,7 @@ -213.62126245847196 - + -5484.125177517524 1131.0649012154113 @@ -17698,7 +17890,7 @@ -213.62126245847196 - + -4794.95435488778 1367.8370093456629 @@ -17744,7 +17936,7 @@ -213.62126245847196 - + -5516.673968473389 1327.6254267835866 @@ -17794,7 +17986,7 @@ -213.62126245847196 - + -3263.7324593698077 1417.3089673257386 @@ -17848,7 +18040,7 @@ -213.62126245847196 - + -5647.619914419336 1513.2046413196654 @@ -17902,7 +18094,7 @@ -213.62126245847196 - + -4632.361832030409 583.2397431546501 @@ -17952,7 +18144,7 @@ -213.62126245847196 - + -5387.924660475141 1436.60464296955 @@ -17998,7 +18190,7 @@ -213.62126245847196 - + -5606.265866987975 1586.5197190629665 @@ -18052,7 +18244,7 @@ -213.62126245847196 - + -4558.427699319827 753.9231999441894 @@ -18106,7 +18298,7 @@ -213.62126245847196 - + -6374.078827771604 1714.198518546094 @@ -18156,7 +18348,7 @@ -213.62126245847196 - + -4512.318918608709 1371.587817876014 @@ -18206,7 +18398,7 @@ -213.62126245847196 - + -3129.383556528758 783.1344758081772 @@ -18256,7 +18448,7 @@ -213.62126245847196 - + -3423.2334063786075 165.00655256608093 @@ -18306,7 +18498,7 @@ -213.62126245847196 - + -1039.7638805580716 1779.1146585707766 @@ -18349,7 +18541,7 @@ -213.62126245847196 - + -523.3915040328209 1779.1146585707766 @@ -18388,7 +18580,7 @@ -213.62126245847196 - + -4039.7162301622766 1959.6067177570753 @@ -18438,7 +18630,7 @@ -213.62126245847196 - + -3235.822129371775 1318.0296144242288 @@ -18488,7 +18680,7 @@ -213.62126245847196 - + -1343.9718586787073 -1364.2228558068791 @@ -18542,7 +18734,7 @@ -213.62126245847196 - + -6396.438530896242 -1204.0747388879583 @@ -18592,7 +18784,7 @@ -213.62126245847196 - + -4321.673537095424 3765.4541742766833 @@ -18638,7 +18830,7 @@ -213.62126245847196 - + -2075.8320865528135 -1408.5820071041821 @@ -18688,7 +18880,7 @@ -213.62126245847196 - + -6526.8869621242775 1446.475820753974 @@ -18738,7 +18930,7 @@ -213.62126245847196 - + -6512.333269423029 1991.8860241708394 @@ -18788,7 +18980,7 @@ -213.62126245847196 - + -3250.2744822175355 21.71846323604845 @@ -18842,7 +19034,7 @@ 22.09302325581382 - + 1026.273416459941 -1348.1173173684087 @@ -18892,7 +19084,7 @@ 22.09302325581382 - + 813.7070926770875 -437.7855165076786 @@ -18935,7 +19127,7 @@ 22.09302325581382 - + 1111.7760581943287 -437.7855165076786 @@ -18974,7 +19166,7 @@ 22.09302325581382 - + 813.5168580232298 -177.6889569490936 @@ -19013,7 +19205,7 @@ 22.09302325581382 - + 1144.7668580232298 -177.6889569490936 @@ -19056,7 +19248,7 @@ 22.09302325581382 - + 776.3918580232298 85.65707847346994 @@ -19095,7 +19287,7 @@ 22.09302325581382 - + -375.55158934690064 657.6785960582204 @@ -19141,7 +19333,7 @@ 22.09302325581382 - + 1512.2021872567798 -441.14091646826904 @@ -19184,7 +19376,7 @@ 22.09302325581382 - + 1912.8020405207017 -441.14091646826904 @@ -19223,7 +19415,7 @@ 0.0 - + 1204.4745789449794 -1391.6112459205128 @@ -19273,7 +19465,7 @@ 0.0 - + -3623.349045874398 -948.1614090354324 @@ -19327,7 +19519,7 @@ 0.0 - + -350.72536076022334 3085.317238588468 @@ -19377,7 +19569,7 @@ 0.0 - + 2285.8957143122925 -1061.7981092192765 @@ -19423,7 +19615,7 @@ 0.0 - + 2439.0966580660374 -1081.7981092192765 @@ -19469,7 +19661,7 @@ 0.0 - + 3066.0722774944293 -695.563694834209 @@ -19512,7 +19704,7 @@ 0.0 - + 3072.0722774944293 -445.08535935587327 @@ -19555,7 +19747,7 @@ 0.0 - + 3467.9927312632703 -695.563694834209 @@ -19598,7 +19790,7 @@ 0.0 - + 3473.9927312632703 -445.08535935587327 @@ -19637,7 +19829,7 @@ 0.0 - + -3101.822129371775 682.8895583851573 @@ -19691,7 +19883,7 @@ 0.0 - + 2833.2396160560106 -1114.2981092192767 @@ -19737,7 +19929,7 @@ 0.0 - + -4420.319377949687 1014.9689430967601 @@ -19787,7 +19979,7 @@ 0.0 - + -4192.275620910125 2309.554766115036 @@ -19837,7 +20029,7 @@ 0.0 - + -4441.504506240502 1027.12963684587 @@ -19891,7 +20083,7 @@ 0.0 - + -3783.0291048161857 1970.123572189182 @@ -19930,7 +20122,7 @@ 0.0 - + -3299.478720473633 2165.1378661484587 @@ -19980,7 +20172,7 @@ 0.0 - + 671.1715788758364 -848.2702108045285 @@ -20030,7 +20222,7 @@ 0.0 - + 1488.3773484533067 -982.5879408831539 @@ -20076,7 +20268,7 @@ 0.0 - + 1658.8251096473364 -941.8886390816372 @@ -20126,7 +20318,7 @@ 0.0 - + -3375.6747522250207 -317.636258687484 @@ -20176,7 +20368,7 @@ 0.0 - + -1649.706969184649 4903.451857165014 @@ -20226,7 +20418,7 @@ 0.0 - + -1576.2597169455412 4849.720513881433 @@ -20276,7 +20468,7 @@ 0.0 - + 2751.339300521786 -1164.5192570337135 @@ -20326,7 +20518,7 @@ 0.0 - + 2312.413927387457 -1014.6703289892725 @@ -20376,7 +20568,7 @@ 0.0 - + 1427.6539359527496 -623.5659985707047 @@ -20426,7 +20618,7 @@ 0.0 - + 2252.1936265777003 -842.6525918610555 @@ -20480,7 +20672,7 @@ 0.0 - + -821.0779222548771 4861.257335269003 @@ -20530,7 +20722,7 @@ 0.0 - + -901.5039404147193 4920.226071211422 @@ -20580,7 +20772,7 @@ 0.0 - + 4673.670733711717 -546.658226756168 @@ -20630,7 +20822,7 @@ 0.0 - + 18.171578875836417 -437.7885497530938 @@ -20673,7 +20865,7 @@ 0.0 - + 301.76532887583653 -437.7885497530938 @@ -20712,7 +20904,7 @@ 0.0 - + 571.5465788758365 -744.9603743797054 @@ -20770,7 +20962,7 @@ 0.0 - + -3201.3762109948593 857.5927715097336 @@ -20820,7 +21012,7 @@ 0.0 - + 1686.7466146935126 -1105.6773130394736 @@ -20874,7 +21066,7 @@ 0.0 - + 1774.2970446513664 -1091.1250742335033 @@ -20928,7 +21120,7 @@ 0.0 - + 115.45005243140577 4896.217563118854 @@ -20978,7 +21170,7 @@ 0.0 - + -176.99184920223865 4866.972280099986 @@ -21028,7 +21220,7 @@ 0.0 - + -2266.683798295151 -1268.6125981853233 @@ -21078,7 +21270,7 @@ 0.0 - + -1870.9134496311149 -1251.5462549341019 @@ -21128,7 +21320,7 @@ 0.0 - + -3062.447935896944 1058.7554513316034 @@ -21178,7 +21370,7 @@ 0.0 - + -3174.3644469466803 4895.348065371387 @@ -21228,7 +21420,7 @@ 0.0 - + -3270.214278364891 343.1496519747552 @@ -21282,7 +21474,7 @@ 0.0 - + -3280.842845189627 1089.5065747798235 @@ -21313,6 +21505,214 @@ 2255.259330854446 + + + + + + + + + + + + + + + + 0.0 + 0.0 + + + + + -2189.958041170005 + 4830.771742602422 + + + + + + + + -1982.9580411700051 + 3909.569587035567 + -1982.9580411700051 + 5133.103069178424 + -1662.9580411700044 + 5133.103069178424 + + + 0.5 + 0.5 + + + 0.4075815499218016 + 0.5 + + + -1982.9580411700051 + 3909.569587035567 + -1982.9580411700051 + 5133.103069178424 + -1662.9580411700044 + 5133.103069178424 + + + + + + + + + + + + + + + + + + 0.0 + 0.0 + + + + + -1813.1852076096513 + 4922.715743817802 + + + + + + + + -992.9580411700044 + 5005.995605282166 + -1589.1852076096513 + 5005.995605282166 + + + 0.4681978314790566 + 0.5 + + + 0.5 + 0.5 + + + -992.9580411700044 + 5005.995605282166 + -1589.1852076096513 + 5005.995605282166 + + + + + + + + + + + + + + + + + + 0.0 + 0.0 + + + + + -413.7308333298252 + 4913.168317073996 + + + + + + + + -188.7308333298252 + 5068.206739813348 + -641.4443494417155 + 5068.206739813348 + + + 0.601034879484284 + 0.5 + + + 0.5 + 0.5 + + + -188.7308333298252 + 5068.206739813348 + -641.4443494417155 + 5068.206739813348 + + + + + + + + + + + + + + + + + + 0.0 + 0.0 + + + + + 99.76916667017485 + 4933.71382435072 + + + + + + + + -641.4443494417155 + 5007.206739813348 + 341.76916667017485 + 5007.206739813348 + 341.76916667017485 + 3909.5661148133486 + + + 0.5 + 0.5 + + + 0.5 + 0.5 + + + -641.4443494417155 + 5007.206739813348 + 341.76916667017485 + 5007.206739813348 + 341.76916667017485 + 3909.5661148133486 + + diff --git a/Views/STATE_ID_ROOT.cpp b/Views/STATE_ID_ROOT.cpp index e1a349f6..f49f23d2 100644 --- a/Views/STATE_ID_ROOT.cpp +++ b/Views/STATE_ID_ROOT.cpp @@ -311,3 +311,10 @@ void EVT_REPLACE_SELECT_KEY_REQUEST_HANDLER(QVariant msg) { void EVT_SIGN_IN_VIA_XPUB_REQUEST_HANDLER(QVariant msg) { } + +void EVT_EDIT_MEMBERS_REQUEST_HANDLER(QVariant msg) { + if (auto dashboard = QGroupWallets::instance()->dashboardInfoPtr()) { + dashboard->initMembers(); + } +} + diff --git a/Views/STATE_ID_ROOT.h b/Views/STATE_ID_ROOT.h index 3eec7938..8465e674 100644 --- a/Views/STATE_ID_ROOT.h +++ b/Views/STATE_ID_ROOT.h @@ -61,6 +61,7 @@ void EVT_SHARE_YOUR_SECRET_REQUEST_HANDLER(QVariant msg); void EVT_REENTER_YOUR_PASSWORD_REQUEST_HANDLER(QVariant msg); void EVT_ONBOARDING_REQUEST_HANDLER(QVariant msg); void EVT_REPLACE_SELECT_KEY_REQUEST_HANDLER(QVariant msg); +void EVT_EDIT_MEMBERS_REQUEST_HANDLER(QVariant msg); void EVT_SIGN_IN_VIA_XPUB_REQUEST_HANDLER(QVariant msg); #endif // STATE_ID_ROOT_H diff --git a/Views/STATE_ID_SCR_CREATE_TRANSACTION.cpp b/Views/STATE_ID_SCR_CREATE_TRANSACTION.cpp index a5120f8d..04278815 100644 --- a/Views/STATE_ID_SCR_CREATE_TRANSACTION.cpp +++ b/Views/STATE_ID_SCR_CREATE_TRANSACTION.cpp @@ -38,10 +38,6 @@ void SCR_CREATE_TRANSACTION_Exit(QVariant msg) { void EVT_CREATE_TRANSACTION_SIGN_REQUEST_HANDLER(QVariant msg) { bool subtractFromFeeAmout = msg.toMap().value("subtractFromFeeAmout").toBool(); qint64 feeRate = msg.toMap().value("feeRate").toDouble()*1000; // Convert sats/Byte to sats/kB - bool manualFee = msg.toMap().value("manualFee").toBool(); - bool manualOutput = msg.toMap().value("manualOutput").toBool(); - if(!manualFee) feeRate = -1; - QTransactionPtr transaction = AppModel::instance()->transactionInfoPtr(); if(transaction){ QString wallet_id = transaction.data()->walletId(); @@ -84,6 +80,11 @@ void EVT_CREATE_TRANSACTION_SIGN_REQUEST_HANDLER(QVariant msg) { } else { + bool manualFee = msg.toMap().value("manualFee").toBool(); + bool manualOutput = msg.toMap().value("manualOutput").toBool(); + if(!manualFee){ // Auto fee = hourFee by recommendation from API + feeRate = AppModel::instance()->hourFeeOrigin(); + } DBG_INFO << "CREATE NEW TRANSACTION" << "subtract:" << subtractFromFeeAmout << "| manual Output:" << manualOutput @@ -157,7 +158,6 @@ void EVT_CREATE_TRANSACTION_SIGN_REQUEST_HANDLER(QVariant msg) { } else { QString unUseAddress = msg.toMap().value("unUseAddress").toString(); - trans = bridge::nunchukCancelCreateTransaction(wallet_id, transaction->nunchukTransaction(), unUseAddress, @@ -166,7 +166,6 @@ void EVT_CREATE_TRANSACTION_SIGN_REQUEST_HANDLER(QVariant msg) { transaction->txid(), msgwarning); } - if((int)EWARNING::WarningType::NONE_MSG == msgwarning.type()){ if(trans){ AppModel::instance()->setTransactionInfo(trans); diff --git a/Views/STATE_ID_SCR_EDIT_MEMBERS.cpp b/Views/STATE_ID_SCR_EDIT_MEMBERS.cpp new file mode 100644 index 00000000..9c0391b2 --- /dev/null +++ b/Views/STATE_ID_SCR_EDIT_MEMBERS.cpp @@ -0,0 +1,73 @@ +/************************************************************************* +* This file is part of the Nunchuk software (https://nunchuk.io/) * +* Copyright (C) 2020-2022 Enigmo * +* Copyright (C) 2022 Nunchuk * +* * +* This program is free software; you can redistribute it and/or * +* modify it under the terms of the GNU General Public License * +* as published by the Free Software Foundation; either version 3 * +* of the License, or (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program. If not, see . * +* * +**************************************************************************/ + + +#include "STATE_ID_SCR_EDIT_MEMBERS.h" +#include "Premiums/QGroupDashboard.h" +#include "Premiums/QGroupWallets.h" +#include "ServiceSetting.h" +#include "Premiums/QWalletServicesTag.h" + +void SCR_EDIT_MEMBERS_Entry(QVariant msg) { + +} + +void SCR_EDIT_MEMBERS_Exit(QVariant msg) { + +} + +void EVT_EDIT_MEMBERS_ENTER_REQUEST_HANDLER(QVariant msg) { + QMap maps = msg.toMap(); + QString type = maps["type"].toString(); + DBG_INFO << type; + if (auto dashboard = QGroupWallets::instance()->dashboardInfoPtr()) { + if (type == "add-new-member") { + QString roleId = maps["roleId"].toString(); + QJsonObject member; + member["email_or_username"] = ""; + member["role"] = roleId; + member["permissions"] = {}; + dashboard->addMember(member); + } else if (type == "replace-new-member") { + QString roleId = maps["roleId"].toString(); + QString email_or_username = maps["email_or_username"].toString(); + QString indexMember = maps["indexMember"].toString(); + QJsonObject member; + member["email_or_username"] = email_or_username; + member["role"] = roleId; + member["permissions"] = {}; + dashboard->editMembers(member, indexMember.toInt()); + } else if (type == "save-member-changed") { + QMap data; + data["state_id"] = E::STATE_ID_SCR_EDIT_MEMBERS; + QEventProcessor::instance()->sendEvent(E::EVT_REENTER_YOUR_PASSWORD_REQUEST, data); + } else if (type == "edit-member-email-code") { + QString codeEmail = maps["codeEmail"].toString(); + if (ServiceSetting::instance()->servicesTagPtr()->verifyConfirmationCode(codeEmail)) { + dashboard->EditGroupMembers(); + } + } + } +} + +void EVT_EDIT_MEMBERS_CLOSE_HANDLER(QVariant msg) { + +} + diff --git a/Views/STATE_ID_SCR_EDIT_MEMBERS.h b/Views/STATE_ID_SCR_EDIT_MEMBERS.h new file mode 100644 index 00000000..96d78de2 --- /dev/null +++ b/Views/STATE_ID_SCR_EDIT_MEMBERS.h @@ -0,0 +1,35 @@ +/************************************************************************* +* This file is part of the Nunchuk software (https://nunchuk.io/) * +* Copyright (C) 2020-2022 Enigmo * +* Copyright (C) 2022 Nunchuk * +* * +* This program is free software; you can redistribute it and/or * +* modify it under the terms of the GNU General Public License * +* as published by the Free Software Foundation; either version 3 * +* of the License, or (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program. If not, see . * +* * +**************************************************************************/ + + +#ifndef STATE_ID_SCR_EDIT_MEMBERS_H +#define STATE_ID_SCR_EDIT_MEMBERS_H + +#include +#include +#include "ViewsDefines.h" +#include "ViewsEnums.h" + +void SCR_EDIT_MEMBERS_Entry(QVariant msg); +void SCR_EDIT_MEMBERS_Exit(QVariant msg); +void EVT_EDIT_MEMBERS_ENTER_REQUEST_HANDLER(QVariant msg); +void EVT_EDIT_MEMBERS_CLOSE_HANDLER(QVariant msg); + +#endif // STATE_ID_SCR_EDIT_MEMBERS_H diff --git a/Views/STATE_ID_SCR_HOME.cpp b/Views/STATE_ID_SCR_HOME.cpp index 4c8c45c7..0292383b 100644 --- a/Views/STATE_ID_SCR_HOME.cpp +++ b/Views/STATE_ID_SCR_HOME.cpp @@ -144,14 +144,16 @@ void EVT_HOME_REMOTE_SIGNER_INFO_REQUEST_HANDLER(QVariant msg) { } void EVT_HOME_SEND_REQUEST_HANDLER(QVariant msg) { - if(AppModel::instance()->walletInfo()){ + if(auto w = AppModel::instance()->walletInfo()){ QString rollover_address = msg.toString(); if(rollover_address != ""){ + w->setTranReplace(true); timeoutHandler(1000, [=](){ emit AppModel::instance()->walletInfo()->rollOverProcess(rollover_address); }); } else { + w->setTranReplace(false); QUTXOListModelPtr utxos = bridge::nunchukGetUnspentOutputs(AppModel::instance()->walletInfo()->id()); if(utxos){ AppModel::instance()->setUtxoList(utxos); diff --git a/Views/STATE_ID_SCR_REENTER_YOUR_PASSWORD.cpp b/Views/STATE_ID_SCR_REENTER_YOUR_PASSWORD.cpp index e80d7f30..ea869c25 100644 --- a/Views/STATE_ID_SCR_REENTER_YOUR_PASSWORD.cpp +++ b/Views/STATE_ID_SCR_REENTER_YOUR_PASSWORD.cpp @@ -45,82 +45,91 @@ void EVT_INPUT_PASSWORD_REQUEST_HANDLER(QVariant msg) { DBG_INFO << state_id << wallet_id; QWalletPtr wallet {}; if (!wallet_id.isEmpty()) { - wallet = AppModel::instance() -> walletList() -> getWalletById(wallet_id); + wallet = AppModel::instance()->walletList()->getWalletById(wallet_id); } switch (state_id) { case E::STATE_ID_SCR_KEY_RECOVERY: - if (ServiceSetting::instance() -> servicesTagPtr() -> requestRecoverKeyVerifyPassword(password)) { - ServiceSetting::instance() -> servicesTagPtr() -> keyRecoveryPtr() -> CreateTapsigners(); - QEventProcessor::instance() -> sendEvent(E::EVT_KEY_RECOVERY_REQUEST); + if (ServiceSetting::instance()->servicesTagPtr()->requestRecoverKeyVerifyPassword(password)) { + ServiceSetting::instance()->servicesTagPtr()->keyRecoveryPtr()->CreateTapsigners(); + QEventProcessor::instance()->sendEvent(E::EVT_KEY_RECOVERY_REQUEST); } break; case E::STATE_ID_SCR_SETUP_SECURITY_QUESTION: - if (ServiceSetting::instance() -> servicesTagPtr() -> list2FA().size() > 0) { - QString w_id = ServiceSetting::instance() -> servicesTagPtr() -> list2FA().first(); - if (auto w = AppModel::instance() -> walletList() -> getWalletById(w_id)) { - ServiceSetting::instance() -> setWalletInfo(w); - w -> setFlow((int) AlertEnum::E_Alert_t::SERVICE_TAG_UPDATE_SECURITY_QUESTION); + if (ServiceSetting::instance()->servicesTagPtr()->list2FA().size() > 0) { + QString w_id = ServiceSetting::instance()->servicesTagPtr()->list2FA().first(); + if (auto w = AppModel::instance()->walletList()->getWalletById(w_id)) { + ServiceSetting::instance()->setWalletInfo(w); + w->setFlow((int) AlertEnum::E_Alert_t::SERVICE_TAG_UPDATE_SECURITY_QUESTION); } } - if (ServiceSetting::instance() -> servicesTagPtr() -> requestUpdateSecurityQuestionPassword(password)) { - ServiceSetting::instance() -> servicesTagPtr() -> keyRecoveryPtr() -> setRequireQuestions({}); - ServiceSetting::instance() -> servicesTagPtr() -> keyRecoveryPtr() -> CreateAllSecurityQuestions(); - QEventProcessor::instance() -> sendEvent(E::EVT_SETUP_SECURITY_QUESTION_REQUEST); + if (ServiceSetting::instance()->servicesTagPtr()->requestUpdateSecurityQuestionPassword(password)) { + ServiceSetting::instance()->servicesTagPtr()->keyRecoveryPtr()->setRequireQuestions({}); + ServiceSetting::instance()->servicesTagPtr()->keyRecoveryPtr()->CreateAllSecurityQuestions(); + QEventProcessor::instance()->sendEvent(E::EVT_SETUP_SECURITY_QUESTION_REQUEST); } break; case E::STATE_ID_SCR_SELECT_YOUR_LOCKDOWN_PERIOD: - ServiceSetting::instance() -> setWalletInfo(wallet); - if (ServiceSetting::instance() -> servicesTagPtr() -> requestLockDownVerifyPassword(password)) { - QEventProcessor::instance() -> sendEvent(E::EVT_CLOSE_TO_SERVICE_SETTINGS_REQUEST); + ServiceSetting::instance()->setWalletInfo(wallet); + if (ServiceSetting::instance()->servicesTagPtr()->requestLockDownVerifyPassword(password)) { + QEventProcessor::instance()->sendEvent(E::EVT_CLOSE_TO_SERVICE_SETTINGS_REQUEST); } break; case E::STATE_ID_SCR_SERVICE_SETTINGS: - ServiceSetting::instance() -> setWalletInfo(wallet); - if (ServiceSetting::instance() -> servicesTagPtr() -> requestServerKeyVerifyPassword(password)) { - if (wallet && wallet -> serverKeyPtr()) { + ServiceSetting::instance()->setWalletInfo(wallet); + if (ServiceSetting::instance()->servicesTagPtr()->requestServerKeyVerifyPassword(password)) { + if (wallet && wallet->serverKeyPtr()) { QtConcurrent::run([wallet]() { - wallet -> serverKeyPtr() -> serverKeyGetCurrentPolicies(); + wallet->serverKeyPtr()->serverKeyGetCurrentPolicies(); }); } QTimer::singleShot(100, [ = ]() { - QEventProcessor::instance() -> sendEvent(E::EVT_CLOSE_TO_SERVICE_SETTINGS_REQUEST); + QEventProcessor::instance()->sendEvent(E::EVT_CLOSE_TO_SERVICE_SETTINGS_REQUEST); }); } break; case E::STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN: { - ServiceSetting::instance() -> setWalletInfo(wallet); - if (ServiceSetting::instance() -> servicesTagPtr() -> requestInheritancePlanVerifyPassword(password)) { - if (wallet && wallet -> inheritancePlanPtr()) { + ServiceSetting::instance()->setWalletInfo(wallet); + if (ServiceSetting::instance()->servicesTagPtr()->requestInheritancePlanVerifyPassword(password)) { + if (wallet && wallet->inheritancePlanPtr()) { QtConcurrent::run([wallet]() { - wallet -> inheritancePlanPtr() -> GetInheritancePlan(); + wallet->inheritancePlanPtr()->GetInheritancePlan(); }); } QTimer::singleShot(100, [ = ]() { - QEventProcessor::instance() -> sendEvent(E::EVT_CLOSE_TO_SERVICE_SETTINGS_REQUEST); + QEventProcessor::instance()->sendEvent(E::EVT_CLOSE_TO_SERVICE_SETTINGS_REQUEST); }); } } break; case E::STATE_ID_SCR_WALLET_INFO: { - if (ServiceSetting::instance() -> servicesTagPtr() -> requestDeleteWalletVerifyPassword(password)) { - if (wallet && wallet -> DeleteWalletRequiredSignatures()) { - AppModel::instance() -> walletInfoPtr() -> setIsDeleting(wallet -> isDeleting()); + if (ServiceSetting::instance()->servicesTagPtr()->requestDeleteWalletVerifyPassword(password)) { + if (wallet && wallet->DeleteWalletRequiredSignatures()) { + AppModel::instance()->walletInfoPtr()->setIsDeleting(wallet->isDeleting()); } - QEventProcessor::instance() -> sendEvent(E::EVT_REENTER_YOUR_PASSWORD_BACK); + QEventProcessor::instance()->sendEvent(E::EVT_REENTER_YOUR_PASSWORD_BACK); } } break; case E::STATE_ID_SCR_CHANGE_EMAIL: { - if (ServiceSetting::instance() -> servicesTagPtr() -> requestChangeEmailVerifyPassword(password)) { - QEventProcessor::instance() -> sendEvent(E::EVT_ONS_CLOSE_ALL_REQUEST); - QEventProcessor::instance() -> sendEvent(E::EVT_CHANGE_EMAIL_REQUEST); + if (ServiceSetting::instance()->servicesTagPtr()->requestChangeEmailVerifyPassword(password)) { + QEventProcessor::instance()->sendEvent(E::EVT_ONS_CLOSE_ALL_REQUEST); + QEventProcessor::instance()->sendEvent(E::EVT_CHANGE_EMAIL_REQUEST); } } break; case E::STATE_ID_SCR_DASHBOARD_ALERT_INFO: { - if (ServiceSetting::instance() -> servicesTagPtr() -> requestReplaceKeysVerifyPassword(password)) { - QEventProcessor::instance() -> sendEvent(E::EVT_ONS_CLOSE_ALL_REQUEST); - QEventProcessor::instance() -> sendEvent(E::EVT_REPLACE_SELECT_KEY_REQUEST); + if (ServiceSetting::instance()->servicesTagPtr()->requestReplaceKeysVerifyPassword(password)) { + QEventProcessor::instance()->sendEvent(E::EVT_ONS_CLOSE_ALL_REQUEST); + QEventProcessor::instance()->sendEvent(E::EVT_REPLACE_SELECT_KEY_REQUEST); + } + } + break; + case E::STATE_ID_SCR_EDIT_MEMBERS: { + if (ServiceSetting::instance()->servicesTagPtr()->requestEditMemberVerifyPassword(password)) { + QEventProcessor::instance()->sendEvent(E::EVT_REENTER_YOUR_PASSWORD_BACK); + if (auto dashboard = QGroupWallets::instance()->dashboardInfoPtr()) { + dashboard->CalculateRequireSignaturesForEditingMembers(); + } } } break; diff --git a/Views/STATE_ID_SCR_SEND.cpp b/Views/STATE_ID_SCR_SEND.cpp index b93f3af1..4cee0768 100644 --- a/Views/STATE_ID_SCR_SEND.cpp +++ b/Views/STATE_ID_SCR_SEND.cpp @@ -31,6 +31,7 @@ void SCR_SEND_Entry(QVariant msg) { if(AppModel::instance()->walletInfo() && AppModel::instance()->walletInfo()->escrow()){ AppModel::instance()->showToast(0, STR_CPP_083, EWARNING::WarningType::WARNING_MSG); } + AppModel::instance()->startGetEstimatedFee(); } void SCR_SEND_Exit(QVariant msg) { @@ -49,6 +50,7 @@ void EVT_SEND_CREATE_TRANSACTION_REQUEST_HANDLER(QVariant msg) { QString memo = msg.toMap().value("destinationMemo").toString(); QList destinationInputed = msg.toMap().value("destinationList").toList(); QDestinationListModelPtr destinationList = QDestinationListModelPtr(new DestinationListModel()); + qint64 totalAmountTotal = 0; for(QVariant var: destinationInputed){ qint64 toAmount = 0; QMap destination = var.toMap(); @@ -61,6 +63,7 @@ void EVT_SEND_CREATE_TRANSACTION_REQUEST_HANDLER(QVariant msg) { toAmount = qUtils::QAmountFromValue(destination["toAmount"].toString()); } destinationList.data()->addDestination(destination["toAddress"].toString(), toAmount); + totalAmountTotal += toAmount; } AppModel::instance()->setDestinationList(destinationList); @@ -69,7 +72,7 @@ void EVT_SEND_CREATE_TRANSACTION_REQUEST_HANDLER(QVariant msg) { bool subtractFromAmount = false; if(AppModel::instance()->walletInfo()){ wallet_id = AppModel::instance()->walletInfo()->id(); - if(AppModel::instance()->walletInfo()->escrow()){ + if(AppModel::instance()->walletInfo()->escrow() || (totalAmountTotal == AppModel::instance()->walletInfo()->balanceSats())){ subtractFromAmount = true; } } @@ -77,10 +80,13 @@ void EVT_SEND_CREATE_TRANSACTION_REQUEST_HANDLER(QVariant msg) { outputs = AppModel::instance()->destinationList()->getOutputs(); DBG_INFO << "Destination : " << outputs; } + qint64 feerate = AppModel::instance()->hourFeeOrigin(); + DBG_INFO << "Fee rate" << feerate; QWarningMessage msgwarning; QTransactionPtr trans = bridge::nunchukDraftTransaction(wallet_id, outputs, - NULL, -1, + NULL, + feerate, subtractFromAmount, "", msgwarning); @@ -101,7 +107,7 @@ void EVT_SEND_CREATE_TRANSACTION_REQUEST_HANDLER(QVariant msg) { QTransactionPtr trans = bridge::nunchukDraftTransaction(wallet_id, outputs, NULL, - -1, + feerate, true, "", msgwarning); diff --git a/Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.cpp b/Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.cpp index ec28da0c..561a79d1 100644 --- a/Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.cpp +++ b/Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.cpp @@ -40,3 +40,6 @@ void EVT_SIGN_IN_VIA_XPUB_ENTER_HANDLER(QVariant msg) { } } +void EVT_SIGN_IN_VIA_XPUB_CLOSE_HANDLER(QVariant msg) { + +} diff --git a/Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.h b/Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.h index 53c9a253..2f0c5748 100644 --- a/Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.h +++ b/Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.h @@ -30,5 +30,6 @@ void SCR_SIGN_IN_VIA_XPUB_Entry(QVariant msg); void SCR_SIGN_IN_VIA_XPUB_Exit(QVariant msg); void EVT_SIGN_IN_VIA_XPUB_ENTER_HANDLER(QVariant msg); +void EVT_SIGN_IN_VIA_XPUB_CLOSE_HANDLER(QVariant msg); #endif // STATE_ID_SCR_SIGN_IN_VIA_XPUB_H diff --git a/Views/Views.h b/Views/Views.h index 01582721..7c8736a6 100644 --- a/Views/Views.h +++ b/Views/Views.h @@ -114,10 +114,11 @@ static const APPLICATION_STATE STATE_ID_SCR_SELECT_SERVER static const APPLICATION_STATE STATE_ID_SCR_CHANGE_EMAIL = {E::STATE_ID_SCR_CHANGE_EMAIL , SCR_CHANGE_EMAIL_Entry , SCR_CHANGE_EMAIL_Exit , LAYER::LAYER_POPUP , LIMIT::NONE , SCR_CHANGE_EMAIL }; static const APPLICATION_STATE STATE_ID_SCR_REPLACE_SELECT_KEY = {E::STATE_ID_SCR_REPLACE_SELECT_KEY , SCR_REPLACE_SELECT_KEY_Entry , SCR_REPLACE_SELECT_KEY_Exit , LAYER::LAYER_POPUP , LIMIT::NONE , SCR_REPLACE_SELECT_KEY }; static const APPLICATION_STATE STATE_ID_SCR_REPLACE_KEYS = {E::STATE_ID_SCR_REPLACE_KEYS , SCR_REPLACE_KEYS_Entry , SCR_REPLACE_KEYS_Exit , LAYER::LAYER_ONSCREEN, LIMIT::NONE , SCR_REPLACE_KEYS }; +static const APPLICATION_STATE STATE_ID_SCR_EDIT_MEMBERS = {E::STATE_ID_SCR_EDIT_MEMBERS , SCR_EDIT_MEMBERS_Entry , SCR_EDIT_MEMBERS_Exit , LAYER::LAYER_ONSCREEN, LIMIT::NONE , SCR_EDIT_MEMBERS }; static const APPLICATION_STATE STATE_ID_SCR_SIGN_IN_VIA_XPUB = {E::STATE_ID_SCR_SIGN_IN_VIA_XPUB , SCR_SIGN_IN_VIA_XPUB_Entry , SCR_SIGN_IN_VIA_XPUB_Exit , LAYER::LAYER_ONSCREEN, LIMIT::NONE , SCR_SIGN_IN_VIA_XPUB }; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -static const STATE_TRIGGER STATE_ID_ROOT_trigger[33] = +static const STATE_TRIGGER STATE_ID_ROOT_trigger[34] = { {E::EVT_STARTING_APPLICATION_LOCALMODE , EVT_STARTING_APPLICATION_LOCALMODE_HANDLER , NULL }, {E::EVT_STARTING_APPLICATION_ONLINEMODE , EVT_STARTING_APPLICATION_ONLINEMODE_HANDLER , NULL }, @@ -151,6 +152,7 @@ static const STATE_TRIGGER STATE_ID_ROOT_trigger[33] = {E::EVT_REENTER_YOUR_PASSWORD_REQUEST , EVT_REENTER_YOUR_PASSWORD_REQUEST_HANDLER , &STATE_ID_SCR_REENTER_YOUR_PASSWORD }, {E::EVT_ONBOARDING_REQUEST , EVT_ONBOARDING_REQUEST_HANDLER , &STATE_ID_SCR_ONBOARDING }, {E::EVT_REPLACE_SELECT_KEY_REQUEST , EVT_REPLACE_SELECT_KEY_REQUEST_HANDLER , &STATE_ID_SCR_REPLACE_SELECT_KEY }, + {E::EVT_EDIT_MEMBERS_REQUEST , EVT_EDIT_MEMBERS_REQUEST_HANDLER , &STATE_ID_SCR_EDIT_MEMBERS }, {E::EVT_SIGN_IN_VIA_XPUB_REQUEST , EVT_SIGN_IN_VIA_XPUB_REQUEST_HANDLER , &STATE_ID_SCR_SIGN_IN_VIA_XPUB }, }; @@ -467,6 +469,15 @@ static const STATE_TRIGGER STATE_ID_SCR_DUMMY_TRANSACTION_INFO_trigger[2] = //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +static const STATE_TRIGGER STATE_ID_SCR_EDIT_MEMBERS_trigger[2] = +{ + {E::EVT_EDIT_MEMBERS_ENTER_REQUEST, EVT_EDIT_MEMBERS_ENTER_REQUEST_HANDLER, NULL }, + {E::EVT_EDIT_MEMBERS_CLOSE , EVT_EDIT_MEMBERS_CLOSE_HANDLER , &STATE_ID_ROOT }, +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + static const STATE_TRIGGER STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN_trigger[5] = { {E::EVT_UPDATE_ACTIVATION_DATE_REQUEST , EVT_UPDATE_ACTIVATION_DATE_REQUEST_HANDLER , NULL }, @@ -987,9 +998,10 @@ static const STATE_TRIGGER STATE_ID_SCR_SIGN_IN_MANUALLY_trigger[4] = //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -static const STATE_TRIGGER STATE_ID_SCR_SIGN_IN_VIA_XPUB_trigger[1] = +static const STATE_TRIGGER STATE_ID_SCR_SIGN_IN_VIA_XPUB_trigger[2] = { - {E::EVT_SIGN_IN_VIA_XPUB_ENTER, EVT_SIGN_IN_VIA_XPUB_ENTER_HANDLER, NULL }, + {E::EVT_SIGN_IN_VIA_XPUB_ENTER, EVT_SIGN_IN_VIA_XPUB_ENTER_HANDLER, NULL }, + {E::EVT_SIGN_IN_VIA_XPUB_CLOSE, EVT_SIGN_IN_VIA_XPUB_CLOSE_HANDLER, &STATE_ID_ROOT }, }; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1141,7 +1153,7 @@ static const STATE_TRIGGER STATE_ID_TOAST_MESSAGE_DISPLAY_trigger[1] = //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -static const STATE_SYSTEM STATE_ALL[87] = +static const STATE_SYSTEM STATE_ALL[88] = { {E::STATE_ID_ROOT , STATE_ID_ROOT_trigger , ALEN(STATE_ID_ROOT_trigger) , &STATE_ID_ROOT }, {E::STATE_ID_SCR_HOME , STATE_ID_SCR_HOME_trigger , ALEN(STATE_ID_SCR_HOME_trigger) , &STATE_ID_SCR_HOME }, @@ -1229,6 +1241,7 @@ static const STATE_SYSTEM STATE_ALL[87] = {E::STATE_ID_SCR_CHANGE_EMAIL , STATE_ID_SCR_CHANGE_EMAIL_trigger , ALEN(STATE_ID_SCR_CHANGE_EMAIL_trigger) , &STATE_ID_SCR_CHANGE_EMAIL }, {E::STATE_ID_SCR_REPLACE_SELECT_KEY , STATE_ID_SCR_REPLACE_SELECT_KEY_trigger , ALEN(STATE_ID_SCR_REPLACE_SELECT_KEY_trigger) , &STATE_ID_SCR_REPLACE_SELECT_KEY }, {E::STATE_ID_SCR_REPLACE_KEYS , STATE_ID_SCR_REPLACE_KEYS_trigger , ALEN(STATE_ID_SCR_REPLACE_KEYS_trigger) , &STATE_ID_SCR_REPLACE_KEYS }, + {E::STATE_ID_SCR_EDIT_MEMBERS , STATE_ID_SCR_EDIT_MEMBERS_trigger , ALEN(STATE_ID_SCR_EDIT_MEMBERS_trigger) , &STATE_ID_SCR_EDIT_MEMBERS }, {E::STATE_ID_SCR_SIGN_IN_VIA_XPUB , STATE_ID_SCR_SIGN_IN_VIA_XPUB_trigger , ALEN(STATE_ID_SCR_SIGN_IN_VIA_XPUB_trigger) , &STATE_ID_SCR_SIGN_IN_VIA_XPUB }, }; diff --git a/contrib/libnunchuk b/contrib/libnunchuk index b0ec424c..6ff93fa6 160000 --- a/contrib/libnunchuk +++ b/contrib/libnunchuk @@ -1 +1 @@ -Subproject commit b0ec424cca907c18ed133447a7785751bc74a175 +Subproject commit 6ff93fa6ffcbe9bdbe687add6c686144c2904e20 diff --git a/ifaces/Servers/Byzantine.cpp b/ifaces/Servers/Byzantine.cpp index c05c10e6..faee8b08 100644 --- a/ifaces/Servers/Byzantine.cpp +++ b/ifaces/Servers/Byzantine.cpp @@ -1149,6 +1149,42 @@ bool Byzantine::GetAllCancelledTransaction(const QString &group_id, const QStrin return false; } +bool Byzantine::GetAllTransactionNotes(const QString &group_id, const QString &wallet_id, QJsonObject &output, QString &errormsg) +{ + if (group_id.isEmpty()) return false; + int reply_code = -1; + QString reply_msg = ""; + QString cmd = commands[Group::CMD_IDX::GROUP_WALLETS_GET_ALL_TX_NOTES]; + cmd.replace("{group_id}", group_id); + cmd.replace("{wallet_id_or_local_id}", wallet_id); + + QJsonObject data; + data["offset"] = "0"; + data["limit"] = "10000"; + data["statuses"] = "PENDING_CONFIRMATION,CONFIRMED,NETWORK_REJECTED"; + + QJsonObject jsonObj = getSync(cmd, data, reply_code, reply_msg); + if (reply_code == DRACO_CODE::SUCCESSFULL) { + QJsonObject errorObj = jsonObj["error"].toObject(); + int response_code = errorObj["code"].toInt(); + QString response_msg = errorObj["message"].toString(); + if(response_code == DRACO_CODE::RESPONSE_OK){ + output = jsonObj["data"].toObject(); + return true; + } + else { + errormsg = response_msg; + DBG_INFO << response_code << response_msg; +#if 0 //NO NEED + AppModel::instance()->showToast(response_code, response_msg, EWARNING::WarningType::EXCEPTION_MSG); +#endif + return false; + } + } + errormsg = reply_msg; + return false; +} + bool Byzantine::GetOneTransaction(const QString &group_id, const QString &wallet_id, const QString &txid, QJsonObject &output, QString &errormsg) { if (group_id.isEmpty()) return false; @@ -2369,3 +2405,66 @@ bool Byzantine::ResetKeyReplacement(const QString &group_id, const QString &wall errormsg = reply_msg; return false; } + + +bool Byzantine::EditGroupMembers(const QString &group_id, const QJsonObject &request_body, const QStringList &signatures, const QString &passwordToken, const QString &secQuesToken, const QString &confirmToken, QJsonObject &output, QString &errormsg) +{ + QMap params; + for (int i = 0; i < signatures.count(); i++) { + params[QString("AuthorizationX-%1").arg(i+1)] = signatures.at(i); + } + params["Verify-token"] = passwordToken; + if (!secQuesToken.isEmpty()) { + params["Security-Question-token"] = secQuesToken; + } + if (!confirmToken.isEmpty()) { + params["Confirmation-token"] = confirmToken; + } + int reply_code = -1; + QString reply_msg = ""; + QString cmd = commands[Group::CMD_IDX::GROUP_WALLET_EDIT_GROUP_MEMBERS]; + cmd.replace("{group_id}", group_id); + QJsonObject jsonObj = putSync(cmd, {}, params, request_body, reply_code, reply_msg); + if(reply_code == DRACO_CODE::SUCCESSFULL){ + QJsonObject errorObj = jsonObj["error"].toObject(); + int response_code = errorObj["code"].toInt(); + QString response_msg = errorObj["message"].toString(); + if(response_code == DRACO_CODE::RESPONSE_OK){ + output = jsonObj["data"].toObject(); + return true; + } + else{ + errormsg = response_msg; + AppModel::instance()->showToast(response_code, response_msg, EWARNING::WarningType::EXCEPTION_MSG); + return false; + } + } + errormsg = reply_msg; + return false; +} + +bool Byzantine::CalculateRequireSignaturesForEditingMembers(const QString &group_id, const QJsonObject &request_body, QJsonObject &output, QString &errormsg) +{ + DBG_INFO << request_body; + int reply_code = -1; + QString reply_msg = ""; + QString cmd = commands[Group::CMD_IDX::GROUP_WALLET_EDIT_GROUP_MEMBERS_REQUIRED_SIGNATURES]; + cmd.replace("{group_id}", group_id); + QJsonObject jsonObj = postSync(cmd, request_body, reply_code, reply_msg); + if(reply_code == DRACO_CODE::SUCCESSFULL){ + QJsonObject errorObj = jsonObj["error"].toObject(); + int response_code = errorObj["code"].toInt(); + QString response_msg = errorObj["message"].toString(); + if(response_code == DRACO_CODE::RESPONSE_OK){ + output = jsonObj["data"].toObject(); + return true; + } + else{ + errormsg = response_msg; + AppModel::instance()->showToast(response_code, response_msg, EWARNING::WarningType::EXCEPTION_MSG); + return false; + } + } + errormsg = reply_msg; + return false; +} diff --git a/ifaces/Servers/Byzantine.h b/ifaces/Servers/Byzantine.h index d16c1b48..08ffd3c2 100644 --- a/ifaces/Servers/Byzantine.h +++ b/ifaces/Servers/Byzantine.h @@ -94,6 +94,7 @@ class Byzantine : public QRest // Transaction operation bool GetAllTransaction(const QString &group_id, const QString &wallet_id, QJsonObject& output, QString &errormsg); bool GetAllCancelledTransaction(const QString &group_id, const QString &wallet_id, const int offset, const int limit, QJsonObject& output, QString &errormsg); + bool GetAllTransactionNotes(const QString &group_id, const QString &wallet_id, QJsonObject& output, QString &errormsg); bool GetOneTransaction(const QString &group_id, const QString &wallet_id, const QString &txid, QJsonObject& output, QString &errormsg); bool UpdateTransaction(const QString &group_id, const QString &wallet_id, const QString &txid, const QString ¬e, QJsonObject& output, QString &errormsg); bool CancelTransaction(const QString &group_id, const QString &wallet_id, const QString &txid, QJsonObject& output, QString &errormsg); @@ -248,6 +249,20 @@ class Byzantine : public QRest QJsonObject& output, QString &errormsg); + bool EditGroupMembers(const QString &group_id, + const QJsonObject& request_body, + const QStringList &signatures, + const QString& passwordToken, + const QString& secQuesToken, + const QString& confirmToken, + QJsonObject &output, + QString &errormsg); + + bool CalculateRequireSignaturesForEditingMembers(const QString &group_id, + const QJsonObject& request_body, + QJsonObject& output, + QString &errormsg); + }; #endif // BYZANTINE_H diff --git a/ifaces/Servers/Draco.cpp b/ifaces/Servers/Draco.cpp index 0ab426e1..faf6f6b7 100644 --- a/ifaces/Servers/Draco.cpp +++ b/ifaces/Servers/Draco.cpp @@ -1368,7 +1368,22 @@ void Draco::setStayLoggedIn(bool value) } } -void Draco::getUserSubscriptions() +bool Draco::getUserSubscriptions() +{ + if (AppSetting::instance()->primaryServer() == (int)nunchuk::Chain::TESTNET) + { + if (!getUserSubscriptionsTestnet()) { + return getUserSubscriptionsMainnet(); + } + } else if (AppSetting::instance()->primaryServer() == (int)nunchuk::Chain::MAIN) { + if (!getUserSubscriptionsMainnet()) { + return getUserSubscriptionsTestnet(); + } + } + return false; +} + +bool Draco::getUserSubscriptionsMainnet() { int reply_code = -1; QString reply_msg = ""; @@ -1381,16 +1396,10 @@ void Draco::getUserSubscriptions() QJsonObject data = jsonObj["data"].toObject(); QJsonArray subs = data["subscriptions"].toArray(); CLIENT_INSTANCE->setSubscriptions(subs); - } - else { - - } - } - if (AppSetting::instance()->primaryServer() == (int)nunchuk::Chain::TESTNET){ - if (CLIENT_INSTANCE->subscriptions().size() == 0) { - getUserSubscriptionsTestnet(); + return CLIENT_INSTANCE->subscriptions().size() > 0; } } + return false; } bool Draco::getUserSubscriptionsTestnet() @@ -1406,9 +1415,7 @@ bool Draco::getUserSubscriptionsTestnet() QJsonObject data = jsonObj["data"].toObject(); QJsonArray subs = data["subscriptions"].toArray(); CLIENT_INSTANCE->setSubscriptions(subs); - return true; - } - else { + return CLIENT_INSTANCE->subscriptions().size() > 0; } } return false; @@ -1864,6 +1871,38 @@ bool Draco::assistedKeyUpdateName(const QString &fingerPrint, const QString &nam return false; } +bool Draco::assistedWalletGetTxNotes(const QString &wallet_id, QJsonObject &output, QString &errormsg) +{ + QJsonObject data; + data["offset"] = "0"; + data["limit"] = "10000"; + data["greater_than_time_millis"] = 0, + data["statuses"] = "PENDING_CONFIRMATION,CONFIRMED,NETWORK_REJECTED"; + int reply_code = -1; + QString reply_msg = ""; + QString cmd = commands[Premium::CMD_IDX::ASSISTED_WALLET_GET_LIST_TX_NOTES]; + cmd.replace("{wallet_id_or_local_id}",wallet_id); + QJsonObject jsonObj = getSync(cmd, data, reply_code, reply_msg); + if(reply_code == DRACO_CODE::SUCCESSFULL){ + QJsonObject errorObj = jsonObj["error"].toObject(); + int response_code = errorObj["code"].toInt(); + QString response_msg = errorObj["message"].toString(); + if(response_code == DRACO_CODE::RESPONSE_OK){ + output = jsonObj.value("data").toObject(); + return true; + } + else { + errormsg = response_msg; +#if 0 //NO NEED + AppModel::instance()->showToast(response_code, response_msg, EWARNING::WarningType::EXCEPTION_MSG); +#endif + return false; + } + } + errormsg = reply_msg; + return false; +} + bool Draco::DeleteAssistedWallet(const QString &wallet_id, const QStringList &signatures, const QString &passwordToken, const QString& secQuesToken, QJsonObject &output, QString &errormsg) { int reply_code = -1; diff --git a/ifaces/Servers/Draco.h b/ifaces/Servers/Draco.h index 9dd03e23..cc51d781 100644 --- a/ifaces/Servers/Draco.h +++ b/ifaces/Servers/Draco.h @@ -111,7 +111,8 @@ class Draco : public QRest void setStayLoggedIn(bool value); // USER_SUBSCRIPTION - void getUserSubscriptions(); + bool getUserSubscriptions(); + bool getUserSubscriptionsMainnet(); bool getUserSubscriptionsTestnet(); // ASSISTED_WALLETS @@ -132,7 +133,7 @@ class Draco : public QRest bool assistedWalletGetInfo(const QString &wallet_id, QJsonObject &output, QString &errormsg); bool assistedWalletUpdate(const QString &wallet_id, const QString &name, const QString &description, QJsonObject &output, QString &errormsg); bool assistedKeyUpdateName(const QString &fingerPrint, const QString &name, const QJsonObject& json = {}); - + bool assistedWalletGetTxNotes(const QString &wallet_id, QJsonObject &output, QString &errormsg); bool DeleteAssistedWallet(const QString& wallet_id, const QStringList &signatures, const QString& passwordToken, const QString& secQuesToken, QJsonObject &output, QString &errormsg); bool DeleteWalletRequiredSignatures(const QString &wallet_id, QJsonObject &output, QString &errormsg); diff --git a/ifaces/Servers/DracoDefines.h b/ifaces/Servers/DracoDefines.h index 5497ccd5..071a3b21 100644 --- a/ifaces/Servers/DracoDefines.h +++ b/ifaces/Servers/DracoDefines.h @@ -157,6 +157,7 @@ enum CMD_IDX { ASSISTED_WALLET_CANCEL_TX, ASSISTED_WALLET_GET_TX, ASSISTED_WALLET_GET_LIST_TX, + ASSISTED_WALLET_GET_LIST_TX_NOTES, ASSISTED_WALLET_DELETE_LIST_TX, ASSISTED_WALLET_SYNC_TX, ASSISTED_WALLET_RBF_TX, @@ -283,6 +284,8 @@ enum CMD_IDX { GROUP_WALLET_UPDATE_ALIAS, GROUP_WALLET_DELETE_ALIAS, GROUP_WALLET_UPDATE_PRIMARY_OWNER, + GROUP_WALLET_EDIT_GROUP_MEMBERS, + GROUP_WALLET_EDIT_GROUP_MEMBERS_REQUIRED_SIGNATURES, //Group Alert Management GROUP_WALLET_ALERTS, @@ -320,6 +323,7 @@ enum CMD_IDX { // Group transactions GROUP_WALLETS_GET_ALL_TX, + GROUP_WALLETS_GET_ALL_TX_NOTES, GROUP_WALLETS_GET_ONE_TX, GROUP_WALLETS_UPDATE_TX, GROUP_WALLETS_CANCEL_TX, @@ -489,7 +493,8 @@ const QMap commands { { Premium::CMD_IDX::ASSISTED_WALLET_CREATE_TX , QString("%1/%2").arg(DRAGON_USER_WALLETS_URL).arg("wallets/{wallet_id_or_local_id}/transactions") }, { Premium::CMD_IDX::ASSISTED_WALLET_UPDATE_TX , QString("%1/%2").arg(DRAGON_USER_WALLETS_URL).arg("wallets/{wallet_id_or_local_id}/transactions/{transaction_id}") }, { Premium::CMD_IDX::ASSISTED_WALLET_GET_LIST_TX , QString("%1/%2").arg(DRAGON_USER_WALLETS_URL).arg("wallets/{wallet_id_or_local_id}/transactions") }, - { Premium::CMD_IDX::ASSISTED_WALLET_DELETE_LIST_TX , QString("%1/%2").arg(DRAGON_USER_WALLETS_URL).arg("wallets/{wallet_id_or_local_id}/transactions") }, + { Premium::CMD_IDX::ASSISTED_WALLET_GET_LIST_TX_NOTES , QString("%1/%2").arg(DRAGON_USER_WALLETS_URL).arg("wallets/{wallet_id_or_local_id}/transactions/notes") }, + { Premium::CMD_IDX::ASSISTED_WALLET_DELETE_LIST_TX , QString("%1/%2").arg(DRAGON_USER_WALLETS_URL).arg("wallets/{wallet_id_or_local_id}/transactions") }, { Premium::CMD_IDX::ASSISTED_WALLET_SIGN_TX , QString("%1/%2").arg(DRAGON_USER_WALLETS_URL).arg("wallets/{wallet_id_or_local_id}/transactions/{transaction_id}/sign") }, { Premium::CMD_IDX::ASSISTED_WALLET_CANCEL_TX , QString("%1/%2").arg(DRAGON_USER_WALLETS_URL).arg("wallets/{wallet_id_or_local_id}/transactions/{transaction_id}") }, { Premium::CMD_IDX::ASSISTED_WALLET_GET_TX , QString("%1/%2").arg(DRAGON_USER_WALLETS_URL).arg("wallets/{wallet_id_or_local_id}/transactions/{transaction_id}") }, @@ -599,6 +604,10 @@ const QMap commands { { Group::CMD_IDX::GROUP_WALLETS_LIST , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups") }, { Group::CMD_IDX::GROUP_WALLETS_ACCEPT , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/members/accept") }, { Group::CMD_IDX::GROUP_WALLETS_DENY , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/members/deny") }, + { Group::CMD_IDX::GROUP_WALLET_EDIT_GROUP_MEMBERS , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/members") }, + { Group::CMD_IDX::GROUP_WALLET_EDIT_GROUP_MEMBERS_REQUIRED_SIGNATURES , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/members/calculate-requires-signatures") }, + + { Group::CMD_IDX::GROUP_WALLET_ALERTS , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/alerts") }, { Group::CMD_IDX::GROUP_WALLET_ALERTS_COUNT , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/alerts/total") }, { Group::CMD_IDX::GROUP_WALLET_ALERTS_READ , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/alerts/{alert_id}/mark-as-read") }, @@ -638,6 +647,7 @@ const QMap commands { // Group transactions { Group::CMD_IDX::GROUP_WALLETS_GET_ALL_TX , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/wallets/{wallet_id_or_local_id}/transactions") }, + { Group::CMD_IDX::GROUP_WALLETS_GET_ALL_TX_NOTES , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/wallets/{wallet_id_or_local_id}/transactions/notes") }, { Group::CMD_IDX::GROUP_WALLETS_GET_ONE_TX , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/wallets/{wallet_id_or_local_id}/transactions/{transaction_id}") }, { Group::CMD_IDX::GROUP_WALLETS_UPDATE_TX , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/wallets/{wallet_id_or_local_id}/transactions/{transaction_id}") }, { Group::CMD_IDX::GROUP_WALLETS_CANCEL_TX , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/wallets/{wallet_id_or_local_id}/transactions/{transaction_id}") }, diff --git a/ifaces/bridgeifaces.cpp b/ifaces/bridgeifaces.cpp index 6600c144..ea2df6d6 100644 --- a/ifaces/bridgeifaces.cpp +++ b/ifaces/bridgeifaces.cpp @@ -836,14 +836,19 @@ QTransactionPtr bridge::nunchukImportTransaction(const QString &wallet_id, const } } -QTransactionPtr bridge::nunchukUpdateTransaction(const QString &wallet_id, const QString &tx_id, const QString &new_txid, const QString &raw_tx, const QString &reject_msg, QWarningMessage &msg) +QTransactionPtr bridge::nunchukUpdateTransaction(const QString &wallet_id, + const QString &tx_id, + const QString &new_txid, + const QString &raw_tx, + const QString &reject_msg, + QWarningMessage &msg) { nunchuk::Transaction trans_result = nunchukiface::instance()->UpdateTransaction(wallet_id.toStdString(), - tx_id.toStdString(), - new_txid.toStdString(), - raw_tx.toStdString(), - reject_msg.toStdString(), - msg); + tx_id.toStdString(), + new_txid.toStdString(), + raw_tx.toStdString(), + reject_msg.toStdString(), + msg); if((int)EWARNING::WarningType::NONE_MSG == msg.type()){ QTransactionPtr final = bridge::convertTransaction(trans_result, wallet_id); return final; diff --git a/localization/STR_QML.js b/localization/STR_QML.js index dff3cf76..607d69a1 100644 --- a/localization/STR_QML.js +++ b/localization/STR_QML.js @@ -176,9 +176,9 @@ var STR_QML_140 = qsTr("Please sign this message on your device") var STR_QML_141 = qsTr("Please Confirm on the Key Device") //SCR_ADD_NEW_SOFTWARE_SIGNER.qml -var STR_QML_142 = qsTr("New seed") -var STR_QML_143 = qsTr("Please take a moment to write down this seed phrase. It is the backup for your key.") -var STR_QML_144 = qsTr("Never share the seed phrase with anyone. Avoid having a digital copy.") +var STR_QML_142 = qsTr("Seed phrase") +var STR_QML_143 = qsTr("Please take a moment to write down this seed phrase. It’s the backup for your key. This app will only show the seed phrase once.") +var STR_QML_144 = qsTr("Never share the recovery phrase with anyone. Avoid having a digital copy.") //SCR_ADD_REMOTE_SIGNER_RESULT.qml var STR_QML_145 = qsTr("Key Info (Air-Gapped)") @@ -1282,7 +1282,7 @@ var STR_QML_1036 = qsTr("%1 (%2) is requesting to make the following chan var STR_QML_1012 = qsTr("To authorize the changes, you will be asked to sign a dummy transaction that sends 10,000 sat (%1 %2) to your own wallet. Since more than one signature is required, other keyholders in the group will also be notified.") var STR_QML_1013 = qsTr("The dummy transaction uses a fake input and does not move any of your real bitcoins. It will not be broadcast and will be immediately removed afterwards.") var STR_QML_1037 = qsTr("To authorize the changes, you will be asked to sign a dummy transaction that sends 10,000 sat (%1 %2) to your own wallet.") -var STR_QML_1038 = qsTr("To authorize the inheritance planning request, you will be asked to sign a dummy transaction that sends 10,000 sat (%1 %2) to your own wallet. Since more than one signature is required, other keyholders will also be notified.") +var STR_QML_1038 = qsTr("To authorize the inheritance planning request, you will be asked to sign a dummy transaction that sends 10,000 sat (%1 %2) to your own wallet. Since more than one signature is required, other keyholders in the group will also be notified.") var STR_QML_1039 = qsTr("Two signatures are required to cancel the inheritance plan. \n \ \n \ @@ -1290,7 +1290,7 @@ In order to cancel the plan, you will be asked to sign a dummy transaction that var STR_QML_1040 = qsTr("The dummy transaction will not be broadcast and will be immediately removed afterwards.") -var STR_QML_1041 = qsTr("To authorize this recurring payment, you will be asked to sign a dummy transaction that sends 10,000 sat (%1 %2) to your own wallet. Since more than one signature is required, other keyholders will also be notified.") +var STR_QML_1041 = qsTr("To authorize this recurring payment, you will be asked to sign a dummy transaction that sends 10,000 sat (%1 %2) to your own wallet. Since more than one signature is required, other keyholders in the group will also be notified.") var STR_QML_1042 = qsTr("%1 (%2) is requesting to set up the inheritance plan for %3.") @@ -1539,8 +1539,8 @@ var STR_QML_1247 = qsTr("Get more out of Nunchuk with an assisted wallet") var STR_QML_1248 = qsTr("Visit our website") var STR_QML_1249 = qsTr("Add a wallet") var STR_QML_1250 = qsTr("Use a multisig wallet for maximum safety. A multisig wallet has multiple keys—if one is compromised, your fund is still safe.") -var STR_QML_1251 = qsTr("Create hot wallet") -var STR_QML_1252 = qsTr("Quickly create a hot wallet for immediate use and back it up later.") +var STR_QML_1251 = qsTr("Create a hot wallet") +var STR_QML_1252 = qsTr("Quickly create a hot wallet for immediate use and back it up later. No existing keys required.") var STR_QML_1253 = qsTr("Recover existing wallet") var STR_QML_1254 = qsTr("Recover hot wallet") var STR_QML_1255 = qsTr("Create now") @@ -1550,7 +1550,7 @@ var STR_QML_1258 = qsTr("Learn more about Nunchuk assisted services") var STR_QML_1259 = qsTr("Send query") var STR_QML_1260 = qsTr("If you are looking for a white-glove, personalized service offered by a Bitcoin Advisor, enter your country and email address below, and we’ll send you the best Bitcoin Advisors in your area. \n \n Alternatively, check out the assisted services offered by our platform.") var STR_QML_1261 = qsTr("Create new assisted wallet (%1 remaining)") -var STR_QML_1262 = qsTr("Create new wallet") +var STR_QML_1262 = qsTr("Create a new wallet") var STR_QML_1263 = qsTr("Your email address") var STR_QML_1264 = qsTr("Your country") @@ -1685,3 +1685,33 @@ var STR_QML_1391 = qsTr("Please replace key(s) using the mobile app.") var STR_QML_1392 = qsTr("Key added to wallet") var STR_QML_1393 = qsTr("Family or group wallets") var STR_QML_1394 = qsTr("Collaboratively create family or group wallets. Manage keys distributedly, control member access and chat privately.") +var STR_QML_1395 = qsTr("Role") +var STR_QML_1396 = qsTr("Facilitator admin") +var STR_QML_1397 = qsTr("Can add or remove group members. \nCan make changes to inheritance planning. +Can make changes to wallet policies. +Can activate emergency lockdown. +Can view key health status. +Can perform key health check. +Can perform key recovery. +Can create coin tags or collections. +Can edit transaction notes. +Can participate in group chat. +Can view transactions. +Can create transactions. +Can sign transactions.") +var STR_QML_1398 = qsTr("Can view key health status. \nCan perform key health check. +Can perform key recovery. +Can participate in group chat. +Can view transactions. +Can create transactions. +Can sign transactions.") +var STR_QML_1399 = qsTr("Can perform key health check. \nCan perform key recovery. +Can sign transactions.") +var STR_QML_1400 = qsTr("Can add group members. \nCan request key health check. +Can participate in group chat.") +var STR_QML_1401 = qsTr("Can view transactions.") +var STR_QML_1402 = qsTr("Only applicable for members who own a TAPSIGNER, Ledger or Trezor device.") +var STR_QML_1403 = qsTr("Select a role") +var STR_QML_1404 = qsTr("Only an admin can downgrade a member’s role.") +var STR_QML_1405 = qsTr("Create a new wallet using existing keys.") +var STR_QML_1406 = qsTr("You won’t be able to view the seed phrase again in the app. Please make sure that you have it backed up, or risk losing your funds.") diff --git a/main.cpp b/main.cpp index b6eb60c9..f18a8e36 100644 --- a/main.cpp +++ b/main.cpp @@ -124,7 +124,7 @@ int main(int argc, char* argv[]) app.setOrganizationName("nunchuk"); app.setOrganizationDomain("nunchuk.io"); app.setApplicationName("NunchukClient"); - app.setApplicationVersion("1.9.36"); + app.setApplicationVersion("1.9.37"); app.setApplicationDisplayName(QString("%1 %2").arg("Nunchuk").arg(app.applicationVersion())); AppModel::instance(); Draco::instance(); diff --git a/qml.qrc b/qml.qrc index 6aa255e2..7c57df6c 100644 --- a/qml.qrc +++ b/qml.qrc @@ -462,6 +462,16 @@ Qml/Screens/OnlineMode/ReplaceKeyFrees/QReplaceBeforeYouBegin.qml Qml/Screens/OnlineMode/ReplaceKeyFrees/QReplaceAddSigner.qml Qml/Screens/OnlineMode/ReplaceKeyFrees/QReplaceAddSignerLoading.qml + Qml/Screens/OnlineMode/SCR_EDIT_MEMBERS.qml + Qml/Screens/OnlineMode/EditMembers/QEditMembers.qml + Qml/Screens/OnlineMode/EditMembers/QEditMemberDelegate.qml + Qml/Screens/OnlineMode/EditMembers/QEditMemberRole.qml + Qml/Screens/OnlineMode/EditMembers/QPopupEditMemberSelectARole.qml + Qml/Screens/OnlineMode/EditMembers/QEditMemberSelectRoleDelegate.qml + Qml/Screens/OnlineMode/EditMembers/QEditMemberNewMemberDelegate.qml + Qml/Screens/OnlineMode/EditMembers/QEditMemberSuccess.qml + Qml/Screens/OnlineMode/EditMembers/QEditMemberConfirmEmail.qml + Qml/Components/LeftPannel/Service/Byzantine/QServiceFacilitatorAdminSubscriberLeftPannel.qml Images/services-light.svg @@ -742,9 +752,7 @@ Images/unassisted-wallet-description.svg Images/hot-wallet-description.svg Images/circle-assisted-wallet.svg - Images/create-hot-wallet.svg Images/chevron-right-dark.svg - Images/create-hot-wallet.png Images/unassisted-wallet-description.png Images/onboarding-assisted-wallet.png Images/onboarding-unassisted-wallet.png @@ -765,6 +773,9 @@ Images/replace.svg Images/add-to-collection-dark.svg Images/Circular.svg + Images/groups-dark.svg + Images/health-check-light.svg + Images/person-add-24px.svg Info.plist