-
Sébastien Blin authored
Change-Id: Ic925c96106d6c30eb8268af652b367029c5b7e70 GitLab: #1013
Sébastien Blin authoredChange-Id: Ic925c96106d6c30eb8268af652b367029c5b7e70 GitLab: #1013
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
CreateAccountPage.qml 14.81 KiB
/*
* Copyright (C) 2021-2023 Savoir-faire Linux Inc.
* Author: Yang Wang <yang.wang@savoirfairelinux.com>
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
*
* 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 <https://www.gnu.org/licenses/>.
*/
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import net.jami.Adapters 1.1
import net.jami.Constants 1.1
import net.jami.Models 1.1
import Qt5Compat.GraphicalEffects
import "../"
import "../../commoncomponents"
import "../../settingsview/components"
Rectangle {
id: root
property bool isRendezVous: false
property bool helpOpened: false
property int preferredHeight: createAccountStack.implicitHeight
signal showThisPage
function initializeOnShowUp(isRdv) {
root.isRendezVous = isRdv
createAccountStack.currentIndex = 0
clearAllTextFields()
usernameEdit.forceActiveFocus()
}
function clearAllTextFields() {
chooseUsernameButton.enabled = true
showAdvancedButton.enabled = true
usernameEdit.dynamicText = ""
advancedAccountSettingsPage.clear()
}
color: JamiTheme.secondaryBackgroundColor
Connections {
target: WizardViewStepModel
function onMainStepChanged() {
var currentMainStep = WizardViewStepModel.mainStep
if (currentMainStep === WizardViewStepModel.MainSteps.NameRegistration) {
createAccountStack.currentIndex = nameRegistrationPage.stackIndex
initializeOnShowUp(WizardViewStepModel.accountCreationOption ===
WizardViewStepModel.AccountCreationOption.CreateRendezVous)
root.showThisPage()
}
}
}
StackLayout {
id: createAccountStack
objectName: "createAccountStack"
anchors.fill: parent
Rectangle {
id: nameRegistrationPage
objectName: "nameRegistrationPage"
Layout.fillHeight: true
Layout.fillWidth: true
property int stackIndex: 0
color: JamiTheme.secondaryBackgroundColor
ColumnLayout {
id: usernameColumnLayout
spacing: JamiTheme.wizardViewPageLayoutSpacing
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: parent.top
anchors.topMargin: JamiTheme.wizardViewLayoutTopMargin
width: Math.max(508, root.width - 100)
Text {
id: joinJami
text: JamiStrings.joinJami
Layout.alignment: Qt.AlignCenter
Layout.topMargin: 15
Layout.preferredWidth: Math.min(360, root.width - JamiTheme.preferredMarginSize * 2)
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: JamiTheme.textColor
font.pixelSize: JamiTheme.wizardViewTitleFontPixelSize
wrapMode : Text.WordWrap
}
Text {
text: root.isRendezVous ? JamiStrings.chooseUsernameForRV :
JamiStrings.chooseUsernameForAccount
Layout.alignment: Qt.AlignCenter
Layout.topMargin: 15
Layout.preferredWidth: Math.min(360, root.width - JamiTheme.preferredMarginSize * 2)
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: JamiTheme.textColor
font.pixelSize: JamiTheme.wizardViewDescriptionFontPixelSize
wrapMode: Text.WordWrap
}
UsernameTextEdit {
id: usernameEdit
objectName: "usernameEdit"
Layout.topMargin: 15
Layout.alignment: Qt.AlignHCenter
Layout.preferredWidth: Math.min(440, root.width - JamiTheme.preferredMarginSize * 2)
placeholderText: root.isRendezVous ? JamiStrings.chooseAName :
JamiStrings.chooseUsername
staticText: ""
editMode: true
KeyNavigation.tab: chooseUsernameButton
KeyNavigation.up: backButton
KeyNavigation.down: chooseUsernameButton
}
Label {
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
visible: text.length !==0 || usernameEdit.selected
Layout.preferredWidth: Math.min(440, root.width - JamiTheme.preferredMarginSize * 2)
text: {
switch(usernameEdit.nameRegistrationState){
case UsernameTextEdit.NameRegistrationState.BLANK:
return " "
case UsernameTextEdit.NameRegistrationState.SEARCHING:
return " "
case UsernameTextEdit.NameRegistrationState.FREE:
return " "
case UsernameTextEdit.NameRegistrationState.INVALID:
return root.isRendezVous ? JamiStrings.invalidName :
JamiStrings.invalidUsername
case UsernameTextEdit.NameRegistrationState.TAKEN:
return root.isRendezVous ? JamiStrings.nameAlreadyTaken :
JamiStrings.usernameAlreadyTaken
}
}
font.pointSize: JamiTheme.textFontSize
color: "#CC0022"
}
MaterialButton {
id: chooseUsernameButton
objectName: "chooseUsernameButton"
Layout.alignment: Qt.AlignCenter
primary: true
preferredWidth: Math.min(JamiTheme.wizardButtonWidth, root.width - JamiTheme.preferredMarginSize * 2)
font.capitalization: Font.AllUppercase
color: enabled? JamiTheme.buttonTintedBlue : JamiTheme.buttonTintedGrey
text: !enabled ? JamiStrings.creatingAccount :
root.isRendezVous ? JamiStrings.chooseName : JamiStrings.joinJami
enabled: usernameEdit.nameRegistrationState === UsernameTextEdit.NameRegistrationState.FREE
|| usernameEdit.nameRegistrationState === UsernameTextEdit.NameRegistrationState.BLANK
KeyNavigation.tab: showAdvancedButton
KeyNavigation.up: usernameEdit
KeyNavigation.down: showAdvancedButton
onClicked: {
WizardViewStepModel.accountCreationInfo =
JamiQmlUtils.setUpAccountCreationInputPara(
{
registeredName : usernameEdit.dynamicText,
alias: advancedAccountSettingsPage.alias,
password: advancedAccountSettingsPage.validatedPassword,
avatar: UtilsAdapter.tempCreationImage(),
isRendezVous: root.isRendezVous
})
if (usernameEdit.nameRegistrationState === UsernameTextEdit.NameRegistrationState.FREE) {
enabled = false
showAdvancedButton.enabled = false
WizardViewStepModel.nextStep()
}
if(usernameEdit.nameRegistrationState === UsernameTextEdit.NameRegistrationState.BLANK)
popup.visible = true
}
}
MaterialButton {
id: showAdvancedButton
objectName: "showAdvancedButton"
tertiary: true
secHoveredColor: JamiTheme.secAndTertiHoveredBackgroundColor
Layout.alignment: Qt.AlignCenter
preferredWidth: Math.min(JamiTheme.wizardButtonWidth, root.width - JamiTheme.preferredMarginSize * 2)
text: JamiStrings.advancedAccountSettings
toolTipText: JamiStrings.showAdvancedFeatures
KeyNavigation.tab: backButton
KeyNavigation.up: chooseUsernameButton
KeyNavigation.down: backButton
onClicked: createAccountStack.currentIndex++
}
NoUsernamePopup {
id: popup
objectName: "popup"
visible: false
onJoinClicked: {
chooseUsernameButton.enabled = false
showAdvancedButton.enabled = false
}
}
}
}
AdvancedAccountSettings {
id: advancedAccountSettingsPage
objectName: "advancedAccountSettingsPage"
Layout.fillHeight: true
Layout.fillWidth: true
property int stackIndex: 1
onSaveButtonClicked: createAccountStack.currentIndex--
}
}
BackButton {
id: backButton
objectName: "createAccountPageBackButton"
preferredSize: JamiTheme.wizardViewPageBackButtonSize
anchors.left: parent.left
anchors.top: parent.top
anchors.margins: JamiTheme.wizardViewPageBackButtonMargins
KeyNavigation.tab: usernameEdit
KeyNavigation.up: advancedAccountSettingsPage
KeyNavigation.down: usernameEdit
onClicked: {
if (createAccountStack.currentIndex > 0) {
createAccountStack.currentIndex--
} else {
WizardViewStepModel.previousStep()
goodToKnow.visible = false
helpOpened = false
}
}
}
PushButton {
id: infoBox
z:1
preferredSize: JamiTheme.wizardViewPageBackButtonSize
anchors.right: parent.right
anchors.top: parent.top
anchors.margins: JamiTheme.wizardViewPageBackButtonMargins
normalColor: JamiTheme.backgroundColor
imageColor: JamiTheme.primaryForegroundColor
source: JamiResources.outline_info_24dp_svg
onHoveredChanged: {
goodToKnow.visible = !goodToKnow.visible
helpOpened = !helpOpened
advancedAccountSettingsPage.openedPassword = false
advancedAccountSettingsPage.openedNickname = false
}
}
Item {
id: goodToKnow
anchors.top: parent.top
anchors.right: parent.right
anchors.margins: JamiTheme.wizardViewPageBackButtonMargins + infoBox.preferredSize*2/5
width: helpOpened ? Math.min(root.width - 2 * JamiTheme.preferredMarginSize, 452) : 0
height: {
if (!helpOpened)
return 0
var finalHeight = title.height + 3 * JamiTheme.preferredMarginSize
finalHeight += flow.implicitHeight
return finalHeight
}
visible: false
Behavior on width {
NumberAnimation { duration: JamiTheme.shortFadeDuration }
}
Behavior on height {
NumberAnimation { duration: JamiTheme.shortFadeDuration}
}
DropShadow {
z: -1
anchors.fill: boxInfo
horizontalOffset: 3.0
verticalOffset: 3.0
radius: boxInfo.radius * 4
color: JamiTheme.shadowColor
source: boxInfo
transparentBorder: true
}
Rectangle {
id: boxInfo
z: 0
anchors.fill: parent
radius: 30
color: JamiTheme.secondaryBackgroundColor
ColumnLayout {
id: infoContainer
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
anchors.top: parent.top
visible: helpOpened ? 1 : 0
Behavior on visible {
NumberAnimation {
from: 0
duration: JamiTheme.overlayFadeDuration
}
}
Text {
id: title
text: JamiStrings.goodToKnow
color: JamiTheme.textColor
font.weight: Font.Medium
Layout.topMargin: 15
Layout.alignment: Qt.AlignCenter | Qt.AlignTop
font.pixelSize: JamiTheme.title2FontSize
font.kerning: true
}
Flow {
id: flow
spacing: 25
Layout.alignment: Qt.AlignTop
Layout.leftMargin: JamiTheme.preferredMarginSize * 2
Layout.preferredWidth: helpOpened ? Math.min(root.width - 2 * JamiTheme.preferredMarginSize, 452) : 0
Layout.fillWidth: true
InfoBox {
id: info
icoSource: JamiResources.laptop_black_24dp_svg
title: JamiStrings.local
description: JamiStrings.localAccount
}
InfoBox {
icoSource: JamiResources.person_24dp_svg
title: JamiStrings.username
description: JamiStrings.usernameRecommened
}
InfoBox {
icoSource: JamiResources.lock_svg
title: JamiStrings.encrypt
description: JamiStrings.passwordOptional
}
InfoBox {
icoSource: JamiResources.noun_paint_svg
title: JamiStrings.customize
description: JamiStrings.customizeOptional
}
}
}
}
}
}