1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
/*
* Copyright (C) 2014 Canonical, Ltd.
*
* 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; version 3.
*
* 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 <http://www.gnu.org/licenses/>.
*/
import QtQuick 2.3
import Ubuntu.Components 1.1
import Ubuntu.Components.ListItems 1.0
import Ubuntu.SystemSettings.SecurityPrivacy 1.0
import ".." as LocalComponents
/**
* One quirk with this page: we don't actually set the password. We avoid
* doing it here because the user can come back to this page and change their
* answer. We don't run as root, so if we did set the password immediately,
* we'd need to prompt for their previous password when they came back and
* changed their answer. Which is silly UX. So instead, we just keep track
* of their choice and set the password at the end (see main.qml).
* Setting the password shouldn't fail, since Ubuntu Touch has loose password
* requirements, but we'll check what we can here. Ideally we'd be able to ask
* the system if a password is legal without actually setting that password.
*/
LocalComponents.Page {
id: passwdPage
objectName: "passwdPage"
title: i18n.tr("Lock security")
forwardButtonSourceComponent: forwardButton
function indexToMethod(index) {
if (index === 0)
return UbuntuSecurityPrivacyPanel.Swipe
else if (index === 1)
return UbuntuSecurityPrivacyPanel.Passcode
else
return UbuntuSecurityPrivacyPanel.Passphrase
}
function methodToIndex(method) {
if (method === UbuntuSecurityPrivacyPanel.Swipe)
return 0
else if (method === UbuntuSecurityPrivacyPanel.Passcode)
return 1
else
return 2
}
Connections {
target: root
onPasswordMethodChanged: selector.selectedIndex = methodToIndex(root.passwordMethod)
}
Column {
id: column
anchors.fill: content
spacing: units.gu(4)
Label {
anchors.left: parent.left
anchors.right: parent.right
wrapMode: Text.Wrap
text: i18n.tr("Please select how you’d like to unlock your phone.")
}
ItemSelector {
id: selector
expanded: true
anchors.left: parent.left
anchors.right: parent.right
property color originalBackground
model: ["", "", ""] // otherwise the delegate will show the text itself and we only want subText
selectedIndex: methodToIndex(root.passwordMethod)
delegate: OptionSelectorDelegate {
objectName: "passwdDelegate" + index
// use subText because we want the text to be small, and we have no other way to control it
subText: {
var method = indexToMethod(index)
var name = ""
var desc = ""
if (method === UbuntuSecurityPrivacyPanel.Swipe) {
name = i18n.tr("Swipe")
desc = i18n.tr("No security")
} else if (method === UbuntuSecurityPrivacyPanel.Passcode) {
name = i18n.tr("Passcode")
desc = i18n.tr("4 digits only")
} else {
name = i18n.tr("Passphrase")
desc = i18n.tr("Numbers and letters")
}
return "<b>%1</b> (%2)".arg(name).arg(desc)
}
}
style: Item {}
Component.onCompleted: {
// A visible selected background looks bad in ListItem widgets with our theme
originalBackground = Theme.palette.selected.background
Theme.palette.selected.background = "transparent"
}
Component.onDestruction: {
// Restore original theme background
Theme.palette.selected.background = originalBackground
}
}
}
Component {
id: forwardButton
LocalComponents.StackButton {
text: i18n.tr("Continue")
onClicked: {
root.passwordMethod = indexToMethod(selector.selectedIndex)
pageStack.load(Qt.resolvedUrl("passwd-set.qml"))
}
}
}
}
|