summaryrefslogtreecommitdiffstats
path: root/app/MediaPlayer.qml
diff options
context:
space:
mode:
Diffstat (limited to 'app/MediaPlayer.qml')
-rw-r--r--app/MediaPlayer.qml99
1 files changed, 89 insertions, 10 deletions
diff --git a/app/MediaPlayer.qml b/app/MediaPlayer.qml
index 438ff20..6f2fa81 100644
--- a/app/MediaPlayer.qml
+++ b/app/MediaPlayer.qml
@@ -19,7 +19,6 @@ import QtQuick.Layouts 1.1
import QtQuick.Controls 2.0
import QtMultimedia 5.6
import AGL.Demo.Controls 1.0
-import 'api' as API
ApplicationWindow {
id: root
@@ -42,6 +41,91 @@ ApplicationWindow {
}
}
+ Item {
+ id: bluetooth
+
+ property string deviceAddress: ""
+ property bool connected: false
+ property bool av_connected: false
+
+ property int position: 0
+ property int duration: 0
+
+ property string artist: ""
+ property string title: ""
+ property string state: "stopped"
+
+ // AVRCP Target UUID
+ property string avrcp_uuid: "0000110e-0000-1000-8000-00805f9b34fb"
+
+ function connect_profiles() {
+ var address = bluetooth.deviceAddress;
+ bluetooth_connection.connect(address, "a2dp")
+ bluetooth_connection.connect(address, "avrcp")
+ }
+
+ function disconnect_profiles() {
+ var address = bluetooth.deviceAddress;
+ bluetooth_connection.disconnect(address, "a2dp")
+ bluetooth_connection.disconnect(address, "avrcp")
+ }
+
+ function set_avrcp_controls(cmd) {
+ bluetooth_connection.set_avrcp_controls(bluetooth.deviceAddress, cmd)
+ }
+ }
+
+ Connections {
+ target: bluetooth_connection
+
+ onDeviceListEvent: {
+ var address = ""
+ for (var i = 0; i < data.list.length; i++) {
+ var item = data.list[i]
+ if (item.Connected == "True" && item.UUIDs.indexOf(bluetooth.avrcp_uuid) >= 0) {
+ address = item.Address
+
+ bluetooth.connected = true
+ mediaplayer.pause()
+
+ //NOTE: This hack is here for when MediaPlayer is started
+ // with an existing connection.
+ bluetooth.av_connected = item.AVPConnected == "True"
+ }
+ }
+ if (!address)
+ bluetooth.connected = false
+ else
+ bluetooth.deviceAddress = address
+ }
+
+ onDeviceUpdatedEvent: {
+ var metadata = data.Metadata
+
+ if (data.Connected == "False")
+ return
+
+ bluetooth.connected = data.Connected == "True"
+ bluetooth.av_connected = data.AVPConnected == "True"
+ bluetooth.deviceAddress = data.Address
+
+ if ('Position' in metadata)
+ bluetooth.position = metadata.Position
+
+ if ('Duration' in metadata)
+ bluetooth.duration = metadata.Duration
+
+ if ('Status' in metadata)
+ bluetooth.state = metadata.Status
+
+ if ('Artist' in metadata)
+ bluetooth.artist = metadata.Artist
+
+ if ('Title' in metadata)
+ bluetooth.title = metadata.Title
+ }
+ }
+
Connections {
target: mediaplayer
@@ -84,11 +168,6 @@ ApplicationWindow {
}
}
- API.BluetoothManager {
- id: bluetooth
- url: bindingAddress
- }
-
Timer {
id: timer
interval: 250
@@ -215,7 +294,7 @@ ApplicationWindow {
offImage: './images/AGL_MediaPlayer_BackArrow.svg'
onClicked: {
if (bluetooth.av_connected) {
- bluetooth.sendMediaCommand("Previous")
+ bluetooth.set_avrcp_controls("Previous")
bluetooth.position = 0
} else {
mediaplayer.previous()
@@ -227,7 +306,7 @@ ApplicationWindow {
offImage: './images/AGL_MediaPlayer_Player_Play.svg'
onClicked: {
if (bluetooth.av_connected) {
- bluetooth.sendMediaCommand("Play")
+ bluetooth.set_avrcp_controls("Play")
} else {
mediaplayer.play()
}
@@ -249,7 +328,7 @@ ApplicationWindow {
PropertyChanges {
target: play
offImage: './images/AGL_MediaPlayer_Player_Pause.svg'
- onClicked: bluetooth.sendMediaCommand("Pause")
+ onClicked: bluetooth.set_avrcp_controls("Pause")
}
}
@@ -260,7 +339,7 @@ ApplicationWindow {
offImage: './images/AGL_MediaPlayer_ForwardArrow.svg'
onClicked: {
if (bluetooth.av_connected) {
- bluetooth.sendMediaCommand("Next")
+ bluetooth.set_avrcp_controls("Next")
} else {
mediaplayer.next()
}