kcms/cellularnetwork: Improve APN selection and available networks

This commit is contained in:
Devin Lin 2023-12-14 22:49:35 -08:00
parent a816ec5495
commit 09b3964906
2 changed files with 123 additions and 188 deletions

View file

@ -1,11 +1,14 @@
// SPDX-FileCopyrightText: 2021 Devin Lin <devin@kde.org> // SPDX-FileCopyrightText: 2021-2023 Devin Lin <devin@kde.org>
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
import QtQuick 2.12 import QtQuick
import QtQuick.Layouts 1.2 import QtQuick.Layouts
import QtQuick.Controls 2.12 as Controls import QtQuick.Controls as Controls
import org.kde.kirigami 2.12 as Kirigami
import org.kde.kirigami as Kirigami
import org.kde.kcmutils import org.kde.kcmutils
import org.kde.kirigamiaddons.formcard 1 as FormCard
import cellularnetworkkcm 1.0 import cellularnetworkkcm 1.0
Kirigami.ScrollablePage { Kirigami.ScrollablePage {
@ -52,39 +55,18 @@ Kirigami.ScrollablePage {
model: modem.details.networks model: modem.details.networks
delegate: Kirigami.SwipeListItem { delegate: FormCard.FormRadioDelegate {
checked: modelData.isCurrentlyUsed
onClicked: { onClicked: {
if (!modelData.isCurrentlyUsed) { if (!modelData.isCurrentlyUsed) {
modelData.registerToNetwork(); modelData.registerToNetwork();
modem.details.scanNetworks(); modem.details.scanNetworks();
} }
} }
contentItem: RowLayout { text: modelData.operatorLong + " | " + modelData.operatorShort + "(" + modelData.operatorCode + ")"
Layout.fillWidth: true description: modelData.accessTechnology
ColumnLayout {
spacing: Kirigami.Units.smallSpacing
Kirigami.Heading {
level: 3
text: modelData.operatorLong + " | " + modelData.operatorShort + "(" + modelData.operatorCode + ")"
}
Controls.Label {
text: modelData.accessTechnology
}
}
Controls.RadioButton {
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
checked: modelData.isCurrentlyUsed
onClicked: {
if (!modelData.isCurrentlyUsed) {
modelData.registerToNetwork();
modem.details.scanNetworks();
}
checked = modelData.isCurrentlyUsed;
}
}
}
} }
} }
} }

View file

