From 05beb246e83758d145f2a445954658966a68fa79 Mon Sep 17 00:00:00 2001
From: Fadi SHEHADEH <fadi.shehadeh@savoirfairelinux.com>
Date: Fri, 17 Feb 2023 13:33:45 -0500
Subject: [PATCH] wizardview: fix focus, tooltip, ModalTextEdit

- replaced all line edit with ModalTextEdit components
- fixed keyboard navigation
- fixed focus and tooltips

Change-Id: I5605e1b4a7efe2910c4031e49abb78b39b1955f6
---
 src/app/constant/JamiStrings.qml              |  2 +-
 .../components/AdvancedAccountSettings.qml    | 54 ++++++-------
 .../ConnectToAccountManagerPage.qml           | 60 ++++----------
 .../components/CreateAccountPage.qml          | 32 ++++----
 .../components/CreateSIPAccountPage.qml       | 79 ++++++-------------
 .../components/ImportFromBackupPage.qml       | 29 +++----
 .../components/ImportFromDevicePage.qml       | 55 +++++--------
 7 files changed, 113 insertions(+), 198 deletions(-)

diff --git a/src/app/constant/JamiStrings.qml b/src/app/constant/JamiStrings.qml
index 59920b894..f22c6509f 100644
--- a/src/app/constant/JamiStrings.qml
+++ b/src/app/constant/JamiStrings.qml
@@ -609,7 +609,7 @@ Item {
                                    "Use the \"Link Another Device\" feature to obtain a PIN.")
     property string connectFromAnotherDevice: qsTr("Link device")
     property string importButton: qsTr("Import")
-    property string pin: qsTr("PIN")
+    property string pin: qsTr("Enter the NIP code")
     property string importFromDeviceDescription: qsTr("A PIN is required to use an existing Jami account on this device.")
     property string importStep1: qsTr("Step 1")
     property string importStep2: qsTr("Step 2")
