diff options
Diffstat (limited to 'app/MediaPlayer.qml')
-rw-r--r-- | app/MediaPlayer.qml | 182 |
1 files changed, 177 insertions, 5 deletions
diff --git a/app/MediaPlayer.qml b/app/MediaPlayer.qml index 77538a6..f9644ad 100644 --- a/app/MediaPlayer.qml +++ b/app/MediaPlayer.qml @@ -1,5 +1,6 @@ /* * Copyright (C) 2016 The Qt Company Ltd. + * Copyright (C) 2017 Toyota Motor Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,10 +21,21 @@ import QtQuick.Controls 2.0 import QtMultimedia 5.6 import AGL.Demo.Controls 1.0 import MediaPlayer 1.0 +import QtQml.StateMachine 1.0 as MPSM import 'api' as API ApplicationWindow { id: root + + property int sourceID: 0 + property int connectionID + property int sourceIndex + + signal playMediaplayer + signal stopMediaplayer + signal disconnected + signal paused + signal connected API.LightMediaScanner { id: binding @@ -46,6 +58,159 @@ ApplicationWindow { } } + MPSM.StateMachine{ + id: mediaplayerState + initialState: stop + running: true + MPSM.State{ + id: haveSoundRight + MPSM.SignalTransition{ + targetState: stop + signal: disconnected + } + MPSM.SignalTransition{ + targetState: pause + signal: paused + } + MPSM.SignalTransition{ + targetState: playing + signal: playMediaplayer + } + onEntered: { + console.log("enter haveSoundRight") + } + onExited : { + // Nothing to do + } + } + MPSM.State{ + id: stop + MPSM.SignalTransition{ + targetState: haveSoundRight + signal: connected + } + onEntered: { + console.log("enter stop state") + } + onExited : { + // Nothing to do + } + } + MPSM.State{ + id: pause + MPSM.SignalTransition{ + targetState: haveSoundRight + signal: connected + } + MPSM.SignalTransition{ + targetState: stop + signal: disconnected + } + onEntered: { + console.log("enter pause state") + } + onExited : { + // Nothing to do + } + } + MPSM.State{ + id: playing + MPSM.SignalTransition{ + targetState: haveSoundRight + signal: stopMediaplayer + } + MPSM.SignalTransition{ + targetState: lostSoundRight + signal: disconnected + } + onEntered: { + console.log("enter playing state") + player.play() + } + onExited : { + player.pause() + } + } + MPSM.State{ + id: lostSoundRight + MPSM.SignalTransition{ + targetState: playing + signal: connected + } + onEntered: { + console.log("enter lostSoundRight") + } + onExited : { + } + } + MPSM.State{ + id: temporaryLostSoundRight + MPSM.SignalTransition{ + targetState: playing + signal: connected + } + MPSM.SignalTransition{ + targetState: lostSoundRight + signal: disconnected + } + onEntered: { + console.log("enter lostSoundRight") + } + onExited : { + } + } + } + + function slotReply(msg){ + var jstr = JSON.stringify(msg) + var content = JSON.parse(jstr); + var verb = content.response.verb + var err = content.response.error + switch(verb) + { + case "connect": + if(err == 0){ + connectionID = content.response.mainConnectionID + } + break; + case "registerSource": + if(err == 0){ + sourceID = content.response.sourceID + } + } + } + + function slotEvent(event,msg){ + var jstr = JSON.stringify(msg) + var content = JSON.parse(jstr); + var eventName = content.event + switch(eventName) + { + case "soundmanager\/asyncSetSourceState": + // This event doesn't come for now + if(sourceID == content.data.sourceID){ + console.log("mediaplayer: call ackSetSourceState") + smw.ackSetSourceState(content.data.handle, 0) + switch(content.data.sourceState){ + case "on": + connected() + break; + case "off": + disconnected() + break; + case "paused": + paused() + break; + default: + break; + } + } + break; + default: + break; + } + } + Timer { id: timer interval: 250 @@ -187,7 +352,7 @@ ApplicationWindow { if (bluetooth.av_connected) { bluetooth.sendMediaCommand("Play") } else { - player.play() + playMediaplayer() } } states: [ @@ -196,7 +361,9 @@ ApplicationWindow { PropertyChanges { target: play offImage: './images/AGL_MediaPlayer_Player_Pause.svg' - onClicked: player.pause() + onClicked: { + stopMediaplayer() + } } }, State { @@ -247,8 +414,8 @@ ApplicationWindow { Layout.fillHeight: true Layout.preferredHeight: 407 - PlaylistWithMetadata { - id: playlistmodel + PlaylistWithMetadata { + id: playlistmodel source: playlist } @@ -300,7 +467,9 @@ ApplicationWindow { } onClicked: { playlist.currentIndex = model.index - player.play() + sourceIndex = model.index; + console.log("mediaplayer: call connect") + playMediaplayer() } } @@ -310,5 +479,8 @@ ApplicationWindow { } } } + Component.onCompleted: { + smw.registerSource("mediaplayer") + } } } |