Skip to content

Conversation

Khushboo-dev-cpp
Copy link
Contributor

@Khushboo-dev-cpp Khushboo-dev-cpp commented Aug 21, 2025

party services

fixes #18510

status-go PR : status-im/status-go#6865

What does the PR do

Summary
This PR introduces the Third-Party Services feature with full UI integration, feature-flag control, and persistence in the settings database.

Key Changes

  • UI Flows
  • Added Third-Party Services section on the Welcome Page.
  • Added Third-Party Services option in the Privacy & Settings view.
  • Feature Flag
  • Introduced privacyModeFeatureEnabled flag to toggle the feature on/off.
  • Settings Database
  • Added a new setting in the Go settings DB to persist user preference.
  • Integrated with UI switch to enable/disable the feature.
  • Onboarding Integration
  • Integrated Third-Party Services setting into the account creation/login flows.

Covered Flows

  • CreateProfileWithPassword
  • CreateProfileWithSeedphrase
  • CreateProfileWithKeycardNewSeedphrase
  • CreateProfileWithKeycardExistingSeedphrase
  • LoginWithSeedphrase
  • LoginWithSyncing
  • LoginWithKeycard

Notes
The feature is disabled by default and controlled via the feature flag.
When enabled, users can opt-in/out through the UI switch, and the setting is saved in the DB on go side

Affected areas

Architecture compliance

Screencapture of the functionality

Screen.Recording.2025-08-28.at.13.59.09.mov

Impact on end user

How to test

Risk

@status-im-auto
Copy link
Member

status-im-auto commented Aug 21, 2025

Jenkins Builds

Click to see older builds (26)
Commit #️⃣ Finished (UTC) Duration Platform Result
1dedc99 #1 2025-08-21 14:39:16 ~2 min macos/aarch64 📄log
1dedc99 #1 2025-08-21 14:39:16 ~2 min macos/aarch64-nwaku 📄log
✔️ 0d77bf4 #4 2025-08-28 07:45:36 ~6 min tests/nim 📄log
0d77bf4 #4 2025-08-28 07:50:39 ~11 min tests/ui 📄log
✔️ 0d77bf4 #4 2025-08-28 07:55:20 ~15 min linux/x86_64 📦tgz
✔️ 0d77bf4 #4 2025-08-28 08:01:06 ~21 min linux/x86_64-nwaku 📦tgz
✔️ 0d77bf4 pr18684 2025-08-28 08:06:29 ~11 min tests/e2e 📊rpt
✔️ 0d77bf4 #4 2025-08-28 08:07:28 ~27 min windows/x86_64 💿exe
✔️ fd95753 #5 2025-08-28 09:29:53 ~6 min tests/nim 📄log
fd95753 #5 2025-08-28 09:34:36 ~11 min tests/ui 📄log
✔️ fd95753 #5 2025-08-28 09:38:29 ~14 min linux/x86_64 📦tgz
✔️ fd95753 #5 2025-08-28 09:45:57 ~22 min linux/x86_64-nwaku 📦tgz
✔️ fd95753 #5 2025-08-28 09:46:58 ~23 min windows/x86_64 💿exe
✔️ fd95753 pr18684 2025-08-28 09:49:29 ~10 min tests/e2e 📊rpt
✔️ fd95753 #6 2025-08-28 10:15:32 ~12 min macos/aarch64 🍎dmg
✔️ fd95753 #6 2025-08-28 10:20:03 ~16 min macos/aarch64-nwaku 🍎dmg
✔️ 775b3d7 #7 2025-08-28 11:58:10 ~5 min tests/nim 📄log
✔️ 775b3d7 #7 2025-08-28 12:04:58 ~12 min tests/ui 📄log
✔️ 83750de #8 2025-08-28 12:27:31 ~6 min tests/nim 📄log
✔️ 83750de #8 2025-08-28 12:34:29 ~13 min tests/ui 📄log
✔️ 83750de #9 2025-08-28 12:37:53 ~16 min linux/x86_64 📦tgz
✔️ 83750de #10 2025-08-28 12:39:49 ~18 min macos/aarch64-nwaku 🍎dmg
✔️ 83750de #11 2025-08-28 12:40:46 ~11 min macos/aarch64 🍎dmg
✔️ 83750de pr18684 2025-08-28 12:48:46 ~10 min tests/e2e 📊rpt
✔️ 83750de #8 2025-08-28 12:49:28 ~28 min windows/x86_64 💿exe
✔️ 83750de #10 2025-08-28 12:50:01 ~20 min linux/x86_64-nwaku 📦tgz
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ 255167b #9 2025-08-28 15:49:15 ~5 min tests/nim 📄log
✔️ 255167b #9 2025-08-28 15:55:58 ~12 min tests/ui 📄log
✔️ 255167b #9 2025-08-28 16:10:35 ~27 min windows/x86_64 💿exe
✔️ 6171b2b #10 2025-08-29 12:57:03 ~7 min tests/nim 📄log
✔️ 6171b2b #10 2025-08-29 13:02:46 ~13 min tests/ui 📄log
✔️ 6171b2b #12 2025-08-29 13:12:11 ~22 min linux/x86_64-nwaku 📦tgz
✔️ 6171b2b #10 2025-08-29 13:15:33 ~26 min windows/x86_64 💿exe

