lock: add FPC wiring preview
This commit is contained in:
parent
6eda491496
commit
902a724855
5 changed files with 243 additions and 0 deletions
|
|
@ -97,6 +97,20 @@ LockScreen {
|
|||
}
|
||||
}
|
||||
|
||||
// Preview-only diagnostic ingress. The physical FPC1020 producer publishes
|
||||
// its root-owned pulse record for LockContext to watch; it cannot use
|
||||
// generic XF86WakeUp here because the touch controller emits that key too.
|
||||
// This target lets us exercise the same visual-only path manually. It
|
||||
// never unlocks, reveals Personal content, or mints step-up. Task 41 owns
|
||||
// replacing this with an attested, source-specific producer.
|
||||
IpcHandler {
|
||||
target: "fingerprint"
|
||||
|
||||
function signal(): string {
|
||||
return JSON.stringify(root.context.noteProvisionalFingerprintPulse());
|
||||
}
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: restoreTimer
|
||||
interval: 150
|
||||
|
|
|
|||
|
|
@ -193,6 +193,75 @@ MouseArea {
|
|||
TapHandler {
|
||||
onTapped: root.pinRevealed = true
|
||||
}
|
||||
|
||||
Item {
|
||||
id: fingerprintPreview
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
Layout.topMargin: 18
|
||||
visible: root.context.provisionalFingerprintEnabled
|
||||
implicitWidth: 196
|
||||
implicitHeight: 78
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
radius: Appearance.rounding.normal
|
||||
color: root.context.provisionalFingerprintConfirmed
|
||||
? Appearance.colors.colPrimary
|
||||
: "#2a000000"
|
||||
border.width: root.context.provisionalFingerprintPulseSeen ? 2 : 1
|
||||
border.color: root.context.provisionalFingerprintPulseSeen
|
||||
? Appearance.colors.colPrimary : "#66ffffff"
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
anchors.left: parent.left
|
||||
anchors.bottom: parent.bottom
|
||||
width: parent.width * root.context.provisionalFingerprintHoldProgress
|
||||
height: 3
|
||||
radius: 2
|
||||
color: Appearance.colors.colPrimary
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
anchors.centerIn: parent
|
||||
spacing: 2
|
||||
|
||||
MaterialSymbol {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
text: "fingerprint"
|
||||
iconSize: 30
|
||||
color: root.context.provisionalFingerprintConfirmed
|
||||
? Appearance.colors.colOnPrimary : Appearance.colors.colOnLayer1
|
||||
}
|
||||
StyledText {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
text: root.context.provisionalFingerprintConfirmed
|
||||
? Translation.tr("Hold recorded — PIN still required")
|
||||
: root.context.provisionalFingerprintPulseSeen
|
||||
? Translation.tr("Sensor pulse received — hold to confirm")
|
||||
: Translation.tr("Hold %1 seconds to test fingerprint wiring")
|
||||
.arg(Math.round(root.context.provisionalFingerprintHoldMs / 1000))
|
||||
color: root.context.provisionalFingerprintConfirmed
|
||||
? Appearance.colors.colOnPrimary : Appearance.colors.colSubtext
|
||||
font.pixelSize: Appearance.font.pixelSize.smaller
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
enabled: root.context.provisionalFingerprintEnabled
|
||||
preventStealing: true
|
||||
pressAndHoldInterval: root.context.provisionalFingerprintHoldMs
|
||||
onPressed: {
|
||||
root.context.beginProvisionalFingerprintHold();
|
||||
mouse.accepted = true;
|
||||
}
|
||||
onReleased: root.context.cancelProvisionalFingerprintHold()
|
||||
onCanceled: root.context.cancelProvisionalFingerprintHold()
|
||||
onPressAndHold: root.context.confirmProvisionalFingerprintHold()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
|
|
|
|||
Loading…
Reference in a new issue