@ -1,178 +1,131 @@
// SPDX-FileCopyrightText: 2021 Devin Lin <devin@kde.org> // SPDX-FileCopyrightText: 2021 Devin Lin <devin@kde.org>
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
import QtQuick 2.12 import QtQuick
import QtQuick.Layouts 1.2 import QtQuick.Layouts
import QtQuick.Controls 2.12 as Controls import QtQuick.Controls as Controls
import org.kde.kirigami 2.12 as Kirigami import org.kde.kirigami as Kirigami
import cellularnetworkkcm 1.0
import cellularnetworkkcm
import org.kde.kirigamiaddons.formcard 1 as FormCard
Kirigami.ScrollablePage { Kirigami.ScrollablePage {
id: apnlist id: root
title: i18n("APNs") topPadding: Kirigami.Units.gridUnit
bottomPadding: Kirigami.Units.gridUnit
leftPadding: 0
rightPadding: 0
property Modem modem property Modem modem
property bool editMode: false
ListView { title: i18n("APNs")
id: profileListView actions: [
model: modem.profiles Kirigami.Action {
text: i18n("Edit")
Kirigami.PlaceholderMessage { icon.name: 'entry-edit'
anchors.centerIn: parent checkable: true
anchors.left: parent.left onCheckedChanged: root.editMode = checked
anchors.right: parent.right }
anchors.margins: Kirigami.Units.largeSpacing ]
visible: profileListView.count === 0
text: i18n("No APNs configured") property var dialog: EditProfileDialog {
icon.name: "globe" id: profileDialog
parent: root
modem: root.modem
profile: null
pageWidth: root.width
}
ColumnLayout {
spacing: 0
MessagesList {
id: messagesList
visible: count != 0
Layout.fillWidth: true
Layout.margins: Kirigami.Units.largeSpacing
model: kcm.messages
}
Kirigami.InlineMessage {
id: cannotFindWarning
Layout.margins: visible ? Kirigami.Units.largeSpacing : 0
Layout.topMargin: visible && !messagesList.visible ? Kirigami.Units.largeSpacing : 0
Layout.fillWidth: true
helpfulAction: Kirigami.Action { visible: false
icon.name: "list-add" type: Kirigami.MessageType.Warning
text: i18n("Add Connection") showCloseButton: true
onTriggered: { text: i18n("Unable to autodetect connection settings for your carrier. Please find your carrier's APN settings by either contacting support or searching online.")
profileDialog.profile = null;
profileDialog.open(); Connections {
target: modem
function onCouldNotAutodetectSettings() {
cannotFindWarning.visible = true;
} }
} }
} }
EditProfileDialog { FormCard.FormHeader {
id: profileDialog title: i18n("APN List")
modem: apnlist.modem
profile: null
pageWidth: apnlist.width
} }
header: ColumnLayout { FormCard.FormCard {
anchors.left: parent.left Repeater {
anchors.right: parent.right id: profilesRepeater
spacing: 0 model: modem.profiles
MessagesList { delegate: FormCard.FormRadioDelegate {
id: messagesList text: modelData.name
visible: count != 0 description: modelData.apn
Layout.fillWidth: true
Layout.margins: Kirigami.Units.largeSpacing
model: kcm.messages
}
Kirigami.InlineMessage {
id: cannotFindWarning
Layout.margins: visible ? Kirigami.Units.largeSpacing : 0
Layout.topMargin: visible && !messagesList.visible ? Kirigami.Units.largeSpacing : 0
Layout.fillWidth: true
visible: false
type: Kirigami.MessageType.Warning
showCloseButton: true
text: qsTr("Unable to autodetect connection settings for your carrier. Please find your carrier's APN settings by either contacting support or searching online.")
Connections {
target: modem
function onCouldNotAutodetectSettings() {
cannotFindWarning.visible = true;
}
}
}
Kirigami.SwipeListItem {
Layout.fillWidth: true
visible: profileListView.count !== 0
onClicked: {
profileDialog.profile = null;
profileDialog.open();
}
contentItem: Row {
spacing: Kirigami.Units.smallSpacing
Kirigami.Icon {
anchors.verticalCenter: parent.verticalCenter
source: "list-add"
height: Kirigami.Units.gridUnit * 1.5
width: height
}
Kirigami.Heading {
level: 3
anchors.verticalCenter: parent.verticalCenter
Layout.alignment: Qt.AlignLeft
text: i18n("Add APN")
}
}
}
Kirigami.SwipeListItem {
Layout.fillWidth: true
onClicked: {
modem.addDetectedProfileSettings();
}
contentItem: Row {
spacing: Kirigami.Units.smallSpacing
Kirigami.Icon {
anchors.verticalCenter: parent.verticalCenter
source: "list-add"
height: Kirigami.Units.gridUnit * 1.5
width: height
}
Kirigami.Heading {
level: 3
anchors.verticalCenter: parent.verticalCenter
Layout.alignment: Qt.AlignLeft
text: i18n("Autodetect APN")
}
}
}
}
delegate: Kirigami.SwipeListItem {
onClicked: modem.activateProfile(modelData.connectionUni)
actions: [
Kirigami.Action {
icon.name: "entry-edit"
text: i18n("Edit")
onTriggered: {
profileDialog.profile = modelData;
profileDialog.open();
}
},
Kirigami.Action {
icon.name: "delete"
text: i18n("Delete")
onTriggered: modem.removeProfile(modelData.connectionUni)
}
]
contentItem: RowLayout {
Layout.fillWidth: true
Controls.RadioButton {
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
checked: modem.activeConnectionUni == modelData.connectionUni checked: modem.activeConnectionUni == modelData.connectionUni
onClicked: { onClicked: {
if (!checked) { modem.activateProfile(modelData.connectionUni);
modem.activateProfile(modelData.connectionUni);
}
// reapply binding // reapply binding
checked = Qt.binding(() => { return modem.activeConnectionUni == modelData.connectionUni }); checked = Qt.binding(() => { return modem.activeConnectionUni == modelData.connectionUni });
} }
trailing: RowLayout {
Controls.ToolButton {
visible: root.editMode
icon.name: "entry-edit"
text: i18n("Edit")
display: Controls.ToolButton.IconOnly
onClicked: {
profileDialog.profile = modelData;
profileDialog.open();
}
}
Controls.ToolButton {
visible: root.editMode
icon.name: "delete"
text: i18n("Delete")
display: Controls.ToolButton.IconOnly
onClicked: modem.removeProfile(modelData.connectionUni)
}
}
} }
}
ColumnLayout {
Layout.alignment: Qt.AlignLeft FormCard.FormButtonDelegate {
Layout.fillWidth: true text: i18n("Add APN")
spacing: Kirigami.Units.smallSpacing icon.name: 'list-add'
onClicked: {
Kirigami.Heading { profileDialog.profile = null;
Layout.fillWidth: true profileDialog.open();
level: 3 }
text: modelData.name }
}
Controls.Label { FormCard.FormButtonDelegate {
Layout.fillWidth: true text: i18n("Automatically detect APN")
text: modelData.apn icon.name: 'list-add'
} onClicked: {
modem.addDetectedProfileSettings();
} }
} }
} }