diff --git a/src/app/wizardview/components/AdvancedAccountSettings.qml b/src/app/wizardview/components/AdvancedAccountSettings.qml
index abada25ba..233653828 100644
--- a/src/app/wizardview/components/AdvancedAccountSettings.qml
+++ b/src/app/wizardview/components/AdvancedAccountSettings.qml
@@ -43,9 +43,8 @@ Rectangle {
     function clear() {
         openedPassword = false
         openedNickname = false
-        displayNameLineEdit.text = ""
-        passwordEdit.text = ""
-        passwordConfirmEdit.text = ""
+        passwordEdit.dynamicText = ""
+        passwordConfirmEdit.dynamicText = ""
         UtilsAdapter.setTempCreationImageFromString()
     }
 
@@ -190,41 +189,39 @@ Rectangle {
                                 font.pixelSize: JamiTheme.headerFontSize
                             }
 
-                            EditableLineEdit {
+                            PasswordTextEdit {
 
                                 id: passwordEdit
 
                                 visible: openedPassword
+                                focus: openedPassword
+                                firstEntry: true
+                                placeholderText: JamiStrings.password
+                                Layout.topMargin: 10
                                 Layout.alignment: Qt.AlignCenter
                                 Layout.preferredWidth: 325
 
-
-                                echoMode: TextInput.Password
-
-                                placeholderText: JamiStrings.password
-                                secondIco: JamiResources.eye_cross_svg
-                                onSecondIcoClicked: { toggleEchoMode() }
+                                KeyNavigation.tab: passwordConfirmEdit
+                                KeyNavigation.down: passwordConfirmEdit
                             }
 
-                            EditableLineEdit {
+                            PasswordTextEdit {
 
                                 id: passwordConfirmEdit
                                 visible: openedPassword
-
+                                placeholderText: JamiStrings.confirmPassword
                                 Layout.alignment: Qt.AlignCenter
                                 Layout.preferredWidth: 325
 
-
-                                echoMode: TextInput.Password
-
-                                placeholderText: JamiStrings.confirmPassword
-                                secondIco: JamiResources.eye_cross_svg
-                                onSecondIcoClicked: { toggleEchoMode() }
-
+                                KeyNavigation.tab: passwordEdit
+                                KeyNavigation.up: passwordEdit
+                                KeyNavigation.down: setButton
                             }
 
                             MaterialButton {
 
+                                id: setButton
+
                                 visible: openedPassword
 
                                 Layout.topMargin: 10
@@ -237,18 +234,18 @@ Rectangle {
                                 pressedColor: checkEnable() ? JamiTheme.buttonTintedBluePressed : JamiTheme.buttonTintedGreyInactive
 
                                 color: checkEnable() ? JamiTheme.buttonTintedBlue :
-                                                    JamiTheme.buttonTintedGreyInactive
+                                                       JamiTheme.buttonTintedGreyInactive
 
                                 enabled: checkEnable()
 
                                 function checkEnable() {
                                     text = JamiStrings.setPassword
-                                    return (passwordEdit.text === passwordConfirmEdit.text
-                                            && passwordEdit.text.length !== 0)
+                                    return (passwordEdit.dynamicText === passwordConfirmEdit.dynamicText
+                                            && passwordEdit.dynamicText.length !== 0)
                                 }
 
                                 onClicked: {
-                                    root.validatedPassword = passwordConfirmEdit.text
+                                    root.validatedPassword = passwordConfirmEdit.dynamicText
                                     text = JamiStrings.setPasswordSuccess
                                 }
 
@@ -335,7 +332,6 @@ Rectangle {
                     }
                 }
 
-
                 Item {
                     Layout.alignment: Qt.AlignRight | Qt.AlignTop
 
@@ -444,18 +440,17 @@ Rectangle {
 
                             }
 
-                            EditableLineEdit {
+                            ModalTextEdit {
 
                                 id: displayNameLineEdit
-
                                 visible: openedNickname
-
+                                focus: openedNickname
                                 Layout.alignment: Qt.AlignCenter
                                 Layout.preferredWidth: 280
 
                                 placeholderText: JamiStrings.enterNickname
 
-                                onEditingFinished: root.alias = text
+                                onAccepted: root.alias = displayNameLineEdit.dynamicText
 
                             }
 
@@ -550,7 +545,8 @@ Rectangle {
                     preferredWidth: Math.min(JamiTheme.wizardButtonWidth, root.width - JamiTheme.preferredMarginSize * 2)
                     text: JamiStrings.optionSave
 
-                    onClicked: root.saveButtonClicked()
+                    onClicked: { root.saveButtonClicked()
+                        root.alias = displayNameLineEdit.dynamicText}
                 }
             }
 
diff --git a/src/app/wizardview/components/ConnectToAccountManagerPage.qml b/src/app/wizardview/components/ConnectToAccountManagerPage.qml
index b760c3d41..c9ced0ac9 100644
--- a/src/app/wizardview/components/ConnectToAccountManagerPage.qml
+++ b/src/app/wizardview/components/ConnectToAccountManagerPage.qml
@@ -36,9 +36,6 @@ Rectangle {
 
     function clearAllTextFields() {
         connectBtn.spinnerTriggered = false
-        usernameManagerEdit.clear()
-        passwordManagerEdit.clear()
-        accountManagerEdit.clear()
         errorText = ""
     }
 
@@ -104,7 +101,7 @@ Rectangle {
             wrapMode : Text.WordWrap
         }
 
-        EditableLineEdit {
+        ModalTextEdit {
             id: accountManagerEdit
 
             objectName: "accountManagerEdit"
@@ -112,22 +109,15 @@ Rectangle {
             Layout.alignment: Qt.AlignCenter
             Layout.preferredWidth: Math.min(440, root.width - JamiTheme.preferredMarginSize * 2)
 
-            fontSize: 15
             Layout.topMargin: 5
             focus: visible
 
-            secondIco: JamiResources.outline_info_24dp_svg
+            placeholderText: JamiStrings.jamiManagementServerURL
 
-            selectByMouse: true
-            placeholderText: JamiStrings.jamiManagementServerURL  //problem with resize
-            font.pointSize: JamiTheme.textFontSize
-            font.kerning: true
-
-            KeyNavigation.tab: usernameManagerEdit
             KeyNavigation.up: backButton
             KeyNavigation.down: usernameManagerEdit
+            KeyNavigation.tab: KeyNavigation.down
 
-            onTextChanged: errorText = ""
             onAccepted: usernameManagerEdit.forceActiveFocus()
         }
 
@@ -152,7 +142,7 @@ Rectangle {
                                credentialsLabel.font, credentialsLabel.text).height
         }
 
-        EditableLineEdit {
+        ModalTextEdit {
 
             id: usernameManagerEdit
 
@@ -161,24 +151,16 @@ Rectangle {
             Layout.alignment: Qt.AlignCenter
             Layout.preferredWidth: Math.min(440, root.width - JamiTheme.preferredMarginSize * 2)
 
-            fontSize: 15
-
-            secondIco: JamiResources.outline_info_24dp_svg
-
-            selectByMouse: true
             placeholderText: JamiStrings.username
-            font.pointSize: JamiTheme.textFontSize
-            font.kerning: true
 
-            KeyNavigation.tab: passwordManagerEdit
             KeyNavigation.up: accountManagerEdit
             KeyNavigation.down: passwordManagerEdit
+            KeyNavigation.tab: KeyNavigation.down
 
-            onTextChanged: errorText = ""
-
+            onAccepted: passwordManagerEdit.forceActiveFocus()
         }
 
-        EditableLineEdit {
+        PasswordTextEdit {
 
             id: passwordManagerEdit
 
@@ -187,25 +169,15 @@ Rectangle {
             Layout.alignment: Qt.AlignCenter
             Layout.preferredWidth: Math.min(440, root.width - JamiTheme.preferredMarginSize * 2)
 
-            selectByMouse: true
             placeholderText: JamiStrings.password
-            font.pointSize: JamiTheme.textFontSize
-            font.kerning: true
             Layout.topMargin: 10
 
-            secondIco: JamiResources.eye_cross_svg
-            thirdIco: JamiResources.outline_info_24dp_svg
-
-            fontSize: 15
-
-            echoMode: TextInput.Password
 
-            KeyNavigation.tab: connectBtn.enabled ? connectBtn : backButton
             KeyNavigation.up: usernameManagerEdit
             KeyNavigation.down: connectBtn.enabled ? connectBtn : backButton
+            KeyNavigation.tab: KeyNavigation.down
 
-            onTextChanged: errorText = ""
-            onSecondIcoClicked: { toggleEchoMode() }
+            onAccepted: connectBtn.forceActiveFocus()
 
         }
 
@@ -223,16 +195,17 @@ Rectangle {
             spinnerTriggeredtext: JamiStrings.creatingAccount
             normalText: JamiStrings.connect
 
-            enabled: accountManagerEdit.text.length !== 0
-                     && usernameManagerEdit.text.length !== 0
-                     && passwordManagerEdit.text.length !== 0
+            enabled: accountManagerEdit.dynamicText.length !== 0
+                     && usernameManagerEdit.dynamicText.length !== 0
+                     && passwordManagerEdit.dynamicText.length !== 0
                      && !spinnerTriggered
 
             color: JamiTheme.tintedBlue
 
-            KeyNavigation.tab: backButton
             KeyNavigation.up: passwordManagerEdit
             KeyNavigation.down: backButton
+            KeyNavigation.tab: KeyNavigation.down
+
 
             onClicked: {
                 if (connectBtn.focus)
@@ -275,13 +248,14 @@ Rectangle {
 
         preferredSize: JamiTheme.wizardViewPageBackButtonSize
 
-        KeyNavigation.tab: accountManagerEdit
+
         KeyNavigation.up: {
             if (connectBtn.enabled)
                 return connectBtn
             return passwordManagerEdit
         }
-        KeyNavigation.down: KeyNavigation.tab
+        KeyNavigation.down: accountManagerEdit
+        KeyNavigation.tab: KeyNavigation.down
 
         onClicked: WizardViewStepModel.previousStep()
     }
diff --git a/src/app/wizardview/components/CreateAccountPage.qml b/src/app/wizardview/components/CreateAccountPage.qml
index aae6264ce..c5347b9f6 100644
--- a/src/app/wizardview/components/CreateAccountPage.qml
+++ b/src/app/wizardview/components/CreateAccountPage.qml
@@ -48,7 +48,7 @@ Rectangle {
     function clearAllTextFields() {
         chooseUsernameButton.enabled = true
         showAdvancedButton.enabled = true
-        usernameEdit.clear()
+        usernameEdit.dynamicText = ""
         advancedAccountSettingsPage.clear()
     }
 
@@ -115,7 +115,7 @@ Rectangle {
                 Text {
 
                     text: root.isRendezVous ? JamiStrings.chooseUsernameForRV :
-                                         JamiStrings.chooseUsernameForAccount
+                                              JamiStrings.chooseUsernameForAccount
                     Layout.alignment: Qt.AlignCenter
                     Layout.topMargin: 15
                     Layout.preferredWidth: Math.min(360, root.width - JamiTheme.preferredMarginSize * 2)
@@ -124,23 +124,22 @@ Rectangle {
                     color: JamiTheme.textColor
 
                     font.pixelSize: JamiTheme.wizardViewDescriptionFontPixelSize
-                    wrapMode:Text.WordWrap
+                    wrapMode: Text.WordWrap
                 }
 
-                UsernameLineEdit {
+                UsernameTextEdit {
                     id: usernameEdit
 
                     objectName: "usernameEdit"
-                    accountId: "" // During creation
 
                     Layout.topMargin: 15
                     Layout.alignment: Qt.AlignHCenter
                     Layout.preferredWidth: Math.min(440, root.width - JamiTheme.preferredMarginSize * 2)
                     placeholderText: root.isRendezVous ? JamiStrings.chooseAName :
-                                    JamiStrings.chooseYourUserName
-
+                                                         JamiStrings.chooseYourUserName
+                    staticText: ""
+                    editMode: true
                     focus: visible
-                    fontSize: 18
 
                     KeyNavigation.tab: chooseUsernameButton
                     KeyNavigation.up: backButton
@@ -154,10 +153,12 @@ Rectangle {
                     }
                 }
 
+
                 Label {
-                    Layout.alignment: Qt.AlignHCenter
 
+                    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){
@@ -169,14 +170,14 @@ Rectangle {
                             return " "
                         case UsernameLineEdit.NameRegistrationState.INVALID:
                             return root.isRendezVous ? JamiStrings.invalidName :
-                                                  JamiStrings.invalidUsername
+                                                       JamiStrings.invalidUsername
                         case UsernameLineEdit.NameRegistrationState.TAKEN:
                             return root.isRendezVous ? JamiStrings.nameAlreadyTaken :
-                                                  JamiStrings.usernameAlreadyTaken
+                                                       JamiStrings.usernameAlreadyTaken
                         }
                     }
                     font.pointSize: JamiTheme.textFontSize
-                    color: JamiTheme.redColor
+                    color: "#CC0022"
                 }
 
                 MaterialButton {
@@ -192,9 +193,9 @@ Rectangle {
                     font.capitalization: Font.AllUppercase
                     color: enabled? JamiTheme.buttonTintedBlue : JamiTheme.buttonTintedGrey
                     text: !enabled ? JamiStrings.creatingAccount :
-                                root.isRendezVous ? JamiStrings.chooseName : JamiStrings.joinJami
+                                     root.isRendezVous ? JamiStrings.chooseName : JamiStrings.joinJami
                     enabled: usernameEdit.nameRegistrationState === UsernameLineEdit.NameRegistrationState.FREE
-                            || usernameEdit.nameRegistrationState === UsernameLineEdit.NameRegistrationState.BLANK
+                             || usernameEdit.nameRegistrationState === UsernameLineEdit.NameRegistrationState.BLANK
 
 
                     KeyNavigation.tab: showAdvancedButton
@@ -205,7 +206,7 @@ Rectangle {
                         WizardViewStepModel.accountCreationInfo =
                                 JamiQmlUtils.setUpAccountCreationInputPara(
                                     {
-                                        registeredName : usernameEdit.text,
+                                        registeredName : usernameEdit.dynamicText,
                                         alias: advancedAccountSettingsPage.alias,
                                         password: advancedAccountSettingsPage.validatedPassword,
                                         avatar: UtilsAdapter.tempCreationImage(),
@@ -289,6 +290,7 @@ Rectangle {
         KeyNavigation.down: usernameEdit
 
         onClicked: {
+
             if (createAccountStack.currentIndex > 0) {
                 createAccountStack.currentIndex--
             } else {
diff --git a/src/app/wizardview/components/CreateSIPAccountPage.qml b/src/app/wizardview/components/CreateSIPAccountPage.qml
index a7bc2d322..3e41c8ee5 100644
--- a/src/app/wizardview/components/CreateSIPAccountPage.qml
+++ b/src/app/wizardview/components/CreateSIPAccountPage.qml
@@ -35,11 +35,6 @@ Rectangle {
     signal showThisPage
 
     function clearAllTextFields() {
-        sipUsernameEdit.clear()
-        sipPasswordEdit.clear()
-        sipServernameEdit.clear()
-        sipProxyEdit.clear()
-        displayNameLineEdit.clear()
         UtilsAdapter.setTempCreationImageFromString()
     }
 
@@ -99,14 +94,14 @@ Rectangle {
                     Layout.topMargin: 15
                     Layout.alignment: Qt.AlignCenter
                     font.pixelSize: JamiTheme.wizardViewDescriptionFontPixelSize
-                                        font.weight: Font.Medium
+                    font.weight: Font.Medium
                     wrapMode: Text.WordWrap
                     horizontalAlignment: Text.AlignHCenter
                     verticalAlignment: Text.AlignVCenter
                     color: JamiTheme.textColor
                 }
 
-                EditableLineEdit {
+                ModalTextEdit {
                     id: sipServernameEdit
 
                     objectName: "sipServernameEdit"
@@ -115,19 +110,17 @@ Rectangle {
                     Layout.preferredWidth: Math.min(440, root.width - JamiTheme.preferredMarginSize * 2)
 
                     focus: visible
-                    selectByMouse: true
                     placeholderText: JamiStrings.server
-                    font.pointSize: JamiTheme.textFontSize
-                    font.kerning: true
 
-                    KeyNavigation.tab: sipProxyEdit
                     KeyNavigation.up: backButton
                     KeyNavigation.down: sipProxyEdit
+                    KeyNavigation.tab: KeyNavigation.down
+
+                    onAccepted: sipProxyEdit.forceActiveFocus()
 
-                    onEditingFinished: sipProxyEdit.forceActiveFocus()
                 }
 
-                EditableLineEdit {
+                ModalTextEdit {
                     id: sipProxyEdit
 
                     objectName: "sipProxyEdit"
@@ -135,20 +128,17 @@ Rectangle {
                     Layout.alignment: Qt.AlignCenter
                     Layout.preferredWidth: Math.min(440, root.width - JamiTheme.preferredMarginSize * 2)
 
-                    focus: visible
-                    selectByMouse: true
                     placeholderText: JamiStrings.proxy
-                    font.pointSize: JamiTheme.textFontSize
-                    font.kerning: true
 
-                    KeyNavigation.tab: sipUsernameEdit
                     KeyNavigation.up: sipServernameEdit
                     KeyNavigation.down: sipUsernameEdit
+                    KeyNavigation.tab: KeyNavigation.down
+
+                    onAccepted: sipUsernameEdit.forceActiveFocus()
 
-                    onEditingFinished: sipUsernameEdit.forceActiveFocus()
                 }
 
-                EditableLineEdit {
+                ModalTextEdit {
                     id: sipUsernameEdit
 
                     objectName: "sipUsernameEdit"
@@ -156,19 +146,16 @@ Rectangle {
                     Layout.alignment: Qt.AlignCenter
                     Layout.preferredWidth: Math.min(440, root.width - JamiTheme.preferredMarginSize * 2)
 
-                    selectByMouse: true
                     placeholderText: JamiStrings.username
-                    font.pointSize: JamiTheme.textFontSize
-                    font.kerning: true
 
-                    KeyNavigation.tab: sipPasswordEdit
                     KeyNavigation.up: sipProxyEdit
                     KeyNavigation.down: sipPasswordEdit
+                    KeyNavigation.tab: KeyNavigation.down
 
-                    onEditingFinished: sipPasswordEdit.forceActiveFocus()
+                    onAccepted: sipPasswordEdit.forceActiveFocus()
                 }
 
-                EditableLineEdit {
+                PasswordTextEdit {
                     id: sipPasswordEdit
 
                     objectName: "sipPasswordEdit"
@@ -176,23 +163,14 @@ Rectangle {
                     Layout.alignment: Qt.AlignCenter
                     Layout.preferredWidth: Math.min(440, root.width - JamiTheme.preferredMarginSize * 2)
 
-                    selectByMouse: true
-                    echoMode: TextInput.Password
-
                     placeholderText: JamiStrings.password
-                    font.pointSize: JamiTheme.textFontSize
-                    font.kerning: true
 
-                    KeyNavigation.tab: createAccountButton
                     KeyNavigation.up: sipUsernameEdit
                     KeyNavigation.down: createAccountButton
+                    KeyNavigation.tab: KeyNavigation.down
 
-                    secondIco: JamiResources.eye_cross_svg
+                    onAccepted: createAccountButton.forceActiveFocus()
 
-
-                    onEditingFinished: createAccountButton.forceActiveFocus()
-
-                    onSecondIcoClicked: { toggleEchoMode() }
                 }
 
                 MaterialButton {
@@ -207,18 +185,18 @@ Rectangle {
 
                     text: JamiStrings.addSip
 
-                    KeyNavigation.tab: personalizeAccount
                     KeyNavigation.up: sipPasswordEdit
                     KeyNavigation.down: personalizeAccount
+                    KeyNavigation.tab: KeyNavigation.down
 
                     onClicked: {
                         WizardViewStepModel.accountCreationInfo =
                                 JamiQmlUtils.setUpAccountCreationInputPara(
-                                    {hostname : sipServernameEdit.text,
-                                        alias: displayNameLineEdit.text,
-                                        username : sipUsernameEdit.text,
-                                        password : sipPasswordEdit.text,
-                                        proxy : sipProxyEdit.text,
+                                    {hostname : sipServernameEdit.dynamicText,
+                                        alias: displayNameLineEdit.dynamicText,
+                                        username : sipUsernameEdit.dynamicText,
+                                        password : sipPasswordEdit.dynamicText,
+                                        proxy : sipProxyEdit.dynamicText,
                                         avatar: UtilsAdapter.tempCreationImage()})
                         WizardViewStepModel.nextStep()
                     }
@@ -235,9 +213,9 @@ Rectangle {
                     Layout.alignment: Qt.AlignCenter
                     Layout.bottomMargin: JamiTheme.wizardViewPageBackButtonMargins*2
 
-                    KeyNavigation.tab: backButton
                     KeyNavigation.up: createAccountButton
                     KeyNavigation.down: backButton
+                    KeyNavigation.tab: KeyNavigation.down
 
                     onClicked: createAccountStack.currentIndex += 1
                 }
@@ -286,20 +264,14 @@ Rectangle {
                     buttonSize: JamiTheme.smartListAvatarSize
                 }
 
-                EditableLineEdit {
+                ModalTextEdit {
 
                     id: displayNameLineEdit
 
                     Layout.alignment: Qt.AlignCenter
                     Layout.preferredWidth: Math.min(300, root.width - JamiTheme.preferredMarginSize * 2)
                     Layout.topMargin: 30
-                    verticalAlignment: Text.AlignVCenter
-
-                    font.pointSize: JamiTheme.textFontSize
-
                     placeholderText: JamiStrings.enterNickname
-
-                    color: JamiTheme.textColor
                 }
 
                 Text {
@@ -315,11 +287,8 @@ Rectangle {
                     font.pixelSize: JamiTheme.headerFontSize
                     color: JamiTheme.textColor
                 }
-
             }
         }
-
-
     }
 
     BackButton {
@@ -333,9 +302,9 @@ Rectangle {
 
         preferredSize: JamiTheme.wizardViewPageBackButtonSize
 
-        KeyNavigation.tab: sipServernameEdit
         KeyNavigation.up: personalizeAccount
         KeyNavigation.down: sipServernameEdit
+        KeyNavigation.tab: KeyNavigation.down
 
         onClicked: {
             if (createAccountStack.currentIndex !== 0) {
diff --git a/src/app/wizardview/components/ImportFromBackupPage.qml b/src/app/wizardview/components/ImportFromBackupPage.qml
index 534f3d6e1..7af087b59 100644
--- a/src/app/wizardview/components/ImportFromBackupPage.qml
+++ b/src/app/wizardview/components/ImportFromBackupPage.qml
@@ -41,7 +41,6 @@ Rectangle {
 
     function clearAllTextFields() {
         connectBtn.spinnerTriggered = false
-        passwordFromBackupEdit.clear()
         filePath = ""
         errorText = ""
         fileImportBtnText = JamiStrings.selectArchiveFile
@@ -113,6 +112,7 @@ Rectangle {
             secondary: true
             color: JamiTheme.secAndTertiTextColor
             secHoveredColor: JamiTheme.secAndTertiHoveredBackgroundColor
+            focus: visible
 
             Layout.alignment: Qt.AlignCenter
             Layout.topMargin: 35
@@ -122,9 +122,9 @@ Rectangle {
             text: fileImportBtnText
             toolTipText: JamiStrings.importAccountArchive
 
-            KeyNavigation.tab: passwordFromBackupEdit
             KeyNavigation.up: backButton
             KeyNavigation.down: passwordFromBackupEdit
+            KeyNavigation.tab: KeyNavigation.down
 
             onClicked: {
                 errorText = ""
@@ -143,6 +143,7 @@ Rectangle {
                     filePath = file
                     if (file.length !== "") {
                         fileImportBtnText = UtilsAdapter.toFileInfoName(file)
+                        passwordFromBackupEdit.forceActiveFocus()
                     } else {
                         fileImportBtnText = JamiStrings.archive
                     }
@@ -153,7 +154,7 @@ Rectangle {
             }
         }
 
-        EditableLineEdit {
+        PasswordTextEdit {
             id: passwordFromBackupEdit
 
             objectName: "passwordFromBackupEdit"
@@ -162,25 +163,13 @@ Rectangle {
             Layout.topMargin: 20
             Layout.preferredWidth: Math.min(440, root.width - JamiTheme.preferredMarginSize * 2)
 
-            focus: visible
-
-            selectByMouse: true
-            placeholderText: JamiStrings.password
-            font.pointSize: JamiTheme.textFontSize
-            font.kerning: true
-
-            secondIco: JamiResources.eye_cross_svg
-
-            echoMode: TextInput.Password
+            placeholderText: JamiStrings.enterPassword
 
-            KeyNavigation.tab: connectBtn.enabled ? connectBtn : backButton
             KeyNavigation.up: fileImportBtn
             KeyNavigation.down: connectBtn.enabled ? connectBtn : backButton
+            KeyNavigation.tab: KeyNavigation.down
 
-            onTextChanged: errorText = ""
-
-            onSecondIcoClicked: { toggleEchoMode() }
-
+            onAccepted: connectBtn.forceActiveFocus()
         }
 
         SpinnerButton {
@@ -207,9 +196,9 @@ Rectangle {
                 return false
             }
 
-            KeyNavigation.tab: backButton
             KeyNavigation.up: passwordFromBackupEdit
             KeyNavigation.down: backButton
+            KeyNavigation.tab: KeyNavigation.down
 
             onClicked: {
                 if (connectBtn.focus)
@@ -219,7 +208,7 @@ Rectangle {
                 WizardViewStepModel.accountCreationInfo =
                         JamiQmlUtils.setUpAccountCreationInputPara(
                             {archivePath : UtilsAdapter.getAbsPath(filePath),
-                                password : passwordFromBackupEdit.text})
+                                password : passwordFromBackupEdit.dynamicText})
                 WizardViewStepModel.nextStep()
             }
         }
diff --git a/src/app/wizardview/components/ImportFromDevicePage.qml b/src/app/wizardview/components/ImportFromDevicePage.qml
index a652a8706..af24ae66c 100644
--- a/src/app/wizardview/components/ImportFromDevicePage.qml
+++ b/src/app/wizardview/components/ImportFromDevicePage.qml
@@ -40,8 +40,6 @@ Rectangle {
 
     function clearAllTextFields() {
         connectBtn.spinnerTriggered = false
-        pinFromDevice.clear()
-        passwordFromDevice.clear()
     }
 
     function errorOccured(errorMessage) {
@@ -139,10 +137,9 @@ Rectangle {
 
         }
 
-        EditableLineEdit {
+        ModalTextEdit {
             id: pinFromDevice
 
-
             objectName: "pinFromDevice"
 
             Layout.alignment: Qt.AlignCenter
@@ -151,50 +148,38 @@ Rectangle {
 
             focus: visible
 
-            selectByMouse: true
             placeholderText: JamiStrings.pin
-            font.pointSize: JamiTheme.textFontSize
-            font.kerning: true
+            staticText: ""
 
-            KeyNavigation.tab: {
-                if (connectBtn.enabled)
-                    return connectBtn
-                else if (connectBtn.spinnerTriggered)
-                    return passwordFromDevice
-                return backButton
-            }
-            KeyNavigation.up: passwordFromDevice
-            KeyNavigation.down: KeyNavigation.tab
+            KeyNavigation.up: backButton
+            KeyNavigation.down: passwordFromDevice
+            KeyNavigation.tab: KeyNavigation.down
 
-            onTextChanged: errorText = ""
+            onAccepted: passwordFromDevice.forceActiveFocus()
 
         }
 
-        EditableLineEdit {
+        PasswordTextEdit {
             id: passwordFromDevice
 
             objectName: "passwordFromDevice"
-            underlined: true
             Layout.alignment: Qt.AlignCenter
             Layout.preferredWidth: Math.min(440, root.width - JamiTheme.preferredMarginSize * 2)
 
-            secondIco: JamiResources.eye_cross_svg
+            placeholderText: JamiStrings.enterPassword
 
-            selectByMouse: true
-            placeholderText: JamiStrings.password
-            font.pointSize: JamiTheme.textFontSize
-            font.kerning: true
-
-            echoMode: TextInput.Password
-
-            KeyNavigation.tab: connectBtn.enabled ? connectBtn : backButton
             KeyNavigation.up: pinFromDevice
-            KeyNavigation.down: connectBtn.enabled ? connectBtn : backButton
+            KeyNavigation.down: {
+                if (connectBtn.enabled)
+                    return connectBtn
+                else if (connectBtn.spinnerTriggered)
+                    return passwordFromDevice
+                return backButton
+            }
+            KeyNavigation.tab: KeyNavigation.down
 
-            onTextChanged: errorText = ""
-            onEditingFinished: pinFromDevice.forceActiveFocus()
+            onAccepted: pinFromDevice.forceActiveFocus()
 
-            onSecondIcoClicked: { toggleEchoMode() }
         }
 
         SpinnerButton {
@@ -212,7 +197,7 @@ Rectangle {
             spinnerTriggeredtext: JamiStrings.generatingAccount
             normalText: JamiStrings.connectFromAnotherDevice
 
-            enabled: pinFromDevice.text.length !== 0 && !spinnerTriggered
+            enabled: pinFromDevice.dynamicText.length !== 0 && !spinnerTriggered
 
             KeyNavigation.tab: backButton
             KeyNavigation.up: passwordFromDevice
@@ -223,8 +208,8 @@ Rectangle {
 
                 WizardViewStepModel.accountCreationInfo =
                         JamiQmlUtils.setUpAccountCreationInputPara(
-                            {archivePin : pinFromDevice.text,
-                                password : passwordFromDevice.text})
+                            {archivePin : pinFromDevice.dynamicText,
+                                password : passwordFromDevice.dynamicText})
                 WizardViewStepModel.nextStep()
             }
         }
-- 
GitLab