status-desktop/ui/app/AppLayouts/Profile/views/DevicesView.qml

241 lines
7.6 KiB
QML
Raw Normal View History

2020-07-03 16:54:27 +00:00
import QtQuick 2.13
import QtQuick.Controls 2.13
import QtQuick.Layouts 1.13
import QtGraphicalEffects 1.13
import StatusQ.Core 0.1
import StatusQ.Core.Theme 0.1
import StatusQ.Controls 0.1
import utils 1.0
2020-07-03 16:54:27 +00:00
import "../../../../shared"
2020-09-17 16:42:59 +00:00
import "../../../../shared/status"
2020-07-03 16:54:27 +00:00
Item {
id: root
2020-07-03 19:46:06 +00:00
property var store
2020-07-03 19:46:06 +00:00
property bool isSyncing: false
2020-07-03 16:54:27 +00:00
width: 200
height: 200
Layout.fillHeight: true
Layout.fillWidth: true
clip: true
2020-07-03 16:54:27 +00:00
Item {
id: firstTimeSetup
anchors.left: root.left
2020-07-03 19:46:06 +00:00
anchors.leftMargin: Style.current.padding
anchors.top: parent.top
anchors.topMargin: 24
anchors.right: root.right
2020-07-03 19:46:06 +00:00
anchors.rightMargin: Style.current.padding
visible: !root.store.devicesSetup
2020-07-03 16:54:27 +00:00
StatusBaseText {
2020-07-03 16:54:27 +00:00
id: deviceNameLbl
//% "Please set a name for your device."
text: qsTrId("pairing-please-set-a-name")
2020-07-03 16:54:27 +00:00
font.pixelSize: 14
}
Input {
id: deviceNameTxt
//% "Specify a name"
placeholderText: qsTrId("specify-name")
2020-07-03 16:54:27 +00:00
anchors.top: deviceNameLbl.bottom
2020-07-03 19:46:06 +00:00
anchors.topMargin: Style.current.padding
2020-07-03 16:54:27 +00:00
}
// TODO: replace with StatusQ component
StatusButton {
2020-07-03 16:54:27 +00:00
anchors.top: deviceNameTxt.bottom
anchors.topMargin: 10
anchors.right: deviceNameTxt.right
//% "Continue"
text: qsTrId("continue")
enabled: deviceNameTxt.text !== ""
onClicked : root.store.setDeviceName(deviceNameTxt.text.trim())
2020-07-03 16:54:27 +00:00
}
}
2020-07-03 19:46:06 +00:00
Item {
2020-07-04 00:42:44 +00:00
id: advertiseDeviceItem
anchors.left: root.left
2020-07-03 19:46:06 +00:00
anchors.leftMargin: Style.current.padding
2021-03-30 19:08:25 +00:00
anchors.top: parent.top
2020-07-03 19:46:06 +00:00
anchors.topMargin: Style.current.padding
anchors.right: root.right
2020-07-03 19:46:06 +00:00
anchors.rightMargin: Style.current.padding
visible: root.store.devicesSetup
2020-07-04 00:42:44 +00:00
height: childrenRect.height
2020-07-03 19:46:06 +00:00
Rectangle {
id: advertiseDevice
height: childrenRect.height
width: 500
anchors.left: parent.left
anchors.right: parent.right
2020-07-14 22:57:49 +00:00
color: Style.current.transparent
2020-07-03 19:46:06 +00:00
SVGImage {
id: advertiseImg
height: 32
width: 32
anchors.left: parent.left
fillMode: Image.PreserveAspectFit
source: Style.svg("messageActive")
ColorOverlay {
anchors.fill: parent
source: parent
color: Style.current.blue
}
2020-07-03 19:46:06 +00:00
}
StatusBaseText {
2020-07-03 19:46:06 +00:00
id: advertiseDeviceTitle
//% "Advertise device"
text: qsTrId("pair-this-device")
2020-07-03 19:46:06 +00:00
font.pixelSize: 18
font.weight: Font.Bold
color: Theme.palette.primaryColor1
2020-07-03 19:46:06 +00:00
anchors.left: advertiseImg.right
anchors.leftMargin: Style.current.padding
}
StatusBaseText {
2020-07-03 19:46:06 +00:00
id: advertiseDeviceDesk
//% "Pair your devices to sync contacts and chats between them"
text: qsTrId("pair-this-device-description")
2020-07-03 19:46:06 +00:00
font.pixelSize: 14
anchors.top: advertiseDeviceTitle.bottom
anchors.topMargin: 6
anchors.left: advertiseImg.right
anchors.leftMargin: Style.current.padding
}
MouseArea {
cursorShape: Qt.PointingHandCursor
anchors.fill: parent
onClicked: root.store.advertiseDevice()
2020-07-03 19:46:06 +00:00
}
}
StatusBaseText {
2020-07-03 19:46:06 +00:00
anchors.top: advertiseDevice.bottom
anchors.topMargin: Style.current.padding
//% "Learn more"
text: qsTrId("learn-more")
2020-07-03 19:46:06 +00:00
font.pixelSize: 16
color: Theme.palette.primaryColor1
2020-07-03 19:46:06 +00:00
anchors.left: parent.left
MouseArea {
cursorShape: Qt.PointingHandCursor
anchors.fill: parent
onClicked: appMain.openLink("https://status.im/user_guides/pairing_devices.html")
2020-07-03 19:46:06 +00:00
}
}
}
2020-07-04 00:42:44 +00:00
Item {
id: deviceListItem
anchors.left: root.left
2020-07-04 00:42:44 +00:00
anchors.leftMargin: Style.current.padding
anchors.top: advertiseDeviceItem.bottom
anchors.topMargin: Style.current.padding * 2
anchors.bottom: syncAllBtn.top
anchors.bottomMargin: Style.current.padding
anchors.right: root.right
2020-07-04 00:42:44 +00:00
anchors.rightMargin: Style.current.padding
visible: root.store.devicesSetup
2020-07-04 00:42:44 +00:00
StatusBaseText {
2020-07-04 00:42:44 +00:00
id: deviceListLbl
2020-07-16 15:20:29 +00:00
//% "Paired devices"
text: qsTrId("paired-devices")
2020-07-04 00:42:44 +00:00
font.pixelSize: 16
font.weight: Font.Bold
}
ListView {
id: listView
anchors.bottom: parent.bottom
anchors.top: deviceListLbl.bottom
anchors.topMargin: Style.current.padding
spacing: 5
anchors.right: parent.right
anchors.left: parent.left
// TODO: replace with StatusQ component
2020-07-04 00:42:44 +00:00
delegate: Item {
height: childrenRect.height
SVGImage {
id: enabledIcon
source: Style.svg(devicePairedSwitch.checked ? "messageActive" : "message")
2020-07-04 00:42:44 +00:00
height: 24
width: 24
ColorOverlay {
anchors.fill: parent
source: parent
color: Style.current.blue
}
2020-07-04 00:42:44 +00:00
}
StatusBaseText {
2020-07-04 00:42:44 +00:00
id: deviceItemLbl
text: {
let deviceId = model.installationId.split("-")[0].substr(0, 5)
2020-07-16 15:20:29 +00:00
//% "No info"
2021-02-18 16:36:05 +00:00
let labelText = `${model.name || qsTrId("pairing-no-info")} ` +
//% "you"
`(${model.isUserDevice ? qsTrId("you") + ", ": ""}${deviceId})`;
2020-07-04 00:42:44 +00:00
return labelText;
}
elide: Text.ElideRight
font.pixelSize: 14
anchors.left: enabledIcon.right
anchors.leftMargin: Style.current.padding
}
2020-09-17 16:42:59 +00:00
StatusSwitch {
2020-07-04 00:42:44 +00:00
id: devicePairedSwitch
visible: !model.isUserDevice
checked: model.isEnabled
anchors.left: deviceItemLbl.right
anchors.leftMargin: Style.current.padding
anchors.top: deviceItemLbl.top
onClicked: root.store.enableDeviceInstallation(model.installationId, devicePairedSwitch)
2020-07-04 00:42:44 +00:00
}
}
model: root.store.devicesList
2020-07-04 00:42:44 +00:00
}
}
// TODO: replace with StatusQ component
StatusButton {
2020-07-03 19:46:06 +00:00
id: syncAllBtn
anchors.bottom: root.bottom
2020-07-03 19:46:06 +00:00
anchors.bottomMargin: Style.current.padding
anchors.horizontalCenter: parent.horizontalCenter
text: isSyncing ?
//% "Syncing..."
qsTrId("sync-in-progress") :
//% "Sync all devices"
qsTrId("sync-all-devices")
enabled: !isSyncing
2020-07-03 16:54:27 +00:00
onClicked : {
2020-07-03 19:46:06 +00:00
isSyncing = true;
root.store.syncAllDevices()
2020-07-03 19:46:06 +00:00
// Currently we don't know how long it takes, so we just disable for 10s, to avoid spamming
timer.setTimeout(function(){
isSyncing = false
}, 10000);
}
}
Timer {
id: timer
2020-07-03 16:54:27 +00:00
}
}