shift-shell/kcms/waydroidintegration/ui/WaydroidApplicationsPage.qml
Devin Lin a8b858dc3e Remove kirigami version in imports
This fixes potential issues stemming from pinning versions on Kirigami
qml api imports
2026-03-06 22:08:07 -05:00

124 lines
3.5 KiB
QML

/*
* SPDX-FileCopyrightText: 2025 Florian RICHER <florian.richer@protonmail.com>
* SPDX-License-Identifier: LGPL-2.0-or-later
*/
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls as QQC2
import QtQuick.Dialogs
import org.kde.kirigami as Kirigami
import org.kde.kcmutils as KCM
import org.kde.kirigamiaddons.formcard 1.0 as FormCard
import org.kde.plasma.components 3.0 as PC3
import org.kde.plasma.private.mobileshell.waydroidintegrationplugin as AIP
KCM.SimpleKCM {
id: root
topPadding: Kirigami.Units.largeSpacing
bottomPadding: Kirigami.Units.largeSpacing
leftPadding: 0
rightPadding: 0
title: i18n("Waydroid applications")
actions: [
Kirigami.Action {
text: i18nc("@action:button", "Install APK")
icon.name: "list-add"
onTriggered: fileDialog.open()
}
]
Connections {
target: AIP.WaydroidDBusClient
function onActionFinished(message: string): void {
inlineMessage.text = message
inlineMessage.visible = true
inlineMessage.type = Kirigami.MessageType.Positive
}
function onActionFailed(error: string): void {
inlineMessage.text = error
inlineMessage.visible = true
inlineMessage.type = Kirigami.MessageType.Error
}
}
Timer {
id: autoRefreshApplicationsTimer
interval: 2000
repeat: true
running: root.visible
onTriggered: AIP.WaydroidDBusClient.refreshApplications()
}
FileDialog {
id: fileDialog
nameFilters: [ "APK files (*.apk)" ]
onAccepted: {
const url = new URL(selectedFile)
if (url.protocol !== "file:") {
inlineMessage.text = i18n("You must select a local file")
inlineMessage.visible = true
inlineMessage.type = Kirigami.MessageType.Error
} else {
AIP.WaydroidDBusClient.installApk(url.pathname)
}
}
}
ColumnLayout {
spacing: Kirigami.Units.largeSpacing
Kirigami.InlineMessage {
id: inlineMessage
Layout.fillWidth: true
visible: false
showCloseButton: true
}
FormCard.FormCard {
Repeater {
model: AIP.WaydroidDBusClient.applicationListModel
delegate: FormCard.AbstractFormDelegate {
id: appDelegate
width: ListView.view.width
background: null
contentItem: RowLayout {
QQC2.Label {
Layout.fillWidth: true
text: model.name
elide: Text.ElideRight
}
QQC2.ToolButton {
display: QQC2.AbstractButton.IconOnly
text: i18nc("@action:button", "Delete the application")
icon.name: "usermenu-delete"
onClicked: AIP.WaydroidDBusClient.deleteApplication(model.id)
QQC2.ToolTip.visible: hovered
QQC2.ToolTip.text: text
QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
}
}
}
Layout.fillWidth: true
Layout.preferredHeight: contentHeight
}
}
}
}