Give identity its due: native enrollment, honest deletion, and sign-in that stays home
Claude-Session: https://claude.ai/code/session_01Ms2FbjQy31TVf3CEvQhGM8
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
// Guided enrollment, in place, for as long as it takes.
|
||||
//
|
||||
// fprintd wants the same finger pressed several times from slightly different
|
||||
// angles, and it says how many it still needs. That count is the whole content
|
||||
// of this panel: a person mid-enrollment is looking at the reader, not the
|
||||
// screen, and the one thing they come back to the screen for is whether it
|
||||
// worked and how much is left.
|
||||
//
|
||||
// Nothing here loops. The bar advances when a touch is accepted and then holds,
|
||||
// so a panel left open on a desktop that never got touched costs no frames --
|
||||
// see the note about repainting animations in the Appearance page.
|
||||
|
||||
import QtQuick
|
||||
import qs.config
|
||||
|
||||
Rectangle {
|
||||
id: root
|
||||
|
||||
// Human label for the finger being enrolled, already resolved by the
|
||||
// service so nothing here has to know fprintd's vocabulary.
|
||||
property string finger: ""
|
||||
property int stage: 0
|
||||
property int total: 0
|
||||
// Whatever the last stream line said, when it said anything worth showing --
|
||||
// "enroll-retry-scan", a failure, a completion.
|
||||
property string message: ""
|
||||
|
||||
signal cancelled
|
||||
|
||||
width: parent ? parent.width : 620
|
||||
implicitHeight: body.implicitHeight + 28
|
||||
radius: Theme.cardRadius
|
||||
color: Theme.alpha(Theme.bgDark, 0.55)
|
||||
border.width: 1
|
||||
border.color: Theme.alpha(Theme.accent, 0.3)
|
||||
|
||||
Column {
|
||||
id: body
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.top: parent.top
|
||||
anchors.margins: 14
|
||||
spacing: 7
|
||||
|
||||
Text {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
// md-fingerprint
|
||||
text: "\u{F0306}"
|
||||
color: Theme.accent
|
||||
font.family: Theme.fontMono
|
||||
font.pixelSize: 38
|
||||
}
|
||||
|
||||
Text {
|
||||
width: parent.width
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
text: root.finger === ""
|
||||
? "Touch the reader"
|
||||
: "Touch the reader with your " + root.finger.toLowerCase()
|
||||
color: Theme.fg
|
||||
font.family: Theme.fontFamily
|
||||
font.pixelSize: Theme.fontSize
|
||||
font.weight: Font.DemiBold
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
|
||||
Text {
|
||||
width: parent.width
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
text: root.total > 0
|
||||
? "Lift and press again — " + root.stage + " of " + root.total + " touches"
|
||||
: "Lift and press again"
|
||||
color: Theme.fgDim
|
||||
font.family: Theme.fontFamily
|
||||
font.features: Theme.tabularFigures
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
|
||||
Item { width: 1; height: 3 }
|
||||
|
||||
Rectangle {
|
||||
width: parent.width
|
||||
height: 5
|
||||
radius: 3
|
||||
color: Theme.alpha(Theme.fg, 0.1)
|
||||
border.width: 0
|
||||
|
||||
Rectangle {
|
||||
width: root.total > 0
|
||||
? parent.width * Math.max(0, Math.min(1, root.stage / root.total))
|
||||
: 0
|
||||
height: parent.height
|
||||
radius: parent.radius
|
||||
color: Theme.accent
|
||||
border.width: 0
|
||||
|
||||
// One step per accepted touch, then still.
|
||||
Behavior on width {
|
||||
NumberAnimation { duration: Theme.durFast; easing.type: Easing.OutCubic }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
width: parent.width
|
||||
visible: root.message !== ""
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
text: root.message
|
||||
color: Theme.warn
|
||||
font.family: Theme.fontFamily
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
wrapMode: Text.WordWrap
|
||||
topPadding: 4
|
||||
}
|
||||
|
||||
Item { width: 1; height: 3 }
|
||||
|
||||
SettingsButton {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
text: "Cancel"
|
||||
onClicked: root.cancelled()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user