feat(UI): Account wizard redesign#10030
Conversation
This comment was marked as outdated.
This comment was marked as outdated.
I mean, obvious points of feedback are that the input field should be as big as the "Log in" button and the side/bottom padding for buttons should be equal, plus the buttons on the first screen should all take up as much width as possible, like on the second screen. The "Authorize this device in the browser window that opened." string can also be removed and the icons made the same as on the mockup. The colors of the primary buttons also don't meet contrast requirements, I don’t know where this color is from. Generally just getting it in-line with the mockup. |
|
Plus the "Add Nextcloud account" window title can be made invisible on Mac here. Each screen should give you enough context on its own. |
|
@kra-mo can you re-check the current screenshots? if ok we will do win/linux also |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9995d5f252
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const auto defaultUrl = | ||
| Theme::instance()->multipleOverrideServers() ? QString{} : Theme::instance()->overrideServerUrl(); | ||
|
|
||
| _remoteFolder = Theme::instance()->defaultServerFolder(); | ||
| setServerUrl(defaultUrl); | ||
| const auto hasForcedConcreteServerUrl = | ||
| Theme::instance()->forceOverrideServerUrl() && !defaultUrl.isEmpty() && !Theme::instance()->multipleOverrideServers(); | ||
| setServerUrlEditable(!hasForcedConcreteServerUrl); |
There was a problem hiding this comment.
Preserve forced override server choices
When overrideServerUrl() contains the JSON array used for forced multiple-server deployments, this initializes the QML wizard with an empty, editable URL instead of presenting the configured choices. The legacy setup page handled multipleOverrideServers() && forceOverrideServerUrl() by hiding the free-form field and populating a combo box from the JSON array, so this new path lets users type arbitrary servers and prevents them from selecting the branded servers.
Useful? React with 👍 / 👎.
| _qmlWizardWindow->show(); | ||
| _qmlWizardWindow->raise(); | ||
| _qmlWizardWindow->requestActivate(); | ||
| return true; |
There was a problem hiding this comment.
Start the enforced URL login automatically
For single forced override URLs, ConfigFile::overrideServerUrl() still sets startLoginFlowAutomatically(), but the QML path now only shows the window and returns. The legacy OwncloudSetupPage::initializePage() immediately called validation for that scenario, so custom-link/branded launches that are supposed to open the browser login without user input now stop on a read-only server page until the user clicks Log in.
Useful? React with 👍 / 👎.
|
|
implementing missing features like TOS and shares |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: af0c8254cc
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| fetchRootFolderSize(); | ||
|
|
||
| #if defined(Q_OS_WIN) || defined(Q_OS_MACOS) | ||
| setNeedsSyncOptions(!canUseVirtualFiles()); |
There was a problem hiding this comment.
Keep sync options visible on Windows
On Windows machines where CfAPI virtual files are available, canUseVirtualFiles() returns true, so this skips the SyncOptionsStep entirely; because the constructor also defaults _syncMode to VirtualFiles, finish() immediately creates a virtual-files sync folder without giving the user the previous choices to pick a local folder, synchronize everything, or use selective sync. The old wizard only auto-skipped folder configuration for the macOS File Provider path (useVirtualFileSyncByDefault() under BUILD_FILE_PROVIDER_MODULE), while Windows still went through the advanced setup page.
Useful? React with 👍 / 👎.
| connect(job, &PropfindJob::finishedWithError, this, [this] (QNetworkReply *reply) -> void { | ||
| if (reply && reply->error() == QNetworkReply::ContentAccessDenied) { | ||
| // A 403 might indicate that the terms of service need to be signed. | ||
| // catch this special case here, fall back to the standard error handler if it's not TOS-related | ||
| auto davException = OCC::getExceptionFromReply(reply); | ||
| if (!davException.first.isEmpty() && davException.first == QStringLiteral(R"(OCA\TermsOfService\TermsNotSignedException)")) { | ||
| // authentication was successful, but the user hasn't signed the terms of service yet. Prompt for that in the next step | ||
| qCInfo(lcWizard) << "Terms of service not accepted yet! Will prompt the user in the next step"; | ||
| _ocWizard->_needsToAcceptTermsOfService = true; | ||
| _ocWizard->successfulStep(); | ||
| return; | ||
| } | ||
| } | ||
| slotAuthError(); |
There was a problem hiding this comment.
Preserve terms-of-service handling during setup
When the authenticated PROPFIND returns 403 with OCA\TermsOfService\TermsNotSignedException, this now always falls through to slotAuthError() in the legacy setup path instead of treating authentication as successful and prompting the user to accept the terms. Servers with the Terms of Service app enabled will therefore block account setup with a generic auth/access error, whereas the previous code detected this exception before calling the error handler.
Useful? React with 👍 / 👎.
mgallien
left a comment
There was a problem hiding this comment.
the proxy popup is not being reset when closed and will open with the previous state if open again
but should it? if you did the effort to enter e.g. a long password, you do not want to have it reset by making a wrong click |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7eeeb50f2b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| } | ||
|
|
||
| folder->journalDb()->setSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, _selectiveSyncBlacklist); | ||
| folder->journalDb()->setSelectiveSyncList(SyncJournalDb::SelectiveSyncWhiteList, QStringList() << QLatin1String("/")); |
There was a problem hiding this comment.
Don't pre-whitelist folders when confirmations are enabled
When the user chooses "Synchronize everything" while "ask before large folders" or external-storage confirmation is enabled, writing / to the selective-sync whitelist marks every remote child as already accepted; DiscoveryPhase::checkSelectiveSyncNewFolder returns before the size/external checks when a parent is whitelisted, so the first sync downloads large or external folders without prompting. The old wizard only wrote / when the big-folder confirmation checkbox was off, leaving the whitelist empty so those checks could fire.
Useful? React with 👍 / 👎.
| case DetermineAuthTypeJob::NoAuthType: | ||
| setBusy(false); | ||
| setErrorText(tr("This server requires an authentication method that is still handled by the classic account wizard.")); | ||
| emit legacyWizardRequested(); |
There was a problem hiding this comment.
Carry entered server into the classic fallback
For servers whose auth type falls back to the classic wizard (Basic or WebView), this signal closes the QML wizard after the user already entered and validated a URL, but the connected handler starts a fresh OwncloudWizard; startWizard() initializes the account from Theme::overrideServerUrl() only, so ordinary manually entered servers reopen on a blank/default server page and lose any proxy/client-certificate choices. Passing the current account or at least _serverUrl into the fallback preserves the setup flow for those servers.
Useful? React with 👍 / 👎.
Squash the account wizard branch into a single visible change set. Signed-off-by: Rello <github@scherello.de>
7eeeb50 to
2e9222f
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2e9222f32e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| #endif | ||
|
|
||
| if (needsSyncOptions()) { | ||
| setCurrentStep(SyncOptionsStep); |
There was a problem hiding this comment.
Auto-finish one-shot local-dir setup
When the client is launched with both --overrideserverurl and --overridelocaldir, platforms that still need sync options now stop on this page even though the local folder was supplied. The legacy advanced page immediately accepted the wizard when overrideLocalDir() was present for a forced override URL, so scripted/preconfigured setup flows now require manual interaction before the account is usable.
Useful? React with 👍 / 👎.
| accountState = manager->addAccount(_account); | ||
| } | ||
|
|
||
| manager->saveAccount(_account); |
There was a problem hiding this comment.
Clear one-shot override settings after saving
After a successful QML setup, the one-shot ConfigFile::overrideServerUrl() / overrideLocalDir() values written from command-line overrides are never cleared. The next client start will read them again in initialiseAccount(), force the same server URL, and potentially reuse the same local directory; the legacy advanced page cleared both values on accepted setup, so this should happen once the account is saved here.
Useful? React with 👍 / 👎.
in classic real popup, you delete the first popup item and when opening the new one, you would only get default values (unless you explicitly save previous value and reuse them) |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 68ff9bcfe3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| Button { | ||
| visible: root.controller && root.controller.currentStep === AccountWizardController.ServerStep | ||
| enabled: root.controller && !root.controller.busy | ||
| flat: true | ||
| text: qsTr("Proxy settings") | ||
| font.pointSize: 16 |
There was a problem hiding this comment.
Respect proxy-disabled builds in the wizard
In builds with DO_NOT_USE_PROXY enabled, the legacy wizard omitted the proxy button and Application/network settings force accounts to direct connections, but this QML path always exposes proxy settings and startServerCheck() applies them during setup. In those branded/policy builds a user can still route the initial account discovery/authentication through a manual proxy, bypassing the intended direct-only behavior; hide this action and ignore proxy overrides when Theme::doNotUseProxy() is true.
Useful? React with 👍 / 👎.
jancborchardt
left a comment
There was a problem hiding this comment.
Looks good to me from what you showed also in person @Rello! :)
The button text looks a bit large on Windows though?
|
Artifact containing the AppImage: nextcloud-appimage-pr-10030.zip Digest: To test this change/fix you can download the above artifact file, unzip it, and run it. Please make sure to quit your existing Nextcloud app and backup your data. |
















closing #8822