@Khushboo-dev-cpp Khushboo-dev-cpp force-pushed the feat/toggleThirdPartyServices branch 5 times, most recently from fd95753 to f35d360 Compare August 28, 2025 11:48
@Khushboo-dev-cpp Khushboo-dev-cpp marked this pull request as ready for review August 28, 2025 11:48
@Khushboo-dev-cpp Khushboo-dev-cpp force-pushed the feat/toggleThirdPartyServices branch 3 times, most recently from 83750de to 255167b Compare August 28, 2025 15:43
@Khushboo-dev-cpp Khushboo-dev-cpp force-pushed the feat/toggleThirdPartyServices branch from 255167b to 6171b2b Compare August 29, 2025 12:49
Copy link
Member

@caybro caybro left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good in general! Just some small objections

// Verify visibility
tryCompare(thirdPartyServices, "visible", true)

waitForRendering(page)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why wait here and then not check anything? 😄

@@ -64,6 +67,11 @@ OnboardingStackView {

signal finished(int flow)

// Thirdparty services
property bool privacyModeFeatureEnabled
property bool thirdpartyServicesEnabled
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

make them required please


SettingsContentBase {
id: root

property bool isStatusNewsViaRSSEnabled
required property bool isCentralizedMetricsEnabled
property bool thirdpartyServicesEnabled
property bool privacyModeFeatureEnabled
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

required


import utils

StatusModal {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

StatusDialog in new code pls

anchors.right: parent.right
anchors.rightMargin: Theme.padding
anchors.leftMargin: Theme.padding
anchors.topMargin: Theme.padding
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yay anchors 🫢

rightButtons: [
StatusButton {
type: StatusBaseButton.Type.Primary
normalColor: Theme.palette.customisationColors.purple
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As elsewhere, purple on purpose?

@@ -1012,6 +1012,8 @@ QtObject {
readonly property string statusHelpLinkPrefix: `https://status.app/help/`
readonly property string downloadLink: "https://status.im/get"
readonly property string sendViaChatPrefix: '//send-via-personal-chat//'
readonly property string statusDiscussPageUrl: 'https://discuss.status.app/c/features/51'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

statusDiscussPageUrl sounds like a generic page, eventhough it points to a very specific one (Feature requests)

Copy link
Contributor

@noeliaSD noeliaSD left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here some comments added:

Issues found while testing:

  • The toggle doesn't work properly since we need a "doble-confirmation". I think the toggle should be reevaluated after closing the popup so that it really takes the real state. Here the video:
Screen.Recording.2025-09-05.at.13.22.25.mov

Design questions:

  • The only way to enable or disable privacy mode during the onboarding process is with a new fresh account. If I'm already logged in with an account, even if I create a new one, the page / flow won't be accessible. Perhaps we should consider other onboarding flows as well. WDYT @Khushboo-dev-cpp @xAlisher?

thirdpartyServicesEnabled: ctrlThirdpartyServicesEnabled.checked
privacyModeFeatureEnabled: ctrlPrivacyMode.checked
onOpenThirdpartyServicesInfoPopupRequested: {
console.warn("onLaunchThirdyPartyServicesInfoPopupRequested")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: You could use the log mechanism we normally use inside storybook so that the log is already visible inside the same environment!

visible: true
closePolicy: Popup.CloseOnEscape
thirdPartyServicesEnabled: ctrlThirdpartyServicesEnabled.checked
onToggleThirdpartyServicesEnabled: console.warn("onToggleThirdpartyServicesEnabled called ")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here!

@@ -64,6 +67,11 @@ OnboardingStackView {

signal finished(int flow)

// Thirdparty services
property bool privacyModeFeatureEnabled
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this a wip one, right? Maybe a comment to understand that this will be removed once we remove the feature flag would help!

// Thirdparty services
property bool privacyModeFeatureEnabled
property bool thirdpartyServicesEnabled
signal toggleThirdpartyServicesEnabled()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: We are trying to unify nomenclarture

Suggested change
signal toggleThirdpartyServicesEnabled()
signal toggleThirdpartyServicesEnabledRequested()

@@ -15,13 +15,15 @@ import utils
OnboardingPage {
id: root

title: qsTr("Welcome to Status")
property bool privacyModeFeatureEnabled
property bool thirdpartyServicesEnabled
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
property bool thirdpartyServicesEnabled
required property bool thirdpartyServicesEnabled

@@ -44,4 +44,12 @@ QtObject {
function mnemonicWasShown() {
root.privacyModule.mnemonicWasShown()
}

readonly property bool thirdpartyServicesEnabled: appSettings.thirdpartyServicesEnabled
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be nice if we access to the appSettings context property via an instance here

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seeing now this property in here, I think that there is a bit of messed up nomenclature with this other property from the comment here? #18750 (comment)

subTitle: qsTr("Enable/disable all third-party services")
components: [
StatusSwitch {
checked: root.thirdpartyServicesEnabled
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Already written in the global comments.. There's a double-check action needed, so that, there's a middle state a bit confusing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add the new Privacy Mode flow into the Onboarding flow
5 participants