diff options
Diffstat (limited to 'examples/bluetooth/heartrate_game/connectionhandler.py')
-rw-r--r-- | examples/bluetooth/heartrate_game/connectionhandler.py | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/examples/bluetooth/heartrate_game/connectionhandler.py b/examples/bluetooth/heartrate_game/connectionhandler.py index 5bd7bfbb2..7bf60bbc5 100644 --- a/examples/bluetooth/heartrate_game/connectionhandler.py +++ b/examples/bluetooth/heartrate_game/connectionhandler.py @@ -5,13 +5,16 @@ import sys from PySide6.QtBluetooth import QBluetoothLocalDevice from PySide6.QtQml import QmlElement -from PySide6.QtCore import QObject, Property, Signal, Slot +from PySide6.QtCore import QObject, Property, Signal, Slot, Qt -from heartrate_global import simulator +from heartrate_global import simulator, is_android, error_not_nuitka + +if is_android or sys.platform == "darwin": + from PySide6.QtCore import QBluetoothPermission # To be used on the @QmlElement decorator # (QML_IMPORT_MINOR_VERSION is optional) -QML_IMPORT_NAME = "Shared" +QML_IMPORT_NAME = "HeartRateGame" QML_IMPORT_MAJOR_VERSION = 1 @@ -22,14 +25,14 @@ class ConnectionHandler(QObject): def __init__(self, parent=None): super().__init__(parent) - self.m_localDevice = QBluetoothLocalDevice() - self.m_localDevice.hostModeStateChanged.connect(self.hostModeChanged) + self.m_hasPermission = False + self.initLocalDevice() @Property(bool, notify=deviceChanged) def alive(self): if sys.platform == "darwin": return True - if simulator: + if simulator(): return True return (self.m_localDevice.isValid() and self.m_localDevice.hostMode() != QBluetoothLocalDevice.HostPoweredOff) @@ -46,6 +49,29 @@ class ConnectionHandler(QObject): def address(self): return self.m_localDevice.address().toString() + @Property(bool, notify=deviceChanged) + def hasPermission(self): + return self.m_hasPermission + @Slot(QBluetoothLocalDevice.HostMode) def hostModeChanged(self, mode): self.deviceChanged.emit() + + def initLocalDevice(self): + if is_android or sys.platform == "darwin": + error_not_nuitka() + permission = QBluetoothPermission() + permission.setCommunicationModes(QBluetoothPermission.Access) + permission_status = qApp.checkPermission(permission) # noqa: F821 + if permission_status == Qt.PermissionStatus.Undetermined: + qApp.requestPermission(permission, self, self.initLocalDevice) # noqa: F821 + return + if permission_status == Qt.PermissionStatus.Denied: + return + elif permission_status == Qt.PermissionStatus.Granted: + print("[HeartRateGame] Bluetooth Permission Granted") + + self.m_localDevice = QBluetoothLocalDevice() + self.m_localDevice.hostModeStateChanged.connect(self.hostModeChanged) + self.m_hasPermission = True + self.deviceChanged.emit() |