diff --git a/src/app/modules/onboarding/module.nim b/src/app/modules/onboarding/module.nim index e486f8191ee..34fa87f28b6 100644 --- a/src/app/modules/onboarding/module.nim +++ b/src/app/modules/onboarding/module.nim @@ -1,4 +1,5 @@ import NimQml, chronicles, json +import logging import io_interface import view, controller @@ -26,7 +27,8 @@ type SecondaryFlow* {.pure} = enum CreateProfileWithKeycardExistingSeedphrase, LoginWithSeedphrase, LoginWithSyncing, - LoginWithKeycard + LoginWithKeycard, + ActualLogin, # TODO get the real name and value for this when it's implemented on the front-end type Module*[T: io_interface.DelegateInterface] = ref object of io_interface.AccessInterface @@ -35,6 +37,7 @@ type viewVariant: QVariant controller: Controller localPairingStatus: LocalPairingStatus + currentFlow: SecondaryFlow proc newModule*[T]( delegate: T, @@ -99,7 +102,7 @@ method inputConnectionStringForBootstrapping*[T](self: Module[T], connectionStri method finishOnboardingFlow*[T](self: Module[T], flowInt: int, dataJson: string): string = try: - let flow = SecondaryFlow(flowInt) + self.currentFlow = SecondaryFlow(flowInt) let data = parseJson(dataJson) let password = data["password"].str @@ -107,7 +110,7 @@ method finishOnboardingFlow*[T](self: Module[T], flowInt: int, dataJson: string) var err = "" - case flow: + case self.currentFlow: # CREATE PROFILE FLOWS of SecondaryFlow.CreateProfileWithPassword: err = self.controller.createAccountAndLogin(password) @@ -147,7 +150,7 @@ method finishOnboardingFlow*[T](self: Module[T], flowInt: int, dataJson: string) # TODO implement keycard function discard else: - raise newException(ValueError, "Unknown flow: " & $flow) + raise newException(ValueError, "Unknown flow: " & $self.currentFlow) return err except Exception as e: @@ -158,13 +161,11 @@ proc finishAppLoading2[T](self: Module[T]) = self.delegate.appReady() # TODO get the flow to send the right metric - # let currStateObj = self.view.currentStartupStateObj() - # if not currStateObj.isNil: - # var eventType = "user-logged-in" - # if currStateObj.flowType() != FlowType.AppLogin: - # eventType = "onboarding-completed" - # singletonInstance.globalEvents.addCentralizedMetricIfEnabled(eventType, - # $(%*{"flowType": currStateObj.flowType()})) + var eventType = "user-logged-in" + if self.currentFlow != SecondaryFlow.ActualLogin: + eventType = "onboarding-completed" + singletonInstance.globalEvents.addCentralizedMetricIfEnabled(eventType, + $(%*{"flowType": repr(self.currentFlow)})) self.delegate.finishAppLoading() diff --git a/storybook/pages/OnboardingLayoutPage.qml b/storybook/pages/OnboardingLayoutPage.qml index 62f4bdaf0e1..d4d093abb26 100644 --- a/storybook/pages/OnboardingLayoutPage.qml +++ b/storybook/pages/OnboardingLayoutPage.qml @@ -349,7 +349,7 @@ SplitView { let content = `Stack (${stack.depth}):` for (let i = 0; i < stack.depth; i++) - content += " " + InspectionUtils.baseName( + content += " " + Utils.baseName( stack.get(i, StackView.ForceLoad)) return content diff --git a/storybook/src/Storybook/InspectionUtils.qml b/storybook/src/Storybook/InspectionUtils.qml index 9cbf404a4cb..1be8c3b6fc5 100644 --- a/storybook/src/Storybook/InspectionUtils.qml +++ b/storybook/src/Storybook/InspectionUtils.qml @@ -4,6 +4,8 @@ import QtQml 2.15 import QtQuick 2.15 import QtQuick.Controls 2.15 +import utils 1.0 + QtObject { function isVisual(item) { return item instanceof Text @@ -14,21 +16,6 @@ QtObject { || item instanceof SpriteSequence } - function baseName(item) { - const fullName = item.toString() - const underscoreIndex = fullName.indexOf("_") - - if (underscoreIndex !== -1) - return fullName.substring(0, underscoreIndex) - - const bracketIndex = fullName.indexOf("(") - - if (bracketIndex !== -1) - return fullName.substring(0, bracketIndex) - - return fullName - } - function baseTypeName(item) { if (item instanceof Text) return "Text" @@ -57,7 +44,7 @@ QtObject { } function simpleName(item) { - const name = trimQQuickPrefix(baseName(item)) + const name = trimQQuickPrefix(Utils.baseName(item)) const base = baseTypeName(item) if (base) @@ -77,7 +64,7 @@ QtObject { while (stack.length) { const item = stack.pop() - const name = baseName(item) + const name = Utils.baseName(item) if (!onlyItems && name === "QQuickLoader") { if(item.item) stack.push(item.item) diff --git a/ui/app/AppLayouts/Onboarding2/OnboardingLayout.qml b/ui/app/AppLayouts/Onboarding2/OnboardingLayout.qml index 6a39fa671a7..e6df2279d87 100644 --- a/ui/app/AppLayouts/Onboarding2/OnboardingLayout.qml +++ b/ui/app/AppLayouts/Onboarding2/OnboardingLayout.qml @@ -29,6 +29,7 @@ Page { property alias keycardPinInfoPageDelay: onboardingFlow.keycardPinInfoPageDelay readonly property alias stack: stack + readonly property string currentPageName: stack.currentItem ? Utils.baseName(stack.currentItem) : "" signal shareUsageDataRequested(bool enabled) diff --git a/ui/imports/utils/Utils.qml b/ui/imports/utils/Utils.qml index 46dbf7df888..e33027aef27 100644 --- a/ui/imports/utils/Utils.qml +++ b/ui/imports/utils/Utils.qml @@ -967,4 +967,19 @@ QtObject { return "" } + + function baseName(item) { + const fullName = item.toString() + const underscoreIndex = fullName.indexOf("_") + + if (underscoreIndex !== -1) + return fullName.substring(0, underscoreIndex) + + const bracketIndex = fullName.indexOf("(") + + if (bracketIndex !== -1) + return fullName.substring(0, bracketIndex) + + return fullName + } } diff --git a/ui/main.qml b/ui/main.qml index c399cea8b86..b6cb8c92203 100644 --- a/ui/main.qml +++ b/ui/main.qml @@ -468,6 +468,14 @@ StatusWindow { stack.clear() stack.push(splashScreenV2, { runningProgressAnimation: true }) } + + onShareUsageDataRequested: { + applicationWindow.metricsStore.toggleCentralizedMetrics(enabled) + if (enabled) { + Global.addCentralizedMetricIfEnabled("usage_data_shared", {placement: Constants.metricsEnablePlacement.onboarding}) + } + } + onCurrentPageNameChanged: Global.addCentralizedMetricIfEnabled("navigation", {viewId: currentPageName}) } }