~gerboland/unity8/initialSurfaceGeometry

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"))
            }
        }
    }
}