mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-26 14:23:09 +00:00
This (partially) reverts commit 127bbdf653.
Only incorrect changes from Kirigami.Units.largeSpacing to
Kirigami.Units.gridUnit are reverted. Only Plasma.Units were buggy.
233 lines
8.2 KiB
QML
233 lines
8.2 KiB
QML
// SPDX-FileCopyrightText: 2021 Devin Lin <devin@kde.org>
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
import QtQuick 2.12
|
|
import QtQuick.Layouts 1.2
|
|
import QtQuick.Controls 2.12 as Controls
|
|
|
|
import org.kde.kirigami 2.19 as Kirigami
|
|
import org.kde.kcmutils
|
|
import org.kde.kirigamiaddons.formcard 1.0 as FormCard
|
|
|
|
import cellularnetworkkcm 1.0
|
|
|
|
FormCard.FormCardPage {
|
|
id: root
|
|
|
|
property Sim sim
|
|
|
|
title: i18n("SIM Lock")
|
|
|
|
MessagesList {
|
|
Layout.fillWidth: true
|
|
Layout.margins: Kirigami.Units.gridUnit
|
|
model: kcm.messages
|
|
}
|
|
|
|
ColumnLayout {
|
|
id: unlockSimPlaceholder
|
|
visible: sim.locked
|
|
|
|
// HACK: prevent infinite binding loop?
|
|
Component.onCompleted: unlockSimPlaceholder.Layout.preferredHeight = root.height
|
|
|
|
Kirigami.PlaceholderMessage {
|
|
Layout.margins: Kirigami.Units.gridUnit * 2
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
text: i18n("SIM is locked")
|
|
explanation: i18n("In order to use this SIM, you must first unlock it.")
|
|
icon.name: "lock"
|
|
helpfulAction: Kirigami.Action {
|
|
icon.name: "unlock"
|
|
text: "Unlock SIM"
|
|
onTriggered: unlockPinDialog.open() // TODO replace custom unlock pin dialog with just opening the system unlock PIN dialog
|
|
}
|
|
}
|
|
}
|
|
|
|
ColumnLayout {
|
|
id: notLockedSimPlaceholder
|
|
visible: !sim.pinEnabled && !unlockSimPlaceholder.visible
|
|
Layout.fillWidth: true
|
|
|
|
// HACK: prevent infinite binding loop?
|
|
Component.onCompleted: notLockedSimPlaceholder.Layout.preferredHeight = root.height
|
|
|
|
Kirigami.PlaceholderMessage {
|
|
Layout.margins: Kirigami.Units.gridUnit * 2
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
text: i18n("SIM is not locked")
|
|
explanation: i18n("You can lock your SIM to require a set PIN code for phone calls and mobile data.")
|
|
icon.name: "unlock"
|
|
helpfulAction: Kirigami.Action {
|
|
icon.name: "lock"
|
|
text: i18n("Lock SIM")
|
|
onTriggered: createPinDialog.open()
|
|
}
|
|
}
|
|
}
|
|
|
|
FormCard.FormCard {
|
|
visible: !notLockedSimPlaceholder.visible && !unlockSimPlaceholder.visible
|
|
Layout.fillWidth: true
|
|
|
|
FormCard.FormButtonDelegate {
|
|
id: disableSimLockButton
|
|
text: i18n("Disable SIM Lock")
|
|
description: i18n("Disable the SIM lock feature and remove the passcode on the SIM.")
|
|
onClicked: removePinDialog.open();
|
|
}
|
|
|
|
Kirigami.Separator {
|
|
Layout.leftMargin: Kirigami.Units.largeSpacing
|
|
Layout.rightMargin: Kirigami.Units.largeSpacing
|
|
opacity: (!disableSimLockButton.controlHovered && !changePinButton.controlHovered) ? 0.5 : 0
|
|
}
|
|
|
|
FormCard.FormButtonDelegate {
|
|
id: changePinButton
|
|
text: i18n("Change PIN")
|
|
description: i18n("Change the passcode set on the SIM.")
|
|
onClicked: changePinDialog.open()
|
|
}
|
|
}
|
|
|
|
data: [
|
|
RegExpValidator {
|
|
id: pinValidator
|
|
regExp: /[0-9]+/
|
|
},
|
|
// dialogs
|
|
|
|
Kirigami.Dialog {
|
|
id: unlockPinDialog
|
|
title: i18n("Unlock SIM")
|
|
standardButtons: Controls.Dialog.Ok | Controls.Dialog.Cancel
|
|
padding: Kirigami.Units.largeSpacing
|
|
|
|
onAccepted: sim.sendPin(unlockPinCurPin.text)
|
|
|
|
ColumnLayout {
|
|
Controls.Label {
|
|
text: i18n("Attempts left: %1", sim.unlockRetriesLeft)
|
|
}
|
|
Kirigami.PasswordField {
|
|
id: unlockPinCurPin
|
|
placeholderText: i18n("Enter PIN")
|
|
validator: pinValidator
|
|
}
|
|
}
|
|
},
|
|
|
|
Kirigami.Dialog {
|
|
id: changePinDialog
|
|
title: i18n("Change SIM PIN")
|
|
standardButtons: isValid ? Controls.Dialog.Ok | Controls.Dialog.Cancel : Controls.Dialog.Cancel
|
|
padding: Kirigami.Units.largeSpacing
|
|
|
|
property bool isValid: changePinNewPin.text == changePinConfirmPin.text &&
|
|
changePinNewPin.text.length >= 4 && changePinNewPin.text.length <= 8 // SIM PINs are between 4-8 digits
|
|
|
|
onAccepted: {
|
|
if (isValid) {
|
|
sim.changePin(changePinCurPin.text, changePinNewPin.text);
|
|
}
|
|
}
|
|
|
|
ColumnLayout {
|
|
spacing: Kirigami.Units.smallSpacing
|
|
Kirigami.InlineMessage {
|
|
id: changePinMatch
|
|
Layout.fillWidth: true
|
|
visible: changePinNewPin.text != changePinConfirmPin.text
|
|
text: i18n("PINs don't match!")
|
|
type: Kirigami.MessageType.Error
|
|
}
|
|
Kirigami.InlineMessage {
|
|
Layout.fillWidth: true
|
|
visible: !changePinMatch.visible && changePinNewPin.text.length != 0 && (changePinNewPin.text.length < 4 || changePinNewPin.text.length > 8)
|
|
text: i18n("PINs must be between 4 and 8 digits!")
|
|
type: Kirigami.MessageType.Error
|
|
}
|
|
Kirigami.PasswordField {
|
|
id: changePinCurPin
|
|
placeholderText: i18n("Current PIN")
|
|
validator: pinValidator
|
|
}
|
|
Kirigami.PasswordField {
|
|
id: changePinNewPin
|
|
placeholderText: i18n("New PIN")
|
|
validator: pinValidator
|
|
}
|
|
Kirigami.PasswordField {
|
|
id: changePinConfirmPin
|
|
placeholderText: i18n("Confirm PIN")
|
|
validator: pinValidator
|
|
}
|
|
}
|
|
},
|
|
|
|
Kirigami.Dialog {
|
|
id: removePinDialog
|
|
title: i18n("Remove SIM PIN")
|
|
standardButtons: Controls.Dialog.Ok | Controls.Dialog.Cancel
|
|
padding: Kirigami.Units.largeSpacing
|
|
|
|
onAccepted: sim.togglePinEnabled(removePinCurPin.text);
|
|
|
|
ColumnLayout {
|
|
Kirigami.PasswordField {
|
|
id: removePinCurPin
|
|
placeholderText: i18n("Current PIN")
|
|
validator: pinValidator
|
|
}
|
|
}
|
|
},
|
|
|
|
Kirigami.Dialog {
|
|
id: createPinDialog
|
|
title: i18n("Add SIM PIN")
|
|
standardButtons: isValid ? Controls.Dialog.Ok | Controls.Dialog.Cancel : Controls.Dialog.Cancel
|
|
padding: Kirigami.Units.largeSpacing
|
|
|
|
property bool isValid: createPinNewPin.text == createPinConfirmPin.text &&
|
|
createPinNewPin.text.length >= 4 && createPinNewPin.text.length <= 8 // SIM PINs are between 4-8 digits
|
|
|
|
onAccepted: {
|
|
if (isValid) {
|
|
sim.togglePinEnabled(createPinNewPin.text);
|
|
}
|
|
}
|
|
|
|
ColumnLayout {
|
|
spacing: Kirigami.Units.smallSpacing
|
|
Kirigami.InlineMessage {
|
|
id: createPinMatch
|
|
Layout.fillWidth: true
|
|
visible: createPinNewPin.text != createPinConfirmPin.text
|
|
text: i18n("PINs don't match!")
|
|
type: Kirigami.MessageType.Error
|
|
}
|
|
Kirigami.InlineMessage {
|
|
Layout.fillWidth: true
|
|
visible: !createPinMatch.visible && createPinNewPin.text.length != 0 && (createPinNewPin.text.length < 4 || createPinNewPin.text.length > 8)
|
|
text: i18n("PINs must be between 4 and 8 digits!")
|
|
type: Kirigami.MessageType.Error
|
|
}
|
|
Kirigami.PasswordField {
|
|
id: createPinNewPin
|
|
placeholderText: i18n("New PIN")
|
|
validator: pinValidator
|
|
}
|
|
Kirigami.PasswordField {
|
|
id: createPinConfirmPin
|
|
placeholderText: i18n("Confirm PIN")
|
|
validator: pinValidator
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
|