1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtCore
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
Window {
id: window
visible: true
title: qsTr("Qt QML Permissions")
readonly property int margin: 11
width: layout.implicitWidth + 2 * margin
height: layout.implicitHeight + 2 * margin
Rectangle {
anchors.fill: parent
color: locationPermission.status === Qt.Granted ? "green" :
locationPermission.status === Qt.Denied ? "red" : "blue"
LocationPermission {
id: locationPermission
// If any of the properties of the permission are changed,
// checkPermision is used to check, and the status will
// update accordingly. For example, upgrading from Approximate
// to Precise would either result in Undetermined, if we
// can still request Precise, or Denied, if we already did,
// or it's not possible to upgrade the permission.
accuracy: accuracyCombo.currentValue === qsTr("Precise") ? LocationPermission.Precise
: LocationPermission.Approximate
availability: availabilityCombo.currentValue === qsTr("Always") ? LocationPermission.Always
: LocationPermission.WhenInUse
// However, the permission will not be affected by other
// permissions of the same type. In other words, a more
// extensive permission being granted does not reflect
// in this permission. Nor does losing an already granted
// permission, for example due to the user updating their
// system settings.
onStatusChanged: console.log("Status: " + status)
onAccuracyChanged: console.log("Accuracy: " + accuracy)
onAvailabilityChanged: console.log("Availability: " + availability)
}
ColumnLayout {
id: layout
anchors.fill: parent
anchors.margins: window.margin
Text {
readonly property string statusAsString: locationPermission.status === Qt.Granted ? qsTr("Granted") :
locationPermission.status === Qt.Undetermined ? qsTr("Undetermined")
: qsTr("Denied")
text: qsTr(`Location services, status: ${statusAsString}`)
font.bold: true
font.pointSize: 16
color: locationPermission.status === Qt.Undetermined ? "white" : "black"
Layout.alignment: Qt.AlignHCenter
}
RowLayout {
ComboBox {
id: accuracyCombo
model: ["Precise", "Approximate"]
implicitContentWidthPolicy: ComboBox.WidestText
Layout.fillWidth: true
}
ComboBox {
id: availabilityCombo
model: ["Always", "When in use"]
implicitContentWidthPolicy: ComboBox.WidestText
Layout.fillWidth: true
}
}
Button {
text: qsTr("Request location permissions")
enabled: locationPermission.status !== Qt.Denied
Layout.alignment: Qt.AlignHCenter
Layout.fillWidth: false
onClicked: locationPermission.request()
}
}
Component.onCompleted: {
console.log(locationPermission.status)
}
}
}
|